{"version":3,"file":"vexip-ui.mjs","sources":["../common/utils/src/common.ts","../common/utils/src/color.ts","../common/utils/src/counter.ts","../common/utils/src/data.ts","../common/utils/src/number.ts","../common/utils/src/date.ts","../common/utils/src/deep-clone.ts","../common/utils/src/destroy-object.ts","../common/utils/src/dom-event.ts","../common/utils/src/dom.ts","../common/utils/src/event-emitter.ts","../common/utils/src/log.ts","../common/utils/src/performance.ts","../common/utils/src/support.ts","../common/utils/src/transform.ts","../common/utils/src/word-case.ts","../common/config/src/hover-delay.ts","../common/config/src/locale/zh-CN.ts","../common/config/src/locale/index.ts","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/shared/src/utils.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/defaultAttributes.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/Icon.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/createLucideIcon.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/arrow-left-right.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/calendar.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/check.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-down.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-left.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-right.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-up.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevrons-left.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevrons-right.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-alert.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-check.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-help.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-x.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/clock.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/cloud-upload.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/ellipsis.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/eye-off.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/eye.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-archive.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-code.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-image.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-music.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-text.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-video.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/flip-horizontal.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/flip-vertical.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/fullscreen.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/funnel.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/grip-vertical.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/image.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/indent-decrease.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/indent-increase.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/info.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/loader-circle.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/log-out.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/maximize.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/message-circle-question.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/minimize.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/minus.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/moon.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/pause.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/picture-in-picture.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/play.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/plus.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/refresh-cw.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/repeat-2.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/rotate-ccw.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/rotate-cw.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/search.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/siren.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/skip-back.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/skip-forward.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/square-minus.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/square-plus.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/sun.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/trash-2.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/upload.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/user-round.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/volume-1.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/volume-2.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/volume-x.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/x.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/zoom-in.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/zoom-out.js","../common/config/src/icons.ts","../common/bem-helper/src/index.ts","../common/config/src/namespace.ts","../common/config/src/id.ts","../common/config/src/props.ts","../common/config/src/z-index.ts","../components/icon/props.ts","../components/icon/icon.tsx","../components/renderer/props.ts","../components/renderer/renderer.ts","../components/spin/props.ts","../components/spin/spin.vue","../directives/loading/index.ts","../common/hooks/src/listener.ts","../common/hooks/src/clickoutside.ts","../common/hooks/src/display.ts","../common/hooks/src/shared/utils.ts","../common/hooks/src/full-screen.ts","../common/hooks/src/hover.ts","../common/hooks/src/intersection.ts","../common/hooks/src/manual-ref.ts","../common/hooks/src/modifier.ts","../common/hooks/src/mounted.ts","../common/hooks/src/moving.ts","../common/hooks/src/pointer.ts","../node_modules/.pnpm/@floating-ui+utils@0.2.9/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/.pnpm/@floating-ui+core@1.7.0/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/.pnpm/@floating-ui+utils@0.2.9/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/.pnpm/@floating-ui+dom@1.7.0/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/resizeObservers.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/freeze.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverSize.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/element.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/global.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/process.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/scheduler.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObservation.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverController.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserver.js","../common/hooks/src/resize.ts","../common/hooks/src/rtl.ts","../common/hooks/src/popper.ts","../common/hooks/src/theme.ts","../common/hooks/src/timer-record.ts","../common/hooks/src/virtual.ts","../directives/resize/index.ts","../directives/index.ts","../components/affix/props.ts","../components/affix/helpers.ts","../components/affix/affix.vue","../components/collapse/props.ts","../components/collapse/collapse-transition.ts","../components/alert/props.ts","../components/alert/symbol.ts","../components/alert/alert.vue","../components/anchor/props.ts","../components/anchor/symbol.ts","../components/anchor/anchor-link.vue","../components/anchor/helper.ts","../components/anchor/anchor.vue","../components/row/props.ts","../components/row/symbol.ts","../components/row/row.ts","../components/form/props.ts","../components/form/symbol.ts","../components/form/form.vue","../components/form/helper.ts","../components/form/validator.ts","../components/input/props.ts","../components/input/input.tsx","../components/scrollbar/props.ts","../components/scrollbar/symbol.ts","../components/scrollbar/hooks.ts","../components/scrollbar/scrollbar.vue","../components/resize-observer/props.ts","../components/resize-observer/resize-observer.ts","../components/native-scroll/props.ts","../components/native-scroll/helper.ts","../components/native-scroll/hooks.ts","../components/native-scroll/native-scroll.tsx","../components/option/props.ts","../components/option/option.vue","../components/overflow/props.ts","../components/overflow/overflow.tsx","../components/portal/portal.vue","../components/popper/props.ts","../components/popper/popper.vue","../components/popper/popper.vue","../components/tag/props.ts","../components/tag/tag.tsx","../components/tooltip/props.ts","../components/tooltip/tooltip.tsx","../components/virtual-list/props.ts","../components/virtual-list/virtual-list.tsx","../components/select/props.ts","../components/select/symbol.ts","../components/select/select.vue","../components/auto-complete/props.ts","../components/auto-complete/auto-complete.vue","../components/avatar/props.ts","../components/avatar/symbol.ts","../components/avatar/avatar.vue","../components/avatar/avatar-group.vue","../components/badge/props.ts","../components/badge/symbol.ts","../components/badge/badge.vue","../components/breadcrumb/props.ts","../components/breadcrumb/symbol.ts","../components/breadcrumb/breadcrumb-item.vue","../components/breadcrumb/breadcrumb.vue","../components/bubble/props.ts","../components/bubble/symbol.ts","../components/bubble/bubble.vue","../components/button/props.ts","../components/button/symbol.ts","../components/button/button.tsx","../components/button/button-group.vue","../components/row/column.ts","../components/number-input/props.ts","../components/number-input/number-input.vue","../components/calendar/calendar-cell.vue","../components/calendar/props.ts","../components/calendar/calendar-panel.vue","../components/calendar/calendar.vue","../components/captcha/props.ts","../components/captcha/captcha-slider.vue","../components/captcha/hollow-paths.ts","../components/captcha/captcha.tsx","../components/card/props.ts","../components/card/card.vue","../components/carousel/props.ts","../components/carousel/symbol.ts","../components/carousel/carousel.vue","../components/carousel/carousel-item.vue","../components/checkbox/props.ts","../components/checkbox/symbol.ts","../components/checkbox/checkbox.vue","../components/cascader/cascader-panel.vue","../components/cascader/props.ts","../components/cascader/cascader.vue","../components/grid/props.ts","../components/grid/helper.ts","../components/grid/symbol.ts","../components/grid/cell.ts","../components/checkbox/checkbox-group.vue","../components/collapse/symbol.ts","../components/collapse/collapse.vue","../components/collapse/collapse-panel.vue","../components/color-picker/color-palette.vue","../components/color-picker/color-palette.vue","../components/color-picker/color-hue.vue","../components/color-picker/color-hue.vue","../components/color-picker/color-alpha.vue","../components/color-picker/color-alpha.vue","../components/color-picker/props.ts","../components/color-picker/symbol.ts","../components/color-picker/color-picker.vue","../components/config-provider/props.ts","../components/config-provider/config-provider.tsx","../components/masker/props.ts","../components/masker/masker.vue","../components/modal/props.ts","../components/modal/modal.vue","../components/modal/index.ts","../components/confirm/props.ts","../components/confirm/confirm.vue","../components/confirm/index.ts","../components/dropdown/symbol.ts","../components/dropdown/dropdown-drop.ts","../components/dropdown/props.ts","../components/dropdown/hooks.ts","../components/dropdown/dropdown.vue","../components/dropdown/dropdown-list.vue","../components/dropdown/dropdown-item.vue","../components/contextmenu/render.tsx","../components/contextmenu/contextmenu.vue","../components/contextmenu/index.ts","../components/date-picker/symbol.ts","../components/date-picker/helper.ts","../components/date-picker/date-control.vue","../components/scroll/props.ts","../components/scroll/hooks.ts","../components/scroll/symbol.ts","../components/scroll/scroll.vue","../components/wheel/symbol.ts","../components/wheel/wheel-item.vue","../components/wheel/props.ts","../components/wheel/wheel.vue","../components/date-picker/time-wheel.vue","../components/date-picker/date-panel.vue","../components/date-picker/props.ts","../components/date-picker/date-picker.vue","../components/divider/props.ts","../components/divider/divider.vue","../components/drawer/props.ts","../components/drawer/symbol.ts","../components/drawer/drawer.vue","../components/ellipsis/props.ts","../components/ellipsis/ellipsis.vue","../components/form/form-item.vue","../components/form/form-reset.vue","../components/form/form-submit.vue","../components/full-screen/props.ts","../components/full-screen/full-screen.vue","../components/grid/grid.ts","../components/highlight/props.ts","../components/highlight/highlight.vue","../components/viewer/props.ts","../components/viewer/symbol.ts","../components/viewer/viewer.vue","../components/image/props.ts","../components/image/image-viewer.vue","../components/skeleton/props.ts","../components/skeleton/symbol.ts","../components/skeleton/skeleton.tsx","../components/image/symbol.ts","../components/image/image.vue","../components/image/image-group.vue","../components/layout/props.ts","../components/layout/symbol.ts","../components/layout/helper.ts","../components/layout/layout-main.tsx","../components/menu/props.ts","../components/menu/symbol.ts","../components/menu/menu-item.tsx","../components/menu/menu-group.tsx","../components/menu/menu-rest.tsx","../components/menu/menu.tsx","../components/switch/props.ts","../components/switch/switch.vue","../components/layout/layout-header.tsx","../components/linker/props.ts","../components/linker/linker.vue","../components/layout/layout-footer.tsx","../components/layout/layout-aside.tsx","../components/layout/layout.tsx","../components/loading/loading.vue","../components/loading/index.ts","../components/popup/symbol.ts","../components/popup/popup-item.vue","../components/popup/popup.vue","../components/message/symbol.ts","../components/message/message.vue","../components/message/index.ts","../components/notice/symbol.ts","../components/notice/notice.vue","../components/notice/index.ts","../components/option/option-group.vue","../components/pagination/props.ts","../components/pagination/pagination.tsx","../components/progress/props.ts","../components/progress/symbol.ts","../components/progress/progress.vue","../components/radio/props.ts","../components/radio/symbol.ts","../components/radio/radio.vue","../components/radio/radio-group.vue","../components/result/props.ts","../components/result/symbol.ts","../components/result/result.vue","../components/skeleton/skeleton-group.ts","../components/slider/slider-trigger.vue","../components/slider/props.ts","../components/slider/slider.vue","../components/space/props.ts","../components/space/space.tsx","../components/split/props.ts","../components/split/split.vue","../components/split/split.vue","../components/tab-nav/props.ts","../components/tab-nav/symbol.ts","../components/tab-nav/tab-nav-item.vue","../components/tab-nav/tab-nav.vue","../components/tabs/props.ts","../components/tabs/symbol.ts","../components/tabs/tab-panel.vue","../components/table/props.ts","../components/table/symbol.ts","../components/table/table-column.ts","../components/table/table-column-group.tsx","../components/table/table-summary.ts","../components/table/table-icon.vue","../components/table/table-head-cell.vue","../components/table/table-row.vue","../components/table/table-head.vue","../components/table/table-cell.vue","../components/table/table-body.vue","../components/table/table-foot-cell.vue","../components/table/table-foot.vue","../components/tree/hooks.ts","../components/table/store.ts","../components/table/table.vue","../components/table/helper.ts","../components/tabs/tabs.vue","../components/textarea/props.ts","../components/textarea/textarea.vue","../components/time-ago/helper.ts","../components/time-ago/props.ts","../components/time-ago/time-ago.vue","../components/date-picker/time-control.vue","../components/date-picker/time-picker.vue","../components/timeline/props.ts","../components/timeline/symbol.ts","../components/timeline/timeline.vue","../components/timeline/timeline-item.vue","../components/toast/props.ts","../components/toast/symbol.ts","../components/toast/toast.vue","../components/toast/index.ts","../components/tour/props.ts","../components/tour/symbol.ts","../components/tour/tour.vue","../components/tour/tour-step.ts","../components/transfer/transfer-panel.tsx","../components/transfer/props.ts","../components/transfer/transfer.tsx","../components/tree/symbol.ts","../components/tree/tree-node.vue","../components/tree/props.ts","../components/tree/tree.vue","../components/upload/props.ts","../components/upload/file-icon.ts","../components/upload/symbol.ts","../components/upload/upload-file.vue","../components/upload/upload-list.vue","../components/upload/request.ts","../components/upload/upload.tsx","../components/video/props.ts","../components/video/symbol.ts","../components/video/video-control.vue","../components/video/helper.ts","../components/video/video-progress.vue","../components/video/video-timer.vue","../components/video/video-volume.vue","../components/video/video.tsx","../components/typography/props.ts","../components/typography/title.tsx","../components/typography/text.tsx","../components/typography/blockquote.tsx","../components/typography/ol.tsx","../components/typography/ul.tsx","../components/typography/h.tsx","../components/typography/p.tsx","../components/typography/strong.tsx","../components/create.ts","../components/version.ts","../components/index.ts"],"sourcesContent":["/** 当前环境是否为客户端 */\r\nexport const isClient = typeof window !== 'undefined'\r\n/** 当前环境是否为 IOS */\r\nexport const isIOS =\r\n  /* #__PURE__ */ isClient &&\r\n  window?.navigator?.userAgent &&\r\n  /iP(ad|hone|od)/.test(window.navigator.userAgent)\r\n\r\nconst toString = Object.prototype.toString\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty\r\n\r\n/**\r\n * 判断一个值是否为指定的类型\r\n *\r\n * @param value 需判断的值\r\n * @param type 指定的类型，注意大小写\r\n *\r\n * @returns 类型是否匹配\r\n */\r\nexport function is(value: unknown, type: string) {\r\n  return toString.call(value) === `[object ${type}]`\r\n}\r\n\r\n/**\r\n * 判断一个对象是否包含指定的键值\r\n *\r\n * @param value 需判断的对象\r\n * @param key 指定的键值\r\n *\r\n * @returns 是否包含键值\r\n */\r\nexport function has(value: Record<string, any>, key: string | symbol): key is keyof typeof value {\r\n  return hasOwnProperty.call(value, key)\r\n}\r\n\r\n/**\r\n * 判断一个值是否已定义\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否已定义\r\n */\r\nexport function isDefined<T = unknown>(\r\n  value: T | undefined | null,\r\n): value is Exclude<T, undefined | null> {\r\n  return value !== undefined && value !== null\r\n}\r\n\r\n/**\r\n * 判断一个值是否未被定义\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否未定义\r\n */\r\nexport function isNull(value: unknown): value is null | undefined {\r\n  return value === undefined || value === null\r\n}\r\n\r\n/**\r\n * 判断一个值是否为数字\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为数字\r\n */\r\nexport function isNumber(value: unknown): value is number {\r\n  return typeof value === 'number'\r\n}\r\n\r\n/**\r\n * 判断一个值是否为 `NaN`\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为 `NaN`\r\n */\r\nexport function isNaN(value: unknown): value is number {\r\n  return Number.isNaN(value)\r\n}\r\n\r\n/**\r\n * 判断一个值是否为字符串\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为字符串\r\n */\r\nexport function isString(value: unknown): value is string {\r\n  return typeof value === 'string'\r\n}\r\n\r\n/**\r\n * 判断一个值是否为布尔值\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为布尔值\r\n */\r\nexport function isBoolean(value: unknown): value is boolean {\r\n  return typeof value === 'boolean'\r\n}\r\n\r\n/**\r\n * 判断一个值是否为 `true`\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为 `true`\r\n */\r\nexport function isTrue(value: unknown): value is true {\r\n  return value === true\r\n}\r\n\r\n/**\r\n * 判断一个值是否为 `false`\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为 `false`\r\n */\r\nexport function isFalse(value: unknown): value is false {\r\n  return value === false\r\n}\r\n\r\n/**\r\n * 判断一个值是否为 `Symbol`\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为 `Symbol`\r\n */\r\nexport function isSymbol(value: unknown): value is symbol {\r\n  return typeof value === 'symbol'\r\n}\r\n\r\n/**\r\n * 判断一个值是否为 `BigInt`\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为 `BigInt`\r\n */\r\nexport function isBigInt(value: unknown): value is bigint {\r\n  return typeof value === 'bigint'\r\n}\r\n\r\n/**\r\n * 判断一个值是否为数组\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为数组\r\n */\r\nexport function isArray<T = any>(value: unknown): value is T[] {\r\n  return Array.isArray(value)\r\n}\r\n\r\n/**\r\n * 判断一个值是否为对象\r\n *\r\n * 注意，`null` 与原生的特殊对象不被包含\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为对象\r\n */\r\nexport function isObject<T extends Record<any, any> = Record<any, any>>(\r\n  value: unknown,\r\n): value is T {\r\n  return is(value, 'Object')\r\n}\r\n\r\n/**\r\n * 判断一个值是否为 `Promise`\r\n *\r\n * 如果一个对象包含 `then` 和 `catch` 方法，则被认为是一个 `Promise`\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为 `Promise`\r\n */\r\nexport function isPromise<T = any>(value: unknown): value is Promise<T> {\r\n  return (\r\n    !!value &&\r\n    typeof (value as any).then === 'function' &&\r\n    typeof (value as any).catch === 'function'\r\n  )\r\n}\r\n\r\n/**\r\n * 判断一个值是否为函数\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为函数\r\n */\r\nexport function isFunction(value: unknown): value is (...any: any[]) => any {\r\n  return typeof value === 'function'\r\n}\r\n\r\n/**\r\n * 判断一个值是否为 `Set`\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为 `Set`\r\n */\r\nexport function isSet<T = any>(value: unknown): value is Set<T> {\r\n  return is(value, 'Set')\r\n}\r\n\r\n/**\r\n * 判断一个值是否为 `Map`\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为 `Map`\r\n */\r\nexport function isMap<K = any, V = any>(value: unknown): value is Map<K, V> {\r\n  return is(value, 'Map')\r\n}\r\n\r\n/**\r\n * 判断一个值是否为 `Date`\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为 `Date`\r\n */\r\nexport function isDate(value: unknown): value is Date {\r\n  return is(value, 'Date')\r\n}\r\n\r\n/**\r\n * 判断一个值是否为正则\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为正则\r\n */\r\nexport function isRegExp(value: unknown): value is RegExp {\r\n  return is(value, 'RegExp')\r\n}\r\n\r\n/**\r\n * 判断一个值是否为空\r\n *\r\n * - 如果这是一个数组或字符串，则 `length` 为 `0` 时为空\r\n * - 如果这是一个 `Set` 或 `Map`，则 `size` 为 `0` 时为空\r\n * - 如果这是一个对象，则无任何键值时为空\r\n * - 如果这是一个数字，则为 `NaN` 时为空\r\n * - 其余情况下，未定义时为空\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 是否为空\r\n */\r\nexport function isEmpty(value: unknown) {\r\n  if (Array.isArray(value) || typeof value === 'string') {\r\n    return value.length === 0\r\n  }\r\n\r\n  if (value instanceof Map || value instanceof Set) {\r\n    return value.size === 0\r\n  }\r\n\r\n  if (isObject(value)) {\r\n    return Object.keys(value).length === 0\r\n  }\r\n\r\n  if (typeof value === 'number') {\r\n    return isNaN(value)\r\n  }\r\n\r\n  return isNull(value)\r\n}\r\n\r\n/**\r\n * 判断一个值是否为 `Element`\r\n *\r\n * @param value 需判断的值\r\n * @param ssr 是否考虑服务端渲染\r\n *\r\n * @returns 是否为 `Element`\r\n */\r\nexport function isElement<T extends Element = Element>(value: unknown, ssr = false): value is T {\r\n  if (!ssr && !isClient) return false\r\n\r\n  return !!(value && 'nodeType' in (value as any))\r\n}\r\n\r\n/**\r\n * 判断一个值能否被迭代\r\n *\r\n * @param value 需判断的值\r\n *\r\n * @returns 能否被迭代\r\n */\r\nexport function isIterable(value: unknown) {\r\n  return isDefined(value) && typeof (value as any)[Symbol.iterator] === 'function'\r\n}\r\n\r\n/**\r\n * 一个空的占位函数\r\n */\r\nexport function noop(...args: any[]): any\r\nexport function noop() {}\r\n\r\n/**\r\n * 一个返回 `true` 的占位函数\r\n *\r\n * @returns `true`\r\n */\r\nexport function toTrue(...args: any[]): true\r\nexport function toTrue() {\r\n  return true\r\n}\r\n\r\n/**\r\n * 一个返回 `false` 的占位函数\r\n *\r\n * @returns `false`\r\n */\r\nexport function toFalse(...args: any[]): false\r\nexport function toFalse() {\r\n  return false\r\n}\r\n\r\n/**\r\n * 生成一个值递进的数组\r\n *\r\n * @param size 大小\r\n * @param start 开始的数值，默认为 1\r\n * @param step 跨度，默认为 1\r\n *\r\n * @returns 生成的数组\r\n */\r\nexport function range(size: number, start = 1, step = 1) {\r\n  const array: number[] = []\r\n\r\n  for (let i = 0; i < size; ++i) {\r\n    array.push(start + i * step)\r\n  }\r\n\r\n  return array\r\n}\r\n\r\n/**\r\n * 获取变量的类型\r\n *\r\n * @param value 任意变量\r\n *\r\n * @returns 变量的类型\r\n */\r\nexport function getType(value: unknown) {\r\n  return Object.prototype.toString.call(value).slice(8, -1)\r\n}\r\n\r\n/**\r\n * 根据长度生成一串随机的字符串\r\n *\r\n * @param length 字符串的长度\r\n *\r\n * @returns 生成的字符串\r\n */\r\nexport function randomString(length = 16) {\r\n  const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'\r\n  const maxPos = chars.length\r\n\r\n  let string = ''\r\n\r\n  while (length--) {\r\n    string += chars.charAt(Math.floor(Math.random() * maxPos))\r\n  }\r\n\r\n  return string\r\n}\r\n\r\n/**\r\n * 根据一系列判断条件，执行第一个为 `true` 的条件所对应的回调函数\r\n *\r\n * @param conditions 判断条件及回调函数\r\n * @param options 额外的选项\r\n *\r\n * @returns 是否匹配了任一条件\r\n */\r\nexport async function decide(\r\n  conditions: [boolean | (() => boolean), () => void | Promise<void>][],\r\n  options: {\r\n    /**\r\n     * 当匹配任意一个条件时，会在该条件对应的回调函数执行前执行\r\n     */\r\n    beforeMatchAny?: () => void | Promise<void>,\r\n    /**\r\n     * 当匹配任意一个条件时，会在该条件对应的回调函数执行完后执行\r\n     */\r\n    afterMatchAny?: () => void | Promise<void>,\r\n  } = {},\r\n) {\r\n  if (conditions.length) {\r\n    for (const [condition, callback] of conditions) {\r\n      if (typeof condition === 'function' ? condition() : condition) {\r\n        if (typeof options.beforeMatchAny === 'function') {\r\n          await options.beforeMatchAny()\r\n        }\r\n\r\n        await callback()\r\n\r\n        if (typeof options.afterMatchAny === 'function') {\r\n          await options.afterMatchAny()\r\n        }\r\n\r\n        return true\r\n      }\r\n    }\r\n  }\r\n\r\n  return false\r\n}\r\n","import { isDefined } from './common'\r\n\r\ninterface RGB extends Record<any, any> {\r\n  r: number,\r\n  g: number,\r\n  b: number,\r\n  a?: number,\r\n}\r\n\r\nexport interface RGBColor extends RGB {\r\n  a?: 1,\r\n  format?: 'name' | 'rgb',\r\n}\r\n\r\nexport interface RGBAColor extends RGB {\r\n  a: number,\r\n  format?: 'name' | 'rgba',\r\n}\r\n\r\nexport interface HEX3Color extends RGB {\r\n  a?: 1,\r\n  format?: 'name' | 'hex3',\r\n}\r\nexport interface HEX4Color extends RGB {\r\n  a: number,\r\n  format?: 'name' | 'hex4',\r\n}\r\nexport interface HEX6Color extends RGB {\r\n  a?: 1,\r\n  format?: 'name' | 'hex6',\r\n}\r\nexport interface HEX8Color extends RGB {\r\n  a: number,\r\n  format?: 'name' | 'hex8',\r\n}\r\n\r\ninterface HSL extends Record<any, any> {\r\n  h: number,\r\n  s: number,\r\n  l: number,\r\n  a?: number,\r\n}\r\n\r\nexport interface HSLColor extends HSL {\r\n  a?: 1,\r\n  format?: 'name' | 'hsl',\r\n}\r\n\r\nexport interface HSLAColor extends HSL {\r\n  a: number,\r\n  format?: 'name' | 'hsla',\r\n}\r\n\r\ninterface HSV extends Record<any, any> {\r\n  h: number,\r\n  s: number,\r\n  v: number,\r\n  a?: number,\r\n}\r\n\r\nexport interface HSVColor extends HSV {\r\n  a?: 1,\r\n  format?: 'name' | 'hsv',\r\n}\r\n\r\nexport interface HSVAColor extends HSV {\r\n  a: number,\r\n  format?: 'name' | 'hsva',\r\n}\r\n\r\nexport type Color =\r\n  | string\r\n  | RGBColor\r\n  | RGBAColor\r\n  | HSLColor\r\n  | HSLAColor\r\n  | HSVColor\r\n  | HSVAColor\r\n  | HEX3Color\r\n  | HEX4Color\r\n  | HEX6Color\r\n  | HEX8Color\r\n\r\nexport type ObjectColor = Exclude<Color, string>\r\n\r\nexport interface ColorMeta {\r\n  rgb: RGBColor,\r\n  hsl: HSLColor,\r\n  hsv: HSVColor,\r\n  hex: string,\r\n  alpha: number,\r\n  rgba: RGBAColor,\r\n  hsla: HSLAColor,\r\n  hsva: HSVAColor,\r\n  hex8: string,\r\n  gray: number,\r\n  origin: Color,\r\n}\r\n\r\nexport type ColorType = 'hex' | 'rgb' | 'hsv' | 'hsl'\r\n\r\nconst INTEGER_REG = '[-\\\\+]?\\\\d+%?'\r\nconst NUMBER_REG = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?'\r\n\r\nconst NUMBER_UNIT = `(?:${NUMBER_REG})|(?:${INTEGER_REG})`\r\n\r\nconst COLOR_REG_3 = `[\\\\s|\\\\(]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})\\\\s*\\\\)?`\r\nconst COLOR_REG_4 = `[\\\\s|\\\\(]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})\\\\s*\\\\)?`\r\n\r\n// const UNIT_REG = new RegExp(NUMBER_UNIT)\r\n\r\n// const FORMAT_REG = /^((((?:rgb)|(?:hsl)|(?:hsv))a?)|hex[3468]?|name)$/\r\n\r\nexport const RGB_REG = new RegExp(`rgb${COLOR_REG_3}`)\r\nexport const RGBA_REG = new RegExp(`rgba${COLOR_REG_4}`)\r\nexport const HSL_REG = new RegExp(`hsl${COLOR_REG_4}`)\r\nexport const HSLA_REG = new RegExp(`hsla${COLOR_REG_4}`)\r\nexport const HSV_REG = new RegExp(`hsv${COLOR_REG_4}`)\r\nexport const HSVA_REG = new RegExp(`hsva${COLOR_REG_4}`)\r\n\r\nexport const HEX_REG_3 = /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/\r\nexport const HEX_REG_4 = /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/\r\nexport const HEX_REG_6 = /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\r\nexport const HEX_REG_8 = /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\r\n\r\nexport const NAMED_COLORS = Object.freeze({\r\n  aliceblue: 'f0f8ff',\r\n  antiquewhite: 'faebd7',\r\n  aqua: '0ff',\r\n  aquamarine: '7fffd4',\r\n  azure: 'f0ffff',\r\n  beige: 'f5f5dc',\r\n  bisque: 'ffe4c4',\r\n  black: '000',\r\n  blanchedalmond: 'ffebcd',\r\n  blue: '00f',\r\n  blueviolet: '8a2be2',\r\n  brown: 'a52a2a',\r\n  burlywood: 'deb887',\r\n  burntsienna: 'ea7e5d',\r\n  cadetblue: '5f9ea0',\r\n  chartreuse: '7fff00',\r\n  chocolate: 'd2691e',\r\n  coral: 'ff7f50',\r\n  cornflowerblue: '6495ed',\r\n  cornsilk: 'fff8dc',\r\n  crimson: 'dc143c',\r\n  cyan: '0ff',\r\n  darkblue: '00008b',\r\n  darkcyan: '008b8b',\r\n  darkgoldenrod: 'b8860b',\r\n  darkgray: 'a9a9a9',\r\n  darkgreen: '006400',\r\n  darkgrey: 'a9a9a9',\r\n  darkkhaki: 'bdb76b',\r\n  darkmagenta: '8b008b',\r\n  darkolivegreen: '556b2f',\r\n  darkorange: 'ff8c00',\r\n  darkorchid: '9932cc',\r\n  darkred: '8b0000',\r\n  darksalmon: 'e9967a',\r\n  darkseagreen: '8fbc8f',\r\n  darkslateblue: '483d8b',\r\n  darkslategray: '2f4f4f',\r\n  darkslategrey: '2f4f4f',\r\n  darkturquoise: '00ced1',\r\n  darkviolet: '9400d3',\r\n  deeppink: 'ff1493',\r\n  deepskyblue: '00bfff',\r\n  dimgray: '696969',\r\n  dimgrey: '696969',\r\n  dodgerblue: '1e90ff',\r\n  firebrick: 'b22222',\r\n  floralwhite: 'fffaf0',\r\n  forestgreen: '228b22',\r\n  fuchsia: 'f0f',\r\n  gainsboro: 'dcdcdc',\r\n  ghostwhite: 'f8f8ff',\r\n  gold: 'ffd700',\r\n  goldenrod: 'daa520',\r\n  gray: '808080',\r\n  green: '008000',\r\n  greenyellow: 'adff2f',\r\n  grey: '808080',\r\n  honeydew: 'f0fff0',\r\n  hotpink: 'ff69b4',\r\n  indianred: 'cd5c5c',\r\n  indigo: '4b0082',\r\n  ivory: 'fffff0',\r\n  khaki: 'f0e68c',\r\n  lavender: 'e6e6fa',\r\n  lavenderblush: 'fff0f5',\r\n  lawngreen: '7cfc00',\r\n  lemonchiffon: 'fffacd',\r\n  lightblue: 'add8e6',\r\n  lightcoral: 'f08080',\r\n  lightcyan: 'e0ffff',\r\n  lightgoldenrodyellow: 'fafad2',\r\n  lightgray: 'd3d3d3',\r\n  lightgreen: '90ee90',\r\n  lightgrey: 'd3d3d3',\r\n  lightpink: 'ffb6c1',\r\n  lightsalmon: 'ffa07a',\r\n  lightseagreen: '20b2aa',\r\n  lightskyblue: '87cefa',\r\n  lightslategray: '789',\r\n  lightslategrey: '789',\r\n  lightsteelblue: 'b0c4de',\r\n  lightyellow: 'ffffe0',\r\n  lime: '0f0',\r\n  limegreen: '32cd32',\r\n  linen: 'faf0e6',\r\n  magenta: 'f0f',\r\n  maroon: '800000',\r\n  mediumaquamarine: '66cdaa',\r\n  mediumblue: '0000cd',\r\n  mediumorchid: 'ba55d3',\r\n  mediumpurple: '9370db',\r\n  mediumseagreen: '3cb371',\r\n  mediumslateblue: '7b68ee',\r\n  mediumspringgreen: '00fa9a',\r\n  mediumturquoise: '48d1cc',\r\n  mediumvioletred: 'c71585',\r\n  midnightblue: '191970',\r\n  mintcream: 'f5fffa',\r\n  mistyrose: 'ffe4e1',\r\n  moccasin: 'ffe4b5',\r\n  navajowhite: 'ffdead',\r\n  navy: '000080',\r\n  oldlace: 'fdf5e6',\r\n  olive: '808000',\r\n  olivedrab: '6b8e23',\r\n  orange: 'ffa500',\r\n  orangered: 'ff4500',\r\n  orchid: 'da70d6',\r\n  palegoldenrod: 'eee8aa',\r\n  palegreen: '98fb98',\r\n  paleturquoise: 'afeeee',\r\n  palevioletred: 'db7093',\r\n  papayawhip: 'ffefd5',\r\n  peachpuff: 'ffdab9',\r\n  peru: 'cd853f',\r\n  pink: 'ffc0cb',\r\n  plum: 'dda0dd',\r\n  powderblue: 'b0e0e6',\r\n  purple: '800080',\r\n  rebeccapurple: '663399',\r\n  red: 'f00',\r\n  rosybrown: 'bc8f8f',\r\n  royalblue: '4169e1',\r\n  saddlebrown: '8b4513',\r\n  salmon: 'fa8072',\r\n  sandybrown: 'f4a460',\r\n  seagreen: '2e8b57',\r\n  seashell: 'fff5ee',\r\n  sienna: 'a0522d',\r\n  silver: 'c0c0c0',\r\n  skyblue: '87ceeb',\r\n  slateblue: '6a5acd',\r\n  slategray: '708090',\r\n  slategrey: '708090',\r\n  snow: 'fffafa',\r\n  springgreen: '00ff7f',\r\n  steelblue: '4682b4',\r\n  tan: 'd2b48c',\r\n  teal: '008080',\r\n  thistle: 'd8bfd8',\r\n  tomato: 'ff6347',\r\n  turquoise: '40e0d0',\r\n  violet: 'ee82ee',\r\n  wheat: 'f5deb3',\r\n  white: 'fff',\r\n  whitesmoke: 'f5f5f5',\r\n  yellow: 'ff0',\r\n  yellowgreen: '9acd32',\r\n})\r\n\r\nexport type ColorName = keyof typeof NAMED_COLORS\r\n\r\nexport const COLOR_NAMES = Object.freeze(new Set(Object.keys(NAMED_COLORS))) as Readonly<\r\n  Set<ColorName>\r\n>\r\n\r\n/**\r\n * 判断给定的字符串是否为一个合法颜色值\r\n *\r\n * @param value 原始字符串\r\n *\r\n * @returns 是否为合法颜色\r\n */\r\nexport function isColor(value: string): boolean {\r\n  value = String(value).trim().toLowerCase()\r\n\r\n  if (!value) {\r\n    return false\r\n  }\r\n\r\n  if (value === 'transparent' || NAMED_COLORS[value as ColorName]) {\r\n    return true\r\n  }\r\n\r\n  return (\r\n    value === 'transparent' ||\r\n    COLOR_NAMES.has(value as ColorName) ||\r\n    RGB_REG.test(value) ||\r\n    RGBA_REG.test(value) ||\r\n    HSL_REG.test(value) ||\r\n    HSLA_REG.test(value) ||\r\n    HSV_REG.test(value) ||\r\n    HSVA_REG.test(value) ||\r\n    HEX_REG_3.test(value) ||\r\n    HEX_REG_4.test(value) ||\r\n    HEX_REG_6.test(value) ||\r\n    HEX_REG_8.test(value)\r\n  )\r\n}\r\n\r\n/**\r\n * 将给定的字符串转化为 {@link ObjectColor}，无法转换时返回 null\r\n *\r\n * @param color 原始颜色字符串\r\n *\r\n * @returns 解析后的颜色对象\r\n */\r\nexport function parseStringColor(color: string): ObjectColor | null {\r\n  color = color.toString().trim().toLowerCase()\r\n\r\n  if (color === 'transparent') {\r\n    return { r: 0, g: 0, b: 0, a: 0, format: 'name', toString: toRgbString }\r\n  }\r\n\r\n  let named = false\r\n\r\n  if (NAMED_COLORS[color as ColorName]) {\r\n    color = NAMED_COLORS[color as ColorName]\r\n    named = true\r\n  }\r\n\r\n  let match\r\n\r\n  if ((match = RGB_REG.exec(color))) {\r\n    const { r, g, b } = normalizeRgb(match[1], match[2], match[3])\r\n\r\n    return {\r\n      r: r * 255,\r\n      g: g * 255,\r\n      b: b * 255,\r\n      format: 'rgb',\r\n      toString: toRgbString,\r\n    }\r\n  }\r\n\r\n  if ((match = RGBA_REG.exec(color))) {\r\n    const { r, g, b } = normalizeRgb(match[1], match[2], match[3])\r\n\r\n    return {\r\n      r: r * 255,\r\n      g: g * 255,\r\n      b: b * 255,\r\n      a: normalizeAlpha(match[4]),\r\n      format: 'rgba',\r\n      toString: toRgbString,\r\n    }\r\n  }\r\n\r\n  if ((match = HSL_REG.exec(color))) {\r\n    const { h, s, l } = normalizeHsl(match[0], match[1], match[3])\r\n\r\n    return { h: h * 360, s, l, format: 'hsl', toString: toHslString }\r\n  }\r\n\r\n  if ((match = HSLA_REG.exec(color))) {\r\n    const { h, s, l } = normalizeHsl(match[0], match[1], match[3])\r\n\r\n    return {\r\n      h: h * 360,\r\n      s,\r\n      l,\r\n      a: normalizeAlpha(match[4]),\r\n      format: 'hsla',\r\n      toString: toHslString,\r\n    }\r\n  }\r\n\r\n  if ((match = HSV_REG.exec(color))) {\r\n    const { h, s, v } = normalizeHsv(match[0], match[1], match[3])\r\n\r\n    return { h: h * 360, s, v, format: 'hsv', toString: toHsvString }\r\n  }\r\n\r\n  if ((match = HSVA_REG.exec(color))) {\r\n    const { h, s, v } = normalizeHsv(match[0], match[1], match[3])\r\n\r\n    return {\r\n      h: h * 360,\r\n      s,\r\n      v,\r\n      a: normalizeAlpha(match[4]),\r\n      format: 'hsva',\r\n      toString: toHsvString,\r\n    }\r\n  }\r\n\r\n  if ((match = HEX_REG_3.exec(color))) {\r\n    return {\r\n      r: parseInt(`${match[1]}${match[1]}`, 16),\r\n      g: parseInt(`${match[2]}${match[2]}`, 16),\r\n      b: parseInt(`${match[3]}${match[3]}`, 16),\r\n      format: named ? 'name' : 'hex3',\r\n      toString: toRgbString,\r\n    }\r\n  }\r\n\r\n  if ((match = HEX_REG_4.exec(color))) {\r\n    return {\r\n      r: parseInt(`${match[1]}${match[1]}`, 16),\r\n      g: parseInt(`${match[2]}${match[2]}`, 16),\r\n      b: parseInt(`${match[3]}${match[3]}`, 16),\r\n      a: convertHexToDecimal(`${match[4]}${match[4]}`),\r\n      format: named ? 'name' : 'hex4',\r\n      toString: toRgbString,\r\n    }\r\n  }\r\n\r\n  if ((match = HEX_REG_6.exec(color))) {\r\n    return {\r\n      r: parseInt(match[1], 16),\r\n      g: parseInt(match[2], 16),\r\n      b: parseInt(match[3], 16),\r\n      format: named ? 'name' : 'hex6',\r\n      toString: toRgbString,\r\n    }\r\n  }\r\n\r\n  if ((match = HEX_REG_8.exec(color))) {\r\n    return {\r\n      r: parseInt(match[1], 16),\r\n      g: parseInt(match[2], 16),\r\n      b: parseInt(match[3], 16),\r\n      a: convertHexToDecimal(match[4]),\r\n      format: named ? 'name' : 'hex8',\r\n      toString: toRgbString,\r\n    }\r\n  }\r\n\r\n  return null\r\n}\r\n\r\n/**\r\n * 将给定的 {@link Color} 解析为 {@link ColorMeta}\r\n *\r\n * @param color 原始颜色值\r\n *\r\n * @returns 解析后的颜色元数据\r\n */\r\nexport function parseColor(color: Color): ColorMeta {\r\n  const { a, ...rgb } = parseColorToRgba(color)\r\n\r\n  delete rgb.format\r\n\r\n  const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b)\r\n  const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b)\r\n  const hex = rgbToHex(rgb.r, rgb.g, rgb.b)\r\n\r\n  const hex8 = rgbaToHex(rgb.r, rgb.g, rgb.b, a)\r\n\r\n  return {\r\n    rgb: rgb as RGBColor,\r\n    hsl,\r\n    hsv,\r\n    hex,\r\n    alpha: a,\r\n    rgba: { ...rgb, a, format: 'rgba' },\r\n    hsla: { ...hsl, a, format: 'hsla' },\r\n    hsva: { ...hsv, a, format: 'hsva' },\r\n    hex8,\r\n    gray: rgbToGrayScale(rgb),\r\n    origin: color,\r\n  }\r\n}\r\n\r\n/**\r\n * 将给定的 {@link Color} 解析为 {@link RGBAColor}\r\n *\r\n * @param originColor 原始颜色值\r\n *\r\n * @returns 解析后的 RGB 颜色对象\r\n */\r\nexport function parseColorToRgba(originColor: Color): RGBAColor {\r\n  let rgb: RGBColor = { r: 0, g: 0, b: 0 }\r\n  let a = 1\r\n  let color: Color | null\r\n\r\n  if (typeof originColor === 'string') {\r\n    color = parseStringColor(originColor)\r\n  } else {\r\n    color = originColor\r\n  }\r\n\r\n  if (color !== null && typeof color === 'object') {\r\n    if ('l' in color) {\r\n      rgb = hslToRgb(color.h, color.s, color.l)\r\n    } else if ('v' in color) {\r\n      rgb = hsvToRgb(color.h, color.s, color.v)\r\n    }\r\n\r\n    if ('a' in color) {\r\n      a = normalizeAlpha(color.a ?? 1)\r\n\r\n      if (Number.isNaN(a)) {\r\n        a = 1\r\n      }\r\n    }\r\n\r\n    rgb = color as RGBColor\r\n  }\r\n\r\n  return { ...rgb, a, format: 'rgba', toString: toRgbString }\r\n}\r\n\r\n/**\r\n * 将原始的 h、s、l 值标准化为 0 ~ 1 的值\r\n *\r\n * @param h 0 ~ 360\r\n * @param s 0 ~ 1，0% ~ 100%\r\n * @param l 0 ~ 1，0% ~ 100%\r\n *\r\n * @returns 标准化后的 HSL 对象\r\n */\r\nexport function normalizeHsl(h: number | string, s: number | string, l: number | string) {\r\n  return {\r\n    h: boundRange(h, 0, 360) / 360,\r\n    s: boundRange(isPercentage(s) ? parsePercentage(s) : s, 0, 1),\r\n    l: boundRange(isPercentage(l) ? parsePercentage(l) : l, 0, 1),\r\n  }\r\n}\r\n\r\n/**\r\n * 将原始的 r、g、b 值标准化为 0 ~ 1 的值\r\n *\r\n * @param r 0 ~ 255\r\n * @param g 0 ~ 255\r\n * @param b 0 ~ 255\r\n *\r\n * @returns 标准化后 RGB 对象\r\n */\r\nexport function normalizeRgb(r: number | string, g: number | string, b: number | string) {\r\n  return {\r\n    r: boundRange(r, 0, 255) / 255,\r\n    g: boundRange(g, 0, 255) / 255,\r\n    b: boundRange(b, 0, 255) / 255,\r\n  }\r\n}\r\n\r\n/**\r\n * 将原始的 h、s、v 值标准化为 0 ~ 1 的值\r\n *\r\n * @param h 0 ~ 360\r\n * @param s 0 ~ 1，0% ~ 100%\r\n * @param v 0 ~ 1，0% ~ 100%\r\n *\r\n * @returns 标准化的 HSV 对象\r\n */\r\nexport function normalizeHsv(h: number | string, s: number | string, v: number | string) {\r\n  return {\r\n    h: boundRange(h, 0, 360) / 360,\r\n    s: boundRange(isPercentage(s) ? parsePercentage(s) : s, 0, 1),\r\n    v: boundRange(isPercentage(v) ? parsePercentage(v) : v, 0, 1),\r\n  }\r\n}\r\n\r\n/**\r\n * 将原始透明度值标准化为 0 ~ 1 的值\r\n *\r\n * @param a 0 ~ 1，0% ~ 100%\r\n *\r\n * @returns 标准化后的透明度\r\n */\r\nexport function normalizeAlpha(a: number | string) {\r\n  return boundRange(isPercentage(a) ? parsePercentage(a) : a, 0, 1)\r\n}\r\n\r\n/**\r\n * 将 HSL 颜色转换为 RGB 颜色\r\n *\r\n * @param h 0 ~ 360\r\n * @param s 0 ~ 1，0% ~ 100%\r\n * @param l 0 ~ 1，0% ~ 100%\r\n *\r\n * @returns 转换后的 RGB 颜色\r\n */\r\nexport function hslToRgb(h: number | string, s: number | string, l: number | string): RGBColor {\r\n  let r, g, b\r\n  ;({ h, s, l } = normalizeHsl(h, s, l))\r\n\r\n  if (s === 0) {\r\n    r = g = b = l\r\n  } else {\r\n    const q = l < 0.5 ? 1 * (1 + s) : l + s - l * s\r\n    const p = 2 * l - q\r\n\r\n    r = hueToRgb(p, q, h + 1 / 3)\r\n    g = hueToRgb(p, q, h)\r\n    b = hueToRgb(p, q, h - 1 / 3)\r\n  }\r\n\r\n  r *= 255\r\n  g *= 255\r\n  b *= 255\r\n\r\n  return { r, g, b, toString: toRgbString }\r\n}\r\n\r\n/**\r\n * 将 RGB 颜色转换为 HSL 颜色\r\n *\r\n * @param r 0 ~ 255\r\n * @param g 0 ~ 255\r\n * @param b 0 ~ 255\r\n *\r\n * @returns 转换后的 HSL 颜色\r\n */\r\nexport function rgbToHsl(r: number | string, g: number | string, b: number | string): HSLColor {\r\n  ;({ r, g, b } = normalizeRgb(r, g, b))\r\n\r\n  const max = Math.max(r, g, b)\r\n  const min = Math.min(r, g, b)\r\n  let h, s\r\n\r\n  const l = (max + min) / 2\r\n\r\n  if (max === min) {\r\n    h = s = 0\r\n  } else {\r\n    const d = max - min\r\n\r\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\r\n\r\n    switch (max) {\r\n      case r: {\r\n        h = (g - b) / d + (g < b ? 6 : 0)\r\n        break\r\n      }\r\n      case g: {\r\n        h = (b - r) / d + 2\r\n        break\r\n      }\r\n      case b: {\r\n        h = (r - g) / d + 4\r\n        break\r\n      }\r\n      default: {\r\n        h = 0\r\n      }\r\n    }\r\n\r\n    h *= 60\r\n  }\r\n\r\n  return { h, s, l, toString: toHslString }\r\n}\r\n\r\n/**\r\n * 将 HSL 颜色转换为 HSV 颜色\r\n *\r\n * @param h 0 ~ 360\r\n * @param s 0 ~ 1，0% ~ 100%\r\n * @param l 0 ~ 1，0% ~ 100%\r\n *\r\n * @returns 转换后的 HSV 颜色\r\n */\r\nexport function hslToHsv(h: number | string, s: number | string, l: number | string): HSVColor {\r\n  ;({ h, s, l } = normalizeHsl(h, s, l))\r\n\r\n  const v = 0.5 * (2 * l + s * (1 - Math.abs(2 * l - 1)))\r\n\r\n  s = (2 * (v - l)) / v\r\n\r\n  return { h: h * 360, s, v, toString: toHsvString }\r\n}\r\n\r\n/**\r\n * 将 HSV 颜色转换为 HSL 颜色\r\n *\r\n * @param h 0 ~ 360\r\n * @param s 0 ~ 1，0% ~ 100%\r\n * @param v 0 ~ 1，0% ~ 100%\r\n *\r\n * @returns 转换后的 HSL 颜色\r\n */\r\nexport function hsvToHsl(h: number | string, s: number | string, v: number | string): HSLColor {\r\n  ;({ h, s, v } = normalizeHsv(h, s, v))\r\n\r\n  const l = 0.5 * v * (2 - s)\r\n\r\n  s = (v * s) / (1 - Math.abs(2 * l - 1))\r\n\r\n  return { h: h * 360, s, l, toString: toHslString }\r\n}\r\n\r\n/**\r\n * 将 HSV 颜色转换为 RGB 颜色\r\n *\r\n * @param h 0 ~ 360\r\n * @param s 0 ~ 1，0% ~ 100%\r\n * @param v 0 ~ 1，0% ~ 100%\r\n *\r\n * @returns 转换后的 RGB 颜色\r\n */\r\nexport function hsvToRgb(h: number | string, s: number | string, v: number | string): RGBColor {\r\n  ;({ h, s, v } = normalizeHsv(h, s, v))\r\n\r\n  h *= 6\r\n\r\n  const i = Math.floor(h)\r\n  const f = h - i\r\n  const p = v * (1 - s)\r\n  const q = v * (1 - f * s)\r\n  const t = v * (1 - (1 - f) * s)\r\n  const mod = i % 6\r\n\r\n  let r = [v, q, p, p, t, v][mod]\r\n  let g = [t, v, v, q, p, p][mod]\r\n  let b = [p, p, t, v, v, q][mod]\r\n\r\n  r *= 255\r\n  g *= 255\r\n  b *= 255\r\n\r\n  return { r, g, b, toString: toRgbString }\r\n}\r\n\r\n/**\r\n * 将 RGB 颜色转换为 HSV 颜色\r\n *\r\n * @param r 0 ~ 255\r\n * @param g 0 ~ 255\r\n * @param b 0 ~ 255\r\n *\r\n * @returns 转换后的 HSV 颜色\r\n */\r\nexport function rgbToHsv(r: number | string, g: number | string, b: number | string): HSVColor {\r\n  ;({ r, g, b } = normalizeRgb(r, g, b))\r\n\r\n  const max = Math.max(r, g, b)\r\n  const min = Math.min(r, g, b)\r\n\r\n  let h\r\n\r\n  const v = max\r\n  const d = max - min\r\n  const s = max === 0 ? 0 : d / max\r\n\r\n  if (max === min) {\r\n    h = 0\r\n  } else {\r\n    switch (max) {\r\n      case r: {\r\n        h = (g - b) / d + (g < b ? 6 : 0)\r\n        break\r\n      }\r\n      case g: {\r\n        h = (b - r) / d + 2\r\n        break\r\n      }\r\n      case b: {\r\n        h = (r - g) / d + 4\r\n        break\r\n      }\r\n      default: {\r\n        h = 0\r\n      }\r\n    }\r\n\r\n    h *= 60\r\n  }\r\n\r\n  return { h, s, v, toString: toHsvString }\r\n}\r\n\r\n/**\r\n * 将 RGB 颜色转换为 HEX 颜色\r\n *\r\n * @param r 0 ~ 255\r\n * @param g 0 ~ 255\r\n * @param b 0 ~ 255\r\n * @param allow3Char 是否允许 3 位的 HEX 值\r\n *\r\n * @returns 转换后的 HEX 颜色\r\n */\r\nexport function rgbToHex(\r\n  r: number | string,\r\n  g: number | string,\r\n  b: number | string,\r\n  allow3Char = false,\r\n) {\r\n  ;({ r, g, b } = normalizeRgb(r, g, b))\r\n\r\n  const hex = [\r\n    repairDigits(Math.round(r * 255).toString(16)),\r\n    repairDigits(Math.round(g * 255).toString(16)),\r\n    repairDigits(Math.round(b * 255).toString(16)),\r\n  ]\r\n\r\n  if (allow3Char && isRepetitive(hex[0]) && isRepetitive(hex[1]) && isRepetitive(hex[2])) {\r\n    return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0)\r\n  }\r\n\r\n  return '#' + hex.join('')\r\n}\r\n\r\n/**\r\n * 将 RGBA 颜色转换为 HEX 颜色\r\n *\r\n * @param r 0 ~ 255\r\n * @param g 0 ~ 255\r\n * @param b 0 ~ 255\r\n * @param a 0 ~ 1，0% ~ 100%\r\n * @param allow4Char 是否允许 4 位的 HEX 值\r\n *\r\n * @returns 转换后的 HEX 颜色\r\n */\r\nexport function rgbaToHex(\r\n  r: number | string,\r\n  g: number | string,\r\n  b: number | string,\r\n  a: number | string,\r\n  allow4Char = false,\r\n) {\r\n  ;({ r, g, b } = normalizeRgb(r, g, b))\r\n\r\n  const hex = [\r\n    repairDigits(Math.round(r * 255).toString(16)),\r\n    repairDigits(Math.round(g * 255).toString(16)),\r\n    repairDigits(Math.round(b * 255).toString(16)),\r\n    repairDigits(convertDecimalToHex(normalizeAlpha(a))),\r\n  ]\r\n\r\n  if (\r\n    allow4Char &&\r\n    isRepetitive(hex[0]) &&\r\n    isRepetitive(hex[1]) &&\r\n    isRepetitive(hex[2]) &&\r\n    isRepetitive(hex[3])\r\n  ) {\r\n    return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0)\r\n  }\r\n\r\n  return '#' + hex.join('')\r\n}\r\n\r\n/**\r\n * 将两种颜色按照一定的比例混合\r\n *\r\n * @param color1 第一种颜色\r\n * @param color2 第二种颜色\r\n * @param weight 混合比例 0 ~ 1，越小则第一种颜色越少\r\n *\r\n * @returns 混合后的颜色\r\n */\r\nexport function mixColor(color1: Color, color2: Color, weight = 0.5): RGBAColor {\r\n  if (!color1 && !color2) return { r: 0, g: 0, b: 0, a: 1 }\r\n  if (!color1) return parseColorToRgba(color2)\r\n  if (!color2) return parseColorToRgba(color1)\r\n\r\n  const rgba1 = parseColorToRgba(color1)\r\n  const rgba2 = parseColorToRgba(color2)\r\n\r\n  const originalWeight = boundRange(weight, 0, 1)\r\n  const normalizedWeight = originalWeight * 2 - 1\r\n\r\n  const alphaDistance = rgba1.a - rgba2.a\r\n  const mixWeight =\r\n    normalizedWeight * alphaDistance === -1\r\n      ? normalizedWeight\r\n      : (normalizedWeight + alphaDistance) / (1 + normalizedWeight * alphaDistance)\r\n  const weight1 = (mixWeight + 1) / 2\r\n  const weight2 = 1 - weight1\r\n\r\n  return {\r\n    r: Math.round(rgba1.r * weight1 + rgba2.r * weight2),\r\n    g: Math.round(rgba1.g * weight1 + rgba2.g * weight2),\r\n    b: Math.round(rgba1.b * weight1 + rgba2.b * weight2),\r\n    a: Math.round(rgba1.a * originalWeight + rgba2.a * (1 - originalWeight)),\r\n    format: 'rgba',\r\n    toString: toRgbString,\r\n  }\r\n}\r\n\r\n/**\r\n * 调整给定颜色值的透明度\r\n *\r\n * @param color 需要调整的颜色\r\n * @param alpha 调整后的透明度 0 ~ 1，0% ~ 100%\r\n *\r\n * @returns 调整后的颜色\r\n */\r\nexport function adjustAlpha(color: Color, alpha: number | string) {\r\n  const rgba = parseColorToRgba(color)\r\n\r\n  rgba.a = normalizeAlpha(alpha)\r\n\r\n  return rgba\r\n}\r\n\r\n/**\r\n * 随机生成一个颜色值\r\n *\r\n * @param withAlpha 是否具有透明度\r\n * @param type 颜色的类型\r\n *\r\n * @returns 生成的颜色字面值\r\n */\r\nexport function randomColor(withAlpha = false, type: ColorType = 'hex') {\r\n  const r = Math.round(Math.random() * 255)\r\n  const g = Math.round(Math.random() * 255)\r\n  const b = Math.round(Math.random() * 255)\r\n\r\n  if (type === 'hex') {\r\n    return withAlpha ? rgbaToHex(r, g, b, Math.random()) : rgbToHex(r, g, b)\r\n  }\r\n\r\n  let color: ObjectColor\r\n\r\n  if (type === 'hsl') {\r\n    color = rgbToHsl(r, g, b)\r\n  } else if (type === 'hsv') {\r\n    color = rgbToHsv(r, g, b)\r\n  } else {\r\n    color = Object.create({ r, g, b, toString: toRgbString })\r\n  }\r\n\r\n  if (withAlpha) {\r\n    ;(color as RGBAColor).a = Math.random()\r\n  }\r\n\r\n  return color.toString()\r\n}\r\n\r\n/**\r\n * 随机生成一个特定色调（冷暖色）的颜色值\r\n *\r\n * @param prefer 色调\r\n * @param withAlpha 是否具有透明度\r\n * @param type 颜色的类型\r\n *\r\n * @returns 生成的颜色字面值\r\n */\r\nexport function randomPreferColor(\r\n  prefer: 'hard' | 'soft',\r\n  withAlpha = false,\r\n  type: ColorType = 'hex',\r\n) {\r\n  const h = Math.round(Math.random() * 360)\r\n  const s = Math.round(prefer === 'hard' ? 80 + Math.random() * 20 : 20 + Math.random() * 70) / 100\r\n  const l = Math.round(prefer === 'hard' ? 40 + Math.random() * 20 : 80 + Math.random() * 15) / 100\r\n\r\n  if (type === 'hsl') {\r\n    return toHslString.bind({ h, s, l })()\r\n  }\r\n\r\n  let color!: ObjectColor\r\n\r\n  if (type === 'hex' || type === 'rgb') {\r\n    color = hslToRgb(h, s, l)\r\n\r\n    if (type === 'hex') {\r\n      const { r, g, b } = color\r\n\r\n      return withAlpha ? rgbaToHex(r, g, b, Math.random()) : rgbToHex(r, g, b)\r\n    }\r\n  } else if (type === 'hsv') {\r\n    color = hslToHsv(h, s, l)\r\n  }\r\n\r\n  if (withAlpha) {\r\n    ;(color as RGBAColor).a = Math.random()\r\n  }\r\n\r\n  return color.toString()\r\n}\r\n\r\n/**\r\n * 随机生成一个冷色调的颜色值\r\n *\r\n * @param withAlpha 是否具有透明度\r\n * @param type 颜色的类型\r\n *\r\n * @returns 生成的颜色字面值\r\n */\r\nexport function randomHardColor(withAlpha = false, type: ColorType = 'hex') {\r\n  return randomPreferColor('hard', withAlpha, type)\r\n}\r\n\r\n/**\r\n * 随机生成一个暖色调的颜色值\r\n *\r\n * @param withAlpha 是否具有透明度\r\n * @param type 颜色的类型\r\n *\r\n * @returns 生成的颜色字面值\r\n */\r\nexport function randomSoftColor(withAlpha = false, type: ColorType = 'hex') {\r\n  return randomPreferColor('soft', withAlpha, type)\r\n}\r\n\r\n/**\r\n * 获取给定颜色的灰度\r\n *\r\n * @param color 颜色字面值\r\n *\r\n * @returns 颜色的灰度\r\n */\r\nexport function toGrayScale(color: string) {\r\n  return rgbToGrayScale(parseColorToRgba(color))\r\n}\r\n\r\nfunction repairDigits(str: string) {\r\n  return str.length === 1 ? `0${str}` : str.toString()\r\n}\r\n\r\nfunction isRepetitive(string: string): boolean {\r\n  return string.charAt(0) === string.charAt(1)\r\n}\r\n\r\n// function testUnit(color: number | string): boolean {\r\n//   return UNIT_REG.test(color as string)\r\n// }\r\n\r\nfunction convertDecimalToHex(number: number | string): string {\r\n  return Math.round(parseFloat(number as string) * 255).toString(16)\r\n}\r\n\r\nfunction convertHexToDecimal(hex: string): number {\r\n  return parseInt(hex, 16) / 255\r\n}\r\n\r\nfunction boundRange(number: number | string, min: number, max: number): number {\r\n  return Math.max(min, Math.min(max, parseFloat(number as string)))\r\n}\r\n\r\nfunction hueToRgb(p: number, q: number, t: number): number {\r\n  if (t < 0) t += 1\r\n  if (t > 1) t -= 1\r\n  if (t < 1 / 6) return p + (q - p) * 6 * t\r\n  if (t < 1 / 2) return q\r\n  if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6\r\n\r\n  return p\r\n}\r\n\r\nfunction isPercentage(percent: number | string): boolean {\r\n  return String(percent).trim().includes('%')\r\n}\r\n\r\nfunction parsePercentage(percent: number | string): number {\r\n  const number = parseFloat(percent as string) / 100\r\n\r\n  return Number.isNaN(number) ? 0 : number\r\n}\r\n\r\nfunction toRgbString(this: RGB) {\r\n  if (isDefined(this.a) && this.a >= 0 && this.a < 1) {\r\n    return `rgba(${this.r}, ${this.g}, ${this.b}, ${this.a})`\r\n  }\r\n\r\n  return `rgb(${this.r}, ${this.g}, ${this.b})`\r\n}\r\n\r\nfunction toHslString(this: HSL) {\r\n  const s = `${this.s * 100}%`\r\n  const l = `${this.l * 100}%`\r\n\r\n  if (isDefined(this.a) && this.a >= 0 && this.a < 1) {\r\n    return `hsla(${this.h}, ${s}, ${l}, ${this.a})`\r\n  }\r\n\r\n  return `hsl(${this.h}, ${s}, ${l})`\r\n}\r\n\r\nfunction toHsvString(this: HSV) {\r\n  const s = `${this.s * 100}%`\r\n  const v = `${this.v * 100}%`\r\n\r\n  if (isDefined(this.a) && this.a >= 0 && this.a < 1) {\r\n    return `hsva(${this.h}, ${s}, ${v}, ${this.a})`\r\n  }\r\n\r\n  return `hsv(${this.h}, ${s}, ${v})`\r\n}\r\n\r\nfunction rgbToGrayScale(rgb: RGB) {\r\n  return (rgb.r * 0.2126 + rgb.g * 0.7152 + rgb.b * 0.0722) / 255\r\n}\r\n","let globalCount = 0\r\n\r\nexport function getGlobalCount() {\r\n  return globalCount++\r\n}\r\n\r\nexport function setGlobalCount(count: number) {\r\n  globalCount = Math.round(count)\r\n}\r\n\r\nexport function createCounter(count = 0) {\r\n  return {\r\n    getCount: () => count++,\r\n    setCount: (newCount: number) => {\r\n      count = newCount\r\n    },\r\n  }\r\n}\r\n","export interface BITree {\r\n  tree: number[],\r\n  /**\r\n   * 为第 index 个元素增减值\r\n   *\r\n   * @param index 索引值\r\n   * @param num 增减的值\r\n   */\r\n  add(index: number, num: number): void,\r\n  /**\r\n   * 求前 index 个元素的和\r\n   *\r\n   * @param index 索引值\r\n   *\r\n   * @returns 前 index 个元素的和\r\n   */\r\n  sum(index?: number): number,\r\n  /**\r\n   * 获取第 index 个元素的值\r\n   *\r\n   * @param index 索引值\r\n   *\r\n   * @returns 第 index 个元素的值\r\n   */\r\n  get(index: number): number,\r\n  /**\r\n   * 根据目标值寻找一个最接近的元素的索引值\r\n   *\r\n   * @param target 目标值\r\n   *\r\n   * @returns 最接近的元素的索引值\r\n   */\r\n  boundIndex(target: number): number,\r\n}\r\n\r\nfunction lowBit(num: number) {\r\n  return num & -num\r\n}\r\n\r\n/**\r\n * 创建一个二叉索引树（Fenwick 树）对象\r\n *\r\n * 为了节省初始化性能开销，需确保元素最小值已知，其初始值为：元素最小值 * 元素总数\r\n *\r\n * @param length 树的大小，即元素的总数\r\n * @param min 规定元素的最小值\r\n *\r\n * @returns 二叉索引树对象\r\n */\r\nexport function createBITree(length: number, min = 0): BITree {\r\n  const tree: number[] = new Array(length + 1).fill(0)\r\n\r\n  function add(index: number, delta: number) {\r\n    if (!delta || index >= length) return\r\n\r\n    index += 1\r\n\r\n    while (index <= length) {\r\n      tree[index] += delta\r\n      index += lowBit(index)\r\n    }\r\n  }\r\n\r\n  function sum(index = length) {\r\n    if (index <= 0) return 0\r\n    if (index > length) index = length\r\n\r\n    let sum = index * min\r\n\r\n    while (index > 0) {\r\n      sum += tree[index]\r\n      index -= lowBit(index)\r\n    }\r\n\r\n    return sum\r\n  }\r\n\r\n  function get(index: number) {\r\n    return sum(index + 1) - sum(index)\r\n  }\r\n\r\n  function boundIndex(target: number) {\r\n    let left = 0\r\n    let right = length\r\n\r\n    while (right > left) {\r\n      const middle = Math.floor((left + right) / 2)\r\n      const total = sum(middle)\r\n\r\n      if (total > target) {\r\n        right = middle\r\n        continue\r\n      } else if (total < target) {\r\n        if (left === middle) {\r\n          return sum(left + 1) <= target ? left + 1 : left\r\n        }\r\n\r\n        left = middle\r\n      } else {\r\n        return middle\r\n      }\r\n    }\r\n\r\n    return left\r\n  }\r\n\r\n  return { tree, add, sum, get, boundIndex }\r\n}\r\n","import type { AnyCase } from './word-case'\r\n\r\nexport const numberRE = /^\\s*[+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?\\s*$/\r\n\r\n/**\r\n * 检测给定的值是否可以通过 parseFlat 或 Number 方法转为数字\r\n *\r\n * 开启严格模式则通过正则以更严格的方法判断\r\n *\r\n * @param value 需要检测的值\r\n * @param strict 是否为严格模式\r\n *\r\n * @returns 值是否可以转为数字\r\n */\r\nexport function isValidNumber(value: unknown, strict = false) {\r\n  if (typeof value === 'number') {\r\n    return !Number.isNaN(value)\r\n  }\r\n\r\n  if (strict) {\r\n    return numberRE.test(String(value))\r\n  }\r\n\r\n  return !Number.isNaN(parseFloat(value as string)) || !Number.isNaN(Number(value))\r\n}\r\n\r\n/**\r\n * 将给定的值转成数字，NaN 的情况将会处理成 0\r\n *\r\n * @param value 需要转换的值\r\n *\r\n * @returns 转换后的数字\r\n */\r\nexport function toNumber(value: unknown) {\r\n  let number = parseFloat(value as string)\r\n\r\n  if (Number.isNaN(number)) {\r\n    number = Number(value)\r\n  }\r\n\r\n  return Number.isNaN(number) ? 0 : number\r\n}\r\n\r\n/**\r\n * 为给定的整数开头填充 0，直至满足指定的长度\r\n *\r\n * @param number 需要处理的整数\r\n * @param length 填充至的长度\r\n *\r\n * @returns 填充后的字面值\r\n */\r\nexport function padStartZeros(number: number, length: number) {\r\n  if (length <= 0) {\r\n    return number.toString()\r\n  }\r\n\r\n  return `${number < 0 ? '-' : ''}${String(Math.abs(Math.round(number))).padStart(length, '0')}`\r\n}\r\n\r\n/**\r\n * 将小于 10 整数 N 变成 `0N` 的字符串，方法不会对入参校验\r\n *\r\n * @param number 需要处理的整数\r\n *\r\n * @returns 填充后的字面值\r\n */\r\nexport function doubleDigits(number: number) {\r\n  return padStartZeros(number, 2)\r\n}\r\n\r\n/**\r\n * 返回数字的小数位数\r\n *\r\n * @param number 指定的数字\r\n *\r\n * @returns 数字的小数位数\r\n */\r\nexport function decimalLength(number: number | string) {\r\n  // Get digit length of e\r\n  const eSplit = number.toString().split(/[eE]/)\r\n  const len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0)\r\n\r\n  return len > 0 ? len : 0\r\n}\r\n\r\n/**\r\n * Return decimal length of a number\r\n *\r\n * @param number The input number\r\n * @deprecated Using `decimalLength` to replace it\r\n */\r\nexport function digitLength(number: number | string) {\r\n  return decimalLength(number)\r\n}\r\n\r\n/**\r\n * 将给定的数字格式化为指定的位阶\r\n *\r\n * @param number 需要格式化的数字\r\n * @param segment 分隔的位数，默认为 3\r\n * @param separator 分隔的符号，默认为 ','\r\n *\r\n * @returns 格式化后的字面值\r\n */\r\nexport function segmentNumber(number: number | string, segment = 3, separator = ',') {\r\n  if (typeof number !== 'number') {\r\n    number = parseFloat(number)\r\n  }\r\n\r\n  if (Number.isNaN(number)) return '0'\r\n\r\n  let [integer, decimal] = String(number).split('.')\r\n\r\n  const formatRegExp = new RegExp(`(\\\\d+)(\\\\d{${segment}})`)\r\n\r\n  while (formatRegExp.test(integer)) {\r\n    integer = integer.replace(formatRegExp, `$1${separator}$2`)\r\n  }\r\n\r\n  decimal = decimal ? `.${decimal}` : ''\r\n\r\n  return `${integer}${decimal}`\r\n}\r\n\r\n/**\r\n * 将给定的实数保留一定的小数\r\n *\r\n * @param number 需要处理的实数\r\n * @param decimal 需要保留的小数\r\n *\r\n * @returns 保留小数后的值\r\n */\r\nexport function toFixed(number: number, decimal: number) {\r\n  decimal = Math.max(Math.round(decimal), 0)\r\n\r\n  let snum = number.toFixed(decimalLength(number))\r\n\r\n  const pointPos = snum.indexOf('.')\r\n\r\n  if (pointPos === -1) return number\r\n\r\n  const nums = snum.replace('.', '').split('')\r\n  const targetPos = pointPos + decimal\r\n  const datum = nums[targetPos]\r\n\r\n  if (!datum) return number\r\n\r\n  if (snum.charAt(targetPos + 1) === '5') {\r\n    snum = snum.substring(0, targetPos + 1) + '6'\r\n  } else {\r\n    snum = snum.substring(0, targetPos + 2)\r\n  }\r\n\r\n  return parseFloat(Number(snum).toFixed(decimal))\r\n}\r\n\r\n/**\r\n * 将给定的实数扩大一定的倍数并保留一定的小数\r\n *\r\n * @param number 要处理的实数\r\n * @param multiple 要扩大的倍数\r\n * @param decimal 要保留的小数\r\n *\r\n * @returns 扩大并保留小数后的值\r\n */\r\nexport function multipleFixed(number: number, multiple: number, decimal: number) {\r\n  return toFixed(number * multiple, decimal)\r\n}\r\n\r\n/**\r\n * 根据临界值对给定的数字进行舍入\r\n *\r\n * @param number 需要舍入的数\r\n * @param criticalValue 舍入的临界值 (0 ~ 1)，达到临界值进位反之舍弃\r\n *\r\n * @returns 舍入后的值\r\n */\r\nexport function round(number: number, criticalValue: number) {\r\n  if (criticalValue < 0 || criticalValue > 1) {\r\n    return Math.round(number)\r\n  }\r\n\r\n  const ceilValue = Math.ceil(number)\r\n\r\n  if (number + 1 - criticalValue >= ceilValue) {\r\n    return ceilValue\r\n  } else {\r\n    return Math.floor(number)\r\n  }\r\n}\r\n\r\n/**\r\n * 将给定的数字限定在指定的范围内\r\n *\r\n * @param number 需要限定范围的数\r\n * @param min 边界最小值，包含该值\r\n * @param max 边界最大值，包含该值\r\n *\r\n * @returns 限定在范围内的值\r\n */\r\nexport function boundRange(number: number | string, min: number, max: number) {\r\n  return Math.max(min, Math.min(max, parseFloat(number as string)))\r\n}\r\n\r\n/**\r\n * 将给定的被除数和除数，不断的取余直至达到次数限制或余数小于除数，返回系列余数\r\n *\r\n * @param number 被除数，需大于 0\r\n * @param divideBy 除数，需大于 1\r\n * @param limit 次数限制，默认为 0，小于 1 则不作限制\r\n *\r\n * @returns 相除过程的系列余数\r\n */\r\nexport function leaveNumber(number: number, divideBy: number, limit = 0) {\r\n  if (number <= 0 || divideBy <= 1) return [number]\r\n\r\n  if (limit < 1) {\r\n    limit = Infinity\r\n  }\r\n\r\n  const remainders: number[] = []\r\n  let count = 0\r\n\r\n  while (number >= divideBy && count < limit) {\r\n    remainders.push(number % divideBy)\r\n    number = Math.floor(number / divideBy)\r\n    ++count\r\n  }\r\n\r\n  remainders.push(number)\r\n\r\n  return remainders.reverse()\r\n}\r\n\r\nconst ordinalSuffixes = ['th', 'st', 'nd', 'rd']\r\n\r\n/**\r\n * 将给定的数字转换为序数词\r\n *\r\n * @param value 需要转换的数字\r\n *\r\n * @returns 转换后的序数词\r\n */\r\nexport function ordinalNumber(value: number) {\r\n  value = Math.round(value)\r\n\r\n  if (value <= 0) return `${value}th`\r\n\r\n  const suffix =\r\n    value % 100 > 10 && value % 100 < 14\r\n      ? ordinalSuffixes[0]\r\n      : ordinalSuffixes[value % 10] || ordinalSuffixes[0]\r\n\r\n  return `${value}${suffix}`\r\n}\r\n\r\nexport type SizeUnitWithAuto = AnyCase<'B' | 'KB' | 'MB' | 'GB' | 'TB' | 'AUTO'>\r\nexport type SizeUnit = Exclude<SizeUnitWithAuto, AnyCase<'AUTO'>>\r\n\r\nconst SIZE_UNIT_WITH_AUTO = Object.freeze([\r\n  'B',\r\n  'KB',\r\n  'MB',\r\n  'GB',\r\n  'TB',\r\n  'AUTO',\r\n] as Uppercase<SizeUnitWithAuto>[])\r\n\r\n/**\r\n * 根据给定的 Byte 数值，将其格式化成指定单位的大小\r\n *\r\n * @param byte 需要计算的 Byte 数值\r\n * @param unit 格式化的单位\r\n * @param precision 结果的精度\r\n * @param joinUtil 是否加入单位\r\n *\r\n * @returns 格式化后的值\r\n */\r\nexport function formatByteSize(byte: number, unit?: SizeUnitWithAuto): number\r\nexport function formatByteSize(byte: number, unit?: SizeUnitWithAuto, precision?: number): number\r\nexport function formatByteSize(byte: number, unit?: SizeUnitWithAuto, joinUtil?: true): number\r\nexport function formatByteSize(\r\n  byte: number,\r\n  unit?: SizeUnitWithAuto,\r\n  joinUtil?: true,\r\n  precision?: number\r\n): number\r\nexport function formatByteSize(\r\n  byte: number,\r\n  unit: SizeUnitWithAuto = 'AUTO',\r\n  joinUtil: number | boolean = false,\r\n  precision?: number,\r\n) {\r\n  if (typeof precision === 'undefined') {\r\n    if (typeof joinUtil === 'number') {\r\n      precision = joinUtil\r\n      joinUtil = false\r\n    } else {\r\n      precision = 2\r\n    }\r\n  }\r\n\r\n  let upperUnit = unit.toUpperCase() as Uppercase<SizeUnitWithAuto>\r\n  upperUnit = SIZE_UNIT_WITH_AUTO.includes(upperUnit) ? upperUnit : 'AUTO'\r\n\r\n  let power\r\n  switch (upperUnit) {\r\n    case 'AUTO':\r\n      power = 0\r\n      break\r\n    case 'KB':\r\n      power = 1\r\n      break\r\n    case 'MB':\r\n      power = 2\r\n      break\r\n    case 'GB':\r\n      power = 3\r\n      break\r\n    case 'TB':\r\n      power = 4\r\n      break\r\n    default:\r\n      return byte\r\n  }\r\n\r\n  let targetSize\r\n\r\n  if (!power) {\r\n    for (targetSize = byte; targetSize > 1024; ++power) {\r\n      if (power > 4) break\r\n      targetSize = targetSize / 1024\r\n    }\r\n  } else {\r\n    targetSize = byte / 1024 ** power\r\n  }\r\n\r\n  targetSize = toFixed(targetSize, precision)\r\n\r\n  return joinUtil\r\n    ? `${targetSize}${upperUnit === 'AUTO' ? SIZE_UNIT_WITH_AUTO[Math.min(power, 4)] : upperUnit}`\r\n    : targetSize\r\n}\r\n\r\n/**\r\n * 在给定的范围内随机一个数\r\n *\r\n * @param max 最大值\r\n * @param min 最小值，默认为 0\r\n *\r\n * @returns 生成的随机数\r\n */\r\nexport function random(max: number, min = 0) {\r\n  if (min === max) return min\r\n\r\n  if (min > max) {\r\n    ;[min, max] = [max, min]\r\n  }\r\n\r\n  return Math.random() * (max - min) + min\r\n}\r\n\r\n/**\r\n * 将数字处理为的指定的有效位数\r\n *\r\n * @param number 需要处理的数字\r\n * @param precision 数字的有效位数\r\n *\r\n * @returns 处理后的数字\r\n *\r\n * @example\r\n * ```ts\r\n * toPrecision(0.09999999999999998) === 0.1 // true\r\n * ```\r\n */\r\nexport function toPrecision(number: number | string, precision = 15) {\r\n  return +parseFloat(Number(number).toPrecision(precision))\r\n}\r\n\r\nfunction multipleInt(number: number | string) {\r\n  const snum = String(number)\r\n\r\n  if (!snum.includes('e')) {\r\n    return Number(snum.replace('.', ''))\r\n  }\r\n\r\n  const dLength = decimalLength(number)\r\n\r\n  return dLength > 0 ? toPrecision(Number(number) * 10 ** dLength) : Number(number)\r\n}\r\n\r\n/**\r\n * Create an operation to support rest params.\r\n *\r\n * @param operation The original operation\r\n */\r\nfunction createOperation(operation: (n1: number | string, n2: number | string) => number) {\r\n  return (...numbers: (number | string)[]) => {\r\n    let result = numbers[0] as number\r\n\r\n    for (let i = 1, len = numbers.length; i < len; ++i) {\r\n      result = operation(result, numbers[i])\r\n    }\r\n\r\n    return result\r\n  }\r\n}\r\n\r\n/**\r\n * 精确的乘法\r\n *\r\n * @param numbers 需要依次相乘的数字\r\n *\r\n * @returns 乘积\r\n */\r\nexport const times = createOperation((number1, number2) => {\r\n  const int1 = multipleInt(number1)\r\n  const int2 = multipleInt(number2)\r\n  const base = decimalLength(number1) + decimalLength(number2)\r\n  const int = int1 * int2\r\n\r\n  return int / 10 ** base\r\n})\r\n\r\n/**\r\n * 精确的加法\r\n *\r\n * @param numbers 需要依次相加的数字\r\n *\r\n * @returns 和\r\n */\r\nexport const plus = createOperation((number1, number2) => {\r\n  const base = 10 ** Math.max(decimalLength(number1), decimalLength(number2))\r\n\r\n  return (times(number1, base) + times(number2, base)) / base\r\n})\r\n\r\n/**\r\n * 精确的减法\r\n *\r\n * @param numbers 需要依次相减的数字\r\n *\r\n * @returns 差值\r\n */\r\nexport const minus = createOperation((number1, number2) => {\r\n  const base = 10 ** Math.max(decimalLength(number1), decimalLength(number2))\r\n\r\n  return (times(number1, base) - times(number2, base)) / base\r\n})\r\n\r\n/**\r\n * 精确的除法\r\n *\r\n * @param numbers 需要依次相除的数字\r\n *\r\n * @returns 商\r\n */\r\nexport const divide = createOperation((number1, number2) => {\r\n  const int1 = multipleInt(number1)\r\n  const int2 = multipleInt(number2)\r\n\r\n  return times(int1 / int2, toPrecision(10 ** (decimalLength(number2) - decimalLength(number1))))\r\n})\r\n","import { doubleDigits } from './number'\r\n\r\nexport type Dateable = number | string | Date\r\n\r\n/** @deprecated renames to `SECOND_ON_MILLISECONDS` */\r\nexport const SECOND_ON_MILLS = 1000\r\nexport const SECOND_ON_MILLISECONDS = 1000\r\n\r\nexport const MINUTE_ON_SECONDS = 60\r\n/** @deprecated renames to `MINUTE_ON_MILLISECONDS` */\r\nexport const MINUTE_ON_MILLS = MINUTE_ON_SECONDS * SECOND_ON_MILLISECONDS\r\nexport const MINUTE_ON_MILLISECONDS = MINUTE_ON_SECONDS * SECOND_ON_MILLISECONDS\r\n\r\nexport const HOUR_ON_MINUTES = 60\r\nexport const HOUR_ON_SECONDS = HOUR_ON_MINUTES * MINUTE_ON_SECONDS\r\n/** @deprecated renames to `HOUR_ON_MILLISECONDS` */\r\nexport const HOUR_ON_MILLS = HOUR_ON_SECONDS * SECOND_ON_MILLISECONDS\r\nexport const HOUR_ON_MILLISECONDS = HOUR_ON_SECONDS * SECOND_ON_MILLISECONDS\r\n\r\nexport const DAY_ON_HOURS = 24\r\nexport const DAY_ON_MINUTES = DAY_ON_HOURS * HOUR_ON_MINUTES\r\nexport const DAY_ON_SECONDS = DAY_ON_MINUTES * MINUTE_ON_SECONDS\r\n/** @deprecated renames to `DAY_ON_MILLISECONDS` */\r\nexport const DAY_ON_MILLS = DAY_ON_SECONDS * SECOND_ON_MILLISECONDS\r\nexport const DAY_ON_MILLISECONDS = DAY_ON_SECONDS * SECOND_ON_MILLISECONDS\r\n\r\nexport const WEEK_ON_DAYS = 7\r\nexport const WEEK_ON_HOURS = WEEK_ON_DAYS * DAY_ON_HOURS\r\nexport const WEEK_ON_MINUTES = WEEK_ON_HOURS * HOUR_ON_MINUTES\r\nexport const WEEK_ON_SECONDS = WEEK_ON_MINUTES * MINUTE_ON_SECONDS\r\n/** @deprecated renames to `WEEK_ON_MILLISECONDS` */\r\nexport const WEEK_ON_MILLS = WEEK_ON_SECONDS * SECOND_ON_MILLISECONDS\r\nexport const WEEK_ON_MILLISECONDS = WEEK_ON_SECONDS * SECOND_ON_MILLISECONDS\r\n\r\nexport const QUARTER_ON_MONTHS = 3\r\n\r\nexport const YEAR_ON_QUARTERS = 4\r\nexport const YEAR_ON_MONTHS = YEAR_ON_QUARTERS * QUARTER_ON_MONTHS\r\n\r\ntype Formatter = (date: Date, match: string) => string | number\r\n\r\ninterface Formatters {\r\n  [prop: string]: Formatter,\r\n}\r\n\r\nconst formatters: Formatters = {\r\n  y(date, match) {\r\n    const year = date.getFullYear()\r\n\r\n    return match.length === 4 ? year : (year % 1000) % 100\r\n  },\r\n  M(date, match) {\r\n    const month = date.getMonth() + 1\r\n\r\n    return match.length === 2 ? doubleDigits(month) : month\r\n  },\r\n  d(date, match) {\r\n    const day = date.getDate()\r\n\r\n    return match.length === 2 ? doubleDigits(day) : day\r\n  },\r\n  H(date, match) {\r\n    const hour = date.getHours()\r\n\r\n    return match.length === 2 ? doubleDigits(hour) : hour\r\n  },\r\n  m(date, match) {\r\n    const minute = date.getMinutes()\r\n\r\n    return match.length === 2 ? doubleDigits(minute) : minute\r\n  },\r\n  s(date, match) {\r\n    const second = date.getSeconds()\r\n\r\n    return match.length === 2 ? doubleDigits(second) : second\r\n  },\r\n  q(date, match) {\r\n    const quarter = Math.ceil((date.getMonth() + 1) / 3)\r\n\r\n    return match.length === 2 ? doubleDigits(quarter) : quarter\r\n  },\r\n}\r\n\r\nconst formatRegExp = /[yMdHmsq](\\w)*|./g\r\nconst quotationRegExp = /'(.+?)'/g\r\n\r\n/**\r\n * 将任意可转为 `Date` 对象的变量转为一个新日期\r\n *\r\n * @param any 任意可转换的值\r\n * @param strict 是否在传入非法值时抛错\r\n *\r\n * @returns 转换后的 `Date` 对象\r\n */\r\nexport function toDate(any: Dateable, strict = false) {\r\n  const date = new Date(any)\r\n\r\n  if (strict && Number.isNaN(+date)) {\r\n    throw new RangeError('Invalid date value')\r\n  }\r\n\r\n  if (typeof any === 'string' && !any.includes(':')) {\r\n    date.setHours(0)\r\n    date.setMinutes(0)\r\n    date.setSeconds(0)\r\n  }\r\n\r\n  return date\r\n}\r\n\r\n/**\r\n * 将日期格式化成指定格式\r\n *\r\n * @param date 需要格式化的Date对象\r\n * @param pattern 格式化结构 年-y 月-M 日-d 时-H 分-m 秒-s 季度-q\r\n *\r\n * @returns 格式化后的字面值\r\n *\r\n * @example\r\n * ```ts\r\n * format(new Date(), 'yyyy-MM-dd')\r\n * ```\r\n *\r\n * @example\r\n * ```ts\r\n * format(Date.now(), 'yyyy-MM-dd\\'T\\'HH:mm:ss\\'Z\\'')\r\n * ```\r\n */\r\nexport function format(date: Dateable, pattern = 'yyyy-MM-dd HH:mm:ss') {\r\n  date = toDate(date)\r\n\r\n  const matches = pattern.match(formatRegExp)\r\n  const length = matches?.length\r\n\r\n  if (!length) {\r\n    return pattern\r\n  }\r\n\r\n  let i = 0\r\n  let result = ''\r\n\r\n  while (i < length) {\r\n    const substring = (matches as RegExpMatchArray)[i]\r\n    const firstCharacter = substring[0]\r\n    const formatter = formatters[firstCharacter]\r\n\r\n    if (formatter) {\r\n      result += formatter(date, substring)\r\n    } else {\r\n      result += substring\r\n    }\r\n\r\n    ++i\r\n  }\r\n\r\n  return result.replace(quotationRegExp, '$1')\r\n}\r\n\r\n/**\r\n * 获取日期的时间部分\r\n *\r\n * @param date 给定的日期\r\n *\r\n * @returns 日期的时间部分\r\n */\r\nexport function getTime(date: Dateable) {\r\n  date = toDate(date)\r\n\r\n  return `${doubleDigits(date.getHours())}:${doubleDigits(date.getMinutes())}:${doubleDigits(\r\n    date.getSeconds(),\r\n  )}`\r\n}\r\n\r\n/**\r\n * 获取日期所在的季度\r\n *\r\n * @param date 给定的日期\r\n *\r\n * @returns 日期所在的季度\r\n */\r\nexport function getQuarter(date: Dateable) {\r\n  date = toDate(date)\r\n\r\n  return Math.floor(date.getMonth() / 3) + 1\r\n}\r\n\r\nconst weeksForChinese = ['日', '一', '二', '三', '四', '五', '六']\r\n\r\n/**\r\n * 获取中文星期\r\n *\r\n * @param date 给定的日期\r\n *\r\n * @returns 中文星期\r\n */\r\nexport function getChineseWeek(date: Date) {\r\n  return weeksForChinese[date.getDay()]\r\n}\r\n\r\n/**\r\n * 为日期增减给定的毫秒\r\n *\r\n * @param date 原始日期\r\n * @param amount 增减的毫秒\r\n *\r\n * @returns 修改后的日期\r\n */\r\nexport function addMilliseconds(date: Dateable, amount: number) {\r\n  date = toDate(date)\r\n  date.setTime(date.getTime() + amount)\r\n\r\n  return date\r\n}\r\n\r\n/**\r\n * 为日期增减给定的秒\r\n *\r\n * @param date 原始日期\r\n * @param amount 增减的秒\r\n *\r\n * @returns 修改后的日期\r\n */\r\nexport function addSeconds(date: Dateable, amount: number) {\r\n  amount *= SECOND_ON_MILLISECONDS\r\n\r\n  return addMilliseconds(date, amount)\r\n}\r\n\r\n/**\r\n * 为日期增减给定的分钟\r\n *\r\n * @param date 原始日期\r\n * @param amount 增减的分钟\r\n *\r\n * @returns 修改后的日期\r\n */\r\nexport function addMinutes(date: Dateable, amount: number) {\r\n  amount *= MINUTE_ON_SECONDS\r\n\r\n  return addSeconds(date, amount)\r\n}\r\n\r\n/**\r\n * 为日期增减给定的小时\r\n *\r\n * @param date 原始日期\r\n * @param amount 增减的小时\r\n *\r\n * @returns 修改后的日期\r\n */\r\nexport function addHours(date: Dateable, amount: number) {\r\n  amount *= HOUR_ON_MINUTES\r\n\r\n  return addMinutes(date, amount)\r\n}\r\n\r\n/**\r\n * 为日期增减给定的半天数（12小时）\r\n *\r\n * @param date 原始日期\r\n * @param amount 增减的半天数\r\n *\r\n * @returns 修改后的日期\r\n */\r\nexport function addHalfDays(date: Dateable, amount: number) {\r\n  amount *= 12\r\n\r\n  return addHours(date, amount)\r\n}\r\n\r\n/**\r\n * 为日期增减给定的天数\r\n *\r\n * @param date 原始日期\r\n * @param amount 增减的天数\r\n *\r\n * @returns 修改后的日期\r\n */\r\nexport function addDays(date: Dateable, amount: number) {\r\n  date = toDate(date)\r\n  amount = ~~amount\r\n\r\n  date.setDate(date.getDate() + amount)\r\n\r\n  return date\r\n}\r\n\r\n/**\r\n * 为日期增减给定的周数\r\n *\r\n * @param date 原始日期\r\n * @param amount 增减的周数\r\n *\r\n * @returns 修改后的日期\r\n */\r\nexport function addWeeks(date: Dateable, amount: number) {\r\n  amount *= WEEK_ON_DAYS\r\n\r\n  return addDays(date, amount)\r\n}\r\n\r\n/**\r\n * 为日期增减给定的月数\r\n *\r\n * @param date 原始日期\r\n * @param amount 增减的月数\r\n *\r\n * @returns 修改后的日期\r\n */\r\nexport function addMonths(date: Dateable, amount: number) {\r\n  date = toDate(date)\r\n  amount = ~~amount\r\n\r\n  date.setMonth(date.getMonth() + amount)\r\n\r\n  return date\r\n}\r\n\r\n/**\r\n * 为日期增减给定的季度（3个月）\r\n *\r\n * @param date 原始日期\r\n * @param amount 增减的季度\r\n *\r\n * @returns 修改后的日期\r\n */\r\nexport function addQuarters(date: Dateable, amount: number) {\r\n  amount *= QUARTER_ON_MONTHS\r\n\r\n  return addMonths(date, amount)\r\n}\r\n\r\n/**\r\n * 为日期增减给定的年份\r\n *\r\n * @param date 原始日期\r\n * @param amount 增减的年份\r\n *\r\n * @returns 修改后的日期\r\n */\r\nexport function addYears(date: Dateable, amount: number) {\r\n  amount *= YEAR_ON_MONTHS\r\n\r\n  return addMonths(date, amount)\r\n}\r\n\r\n/**\r\n * 生成一个天数递进的日期数组\r\n *\r\n * @param start 开始日期\r\n * @param size range 的大小, 默认 42 (一般电子日历为 6 行 7 列)\r\n * @param step range 的跨幅\r\n *\r\n * @returns 生成的日期数组\r\n */\r\nexport function rangeDate(start: Dateable, size = 42, step = 1) {\r\n  start = toDate(start)\r\n\r\n  const dateRange: Date[] = []\r\n\r\n  for (let i = 0; i < size; ++i) {\r\n    dateRange.push(addDays(start, i * step))\r\n  }\r\n\r\n  return dateRange\r\n}\r\n\r\n/**\r\n * 生成一个月份递进的日期数组\r\n *\r\n * @param start 开始日期\r\n * @param size range 的大小, 默认 12 (一年)\r\n * @param step range 的跨幅\r\n *\r\n * @returns 生成的日期数组\r\n */\r\nexport function rangeMonth(start: Dateable, size = 12, step = 1) {\r\n  start = toDate(start)\r\n\r\n  const dateRange: Date[] = []\r\n\r\n  for (let i = 0; i < size; ++i) {\r\n    dateRange.push(addMonths(start, i * step))\r\n  }\r\n\r\n  return dateRange\r\n}\r\n\r\n/**\r\n * 根据给定的日期获取上一个周日\r\n *\r\n * @param date 原始日期\r\n *\r\n * @returns 上一个周日\r\n */\r\nexport function getLastSunday(date: Date) {\r\n  const day = date.getDay() ?? 7\r\n\r\n  return addDays(date, -day)\r\n}\r\n\r\n/**\r\n * 获取给定的日期所在秒的开始日期（毫秒归零）\r\n *\r\n * @param date 原始日期\r\n *\r\n * @returns 新的开始日期\r\n */\r\nexport function startOfSecond(date: Dateable) {\r\n  date = toDate(date)\r\n  date.setMilliseconds(0)\r\n\r\n  return date\r\n}\r\n\r\n/**\r\n * 获取给定的日期所在分钟的开始日期 (秒归零)\r\n *\r\n * @param date 原始日期\r\n *\r\n * @returns 新的开始日期\r\n */\r\nexport function startOfMinute(date: Dateable) {\r\n  date = toDate(date)\r\n  date.setSeconds(0, 0)\r\n\r\n  return date\r\n}\r\n\r\n/**\r\n * 获取给定的日期所在小时的开始日期 (分钟归零)\r\n *\r\n * @param date 原始日期\r\n *\r\n * @returns 新的开始日期\r\n */\r\nexport function startOfHour(date: Dateable) {\r\n  date = toDate(date)\r\n  date.setMinutes(0, 0, 0)\r\n\r\n  return date\r\n}\r\n\r\n/**\r\n * 获取给定的日期所在天的开始日期\r\n *\r\n * @param date 原始日期\r\n *\r\n * @returns 新的开始日期\r\n */\r\nexport function startOfDay(date: Dateable) {\r\n  date = toDate(date)\r\n  date.setHours(0, 0, 0, 0)\r\n\r\n  return date\r\n}\r\n\r\n/**\r\n * 获取给定日期所在天的结束日期\r\n *\r\n * @param date 原始日期\r\n *\r\n * @returns 新的开始日期\r\n */\r\nexport function endOfDay(date: Dateable) {\r\n  date = toDate(date)\r\n  date.setHours(23, 59, 59, 999)\r\n\r\n  return date\r\n}\r\n\r\n/**\r\n * 获取给定的日期所在周的第一天的开始日期\r\n *\r\n * @param date 需要解析的时间\r\n * @param startOn 设定周的第一天，默认为周日\r\n *\r\n * @returns 新的开始日期\r\n */\r\nexport function startOfWeek(date: Dateable, startOn = 0) {\r\n  startOn = startOn % 7\r\n\r\n  if (startOn < 0) {\r\n    startOn += 7\r\n  }\r\n\r\n  date = toDate(date)\r\n\r\n  const day = date.getDay()\r\n  const difference = (day < startOn ? 7 : 0) + day - startOn\r\n\r\n  date.setDate(date.getDate() - difference)\r\n  date.setHours(0, 0, 0, 0)\r\n\r\n  return date\r\n}\r\n\r\n/**\r\n * 判断给定的年份是否为闰年\r\n *\r\n * @param year 原始年份\r\n *\r\n * @returns 是否为闰年\r\n */\r\nexport function isLeapYear(year: number) {\r\n  return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0\r\n}\r\n\r\n/**\r\n * 获取给定年份和月份的最后一天\r\n *\r\n * @param year 原始年份\r\n * @param month 原始月份\r\n *\r\n * @returns 最后一天\r\n */\r\nexport function getLastDayOfMonth(year: number, month: number) {\r\n  let lastDay: number\r\n\r\n  if (month < 7) {\r\n    if (month !== 2) {\r\n      lastDay = 30 + (month % 2)\r\n    } else {\r\n      if (isLeapYear(year)) {\r\n        lastDay = 29\r\n      } else {\r\n        lastDay = 28\r\n      }\r\n    }\r\n  } else {\r\n    lastDay = 31 - (month % 2)\r\n  }\r\n\r\n  return lastDay\r\n}\r\n\r\n/**\r\n * 获取给定的日期所在月份的第一天的开始日期\r\n *\r\n * @param date 原始日期\r\n * @param startOn 设定一个月的第一天，默认为 1 号\r\n *\r\n * @returns 新的开始日期\r\n */\r\nexport function startOfMonth(date: Dateable, startOn = 1) {\r\n  date = toDate(date)\r\n\r\n  const year = date.getFullYear()\r\n  const month = date.getMonth() + 1\r\n  const day = date.getDate()\r\n\r\n  const lastDay = getLastDayOfMonth(year, month)\r\n\r\n  startOn = startOn % lastDay\r\n\r\n  if (startOn < 0) {\r\n    startOn += lastDay\r\n  }\r\n\r\n  if (day < startOn) {\r\n    date.setMonth(month - 1)\r\n  }\r\n\r\n  date.setDate(startOn)\r\n  date.setHours(0, 0, 0, 0)\r\n\r\n  return date\r\n}\r\n\r\n/**\r\n * 获取给定日期所在季度的第一天的开始日期\r\n *\r\n * @param date 原始日期\r\n *\r\n * @returns 新的开始日期\r\n */\r\nexport function startOfQuarter(date: Dateable) {\r\n  date = toDate(date)\r\n\r\n  const quarter = getQuarter(date)\r\n\r\n  date.setDate(1)\r\n  date.setHours(0, 0, 0, 0)\r\n  date.setMonth((quarter - 1) * 3)\r\n\r\n  return date\r\n}\r\n\r\n/**\r\n * 获取给定日期所在年份的第一天的开始日期\r\n *\r\n * @param date 原始日期\r\n * @param startOn 设定年的开始月份，默认为一月\r\n *\r\n * @returns 新的开始日期\r\n */\r\nexport function startOfYear(date: Dateable, startOn = 0) {\r\n  startOn = startOn % 11\r\n\r\n  if (startOn < 0) {\r\n    startOn += 11\r\n  }\r\n\r\n  date = toDate(date)\r\n\r\n  const month = date.getMonth()\r\n  const difference = (month < startOn ? 11 : 0) + month - startOn\r\n\r\n  date.setMonth(date.getMonth() - difference)\r\n  date.setDate(1)\r\n  date.setHours(0, 0, 0, 0)\r\n\r\n  return date\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的毫秒\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的毫秒数\r\n */\r\nexport function differenceMilliseconds(left: Dateable, right: Dateable) {\r\n  left = toDate(left)\r\n  right = toDate(right)\r\n\r\n  return right.getTime() - left.getTime()\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的秒\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的秒数\r\n */\r\nexport function differenceSeconds(left: Dateable, right: Dateable) {\r\n  const diff = differenceMilliseconds(left, right) / SECOND_ON_MILLS\r\n\r\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的分钟\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的分钟数\r\n */\r\nexport function differenceMinutes(left: Dateable, right: Dateable) {\r\n  const diff = differenceMilliseconds(left, right) / MINUTE_ON_MILLS\r\n\r\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的小时\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的小时数\r\n */\r\nexport function differenceHours(left: Dateable, right: Dateable) {\r\n  const diff = differenceMilliseconds(left, right) / HOUR_ON_MILLS\r\n\r\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的天数\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的天数\r\n */\r\nexport function differenceDays(left: Dateable, right: Dateable) {\r\n  left = startOfDay(left)\r\n  right = startOfDay(right)\r\n\r\n  return (right.getTime() - left.getTime()) / DAY_ON_MILLS\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的周\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n * @param weekStartOn 设定周的第一天，默认为周日\r\n *\r\n * @returns 相差的周数\r\n */\r\nexport function differenceWeeks(left: Dateable, right: Dateable, weekStartOn = 0) {\r\n  left = startOfWeek(left, weekStartOn)\r\n  right = startOfWeek(right, weekStartOn)\r\n\r\n  return (right.getTime() - left.getTime()) / WEEK_ON_MILLS\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的月\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的月份\r\n */\r\nexport function differenceMonths(left: Dateable, right: Dateable) {\r\n  left = toDate(left)\r\n  right = toDate(right)\r\n\r\n  const yearDiff = right.getFullYear() - left.getFullYear()\r\n  const monthDiff = right.getMonth() - left.getMonth()\r\n\r\n  return yearDiff * 12 + monthDiff\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的季度\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的季度\r\n */\r\nexport function differenceQuarters(left: Dateable, right: Dateable) {\r\n  left = toDate(left)\r\n  right = toDate(right)\r\n\r\n  const yearDiff = right.getFullYear() - left.getFullYear()\r\n  const quarterDiff = getQuarter(right) - getQuarter(left)\r\n\r\n  return yearDiff * 4 + quarterDiff\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的年份\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的年份\r\n */\r\nexport function differenceYears(left: Dateable, right: Dateable) {\r\n  left = toDate(left)\r\n  right = toDate(right)\r\n\r\n  return right.getFullYear() - left.getFullYear()\r\n}\r\n\r\n/**\r\n * 升序比较两个日期大小，用于给数组的 sort 方法使用\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 比较后的结果，`-1` 则左侧小，`1` 则右侧小，`0` 则相等\r\n */\r\nexport function compareAsc(left: Dateable, right: Dateable) {\r\n  left = toDate(left)\r\n  right = toDate(right)\r\n\r\n  const diff = left.getTime() - right.getTime()\r\n\r\n  return diff < 0 ? -1 : diff > 0 ? 1 : diff\r\n}\r\n\r\n/**\r\n * 降序比较两个日期大小，用于给数组的 sort 方法使用\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 比较后的结果，`1` 则左侧小，`-1` 则右侧小，`0` 则相等\r\n */\r\nexport function compareDesc(left: Dateable, right: Dateable) {\r\n  return -compareAsc(left, right)\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的完整秒\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的完整秒数\r\n */\r\nexport function differenceFullSeconds(left: Dateable, right: Dateable) {\r\n  left = startOfSecond(left)\r\n  right = startOfSecond(right)\r\n\r\n  return differenceSeconds(left, right)\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的完整分钟\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的完整分钟数\r\n */\r\nexport function differenceFullMinutes(left: Dateable, right: Dateable) {\r\n  left = startOfMinute(left)\r\n  right = startOfMinute(right)\r\n\r\n  return differenceMinutes(left, right)\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的完整小时\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的完整小时数\r\n */\r\nexport function differenceFullHours(left: Dateable, right: Dateable) {\r\n  left = startOfHour(left)\r\n  right = startOfHour(right)\r\n\r\n  return differenceHours(left, right)\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的完整天\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的完整天数\r\n */\r\nexport function differenceFullDays(left: Dateable, right: Dateable) {\r\n  const sign = compareDesc(left, right)\r\n  const difference = Math.abs(differenceDays(left, right))\r\n\r\n  left = toDate(left)\r\n  left.setDate(left.getDate() + sign * difference)\r\n\r\n  const isLastNotFull = compareDesc(left, right) === -sign\r\n\r\n  return sign * (difference - (isLastNotFull ? 1 : 0))\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的完整周\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的完整周数\r\n */\r\nexport function differenceFullWeeks(left: Dateable, right: Dateable) {\r\n  const diff = differenceFullDays(left, right) / WEEK_ON_DAYS\r\n\r\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的完整月\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的完整月份\r\n */\r\nexport function differenceFullMonths(left: Dateable, right: Dateable) {\r\n  const sign = compareDesc(left, right)\r\n  const difference = Math.abs(differenceMonths(left, right))\r\n\r\n  left = toDate(left)\r\n  left.setMonth(left.getMonth() + sign * difference)\r\n\r\n  const isLastNotFull = compareDesc(left, right) === -sign\r\n\r\n  return sign * (difference - (isLastNotFull ? 1 : 0))\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的完整季度\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的完整季度\r\n */\r\nexport function differenceFullQuarters(left: Dateable, right: Dateable) {\r\n  const diff = differenceFullMonths(left, right) / 3\r\n\r\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\r\n}\r\n\r\n/**\r\n * 比较两个日期相差的完整年份\r\n *\r\n * @param left 原始日期\r\n * @param right 原始日期\r\n *\r\n * @returns 相差的完整年份\r\n */\r\nexport function differenceFullYears(left: Dateable, right: Dateable) {\r\n  const sign = compareDesc(left, right)\r\n  const difference = Math.abs(differenceYears(left, right))\r\n\r\n  left = toDate(left)\r\n  left.setFullYear(left.getFullYear() + sign * difference)\r\n\r\n  const isLastNotFull = compareDesc(left, right) === -sign\r\n\r\n  return sign * (difference - (isLastNotFull ? 1 : 0))\r\n}\r\n","import { getType, noop } from './common'\r\n\r\nexport interface DeepCloneOptions {\r\n  /**\r\n   * 一个自定义的克隆对象方法，用于处理方法内置以外的对象克隆，如 Class 的实例\r\n   *\r\n   * @param type 对象的类型，注意格式为大驼峰\r\n   * @param obj 原始对象\r\n   *\r\n   * @returns 克隆后对象\r\n   */\r\n  cloneObject?: (type: string, obj: unknown) => any,\r\n}\r\n\r\n/**\r\n * 深度拷贝对象或数组\r\n *\r\n * @param obj 需要拷贝的对象或数组\r\n *\r\n * @returns 克隆后的对象\r\n */\r\nexport function deepClone<T>(obj: T, options: DeepCloneOptions = {}): T {\r\n  if (obj == null || typeof obj !== 'object') {\r\n    return obj\r\n  }\r\n\r\n  const { cloneObject = noop } = options\r\n  const temp = Object.create(null) as any\r\n\r\n  // 循环数组栈\r\n  const loopList: Array<{\r\n    parent: any,\r\n    prop: any,\r\n    data: any,\r\n  }> = [\r\n    {\r\n      parent: temp,\r\n      prop: 'root',\r\n      data: obj,\r\n    },\r\n  ]\r\n\r\n  const referenceMap = new WeakMap<any, any>()\r\n  const setProps: Array<{ parent: any, prop: any }> = []\r\n  const mapProps: Array<{ parent: any, prop: any }> = []\r\n\r\n  while (loopList.length) {\r\n    // 先入后出，深度优先\r\n    const { parent, prop, data } = loopList.pop()!\r\n\r\n    if (!parent) continue\r\n\r\n    const type = getType(data)\r\n\r\n    if (type === 'Date') {\r\n      parent[prop] = new Date(data as Date)\r\n      continue\r\n    }\r\n\r\n    if (type !== 'Array') {\r\n      const result = cloneObject(type, data)\r\n\r\n      if (result != null) {\r\n        parent[prop] = result\r\n        continue\r\n      }\r\n    }\r\n\r\n    // 初始化克隆对象\r\n    const cloned: any = (parent[prop] =\r\n      type === 'Array' || type === 'Set' || type === 'Map' ? [] : Object.create(null))\r\n\r\n    if (type === 'Set' || type === 'Map') {\r\n      let i = 0\r\n\r\n      if (type === 'Set') {\r\n        for (const item of data) {\r\n          if (referenceMap.has(item)) {\r\n            cloned[i] = referenceMap.get(item)!\r\n          } else if (item !== null && typeof item === 'object') {\r\n            loopList.push({\r\n              parent: cloned,\r\n              prop: i,\r\n              data: item,\r\n            })\r\n          } else {\r\n            cloned[i] = item\r\n          }\r\n\r\n          ++i\r\n        }\r\n\r\n        setProps.push({ parent, prop })\r\n      } else {\r\n        for (const entry of data) {\r\n          const clonedEntry = []\r\n          i = 0\r\n\r\n          for (const item of entry) {\r\n            if (referenceMap.has(item)) {\r\n              clonedEntry[i] = referenceMap.get(item)!\r\n            } else if (item !== null && typeof item === 'object') {\r\n              loopList.push({\r\n                parent: clonedEntry,\r\n                prop: i,\r\n                data: item,\r\n              })\r\n            } else {\r\n              clonedEntry[i] = item\r\n            }\r\n\r\n            ++i\r\n          }\r\n\r\n          cloned.push(clonedEntry)\r\n        }\r\n\r\n        mapProps.push({ parent, prop })\r\n      }\r\n    } else {\r\n      for (const key of Object.keys(data)) {\r\n        const item = data[key]\r\n\r\n        // 处理循环引用\r\n        if (referenceMap.has(item)) {\r\n          cloned[key] = referenceMap.get(item)!\r\n        } else if (item !== null && typeof item === 'object') {\r\n          loopList.push({\r\n            parent: cloned,\r\n            prop: key,\r\n            data: item,\r\n          })\r\n        } else {\r\n          cloned[key] = item\r\n        }\r\n      }\r\n    }\r\n\r\n    referenceMap.set(data, cloned)\r\n  }\r\n\r\n  for (const { parent, prop } of setProps) {\r\n    parent[prop] = new Set(parent[prop])\r\n  }\r\n\r\n  for (const { parent, prop } of mapProps) {\r\n    parent[prop] = new Map(parent[prop])\r\n  }\r\n\r\n  return temp.root\r\n}\r\n","const defaultMessage = 'This object was destroyed, do not use it anywhere'\r\nconst returnTrue = () => true\r\n\r\n/**\r\n * 将一个对象销毁，销毁后的对象所有方法不可用，属性值均为 `null`\r\n *\r\n * @param object 要销毁的对象\r\n * @param message 销毁后，调用方法时的错误信息\r\n */\r\nexport function destroyObject(object: any, message = defaultMessage) {\r\n  const throwDestroyed = () => {\r\n    throw new Error(message)\r\n  }\r\n\r\n  Object.keys(object).forEach(name => {\r\n    if (typeof object[name] === 'function') {\r\n      object[name] = throwDestroyed.bind(object)\r\n    } else {\r\n      object[name] = null\r\n    }\r\n  })\r\n\r\n  Object.getOwnPropertyNames(object.constructor.prototype).forEach(name => {\r\n    if (name !== 'constructor' && typeof object[name] === 'function') {\r\n      object[name] = throwDestroyed.bind(object)\r\n    }\r\n  })\r\n\r\n  object.isDestroyed = returnTrue\r\n}\r\n","import { isClient, isDefined } from './common'\r\n\r\n/**\r\n * 专用的类型，用于适配 Vexip UI 中 `transfer` 属性的处理\r\n */\r\nexport interface TransferNode extends Element {\r\n  __transferElement?: Element | null,\r\n}\r\n\r\nexport interface EventPayload extends EventInit {\r\n  /**\r\n   * 事件的类型\r\n   */\r\n  type: string,\r\n  [prop: string]: any,\r\n}\r\n\r\n/**\r\n * 当前是否可以使用触摸交互\r\n */\r\nexport const USE_TOUCH = isClient && ('ontouchstart' in window || getMaxTouchPoints() > 0)\r\n/**\r\n * 当前点击的类型，可以使用触摸交互时为 `pointerdown`，否则为 `click`\r\n */\r\nexport const CLICK_TYPE = USE_TOUCH ? 'pointerdown' : 'click'\r\n\r\nfunction getMaxTouchPoints() {\r\n  return typeof navigator !== 'undefined'\r\n    ? navigator.maxTouchPoints || ((navigator as any).msMaxTouchPoints as number) || 0\r\n    : 0\r\n}\r\n\r\n/**\r\n * 为指定的元素派发事件\r\n *\r\n * @param el 指定的元素\r\n * @param payload 事件的属性\r\n * @param Event 事件类\r\n *\r\n * @returns 事件是否派发成功\r\n */\r\nexport function dispatchEvent(el: Element, payload: EventPayload, Event = window.Event) {\r\n  const { type, bubbles = false, cancelable = false, ...data } = payload\r\n\r\n  if (!isDefined(type) || type === '') return false\r\n\r\n  let event\r\n\r\n  if (isDefined(Event)) {\r\n    event = new Event(type, { bubbles, cancelable })\r\n  } else {\r\n    event = document.createEvent('HTMLEvents')\r\n    event.initEvent(type, bubbles, cancelable)\r\n  }\r\n\r\n  Object.assign(event, data)\r\n\r\n  return el.dispatchEvent(event)\r\n}\r\n","import { isClient, isDefined } from './common'\r\nimport { isValidNumber, toNumber } from './number'\r\n\r\nimport type { TransferNode } from './dom-event'\r\n\r\nconst TABABLE_SELECTOR = [\r\n  'button',\r\n  '[href]:not(.disabled)',\r\n  'input',\r\n  'select',\r\n  'textarea',\r\n  '[tabindex]',\r\n  '[contenteditable]',\r\n]\r\n  .map(s => `${s}:not(:disabled):not([disabled])`)\r\n  .join(', ')\r\n\r\nfunction isElement(el?: Element | null): el is HTMLElement {\r\n  return !!el && el.nodeType === 1\r\n}\r\n\r\nfunction ensureElement(el?: Element | null) {\r\n  return isElement(el) ? el : document.body\r\n}\r\n\r\n/**\r\n * 检索匹配指定选择器的所有元素\r\n *\r\n * @param selector 选择器\r\n * @param root 根元素，不指定时为 `document.body`\r\n *\r\n * @returns 匹配的所有元素\r\n */\r\nexport function queryAll(selector: string, root?: Element | null) {\r\n  if (!isClient || !selector) return []\r\n\r\n  return Array.from(ensureElement(root).querySelectorAll(selector)) as HTMLElement[]\r\n}\r\n\r\n/**\r\n * 判断指定的元素是否聚焦或包含聚焦的元素\r\n *\r\n * @param el 需判断的元素\r\n *\r\n * @returns 是否聚焦或包含聚焦的元素\r\n */\r\nexport function isFocusIn(el?: Element | null) {\r\n  if (!isClient) return false\r\n\r\n  const activeEl = document.activeElement as HTMLElement\r\n\r\n  if (!isElement(el) || !activeEl) return false\r\n\r\n  return el === activeEl || contains(activeEl, el)\r\n}\r\n\r\n/**\r\n * 判断一个元素是否包含另一个元素\r\n *\r\n * @param el 被包含的元素（子元素）\r\n * @param parent 包含的元素（父元素）\r\n *\r\n * @returns 元素是否包含另一个元素\r\n */\r\nexport function contains(el?: Element | null, parent?: HTMLElement | null) {\r\n  if (!el || !parent) return false\r\n\r\n  const tel = (parent as TransferNode).__transferElement\r\n\r\n  return parent.contains(el) || (!!tel && (tel === el || tel.contains(el)))\r\n}\r\n\r\n/**\r\n * 判断指定的元素是否隐藏\r\n *\r\n * @param el 需判断的元素\r\n *\r\n * @returns 元素是否隐藏\r\n */\r\nexport function isHidden(el?: Element | null) {\r\n  if (!isClient || !isElement(el) || !el.parentNode || !contains(el, document.body)) {\r\n    return true\r\n  }\r\n\r\n  if (el.style.display === 'none') {\r\n    return true\r\n  }\r\n\r\n  const rect = el.getBoundingClientRect()\r\n\r\n  return !(rect && rect.width > 0 && rect.height > 0)\r\n}\r\n\r\n/**\r\n * 判断指定的元素是否可见\r\n *\r\n * @param el 需判断的元素\r\n *\r\n * @returns 元素是否可见\r\n */\r\nexport function isVisible(el?: Element | null) {\r\n  return !isHidden(el)\r\n}\r\n\r\n/**\r\n * 判断指定的元素是否被禁用\r\n *\r\n * @param el 需判断的元素\r\n *\r\n * @returns 元素是否被禁用\r\n */\r\nexport function isDisabled(el?: Element | null) {\r\n  return (\r\n    !isElement(el) ||\r\n    (el.hasAttribute('disabled') && el.getAttribute('disabled') !== 'false') ||\r\n    (el as HTMLInputElement).disabled\r\n  )\r\n}\r\n\r\n/**\r\n * 检索可以被切换焦点（Tab）的元素\r\n *\r\n * @param root 根元素，不指定时为 `document.body`\r\n * @param includeDisabled 是否包含被禁用的元素\r\n *\r\n * @returns 可以被切换焦点的元素\r\n */\r\nexport function queryTabables(root?: HTMLElement, includeDisabled = false) {\r\n  const isDis = includeDisabled ? () => false : isDisabled\r\n\r\n  return queryAll(TABABLE_SELECTOR, root).filter(\r\n    el => isVisible(el) && el.tabIndex > -1 && !isDis(el),\r\n  )\r\n}\r\n\r\n/**\r\n * 获取元素横向的内边距像素值\r\n *\r\n * @param el 指定的元素\r\n *\r\n * @returns 元素横向的内边距像素值\r\n */\r\nexport function getXPadding(el: HTMLElement | null) {\r\n  if (!isClient || !el) return 0\r\n\r\n  const computedStyle = getComputedStyle(el)\r\n  const padding = parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight)\r\n\r\n  return padding || 0\r\n}\r\n\r\n/**\r\n * 获取元素纵向的内边距像素值\r\n *\r\n * @param el 指定的元素\r\n *\r\n * @returns 元素纵向的内边距像素值\r\n */\r\nexport function getYPadding(el: HTMLElement | null) {\r\n  if (!isClient || !el) return 0\r\n\r\n  const computedStyle = getComputedStyle(el)\r\n  const padding = parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom)\r\n\r\n  return padding || 0\r\n}\r\n\r\n/**\r\n * 获取元素横向的外边距像素值\r\n *\r\n * @param el 指定的元素\r\n *\r\n * @returns 元素横向的外边距像素值\r\n */\r\nexport function getXMargin(el: HTMLElement | null) {\r\n  if (!isClient || !el) return 0\r\n\r\n  const computedStyle = getComputedStyle(el)\r\n  const margin = parseFloat(computedStyle.marginLeft) + parseFloat(computedStyle.marginRight)\r\n\r\n  return margin || 0\r\n}\r\n\r\n/**\r\n * 获取元素纵向的外边距像素值\r\n *\r\n * @param el 指定的元素\r\n *\r\n * @returns 元素纵向的外边距像素值\r\n */\r\nexport function getYMargin(el: HTMLElement | null) {\r\n  if (!isClient || !el) return 0\r\n\r\n  const computedStyle = getComputedStyle(el)\r\n  const margin = parseFloat(computedStyle.marginTop) + parseFloat(computedStyle.marginBottom)\r\n\r\n  return margin || 0\r\n}\r\n\r\n/**\r\n * 获取元素横向的边框像素值\r\n *\r\n * @param el 指定的元素\r\n *\r\n * @returns 元素横向的边框像素值\r\n */\r\nexport function getXBorder(el: HTMLElement | null) {\r\n  if (!isClient || !el) return 0\r\n\r\n  const computedStyle = getComputedStyle(el)\r\n  const width =\r\n    parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth)\r\n\r\n  return width || 0\r\n}\r\n\r\n/**\r\n * 获取元素纵向的边框像素值\r\n *\r\n * @param el 指定的元素\r\n *\r\n * @returns 元素纵向的边框像素值\r\n */\r\nexport function getYBorder(el: HTMLElement | null) {\r\n  if (!isClient || !el) return 0\r\n\r\n  const computedStyle = getComputedStyle(el)\r\n  const width =\r\n    parseFloat(computedStyle.borderTopWidth) + parseFloat(computedStyle.borderBottomWidth)\r\n\r\n  return width || 0\r\n}\r\n\r\n/**\r\n * 获取元素的选中宽度\r\n *\r\n * @param el 指定的元素\r\n *\r\n * @returns 元素的选中宽度\r\n */\r\nexport function getRangeWidth(el: HTMLElement | null) {\r\n  if (!isClient || !el) return 0\r\n\r\n  const range = document.createRange()\r\n\r\n  range.setStart(el, 0)\r\n  range.setEnd(el, el.childNodes.length)\r\n\r\n  const rangeWidth = range.getBoundingClientRect().width\r\n  const xPadding = getXPadding(el)\r\n\r\n  return rangeWidth + xPadding\r\n}\r\n\r\n/**\r\n * 给定的值如果为合法数字，则将转换为像素值\r\n *\r\n * @param value 需要判断的值\r\n *\r\n * @returns 转换后的像素值\r\n */\r\nexport function toCssSize(value: number | string) {\r\n  return isValidNumber(value, true) ? `${toNumber(value)}px` : String(value).trim()\r\n}\r\n\r\n/**\r\n * 将指定的值转换为 HTML 属性值\r\n *\r\n * @param value 需要转换的值\r\n *\r\n * @returns 转换后的 HTML 属性值\r\n */\r\nexport function toAttrValue(value?: boolean | null): 'true' | undefined\r\nexport function toAttrValue(value?: string | number | null): string | undefined\r\nexport function toAttrValue(value?: string | number | boolean | null) {\r\n  return isDefined(value) && value !== false ? String(value) : undefined\r\n}\r\n","export type EventType = number | string | symbol\r\nexport type EventHandler = (...payload: any[]) => void\r\nexport type EventHandlerSet = Set<EventHandler>\r\nexport type EventHandlerMap = Map<EventType, EventHandlerSet>\r\n\r\nexport interface EventEmitter {\r\n  /**\r\n   * 为指定的事件添加回调方法\r\n   *\r\n   * @param type 事件类型\r\n   * @param handler 回调方法\r\n   */\r\n  on: (type: EventType, handler: EventHandler) => void,\r\n  /**\r\n   * 为指定的事件移除回调方法\r\n   *\r\n   * @param type 事件类型\r\n   * @param handler 回调方法\r\n   */\r\n  off: (type: EventType, handler: EventHandler) => void,\r\n  /**\r\n   * 为指定的事件清除所有回调方法\r\n   *\r\n   * @param type 事件类型\r\n   */\r\n  clear: (type: EventType) => void,\r\n  /**\r\n   * 清除所有事件的所有回调方法\r\n   */\r\n  clearAll: () => void,\r\n  /**\r\n   * 派发特定的事件\r\n   *\r\n   * @param type 事件类型\r\n   * @param payload 传入事件回调方法的参数\r\n   */\r\n  emit: (type: EventType, ...payload: any[]) => void,\r\n}\r\n\r\n/**\r\n * 创建一个自定义的事件发射器\r\n *\r\n * @returns 事件发射器\r\n */\r\nexport function createEventEmitter() {\r\n  const handlerMap: EventHandlerMap = new Map()\r\n\r\n  return {\r\n    on(type, handler) {\r\n      const handlers = handlerMap.get(type)\r\n      const added = handlers?.add(handler)\r\n\r\n      if (!added) {\r\n        handlerMap.set(type, new Set([handler]))\r\n      }\r\n    },\r\n    off(type, handler) {\r\n      const handlers = handlerMap.get(type)\r\n\r\n      if (handlers) {\r\n        handlers.delete(handler)\r\n      }\r\n    },\r\n    clear(type) {\r\n      const handlers = handlerMap.get(type)\r\n\r\n      if (handlers) {\r\n        handlers.clear()\r\n      }\r\n    },\r\n    clearAll() {\r\n      handlerMap.clear()\r\n    },\r\n    emit(type, ...payload) {\r\n      const handlers = handlerMap.get(type)\r\n\r\n      if (handlers) {\r\n        handlers.forEach(handler => {\r\n          handler(...payload)\r\n        })\r\n      }\r\n    },\r\n  } as EventEmitter\r\n}\r\n","function logOnce(message: string, cache: Set<string>, logFn: (...data: any[]) => void) {\r\n  if (message && !cache.has(message)) {\r\n    logFn(message)\r\n    cache.add(message)\r\n  }\r\n}\r\n\r\nconst infoCache = new Set<string>()\r\n\r\n/**\r\n * 仅发出一次的提示消息\r\n *\r\n * @param message 消息内容\r\n * @param logFn 输出函数\r\n */\r\nexport function infoOnce(message: string, logFn = console.info) {\r\n  logOnce(message, infoCache, logFn)\r\n}\r\n\r\nconst warnCache = new Set<string>()\r\n\r\n/**\r\n * 仅发出一次的警告消息\r\n *\r\n * @param message 消息内容\r\n * @param logFn 输出函数\r\n */\r\nexport function warnOnce(message: string, logFn = console.warn) {\r\n  logOnce(message, warnCache, logFn)\r\n}\r\n\r\nconst errorCache = new Set<string>()\r\n\r\n/**\r\n * 仅发出一次的错误消息\r\n *\r\n * @param message 消息内容\r\n * @param logFn 输出函数\r\n */\r\nexport function errorOnce(message: string, logFn = console.warn) {\r\n  logOnce(message, errorCache, logFn)\r\n}\r\n","import { isClient, noop } from './common'\r\n\r\nexport const raf = isClient\r\n  ? requestAnimationFrame\r\n  : (cb: FrameRequestCallback) => {\r\n    setTimeout(cb, 16)\r\n  }\r\n\r\n/**\r\n * 将一个方法进行节流\r\n *\r\n * @param method 需要节流的方法，需自行绑定 this\r\n * @param interval 节流后的触发间隔，默认 16 ms (1 帧)\r\n *\r\n * @returns 节流后的方法\r\n */\r\nexport function throttle<T extends (...args: any[]) => any>(\r\n  method: T,\r\n  interval = 16,\r\n): (...args: Parameters<T>) => void {\r\n  if (typeof method !== 'function') {\r\n    return noop\r\n  }\r\n\r\n  const invoke = (...args: Parameters<T>) => {\r\n    method(...args)\r\n  }\r\n\r\n  if (interval <= 0) {\r\n    return debounceMinor(invoke)\r\n  }\r\n\r\n  let lastCall = 0\r\n  let timer: ReturnType<typeof setTimeout>\r\n\r\n  return function (...args: Parameters<T>) {\r\n    const current = Date.now()\r\n    const elapsed = current - lastCall\r\n\r\n    clearTimeout(timer)\r\n\r\n    if (elapsed >= interval) {\r\n      lastCall = current\r\n      invoke(...args)\r\n    } else {\r\n      timer = setTimeout(\r\n        () => {\r\n          lastCall = Date.now()\r\n          invoke(...args)\r\n        },\r\n        Math.max(0, interval - elapsed),\r\n      )\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * 将一个方法进行防抖\r\n *\r\n * @param method 需要防抖的方法，需自行绑定 this\r\n * @param delay 防抖的限制时间，默认 100ms\r\n *\r\n * @returns 防抖后的方法\r\n */\r\nexport function debounce<T extends (...args: any[]) => any>(\r\n  method: T,\r\n  delay = 100,\r\n): (...args: Parameters<T>) => void {\r\n  if (typeof method !== 'function') {\r\n    return noop\r\n  }\r\n\r\n  const invoke = (...args: Parameters<T>) => {\r\n    method(...args)\r\n  }\r\n\r\n  if (delay <= 0) {\r\n    return debounceMinor(invoke)\r\n  }\r\n\r\n  let timer: ReturnType<typeof setTimeout>\r\n\r\n  return function (...args: Parameters<T>) {\r\n    clearTimeout(timer)\r\n\r\n    timer = setTimeout(() => {\r\n      invoke(...args)\r\n    }, delay)\r\n  }\r\n}\r\n\r\n/**\r\n * 对给定的方法进行微任务级别的防抖\r\n *\r\n * @param method 需要防抖的方法，需自行绑定 this\r\n *\r\n * @returns 防抖后的方法\r\n */\r\nexport function debounceMinor<T extends (...args: any[]) => any>(method: T) {\r\n  if (typeof method !== 'function') {\r\n    return method\r\n  }\r\n\r\n  let called = false\r\n  let lastArgs: Parameters<T>\r\n  let promise: Promise<Awaited<ReturnType<T>>>\r\n\r\n  return function (...args: Parameters<T>) {\r\n    lastArgs = args\r\n\r\n    if (!called) {\r\n      called = true\r\n      promise = Promise.resolve().then(() => {\r\n        called = false\r\n        promise = undefined!\r\n\r\n        return method(...lastArgs)\r\n      })\r\n    }\r\n\r\n    return promise\r\n  }\r\n}\r\n\r\n/**\r\n * 对给定的方法进行渲染帧级别的防抖\r\n *\r\n * @param method 需要防抖的方法，需自行绑定 this\r\n *\r\n * @returns 防抖后的方法\r\n */\r\nexport function debounceFrame<T extends (...args: any[]) => any>(method: T) {\r\n  if (typeof method !== 'function') {\r\n    return method\r\n  }\r\n\r\n  let called = false\r\n  let lastArgs: Parameters<T>\r\n  let promise: Promise<Awaited<ReturnType<T>>>\r\n\r\n  return function (...args: Parameters<T>) {\r\n    lastArgs = args\r\n\r\n    if (!called) {\r\n      called = true\r\n      promise = new Promise(resolve =>\r\n        raf(() => {\r\n          called = false\r\n          promise = undefined!\r\n\r\n          resolve(method(...lastArgs))\r\n        }),\r\n      )\r\n    }\r\n\r\n    return promise\r\n  }\r\n}\r\n\r\nconst tickCallbacks = new Set<(...args: any[]) => any>()\r\nconst tickArgsMap = new WeakMap<any, any[]>()\r\n\r\nfunction flushTickCallbacks() {\r\n  tickCallbacks.forEach(fn => {\r\n    fn(...tickArgsMap.get(fn)!)\r\n  })\r\n  tickCallbacks.clear()\r\n}\r\n\r\n/**\r\n * 在下一微任务，仅执行一次传入的方法\r\n *\r\n * @param method 需要执行的方法\r\n * @param args 方法的额外参数，在方法调用前多次传入将会覆盖之前的参数\r\n */\r\nexport function nextTickOnce<T extends (...args: any[]) => any>(method: T, ...args: any[]) {\r\n  if (typeof method !== 'function') {\r\n    return method\r\n  }\r\n\r\n  tickArgsMap.set(method, args)\r\n\r\n  if (tickCallbacks.has(method)) {\r\n    return\r\n  }\r\n\r\n  tickCallbacks.add(method)\r\n\r\n  if (tickCallbacks.size === 1) {\r\n    Promise.resolve().then(flushTickCallbacks)\r\n  }\r\n}\r\n\r\nconst frameCallbacks = new Set<(...args: any[]) => any>()\r\nconst frameArgsMap = new WeakMap<any, any[]>()\r\n\r\nfunction flushFrameCallbacks() {\r\n  frameCallbacks.forEach(fn => {\r\n    fn(...frameArgsMap.get(fn)!)\r\n  })\r\n  frameCallbacks.clear()\r\n}\r\n\r\n/**\r\n * 在下一渲染帧，仅执行一次传入的方法\r\n *\r\n * @param method 需要执行的方法\r\n * @param args 方法的额外参数，在方法调用前多次传入将会覆盖之前的参数\r\n */\r\nexport function nextFrameOnce<T extends (...args: any[]) => any>(method: T, ...args: any[]) {\r\n  if (typeof method !== 'function') {\r\n    return method\r\n  }\r\n\r\n  frameArgsMap.set(method, args)\r\n\r\n  if (frameCallbacks.has(method)) {\r\n    return\r\n  }\r\n\r\n  frameCallbacks.add(method)\r\n\r\n  if (frameCallbacks.size === 1) {\r\n    raf(flushFrameCallbacks)\r\n  }\r\n}\r\n\r\n/**\r\n * 按指定的并发数，并行地为系列源数据执行操作\r\n *\r\n * @param maxConcurrency 最大的并发数\r\n * @param source 源数据\r\n * @param iteratorFn 处理操作的异步函数\r\n *\r\n * @returns 等待所有任务执行完的 Promise 对象\r\n */\r\nexport async function runParallel<T>(\r\n  maxConcurrency: number,\r\n  source: T[],\r\n  iteratorFn: (item: T, source: T[]) => Promise<any>,\r\n) {\r\n  const ret: Array<Promise<any>> = []\r\n  const executing: Array<Promise<any>> = []\r\n\r\n  for (const item of source) {\r\n    const p = Promise.resolve().then(() => iteratorFn(item, source))\r\n\r\n    ret.push(p)\r\n\r\n    if (maxConcurrency <= source.length) {\r\n      const e: Promise<any> = p.then(() => executing.splice(executing.indexOf(e), 1))\r\n\r\n      executing.push(e)\r\n\r\n      if (executing.length >= maxConcurrency) {\r\n        await Promise.race(executing)\r\n      }\r\n    }\r\n  }\r\n\r\n  return Promise.all(ret)\r\n}\r\n","import { isClient } from './common'\r\n\r\nlet flexGapSupported: boolean | null = null\r\n\r\n/**\r\n * 判断当前的环境是否支持 CSS 样式：`gap`、`row-gap` 和 `column-gap`\r\n *\r\n * @returns 是否支持\r\n */\r\nexport function supportFlexGap() {\r\n  if (!isClient) {\r\n    return true\r\n  }\r\n\r\n  if (flexGapSupported === null) {\r\n    const flex = document.createElement('div')\r\n\r\n    flex.style.display = 'flex'\r\n    flex.style.flexDirection = 'column'\r\n    flex.style.rowGap = '1px'\r\n\r\n    flex.appendChild(document.createElement('div'))\r\n    flex.appendChild(document.createElement('div'))\r\n    document.body.appendChild(flex)\r\n\r\n    flexGapSupported = flex.scrollHeight === 1\r\n\r\n    document.body.removeChild(flex)\r\n  }\r\n\r\n  return flexGapSupported\r\n}\r\n\r\nlet imgLoadingSupported: boolean | null = null\r\n\r\n/**\r\n * 判断当前环境是否支持 `<img>` 标签的 `loading` 属性\r\n *\r\n * @returns 是否支持\r\n */\r\nexport function supportImgLoading() {\r\n  if (!isClient) {\r\n    return false\r\n  }\r\n\r\n  if (imgLoadingSupported === null) {\r\n    imgLoadingSupported = 'loading' in document.createElement('img')\r\n  }\r\n\r\n  return imgLoadingSupported\r\n}\r\n","import { isDefined, isFunction, isIterable, isObject, toTrue } from './common'\r\nimport { deepClone } from './deep-clone'\r\nimport { raf } from './performance'\r\n\r\n/**\r\n * 如果一个值不为数组，则将其转换为数组\r\n *\r\n * @param value 指定的值\r\n *\r\n * @returns 原始数组或转换后的数组\r\n */\r\nexport function ensureArray<T>(value: T | T[]) {\r\n  return Array.isArray(value) ? value : [value]\r\n}\r\n\r\n/**\r\n * 如果一个值为函数，则执行它并返回结果，否则返回其本身\r\n *\r\n * @param value 指定的值\r\n * @param args 若为函数时，传入的参数\r\n *\r\n * @returns 原始值或函数执行结果\r\n */\r\nexport function callIfFunc<T, P extends any[] = any[]>(value: T | ((...args: P) => T), ...args: P) {\r\n  return isFunction(value) ? value(...args) : value\r\n}\r\n\r\n/**\r\n * 将路径中的 `\\` 替换为 `/`\r\n *\r\n * @param path 指定的路径\r\n *\r\n * @returns 替换后的路径\r\n */\r\nexport function normalizePath(path: string) {\r\n  return path.replace(/[\\\\/]+/g, '/')\r\n}\r\n\r\n/**\r\n * 获取字符串的最后一个字符\r\n *\r\n * @param value 指定的字符串\r\n *\r\n * @returns 最后一个字符\r\n */\r\nexport function getLast(value: string): string | undefined\r\n/**\r\n * 获取数组的最后一个元素\r\n *\r\n * @param value 指定的数组\r\n *\r\n * @returns 最后一个元素\r\n */\r\nexport function getLast<T>(value: T[]): T | undefined\r\nexport function getLast(value: string | any[]) {\r\n  return value[value.length - 1]\r\n}\r\n\r\ntype RecordKey = string | number | symbol\r\n\r\nconst defaultAccessor = (v: unknown) => v\r\n\r\nexport function listToMap<T = any, K extends keyof T = keyof T>(\r\n  list: T[],\r\n  prop: K,\r\n  useMap?: false,\r\n): Record<T[K] extends RecordKey ? T[K] : RecordKey, T>\r\nexport function listToMap<T = any, O = T, K extends keyof T = keyof T>(\r\n  list: T[],\r\n  prop: K,\r\n  accessor?: (item: T) => O,\r\n  useMap?: false,\r\n): Record<T[K] extends RecordKey ? T[K] : RecordKey, O>\r\nexport function listToMap<T = any, K = RecordKey>(\r\n  list: T[],\r\n  prop: (item: T) => K,\r\n  useMap?: false,\r\n): Record<K extends RecordKey ? K : RecordKey, T>\r\nexport function listToMap<T = any, O = T, K = RecordKey>(\r\n  list: T[],\r\n  prop: (item: T) => K,\r\n  accessor?: (item: T) => O,\r\n  useMap?: false,\r\n): Record<K extends RecordKey ? K : RecordKey, O>\r\nexport function listToMap<T = any, K extends keyof T = keyof T>(\r\n  list: T[],\r\n  prop: K,\r\n  useMap?: true,\r\n): Map<T[K], T>\r\nexport function listToMap<T = any, O = T, K extends keyof T = keyof T>(\r\n  list: T[],\r\n  prop: K,\r\n  accessor?: (item: T) => O,\r\n  useMap?: true,\r\n): Map<T[K], O>\r\nexport function listToMap<T = any, K = any>(\r\n  list: T[],\r\n  prop: (item: T) => K,\r\n  useMap?: true,\r\n): Map<K, T>\r\nexport function listToMap<T = any, O = T, K = any>(\r\n  list: T[],\r\n  prop: (item: T) => K,\r\n  accessor?: (item: T) => O,\r\n  useMap?: true,\r\n): Map<K, O>\r\n/**\r\n * 根据数组元素中某个或多个属性的值转换为映射对象\r\n *\r\n * @param list 需要被转换的数组\r\n * @param prop 需要被转换的属性或提供一个读取方法\r\n * @param accessor 映射的值的读取方法，默认返回元素本身\r\n * @param useMap 是否使用 Map 对象储存结果\r\n *\r\n * @returns 转换后的映射对象\r\n */\r\nexport function listToMap<T = any, O = T>(\r\n  list: T[],\r\n  prop: keyof T | ((item: T) => any),\r\n  accessor?: boolean | ((item: T) => O),\r\n  useMap?: boolean,\r\n) {\r\n  let normalizeAccessor: (item: T) => O\r\n\r\n  if (typeof accessor !== 'function' && useMap === undefined) {\r\n    useMap = !!accessor\r\n    normalizeAccessor = defaultAccessor as any\r\n  } else {\r\n    normalizeAccessor = typeof accessor === 'function' ? accessor : (defaultAccessor as any)\r\n  }\r\n\r\n  const map = (useMap ? new Map<string, any>() : {}) as any\r\n\r\n  if (!isDefined(prop)) return map\r\n\r\n  const set = useMap\r\n    ? (key: any, value: O) => map.set(key, value)\r\n    : (key: any, value: O) => (map[key] = value)\r\n  const propAccessor = isFunction(prop) ? prop : (item: T) => item[prop]\r\n\r\n  list.forEach(item => {\r\n    if (!isDefined(item)) return\r\n\r\n    const key = propAccessor(item)\r\n\r\n    if (isDefined(key)) {\r\n      set(key, normalizeAccessor(item))\r\n    }\r\n  })\r\n\r\n  return map\r\n}\r\n\r\nexport {\r\n  /** @deprecated please use listToMap to replace it */\r\n  listToMap as transformListToMap,\r\n}\r\n\r\n/**\r\n * 移除数组中的某个元素\r\n *\r\n * @param array 需要被移除元素的数组\r\n * @param item 需要被移除的元素, 或一个查找方法，如果元素为函数时则需要做一层简单包装\r\n * @param isFn 标记数组的元素是否为函数\r\n *\r\n * @returns 被移除的元素\r\n */\r\nexport function removeArrayItem<T = any>(\r\n  array: T[],\r\n  item: T | ((item: T) => boolean),\r\n  isFn = false,\r\n): T | null {\r\n  let index = -1\r\n\r\n  if (isFn || typeof item !== 'function') {\r\n    index = array.findIndex(current => current === item)\r\n  } else {\r\n    index = array.findIndex(item as (item: T) => boolean)\r\n  }\r\n\r\n  if (~index) {\r\n    return array.splice(index, 1)[0]\r\n  }\r\n\r\n  return null\r\n}\r\n\r\n/**\r\n * 按照一定顺序的属性对数据进行分组\r\n *\r\n * @param list 需要分数的数据\r\n * @param props 需要按顺序分组的属性\r\n *\r\n * @returns 分组后的对象\r\n */\r\nexport function groupByProps<T = any>(\r\n  list: T[],\r\n  props: Array<string | ((item: T) => any)> | string | ((item: T) => any) = [],\r\n): Record<string, T[]> {\r\n  if (typeof props === 'string' || typeof props === 'function') {\r\n    props = [props]\r\n  }\r\n\r\n  const propCount = props.length\r\n  const zipData: Record<string, any> = {}\r\n\r\n  for (const item of list) {\r\n    let data\r\n\r\n    for (let i = 0; i < propCount; ++i) {\r\n      const isLast = i === propCount - 1\r\n      const prop = props[i]\r\n      const value = typeof prop === 'function' ? prop(item) : item[prop as keyof T]\r\n\r\n      if (!data) {\r\n        if (!zipData[value]) {\r\n          zipData[value] = isLast ? [] : {}\r\n        }\r\n\r\n        data = zipData[value]\r\n      } else {\r\n        if (!data[value]) {\r\n          data[value] = isLast ? [] : {}\r\n        }\r\n\r\n        data = data[value]\r\n      }\r\n    }\r\n\r\n    data.push(item)\r\n  }\r\n\r\n  return zipData\r\n}\r\n\r\nexport interface TreeOptions<T = string> {\r\n  keyField?: T,\r\n  childField?: T,\r\n  parentField?: T,\r\n  /** 若指定，`parent` 值等于 `rootId` 的节点被认为是顶级节点 */\r\n  rootId?: any,\r\n}\r\n\r\n/**\r\n * 将一个展平的列表转换为树\r\n *\r\n * @param list 要转换的列表\r\n * @param options 转换的配置项\r\n *\r\n * @returns 转换后的树\r\n */\r\nexport function transformTree<T = any>(list: T[], options: TreeOptions<keyof T> = {}) {\r\n  const {\r\n    keyField = 'id' as keyof T,\r\n    childField = 'children' as keyof T,\r\n    parentField = 'parent' as keyof T,\r\n    rootId = null,\r\n  } = options\r\n\r\n  const hasRootId = isDefined(rootId) && rootId !== ''\r\n  const tree: T[] = []\r\n  const record = new Map<T[keyof T], T[]>()\r\n\r\n  for (let i = 0, len = list.length; i < len; ++i) {\r\n    const item = list[i]\r\n    const id = item[keyField]\r\n\r\n    if (hasRootId ? id === rootId : !isDefined(id)) {\r\n      continue\r\n    }\r\n\r\n    if (record.has(id)) {\r\n      ;(item as any)[childField] = record.get(id)!\r\n    } else {\r\n      ;(item as any)[childField] = []\r\n      record.set(id, (item as any)[childField])\r\n    }\r\n\r\n    if (item[parentField] && (!hasRootId || item[parentField] !== rootId)) {\r\n      const parentId = item[parentField]\r\n\r\n      if (!record.has(parentId)) {\r\n        record.set(parentId, [])\r\n      }\r\n\r\n      record.get(parentId)!.push(item)\r\n    } else {\r\n      tree.push(item)\r\n    }\r\n  }\r\n\r\n  return tree\r\n}\r\n\r\nexport { transformTree as buildTree }\r\n\r\n/**\r\n * 将一个树展平成列表\r\n *\r\n * @param tree 要展平的树\r\n * @param options 转换的配置项\r\n *\r\n * @returns 展平后的列表\r\n */\r\nexport function flatTree<T = any>(\r\n  tree: T[],\r\n  options: TreeOptions<keyof T> & {\r\n    /** 是否为深度优先遍历 */\r\n    depthFirst?: boolean,\r\n    /**\r\n     * 是否为无 ID 的节点插入 ID 值\r\n     *\r\n     * @default true\r\n     */\r\n    injectId?: boolean,\r\n    /** 构建节点的 ID 的方法 */\r\n    buildId?: (index: number) => any,\r\n    /** 过滤节点的方法 */\r\n    filter?: (item: T) => boolean,\r\n    /** 过滤的结果是否会影响其子级 */\r\n    cascaded?: boolean,\r\n    /** 是否强制为节点插入 ID 值 */\r\n    forceInject?: boolean,\r\n  } = {},\r\n) {\r\n  const {\r\n    keyField = 'id' as keyof T,\r\n    childField = 'children' as keyof T,\r\n    parentField = 'parent' as keyof T,\r\n    rootId = null,\r\n    depthFirst = false,\r\n    injectId = true,\r\n    buildId = i => i,\r\n    filter = toTrue,\r\n    cascaded = false,\r\n    forceInject = false,\r\n  } = options\r\n\r\n  let idCount = 1\r\n\r\n  const hasRootId = isDefined(rootId) && rootId !== ''\r\n  const list: T[] = []\r\n  const loop = [...tree]\r\n\r\n  while (loop.length) {\r\n    const item = loop.shift()!\r\n\r\n    const childrenValue = item[childField]\r\n    const children: T[] = Array.isArray(childrenValue) && childrenValue.length ? childrenValue : []\r\n\r\n    if (injectId && (forceInject || !item[keyField])) {\r\n      item[keyField] = buildId(idCount++)\r\n    }\r\n\r\n    const id = item[keyField]\r\n\r\n    if (\r\n      injectId &&\r\n      parentField &&\r\n      (hasRootId ? item[parentField] === rootId : !item[parentField])\r\n    ) {\r\n      ;(item as any)[parentField] = rootId\r\n    }\r\n\r\n    const filterResult = filter(item)\r\n\r\n    if (filterResult) list.push(item)\r\n\r\n    if (filterResult || !cascaded) {\r\n      for (let i = 0, len = children.length; i < len; ++i) {\r\n        const child = children[i]\r\n\r\n        if (injectId && parentField) {\r\n          child[parentField] = id\r\n        }\r\n\r\n        !depthFirst && loop.push(child)\r\n      }\r\n\r\n      if (depthFirst) {\r\n        loop.unshift(...children)\r\n      }\r\n    }\r\n  }\r\n\r\n  return list\r\n}\r\n\r\n/**\r\n * 遍历树并为每个节点执行回调方法\r\n *\r\n * @param tree 要遍历的树\r\n * @param cb 回调函数\r\n * @param options 遍历的配置项\r\n */\r\nexport function walkTree<T = any>(\r\n  tree: T[],\r\n  cb: (item: T, depth: number, parent: T | null) => void,\r\n  options: {\r\n    /** 是否为深度优先遍历 */\r\n    depthFirst?: boolean,\r\n    childField?: keyof T,\r\n  } = {},\r\n) {\r\n  const { childField = 'children' as keyof T, depthFirst = false } = options\r\n  const loop = [...tree.map(item => ({ item, depth: 0, parent: null as T | null }))]\r\n\r\n  while (loop.length) {\r\n    const { item, depth, parent } = loop.shift()!\r\n    const children = item[childField] as T[]\r\n\r\n    cb(item, depth, parent)\r\n\r\n    if (isIterable(children)) {\r\n      loop[depthFirst ? 'unshift' : 'push'](\r\n        ...Array.from(children).map(child => ({ item: child, depth: depth + 1, parent: item })),\r\n      )\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * 遍历树并为每个节点执行回调方法，并用其返回值构建一颗新的树\r\n *\r\n * @param tree 要遍历的树\r\n * @param cb 回调函数\r\n * @param options 遍历的配置项\r\n *\r\n * @returns 构建后新的树\r\n */\r\nexport function mapTree<T = any, R = any>(\r\n  tree: T[],\r\n  cb: (item: T, depth: number, parent: T | null) => R,\r\n  options: {\r\n    /** 是否为深度优先遍历 */\r\n    depthFirst?: boolean,\r\n    childField?: keyof T,\r\n    /** 是否强制重置 `children` 字段 */\r\n    clearChildren?: boolean,\r\n  } = {},\r\n) {\r\n  const { childField = 'children' as keyof T, depthFirst = false, clearChildren = true } = options\r\n  const result: R[] = []\r\n  const loop = [...tree.map(item => ({ item, depth: 0, parent: null as T | null, result }))]\r\n\r\n  while (loop.length) {\r\n    const { item, depth, parent, result } = loop.shift()!\r\n    const children = item[childField] as T[]\r\n    const newItem = cb(item, depth, parent) ?? ({} as any)\r\n\r\n    if (clearChildren) {\r\n      newItem[childField] = []\r\n    }\r\n\r\n    result.push(newItem)\r\n\r\n    if (isIterable(children)) {\r\n      const items = Array.from(children)\r\n\r\n      if (items.length) {\r\n        newItem[childField] = []\r\n        loop[depthFirst ? 'unshift' : 'push'](\r\n          ...Array.from(children).map(child => ({\r\n            item: child,\r\n            depth: depth + 1,\r\n            parent: item,\r\n            result: newItem[childField],\r\n          })),\r\n        )\r\n      }\r\n    }\r\n  }\r\n\r\n  return result\r\n}\r\n\r\n/**\r\n * 遍历树并为每个节点执行过滤方法，并用符合条件的节点构建一棵新的树\r\n *\r\n * @param tree 要遍历的树\r\n * @param cb 过滤的方法\r\n * @param options 遍历的配置项\r\n *\r\n * @returns 过滤后新的树\r\n */\r\nexport function filterTree<T = any>(\r\n  tree: T[],\r\n  cb: (item: T, depth: number, parent: T | null) => boolean,\r\n  options: {\r\n    /** 判断一个节点是否为叶子节点 */\r\n    isLeaf?: (item: T) => boolean,\r\n    /** 是否只对叶子节点进行过滤 */\r\n    leafOnly?: boolean,\r\n    childField?: keyof T,\r\n  } = {},\r\n) {\r\n  const {\r\n    childField = 'children' as keyof T,\r\n    leafOnly = false,\r\n    isLeaf = item => !isIterable(item[childField]),\r\n  } = options\r\n\r\n  const filter = (data: T[], depth: number, parent: T | null): T[] => {\r\n    return data\r\n      .map(item => ({ ...item }))\r\n      .filter(item => {\r\n        const children = item[childField] as T[]\r\n        const leaf = isLeaf(item)\r\n        const items = isIterable(children) && Array.from(children)\r\n\r\n        if (leafOnly && !leaf) {\r\n          if (items && items.length) {\r\n            const matched = filter(items, depth + 1, item)\r\n            item[childField] = matched as any\r\n\r\n            return !!matched.length\r\n          }\r\n\r\n          return false\r\n        }\r\n\r\n        const result = cb(item, depth, parent)\r\n\r\n        if (leaf) return result\r\n        if (!leafOnly && result) return true\r\n\r\n        if (items && items.length) {\r\n          const matched = filter(items, depth + 1, item)\r\n          item[childField] = matched as any\r\n\r\n          return !!matched.length\r\n        }\r\n\r\n        return result\r\n      })\r\n  }\r\n\r\n  return filter(tree, 0, null)\r\n}\r\n\r\nexport interface SortOptions<T = string> {\r\n  /** 属性名 */\r\n  key: T,\r\n  /** 排序方法 */\r\n  method?: (prev: any, next: any) => number,\r\n  /** 读取方法 */\r\n  accessor?: (...args: any[]) => any,\r\n  /** 升降序 */\r\n  type?: 'asc' | 'desc',\r\n  /** 传入读取器的额外参数 */\r\n  params?: any[],\r\n}\r\n\r\nconst defaultSortMethod = (prev: any, next: any) => {\r\n  if (Number.isNaN(Number(prev) - Number(next))) {\r\n    return String(prev).localeCompare(next)\r\n  }\r\n\r\n  return prev - next\r\n}\r\n\r\n/**\r\n * 根据依赖的属性对数组逐层排序\r\n *\r\n * @param list 需要排序的数组\r\n * @param props 排序依赖的属性\r\n *\r\n * @returns 排序后的数组\r\n */\r\nexport function sortByProps<T = any>(\r\n  list: T[],\r\n  props: keyof T | SortOptions<keyof T> | (keyof T | SortOptions<keyof T>)[],\r\n) {\r\n  if (\r\n    !list.sort ||\r\n    (isObject<SortOptions>(props) && !props.key) ||\r\n    !(props as string | SortOptions[]).length\r\n  ) {\r\n    return list\r\n  }\r\n\r\n  const sortedList = Array.from(list)\r\n\r\n  if (!Array.isArray(props)) {\r\n    props = [props]\r\n  }\r\n\r\n  const formattedProps = props\r\n    .map(\r\n      value =>\r\n        (typeof value === 'string'\r\n          ? {\r\n            key: value,\r\n            method: defaultSortMethod,\r\n            type: 'asc',\r\n          }\r\n          : value) as SortOptions<keyof T>,\r\n    )\r\n    .map(value => {\r\n      if (typeof value.accessor !== 'function') {\r\n        value.accessor = (data: T) => data[value.key]\r\n      }\r\n\r\n      if (typeof value.method !== 'function') {\r\n        value.method = defaultSortMethod\r\n      }\r\n\r\n      value.params = Array.isArray(value.params) ? value.params : []\r\n\r\n      return value as Required<SortOptions>\r\n    })\r\n\r\n  sortedList.sort((prev, next) => {\r\n    let lastResult = 0\r\n\r\n    for (const prop of formattedProps) {\r\n      const { method, type, accessor, params } = prop\r\n      const desc = type === 'desc'\r\n      const result = method(accessor(prev, ...params), accessor(next, ...params))\r\n\r\n      lastResult = desc ? -result : result\r\n      // 若不为0则无需进行下一层排序\r\n      if (lastResult) break\r\n    }\r\n\r\n    return lastResult\r\n  })\r\n\r\n  return sortedList\r\n}\r\n\r\n/**\r\n * 将两个对象进行深度的动态合并\r\n *\r\n * @param sourceObj 用于接收合并的源对象\r\n * @param targetObj 被合并的对象，当属性名相同但值类型不同的情况，此对象的权重更高\r\n * @param isNewObj 标记合并至一个全新的对象（深度的）\r\n *\r\n * @returns 合并后的对象\r\n */\r\nexport function mergeObjects<T extends Record<string, any>, U extends Record<string, any>>(\r\n  sourceObj: T,\r\n  targetObj: U,\r\n  isNewObj = true,\r\n) {\r\n  sourceObj = isNewObj ? deepClone(sourceObj) : sourceObj\r\n\r\n  const loop: Array<{\r\n    source: Record<string, any>,\r\n    target: Record<string, any>,\r\n  }> = [\r\n    {\r\n      source: sourceObj,\r\n      target: targetObj,\r\n    },\r\n  ]\r\n\r\n  while (loop.length) {\r\n    const { source, target } = loop.pop()!\r\n\r\n    Object.keys(target).forEach(key => {\r\n      if (isObject(target[key])) {\r\n        if (!isObject(source[key])) {\r\n          source[key] = Object.create(null)\r\n        }\r\n\r\n        loop.push({\r\n          source: source[key],\r\n          target: target[key],\r\n        })\r\n      } else if (Array.isArray(target[key])) {\r\n        if (!Array.isArray(source[key])) {\r\n          source[key] = []\r\n        }\r\n\r\n        loop.push({\r\n          source: source[key],\r\n          target: target[key],\r\n        })\r\n      } else {\r\n        source[key] = target[key]\r\n      }\r\n    })\r\n  }\r\n\r\n  return sourceObj as T & U\r\n}\r\n\r\n/**\r\n * 将一个任务队列按每帧一次依次指定，返回一个触发取消的方法\r\n *\r\n * @param queue 任务队列\r\n *\r\n * @returns 终止队列执行的方法\r\n */\r\nexport function runQueueFrame(queue: Array<() => void>) {\r\n  queue = Array.from(queue)\r\n\r\n  let cancelled = false\r\n\r\n  const run = () => {\r\n    if (cancelled) return\r\n\r\n    queue.shift()?.()\r\n    queue.length && raf(run)\r\n  }\r\n\r\n  run()\r\n\r\n  return () => (cancelled = true)\r\n}\r\n","/**\r\n * 将给定的常量字符串类型拓展为不区分大小写的任意组合\r\n */\r\nexport type AnyCase<S> = string extends S\r\n  ? string\r\n  : S extends `${infer F1}${infer F2}${infer R}`\r\n    ? `${Uppercase<F1> | Lowercase<F1>}${Uppercase<F2> | Lowercase<F2>}${AnyCase<R>}`\r\n    : S extends `${infer F}${infer R}`\r\n      ? `${Uppercase<F> | Lowercase<F>}${AnyCase<R>}`\r\n      : ''\r\n\r\nfunction allCapital(value: string) {\r\n  const matched = value.match(/[A-Z]+/)\r\n\r\n  return matched && matched[0] === value\r\n}\r\n\r\n// const kebabRE = /\\B([A-Z])/g\r\nconst kebabRE = /\\B([A-Z])(?=[^A-Z_-])/g\r\n\r\n/**\r\n * 将字面值转换为短横线连接\r\n *\r\n * @param value 需要转换的字面值\r\n *\r\n * @returns 转换后的短横线连接字面值\r\n *\r\n * @example\r\n * ```ts\r\n * toKebabCase('AaBbCc') // aa-bb-cc\r\n * toKebabCase('AABb') // aa-bb\r\n * toKebabCase('AAA') // aaa\r\n * toKebabCase('AaBb CcDd') // aa-bb cc-dd\r\n * ```\r\n */\r\nexport function toKebabCase(value: string) {\r\n  // if (allCapital(value)) {\r\n  //   return value.toLocaleLowerCase()\r\n  // }\r\n\r\n  return value.replace(kebabRE, '-$1').toLowerCase()\r\n}\r\n\r\n/**\r\n * 将给定的常量字符串类型拓展为大驼峰\r\n */\r\nexport type CapitalCase<T extends string> = T extends `${infer First} ${infer Rest}`\r\n  ? CapitalCase<`${First}-${Rest}`>\r\n  : T extends `${infer First}-${infer Rest}`\r\n    ? `${Capitalize<First>}${CapitalCase<Rest>}`\r\n    : Capitalize<T>\r\n\r\n/**\r\n * 将字面值转换为大驼峰\r\n *\r\n * @param value 需要转换的字面值\r\n *\r\n * @returns 转换后的大驼峰字面值\r\n */\r\nexport function toCapitalCase<T extends string>(value: T) {\r\n  value = value.trim().replace(/\\s+/g, '-') as T\r\n  value = value.replace(/-+(\\w)/g, (_, char) => (char ? char.toUpperCase() : '')) as T\r\n\r\n  return (value.charAt(0).toLocaleUpperCase() + value.slice(1)).replace(\r\n    /[^\\w]/g,\r\n    '',\r\n  ) as CapitalCase<T>\r\n}\r\n\r\n/**\r\n *  将字面值转换为小驼峰\r\n *\r\n * @param value 需要转换的字面值\r\n *\r\n * @returns 转换后的小驼峰字面值\r\n */\r\nexport function toCamelCase(value: string) {\r\n  const capitalName = toCapitalCase(value)\r\n\r\n  if (allCapital(capitalName)) {\r\n    return capitalName.toLocaleLowerCase()\r\n  }\r\n\r\n  return capitalName.charAt(0).toLowerCase() + capitalName.slice(1)\r\n}\r\n","import { computed, getCurrentInstance, inject, provide, unref } from 'vue'\r\n\r\nimport { isDefined } from '@vexip-ui/utils'\r\n\r\nimport type { App, ComputedRef, MaybeRef } from 'vue'\r\n\r\nexport const PROVIDED_HOVER_DELAY = '___vxp-provided-hover-delay'\r\nexport const globalDelay = computed(() => 100)\r\n\r\nfunction getOrDefault(num: number, def: number) {\r\n  return isDefined(num) && !Number.isNaN(num) ? num : def\r\n}\r\n\r\n/**\r\n * Provide a hover delay config for under components.\r\n *\r\n * @param sourceDelay hover delay config\r\n * @param app the app of Vue, will use app.provide if specify\r\n */\r\nexport function configHoverDelay(sourceDelay: MaybeRef<number>, app?: App) {\r\n  if (app) {\r\n    const delay = computed(() => {\r\n      const delay = unref(sourceDelay)\r\n\r\n      return getOrDefault(delay, globalDelay.value)\r\n    })\r\n\r\n    app.provide(PROVIDED_HOVER_DELAY, delay)\r\n  } else {\r\n    const upstreamDelay = inject<ComputedRef<number> | null>(PROVIDED_HOVER_DELAY, null)\r\n    const delay = computed(() => {\r\n      const delay = unref(sourceDelay)\r\n\r\n      return getOrDefault(\r\n        delay,\r\n        upstreamDelay ? getOrDefault(upstreamDelay.value, globalDelay.value) : globalDelay.value,\r\n      )\r\n    })\r\n\r\n    provide(PROVIDED_HOVER_DELAY, delay)\r\n  }\r\n}\r\n\r\nexport function useHoverDelay() {\r\n  return getCurrentInstance()\r\n    ? inject<ComputedRef<number>>(PROVIDED_HOVER_DELAY, globalDelay)\r\n    : globalDelay\r\n}\r\n","import { defineLocaleConfig } from './helper'\r\n\r\n/**\r\n * Chinese (Simplified) locale config.\r\n *\r\n * @author @qmhc\r\n */\r\nexport function zhCNLocale() {\r\n  return defineLocaleConfig({\r\n    locale: 'zh-CN',\r\n    wordSpace: false,\r\n\r\n    calendar: {\r\n      year: '年',\r\n      month: '月',\r\n      month1: '01月',\r\n      month2: '02月',\r\n      month3: '03月',\r\n      month4: '04月',\r\n      month5: '05月',\r\n      month6: '06月',\r\n      month7: '07月',\r\n      month8: '08月',\r\n      month9: '09月',\r\n      month10: '10月',\r\n      month11: '11月',\r\n      month12: '12月',\r\n      week1: '一',\r\n      week2: '二',\r\n      week3: '三',\r\n      week4: '四',\r\n      week5: '五',\r\n      week6: '六',\r\n      week7: '日',\r\n\r\n      ariaLabel: {\r\n        year: '年',\r\n        month: '月',\r\n        month1: '一月',\r\n        month2: '二月',\r\n        month3: '三月',\r\n        month4: '四月',\r\n        month5: '五月',\r\n        month6: '六月',\r\n        month7: '七月',\r\n        month8: '八月',\r\n        month9: '九月',\r\n        month10: '十月',\r\n        month11: '十一月',\r\n        month12: '十二月',\r\n        week1: '星期一',\r\n        week2: '星期二',\r\n        week3: '星期三',\r\n        week4: '星期四',\r\n        week5: '星期五',\r\n        week6: '星期六',\r\n        week7: '星期日',\r\n      },\r\n    },\r\n\r\n    captcha: {\r\n      slideEnd: '请滑动到最后',\r\n      slide: '请滑动到适当的位置',\r\n      success: '验证成功',\r\n      fail: '验证失败，请重试',\r\n      doCaptcha: '请完成下面的验证',\r\n      pointInOrder: '请按顺序点击',\r\n      trigger: '点击进行验证',\r\n      completed: '已完成验证',\r\n    },\r\n\r\n    checkbox: {\r\n      all: '全选',\r\n    },\r\n\r\n    colorPicker: {\r\n      confirm: '确定',\r\n      cancel: '重置',\r\n\r\n      ariaLabel: {\r\n        clear: '清空颜色',\r\n      },\r\n    },\r\n\r\n    confirm: {\r\n      confirm: '确认',\r\n      cancel: '取消',\r\n    },\r\n\r\n    datePicker: {\r\n      confirm: '确认',\r\n      cancel: '取消',\r\n      placeholder: {\r\n        year: '年份',\r\n        month: '月份',\r\n        date: '日期',\r\n        datetime: '日期时间',\r\n        start: '开始',\r\n        end: '结束',\r\n        select: '请选择',\r\n      },\r\n      startTime: '开始时间',\r\n      endTime: '结束时间',\r\n\r\n      ariaLabel: {\r\n        clear: '清空日期',\r\n        quarter: '季度',\r\n        week: '周',\r\n        date: '日',\r\n        hour: '时',\r\n        minute: '分',\r\n        second: '秒',\r\n      },\r\n    },\r\n\r\n    drawer: {\r\n      confirm: '确认',\r\n      cancel: '取消',\r\n    },\r\n\r\n    form: {\r\n      submit: '提交',\r\n      reset: '重置',\r\n      notNullable: '不可为空',\r\n      validateFail: '验证未通过',\r\n    },\r\n\r\n    image: {\r\n      placeholder: '加载中...',\r\n      error: '加载失败',\r\n    },\r\n\r\n    input: {\r\n      placeholder: '请输入',\r\n\r\n      ariaLabel: {\r\n        clear: '清空文本',\r\n      },\r\n    },\r\n\r\n    layout: {\r\n      signOut: '注销',\r\n      signType: '导航模式',\r\n      majorColor: '主题颜色',\r\n      themeMode: '主题模式',\r\n    },\r\n\r\n    modal: {\r\n      confirm: '确认',\r\n      cancel: '取消',\r\n    },\r\n\r\n    numberInput: {\r\n      placeholder: '请输入数字',\r\n      outOfRange: '超出范围',\r\n\r\n      ariaLabel: {\r\n        clear: '清空数字',\r\n        increase: '增加',\r\n        decrease: '减少',\r\n      },\r\n    },\r\n\r\n    pagination: {\r\n      page: '页',\r\n      perPage: '条/页',\r\n      prevPage: '上一页',\r\n      nextPage: '下一页',\r\n      prev: '向前',\r\n      next: '向后',\r\n      total: '共',\r\n      jumpTo: '跳转',\r\n      itemUnit: '条',\r\n    },\r\n\r\n    select: {\r\n      placeholder: '请选择',\r\n      empty: '暂无数据',\r\n      search: '搜索选项',\r\n\r\n      ariaLabel: {\r\n        clear: '清空选项',\r\n      },\r\n    },\r\n\r\n    table: {\r\n      empty: '暂无数据',\r\n      filterConfirm: '筛选',\r\n      filterReset: '重置',\r\n      filterAll: '全部',\r\n    },\r\n\r\n    timeAgo: {\r\n      ago: '前',\r\n      late: '后',\r\n      justNow: '刚刚',\r\n      second: '秒',\r\n      minute: '分钟',\r\n      hour: '小时',\r\n      yesterday: '昨天',\r\n      days: '天',\r\n      lastMonth: '上个月',\r\n      months: '个月',\r\n      lastYear: '去年',\r\n      years: '年',\r\n    },\r\n\r\n    timePicker: {\r\n      confirm: '确认',\r\n      cancel: '取消',\r\n      placeholder: {\r\n        time: '时间',\r\n        start: '开始',\r\n        end: '结束',\r\n        select: '请选择',\r\n      },\r\n\r\n      ariaLabel: {\r\n        clear: '清空时间',\r\n        hour: '时',\r\n        minute: '分',\r\n        second: '秒',\r\n      },\r\n    },\r\n\r\n    tour: {\r\n      prev: '上一步',\r\n      next: '下一步',\r\n      done: '完成',\r\n      stepCount: '第 {n} 步',\r\n    },\r\n\r\n    transfer: {\r\n      source: '源',\r\n      target: '目标',\r\n      empty: '暂无数据',\r\n      reverse: '反选',\r\n      search: '搜索 (Ctrl + F)',\r\n    },\r\n\r\n    tree: {\r\n      empty: '暂无数据',\r\n    },\r\n\r\n    upload: {\r\n      upload: '上传文件',\r\n      uploading: '上传中',\r\n      dragOrClick: '将文件拖到此处, 或点击上传',\r\n\r\n      ariaLabel: {\r\n        preview: '预览文件',\r\n        delete: '删除文件',\r\n      },\r\n    },\r\n\r\n    video: {\r\n      play: '播放',\r\n      pause: '暂停',\r\n      playPrev: '上一个',\r\n      playNext: '下一个',\r\n      refresh: '刷新',\r\n      flip: '镜像翻转',\r\n      requestPip: '进入画中画',\r\n      exitPip: '退出画中画',\r\n      fullWindow: '进入网页全屏',\r\n      fullWindowExit: '退出网页全屏',\r\n      fullScreen: '进入全屏',\r\n      fullScreenExit: '退出全屏',\r\n      chapterCount: '第 {n} 章',\r\n    },\r\n\r\n    viewer: {\r\n      rotateRight: '向右旋转',\r\n      rotateLeft: '向左旋转',\r\n      flipHorizontal: '横向翻转',\r\n      flipVertical: '纵向翻转',\r\n      zoomIn: '放大',\r\n      zoomOut: '缩小',\r\n      fullScreen: '进入全屏',\r\n      fullScreenExit: '退出全屏',\r\n      reset: '重置',\r\n    },\r\n  })\r\n}\r\n","import { computed, inject, provide, unref } from 'vue'\r\n\r\nimport { mergeObjects } from '@vexip-ui/utils'\r\nimport { zhCNLocale } from './zh-CN'\r\n\r\nimport type { App, ComputedRef, MaybeRef } from 'vue'\r\nimport type { LocaleConfig, LocaleNames, LocaleOptions } from './helper'\r\n\r\nexport * from './helper'\r\n\r\nexport * from './ar-EG'\r\nexport * from './de-DE'\r\nexport * from './en-US'\r\nexport * from './fa-IR'\r\nexport * from './fr-FR'\r\nexport * from './ta-IN'\r\nexport * from './zh-CN'\r\nexport * from './zh-HK'\r\nexport * from './zh-TW'\r\n\r\nexport const PROVIDED_LOCALE = '__vxp-provided-locale'\r\nexport const globalLocal = computed(() => zhCNLocale())\r\n\r\nconst cached = new Map<string, LocaleConfig>()\r\n\r\nexport function getDefaultLocaleConfig(locale?: string) {\r\n  if (!locale) {\r\n    return globalLocal.value\r\n  }\r\n\r\n  return cached.get(locale) || globalLocal.value\r\n}\r\n\r\nexport function registerLocale(locale: LocaleConfig) {\r\n  locale.locale && cached.set(locale.locale, locale)\r\n}\r\n\r\n/**\r\n * Provide a locale config for under components.\r\n *\r\n * @param sourceLocale locale config\r\n * @param app the app of Vue, will use app.provide if specify\r\n */\r\nexport function configLocale(sourceLocale: MaybeRef<LocaleOptions>, app?: App) {\r\n  if (app) {\r\n    const locale = computed(() => {\r\n      const locale = unref(sourceLocale)\r\n\r\n      return mergeObjects(getDefaultLocaleConfig(locale.locale), locale)\r\n    })\r\n\r\n    app.provide(PROVIDED_LOCALE, locale)\r\n  } else {\r\n    const upstreamLocale = inject<ComputedRef<LocaleConfig> | null>(PROVIDED_LOCALE, null)\r\n    const locale = computed(() => {\r\n      const locale = unref(sourceLocale)\r\n      // const providedLocale = mergeObjects(getDefaultLocaleConfig(locale.locale), locale)\r\n\r\n      if (!upstreamLocale?.value) {\r\n        return mergeObjects(getDefaultLocaleConfig(locale.locale), locale)\r\n      }\r\n\r\n      return mergeObjects(upstreamLocale.value as any, locale)\r\n    })\r\n\r\n    provide(PROVIDED_LOCALE, locale)\r\n  }\r\n}\r\n\r\nexport function useLocale(): ComputedRef<LocaleConfig>\r\nexport function useLocale<T extends LocaleNames>(name: T): ComputedRef<LocaleConfig[T]>\r\nexport function useLocale<T extends LocaleNames>(\r\n  name: T,\r\n  customLocale: MaybeRef<Partial<LocaleConfig[T]>>\r\n): ComputedRef<LocaleConfig[T]>\r\nexport function useLocale<T extends LocaleNames>(\r\n  name?: T,\r\n  customLocale?: MaybeRef<Partial<LocaleConfig[T]>>,\r\n) {\r\n  const locale = inject<ComputedRef<LocaleConfig>>(PROVIDED_LOCALE, globalLocal)\r\n\r\n  if (!name) {\r\n    return locale\r\n  }\r\n\r\n  if (customLocale) {\r\n    return computed(() => ({ ...(locale.value?.[name] ?? {}), ...(unref(customLocale) ?? {}) }))\r\n  }\r\n\r\n  return computed(() => locale.value?.[name] ?? {})\r\n}\r\n\r\nexport function useWordSpace() {\r\n  const locale = inject<ComputedRef<LocaleConfig>>(PROVIDED_LOCALE, globalLocal)\r\n\r\n  return computed(() => locale.value.wordSpace ?? false)\r\n}\r\n\r\nexport function getCountWord(wordTemplate: string, count: number) {\r\n  const words = wordTemplate.split('|')\r\n\r\n  if (words.length === 1) return `${count} ${wordTemplate}`\r\n\r\n  return `${count} ${count > 1 ? words[1].trim() : words[0].trim()}`\r\n}\r\n\r\nexport function getCountWordOnly(wordTemplate: string, count: number) {\r\n  const words = wordTemplate.split('|')\r\n\r\n  if (words.length === 1) return wordTemplate\r\n\r\n  return count > 1 ? words[1].trim() : words[0].trim()\r\n}\r\n\r\nexport function makeSentence(words: string, wordSpace = globalLocal.value.wordSpace ?? false) {\r\n  return !wordSpace ? words.replace(/\\s+/g, '') : words\r\n}\r\n\r\nexport function getStepByWord(wordTemplate: string, step: number) {\r\n  return wordTemplate.replace(/{n}/g, `${step}`)\r\n}\r\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n  /^([A-Z])|[\\s-_]+(\\w)/g,\n  (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n  const camelCase = toCamelCase(string);\n  return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n  return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: 24,\n  height: 24,\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": 2,\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { h } from 'vue';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport defaultAttributes from './defaultAttributes.js';\n\nconst Icon = ({ size, strokeWidth = 2, absoluteStrokeWidth, color, iconNode, name, class: classes, ...props }, { slots }) => {\n  return h(\n    \"svg\",\n    {\n      ...defaultAttributes,\n      width: size || defaultAttributes.width,\n      height: size || defaultAttributes.height,\n      stroke: color || defaultAttributes.stroke,\n      \"stroke-width\": absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n      class: mergeClasses(\n        \"lucide\",\n        ...name ? [`lucide-${toKebabCase(toPascalCase(name))}-icon`, `lucide-${toKebabCase(name)}`] : [\"lucide-icon\"]\n      ),\n      ...props\n    },\n    [...iconNode.map((child) => h(...child)), ...slots.default ? [slots.default()] : []]\n  );\n};\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { h } from 'vue';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => (props, { slots }) => h(\n  Icon,\n  {\n    ...props,\n    iconNode,\n    name: iconName\n  },\n  slots\n);\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ArrowLeftRight = createLucideIcon(\"arrow-left-right\", [\n  [\"path\", { d: \"M8 3 4 7l4 4\", key: \"9rb6wj\" }],\n  [\"path\", { d: \"M4 7h16\", key: \"6tx8e3\" }],\n  [\"path\", { d: \"m16 21 4-4-4-4\", key: \"siv7j2\" }],\n  [\"path\", { d: \"M20 17H4\", key: \"h6l3hr\" }]\n]);\n\nexport { ArrowLeftRight as default };\n//# sourceMappingURL=arrow-left-right.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Calendar = createLucideIcon(\"calendar\", [\n  [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n  [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n  [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\n  [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }]\n]);\n\nexport { Calendar as default };\n//# sourceMappingURL=calendar.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Check = createLucideIcon(\"check\", [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]]);\n\nexport { Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronDown = createLucideIcon(\"chevron-down\", [\n  [\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]\n]);\n\nexport { ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronLeft = createLucideIcon(\"chevron-left\", [\n  [\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]\n]);\n\nexport { ChevronLeft as default };\n//# sourceMappingURL=chevron-left.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronRight = createLucideIcon(\"chevron-right\", [\n  [\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]\n]);\n\nexport { ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronUp = createLucideIcon(\"chevron-up\", [\n  [\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]\n]);\n\nexport { ChevronUp as default };\n//# sourceMappingURL=chevron-up.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronsLeft = createLucideIcon(\"chevrons-left\", [\n  [\"path\", { d: \"m11 17-5-5 5-5\", key: \"13zhaf\" }],\n  [\"path\", { d: \"m18 17-5-5 5-5\", key: \"h8a8et\" }]\n]);\n\nexport { ChevronsLeft as default };\n//# sourceMappingURL=chevrons-left.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronsRight = createLucideIcon(\"chevrons-right\", [\n  [\"path\", { d: \"m6 17 5-5-5-5\", key: \"xnjwq\" }],\n  [\"path\", { d: \"m13 17 5-5-5-5\", key: \"17xmmf\" }]\n]);\n\nexport { ChevronsRight as default };\n//# sourceMappingURL=chevrons-right.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleAlert = createLucideIcon(\"circle-alert\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n  [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n]);\n\nexport { CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleCheck = createLucideIcon(\"circle-check\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n]);\n\nexport { CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleHelp = createLucideIcon(\"circle-help\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n  [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n]);\n\nexport { CircleHelp as default };\n//# sourceMappingURL=circle-help.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleX = createLucideIcon(\"circle-x\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n  [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n]);\n\nexport { CircleX as default };\n//# sourceMappingURL=circle-x.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Clock = createLucideIcon(\"clock\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"polyline\", { points: \"12 6 12 12 16 14\", key: \"68esgv\" }]\n]);\n\nexport { Clock as default };\n//# sourceMappingURL=clock.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CloudUpload = createLucideIcon(\"cloud-upload\", [\n  [\"path\", { d: \"M12 13v8\", key: \"1l5pq0\" }],\n  [\"path\", { d: \"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242\", key: \"1pljnt\" }],\n  [\"path\", { d: \"m8 17 4-4 4 4\", key: \"1quai1\" }]\n]);\n\nexport { CloudUpload as default };\n//# sourceMappingURL=cloud-upload.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Ellipsis = createLucideIcon(\"ellipsis\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n  [\"circle\", { cx: \"19\", cy: \"12\", r: \"1\", key: \"1wjl8i\" }],\n  [\"circle\", { cx: \"5\", cy: \"12\", r: \"1\", key: \"1pcz8c\" }]\n]);\n\nexport { Ellipsis as default };\n//# sourceMappingURL=ellipsis.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst EyeOff = createLucideIcon(\"eye-off\", [\n  [\n    \"path\",\n    {\n      d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n      key: \"ct8e1f\"\n    }\n  ],\n  [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n  [\n    \"path\",\n    {\n      d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n      key: \"13bj9a\"\n    }\n  ],\n  [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n]);\n\nexport { EyeOff as default };\n//# sourceMappingURL=eye-off.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Eye = createLucideIcon(\"eye\", [\n  [\n    \"path\",\n    {\n      d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n      key: \"1nclc0\"\n    }\n  ],\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n]);\n\nexport { Eye as default };\n//# sourceMappingURL=eye.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileArchive = createLucideIcon(\"file-archive\", [\n  [\"path\", { d: \"M10 12v-1\", key: \"v7bkov\" }],\n  [\"path\", { d: \"M10 18v-2\", key: \"1cjy8d\" }],\n  [\"path\", { d: \"M10 7V6\", key: \"dljcrl\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n  [\n    \"path\",\n    { d: \"M15.5 22H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v16a2 2 0 0 0 .274 1.01\", key: \"gkbcor\" }\n  ],\n  [\"circle\", { cx: \"10\", cy: \"20\", r: \"2\", key: \"1xzdoj\" }]\n]);\n\nexport { FileArchive as default };\n//# sourceMappingURL=file-archive.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileCode = createLucideIcon(\"file-code\", [\n  [\"path\", { d: \"M10 12.5 8 15l2 2.5\", key: \"1tg20x\" }],\n  [\"path\", { d: \"m14 12.5 2 2.5-2 2.5\", key: \"yinavb\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n  [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z\", key: \"1mlx9k\" }]\n]);\n\nexport { FileCode as default };\n//# sourceMappingURL=file-code.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileImage = createLucideIcon(\"file-image\", [\n  [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n  [\"circle\", { cx: \"10\", cy: \"12\", r: \"2\", key: \"737tya\" }],\n  [\"path\", { d: \"m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22\", key: \"wt3hpn\" }]\n]);\n\nexport { FileImage as default };\n//# sourceMappingURL=file-image.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileMusic = createLucideIcon(\"file-music\", [\n  [\"path\", { d: \"M10.5 22H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v8.4\", key: \"1d3kfm\" }],\n  [\"path\", { d: \"M8 18v-7.7L16 9v7\", key: \"1oie6o\" }],\n  [\"circle\", { cx: \"14\", cy: \"16\", r: \"2\", key: \"1bzzi3\" }],\n  [\"circle\", { cx: \"6\", cy: \"18\", r: \"2\", key: \"1fncim\" }]\n]);\n\nexport { FileMusic as default };\n//# sourceMappingURL=file-music.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileText = createLucideIcon(\"file-text\", [\n  [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n  [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n  [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n  [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n]);\n\nexport { FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileVideo = createLucideIcon(\"file-video\", [\n  [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n  [\"path\", { d: \"m10 11 5 3-5 3v-6Z\", key: \"7ntvm4\" }]\n]);\n\nexport { FileVideo as default };\n//# sourceMappingURL=file-video.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst File = createLucideIcon(\"file\", [\n  [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }]\n]);\n\nexport { File as default };\n//# sourceMappingURL=file.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FlipHorizontal = createLucideIcon(\"flip-horizontal\", [\n  [\"path\", { d: \"M8 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h3\", key: \"1i73f7\" }],\n  [\"path\", { d: \"M16 3h3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-3\", key: \"saxlbk\" }],\n  [\"path\", { d: \"M12 20v2\", key: \"1lh1kg\" }],\n  [\"path\", { d: \"M12 14v2\", key: \"8jcxud\" }],\n  [\"path\", { d: \"M12 8v2\", key: \"1woqiv\" }],\n  [\"path\", { d: \"M12 2v2\", key: \"tus03m\" }]\n]);\n\nexport { FlipHorizontal as default };\n//# sourceMappingURL=flip-horizontal.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FlipVertical = createLucideIcon(\"flip-vertical\", [\n  [\"path\", { d: \"M21 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v3\", key: \"14bfxa\" }],\n  [\"path\", { d: \"M21 16v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-3\", key: \"14rx03\" }],\n  [\"path\", { d: \"M4 12H2\", key: \"rhcxmi\" }],\n  [\"path\", { d: \"M10 12H8\", key: \"s88cx1\" }],\n  [\"path\", { d: \"M16 12h-2\", key: \"10asgb\" }],\n  [\"path\", { d: \"M22 12h-2\", key: \"14jgyd\" }]\n]);\n\nexport { FlipVertical as default };\n//# sourceMappingURL=flip-vertical.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Fullscreen = createLucideIcon(\"fullscreen\", [\n  [\"path\", { d: \"M3 7V5a2 2 0 0 1 2-2h2\", key: \"aa7l1z\" }],\n  [\"path\", { d: \"M17 3h2a2 2 0 0 1 2 2v2\", key: \"4qcy5o\" }],\n  [\"path\", { d: \"M21 17v2a2 2 0 0 1-2 2h-2\", key: \"6vwrx8\" }],\n  [\"path\", { d: \"M7 21H5a2 2 0 0 1-2-2v-2\", key: \"ioqczr\" }],\n  [\"rect\", { width: \"10\", height: \"8\", x: \"7\", y: \"8\", rx: \"1\", key: \"vys8me\" }]\n]);\n\nexport { Fullscreen as default };\n//# sourceMappingURL=fullscreen.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Funnel = createLucideIcon(\"funnel\", [\n  [\n    \"path\",\n    {\n      d: \"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\",\n      key: \"sc7q7i\"\n    }\n  ]\n]);\n\nexport { Funnel as default };\n//# sourceMappingURL=funnel.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst GripVertical = createLucideIcon(\"grip-vertical\", [\n  [\"circle\", { cx: \"9\", cy: \"12\", r: \"1\", key: \"1vctgf\" }],\n  [\"circle\", { cx: \"9\", cy: \"5\", r: \"1\", key: \"hp0tcf\" }],\n  [\"circle\", { cx: \"9\", cy: \"19\", r: \"1\", key: \"fkjjf6\" }],\n  [\"circle\", { cx: \"15\", cy: \"12\", r: \"1\", key: \"1tmaij\" }],\n  [\"circle\", { cx: \"15\", cy: \"5\", r: \"1\", key: \"19l28e\" }],\n  [\"circle\", { cx: \"15\", cy: \"19\", r: \"1\", key: \"f4zoj3\" }]\n]);\n\nexport { GripVertical as default };\n//# sourceMappingURL=grip-vertical.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Image = createLucideIcon(\"image\", [\n  [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", ry: \"2\", key: \"1m3agn\" }],\n  [\"circle\", { cx: \"9\", cy: \"9\", r: \"2\", key: \"af1f0g\" }],\n  [\"path\", { d: \"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\", key: \"1xmnt7\" }]\n]);\n\nexport { Image as default };\n//# sourceMappingURL=image.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst IndentDecrease = createLucideIcon(\"indent-decrease\", [\n  [\"path\", { d: \"M21 12H11\", key: \"wd7e0v\" }],\n  [\"path\", { d: \"M21 18H11\", key: \"4wu86t\" }],\n  [\"path\", { d: \"M21 6H11\", key: \"6dy1d6\" }],\n  [\"path\", { d: \"m7 8-4 4 4 4\", key: \"o5hrat\" }]\n]);\n\nexport { IndentDecrease as default };\n//# sourceMappingURL=indent-decrease.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst IndentIncrease = createLucideIcon(\"indent-increase\", [\n  [\"path\", { d: \"M21 12H11\", key: \"wd7e0v\" }],\n  [\"path\", { d: \"M21 18H11\", key: \"4wu86t\" }],\n  [\"path\", { d: \"M21 6H11\", key: \"6dy1d6\" }],\n  [\"path\", { d: \"m3 8 4 4-4 4\", key: \"1a3j6y\" }]\n]);\n\nexport { IndentIncrease as default };\n//# sourceMappingURL=indent-increase.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Info = createLucideIcon(\"info\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"M12 16v-4\", key: \"1dtifu\" }],\n  [\"path\", { d: \"M12 8h.01\", key: \"e9boi3\" }]\n]);\n\nexport { Info as default };\n//# sourceMappingURL=info.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst LoaderCircle = createLucideIcon(\"loader-circle\", [\n  [\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]\n]);\n\nexport { LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst LogOut = createLucideIcon(\"log-out\", [\n  [\"path\", { d: \"m16 17 5-5-5-5\", key: \"1bji2h\" }],\n  [\"path\", { d: \"M21 12H9\", key: \"dn1m92\" }],\n  [\"path\", { d: \"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\", key: \"1uf3rs\" }]\n]);\n\nexport { LogOut as default };\n//# sourceMappingURL=log-out.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Maximize = createLucideIcon(\"maximize\", [\n  [\"path\", { d: \"M8 3H5a2 2 0 0 0-2 2v3\", key: \"1dcmit\" }],\n  [\"path\", { d: \"M21 8V5a2 2 0 0 0-2-2h-3\", key: \"1e4gt3\" }],\n  [\"path\", { d: \"M3 16v3a2 2 0 0 0 2 2h3\", key: \"wsl5sc\" }],\n  [\"path\", { d: \"M16 21h3a2 2 0 0 0 2-2v-3\", key: \"18trek\" }]\n]);\n\nexport { Maximize as default };\n//# sourceMappingURL=maximize.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MessageCircleQuestion = createLucideIcon(\"message-circle-question\", [\n  [\"path\", { d: \"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\", key: \"vv11sd\" }],\n  [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n  [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n]);\n\nexport { MessageCircleQuestion as default };\n//# sourceMappingURL=message-circle-question.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Minimize = createLucideIcon(\"minimize\", [\n  [\"path\", { d: \"M8 3v3a2 2 0 0 1-2 2H3\", key: \"hohbtr\" }],\n  [\"path\", { d: \"M21 8h-3a2 2 0 0 1-2-2V3\", key: \"5jw1f3\" }],\n  [\"path\", { d: \"M3 16h3a2 2 0 0 1 2 2v3\", key: \"198tvr\" }],\n  [\"path\", { d: \"M16 21v-3a2 2 0 0 1 2-2h3\", key: \"ph8mxp\" }]\n]);\n\nexport { Minimize as default };\n//# sourceMappingURL=minimize.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Minus = createLucideIcon(\"minus\", [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]]);\n\nexport { Minus as default };\n//# sourceMappingURL=minus.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Moon = createLucideIcon(\"moon\", [\n  [\"path\", { d: \"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\", key: \"a7tn18\" }]\n]);\n\nexport { Moon as default };\n//# sourceMappingURL=moon.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Pause = createLucideIcon(\"pause\", [\n  [\"rect\", { x: \"14\", y: \"4\", width: \"4\", height: \"16\", rx: \"1\", key: \"zuxfzm\" }],\n  [\"rect\", { x: \"6\", y: \"4\", width: \"4\", height: \"16\", rx: \"1\", key: \"1okwgv\" }]\n]);\n\nexport { Pause as default };\n//# sourceMappingURL=pause.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst PictureInPicture = createLucideIcon(\"picture-in-picture\", [\n  [\"path\", { d: \"M2 10h6V4\", key: \"zwrco\" }],\n  [\"path\", { d: \"m2 4 6 6\", key: \"ug085t\" }],\n  [\"path\", { d: \"M21 10V7a2 2 0 0 0-2-2h-7\", key: \"git5jr\" }],\n  [\"path\", { d: \"M3 14v2a2 2 0 0 0 2 2h3\", key: \"1f7fh3\" }],\n  [\"rect\", { x: \"12\", y: \"14\", width: \"10\", height: \"7\", rx: \"1\", key: \"1wjs3o\" }]\n]);\n\nexport { PictureInPicture as default };\n//# sourceMappingURL=picture-in-picture.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Play = createLucideIcon(\"play\", [\n  [\"polygon\", { points: \"6 3 20 12 6 21 6 3\", key: \"1oa8hb\" }]\n]);\n\nexport { Play as default };\n//# sourceMappingURL=play.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Plus = createLucideIcon(\"plus\", [\n  [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n  [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n]);\n\nexport { Plus as default };\n//# sourceMappingURL=plus.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst RefreshCw = createLucideIcon(\"refresh-cw\", [\n  [\"path\", { d: \"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\", key: \"v9h5vc\" }],\n  [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }],\n  [\"path\", { d: \"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\", key: \"3uifl3\" }],\n  [\"path\", { d: \"M8 16H3v5\", key: \"1cv678\" }]\n]);\n\nexport { RefreshCw as default };\n//# sourceMappingURL=refresh-cw.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Repeat2 = createLucideIcon(\"repeat-2\", [\n  [\"path\", { d: \"m2 9 3-3 3 3\", key: \"1ltn5i\" }],\n  [\"path\", { d: \"M13 18H7a2 2 0 0 1-2-2V6\", key: \"1r6tfw\" }],\n  [\"path\", { d: \"m22 15-3 3-3-3\", key: \"4rnwn2\" }],\n  [\"path\", { d: \"M11 6h6a2 2 0 0 1 2 2v10\", key: \"2f72bc\" }]\n]);\n\nexport { Repeat2 as default };\n//# sourceMappingURL=repeat-2.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst RotateCcw = createLucideIcon(\"rotate-ccw\", [\n  [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n  [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }]\n]);\n\nexport { RotateCcw as default };\n//# sourceMappingURL=rotate-ccw.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst RotateCw = createLucideIcon(\"rotate-cw\", [\n  [\"path\", { d: \"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\", key: \"1p45f6\" }],\n  [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }]\n]);\n\nexport { RotateCw as default };\n//# sourceMappingURL=rotate-cw.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Search = createLucideIcon(\"search\", [\n  [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n  [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n]);\n\nexport { Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Siren = createLucideIcon(\"siren\", [\n  [\"path\", { d: \"M7 18v-6a5 5 0 1 1 10 0v6\", key: \"pcx96s\" }],\n  [\n    \"path\",\n    { d: \"M5 21a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2z\", key: \"1b4s83\" }\n  ],\n  [\"path\", { d: \"M21 12h1\", key: \"jtio3y\" }],\n  [\"path\", { d: \"M18.5 4.5 18 5\", key: \"g5sp9y\" }],\n  [\"path\", { d: \"M2 12h1\", key: \"1uaihz\" }],\n  [\"path\", { d: \"M12 2v1\", key: \"11qlp1\" }],\n  [\"path\", { d: \"m4.929 4.929.707.707\", key: \"1i51kw\" }],\n  [\"path\", { d: \"M12 12v6\", key: \"3ahymv\" }]\n]);\n\nexport { Siren as default };\n//# sourceMappingURL=siren.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SkipBack = createLucideIcon(\"skip-back\", [\n  [\"polygon\", { points: \"19 20 9 12 19 4 19 20\", key: \"o2sva\" }],\n  [\"line\", { x1: \"5\", x2: \"5\", y1: \"19\", y2: \"5\", key: \"1ocqjk\" }]\n]);\n\nexport { SkipBack as default };\n//# sourceMappingURL=skip-back.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SkipForward = createLucideIcon(\"skip-forward\", [\n  [\"polygon\", { points: \"5 4 15 12 5 20 5 4\", key: \"16p6eg\" }],\n  [\"line\", { x1: \"19\", x2: \"19\", y1: \"5\", y2: \"19\", key: \"futhcm\" }]\n]);\n\nexport { SkipForward as default };\n//# sourceMappingURL=skip-forward.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SquareMinus = createLucideIcon(\"square-minus\", [\n  [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n  [\"path\", { d: \"M8 12h8\", key: \"1wcyev\" }]\n]);\n\nexport { SquareMinus as default };\n//# sourceMappingURL=square-minus.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SquarePlus = createLucideIcon(\"square-plus\", [\n  [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n  [\"path\", { d: \"M8 12h8\", key: \"1wcyev\" }],\n  [\"path\", { d: \"M12 8v8\", key: \"napkw2\" }]\n]);\n\nexport { SquarePlus as default };\n//# sourceMappingURL=square-plus.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Sun = createLucideIcon(\"sun\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"4\", key: \"4exip2\" }],\n  [\"path\", { d: \"M12 2v2\", key: \"tus03m\" }],\n  [\"path\", { d: \"M12 20v2\", key: \"1lh1kg\" }],\n  [\"path\", { d: \"m4.93 4.93 1.41 1.41\", key: \"149t6j\" }],\n  [\"path\", { d: \"m17.66 17.66 1.41 1.41\", key: \"ptbguv\" }],\n  [\"path\", { d: \"M2 12h2\", key: \"1t8f8n\" }],\n  [\"path\", { d: \"M20 12h2\", key: \"1q8mjw\" }],\n  [\"path\", { d: \"m6.34 17.66-1.41 1.41\", key: \"1m8zz5\" }],\n  [\"path\", { d: \"m19.07 4.93-1.41 1.41\", key: \"1shlcs\" }]\n]);\n\nexport { Sun as default };\n//# sourceMappingURL=sun.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Trash2 = createLucideIcon(\"trash-2\", [\n  [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n  [\"path\", { d: \"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\", key: \"4alrt4\" }],\n  [\"path\", { d: \"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\", key: \"v07s0e\" }],\n  [\"line\", { x1: \"10\", x2: \"10\", y1: \"11\", y2: \"17\", key: \"1uufr5\" }],\n  [\"line\", { x1: \"14\", x2: \"14\", y1: \"11\", y2: \"17\", key: \"xtxkd\" }]\n]);\n\nexport { Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Upload = createLucideIcon(\"upload\", [\n  [\"path\", { d: \"M12 3v12\", key: \"1x0j5s\" }],\n  [\"path\", { d: \"m17 8-5-5-5 5\", key: \"7q97r8\" }],\n  [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }]\n]);\n\nexport { Upload as default };\n//# sourceMappingURL=upload.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst UserRound = createLucideIcon(\"user-round\", [\n  [\"circle\", { cx: \"12\", cy: \"8\", r: \"5\", key: \"1hypcn\" }],\n  [\"path\", { d: \"M20 21a8 8 0 0 0-16 0\", key: \"rfgkzh\" }]\n]);\n\nexport { UserRound as default };\n//# sourceMappingURL=user-round.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Volume1 = createLucideIcon(\"volume-1\", [\n  [\n    \"path\",\n    {\n      d: \"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\",\n      key: \"uqj9uw\"\n    }\n  ],\n  [\"path\", { d: \"M16 9a5 5 0 0 1 0 6\", key: \"1q6k2b\" }]\n]);\n\nexport { Volume1 as default };\n//# sourceMappingURL=volume-1.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Volume2 = createLucideIcon(\"volume-2\", [\n  [\n    \"path\",\n    {\n      d: \"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\",\n      key: \"uqj9uw\"\n    }\n  ],\n  [\"path\", { d: \"M16 9a5 5 0 0 1 0 6\", key: \"1q6k2b\" }],\n  [\"path\", { d: \"M19.364 18.364a9 9 0 0 0 0-12.728\", key: \"ijwkga\" }]\n]);\n\nexport { Volume2 as default };\n//# sourceMappingURL=volume-2.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst VolumeX = createLucideIcon(\"volume-x\", [\n  [\n    \"path\",\n    {\n      d: \"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\",\n      key: \"uqj9uw\"\n    }\n  ],\n  [\"line\", { x1: \"22\", x2: \"16\", y1: \"9\", y2: \"15\", key: \"1ewh16\" }],\n  [\"line\", { x1: \"16\", x2: \"22\", y1: \"9\", y2: \"15\", key: \"5ykzw1\" }]\n]);\n\nexport { VolumeX as default };\n//# sourceMappingURL=volume-x.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst X = createLucideIcon(\"x\", [\n  [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n  [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n]);\n\nexport { X as default };\n//# sourceMappingURL=x.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ZoomIn = createLucideIcon(\"zoom-in\", [\n  [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n  [\"line\", { x1: \"21\", x2: \"16.65\", y1: \"21\", y2: \"16.65\", key: \"13gj7c\" }],\n  [\"line\", { x1: \"11\", x2: \"11\", y1: \"8\", y2: \"14\", key: \"1vmskp\" }],\n  [\"line\", { x1: \"8\", x2: \"14\", y1: \"11\", y2: \"11\", key: \"durymu\" }]\n]);\n\nexport { ZoomIn as default };\n//# sourceMappingURL=zoom-in.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ZoomOut = createLucideIcon(\"zoom-out\", [\n  [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n  [\"line\", { x1: \"21\", x2: \"16.65\", y1: \"21\", y2: \"16.65\", key: \"13gj7c\" }],\n  [\"line\", { x1: \"8\", x2: \"14\", y1: \"11\", y2: \"11\", key: \"durymu\" }]\n]);\n\nexport { ZoomOut as default };\n//# sourceMappingURL=zoom-out.js.map\n","import { computed, getCurrentScope, inject, markRaw, provide, unref } from 'vue'\r\n\r\nimport {\r\n  AlertCircle,\r\n  ArrowLeftRight,\r\n  Calendar,\r\n  Check,\r\n  CheckCircle2,\r\n  ChevronDown,\r\n  ChevronLeft,\r\n  ChevronRight,\r\n  ChevronUp,\r\n  ChevronsLeft,\r\n  ChevronsRight,\r\n  Clock,\r\n  Eye,\r\n  EyeOff,\r\n  File,\r\n  FileArchive,\r\n  FileCode,\r\n  FileImage,\r\n  FileMusic,\r\n  FileText,\r\n  FileVideo,\r\n  Filter,\r\n  FlipHorizontal,\r\n  FlipVertical,\r\n  Fullscreen,\r\n  GripVertical,\r\n  HelpCircle,\r\n  Image,\r\n  Indent,\r\n  Info,\r\n  Loader2,\r\n  LogOut,\r\n  Maximize,\r\n  MessageCircleQuestion,\r\n  Minimize,\r\n  Minus,\r\n  MinusSquare,\r\n  Moon,\r\n  MoreHorizontal,\r\n  Outdent,\r\n  Pause,\r\n  PictureInPicture,\r\n  Play,\r\n  Plus,\r\n  PlusSquare,\r\n  RefreshCw,\r\n  Repeat2,\r\n  RotateCcw,\r\n  RotateCw,\r\n  Search,\r\n  Siren,\r\n  SkipBack,\r\n  SkipForward,\r\n  Sun,\r\n  Trash2,\r\n  Upload,\r\n  UploadCloud,\r\n  UserRound,\r\n  Volume1,\r\n  Volume2,\r\n  VolumeX,\r\n  X,\r\n  XCircle,\r\n  ZoomIn,\r\n  ZoomOut,\r\n} from 'lucide-vue-next'\r\nimport { ensureArray } from '@vexip-ui/utils'\r\n\r\nimport type { App, ComputedRef, MaybeRef } from 'vue'\r\nimport type { ClassType, StyleType } from './props'\r\n\r\nexport const PROVIDED_ICONS = '__vxp-provided-icons'\r\n\r\nexport type IconValue = Record<string, any> | (() => any)\r\n\r\nexport interface IconOptions extends Record<string, any> {\r\n  class?: ClassType,\r\n  style?: StyleType,\r\n  scale?: number | string,\r\n  title?: string,\r\n  label?: string,\r\n  flip?: 'horizontal' | 'vertical' | 'both',\r\n  effect?: string,\r\n  size?: string,\r\n  color?: string,\r\n  rotate?: number | string,\r\n}\r\n\r\nexport type IconArrayValue = [IconValue, IconOptions?]\r\nexport type IconConfig = IconValue | IconArrayValue\r\n\r\nexport interface IconsOptions {\r\n  loading?: IconConfig,\r\n  clear?: IconConfig,\r\n  close?: IconConfig,\r\n  calendar?: IconConfig,\r\n  clock?: IconConfig,\r\n  exchange?: IconConfig,\r\n  angleUp?: IconConfig,\r\n  angleRight?: IconConfig,\r\n  angleDown?: IconConfig,\r\n  angleLeft?: IconConfig,\r\n  anglesRight?: IconConfig,\r\n  anglesLeft?: IconConfig,\r\n  retweet?: IconConfig,\r\n  refresh?: IconConfig,\r\n  filter?: IconConfig,\r\n  ellipsis?: IconConfig,\r\n  upload?: IconConfig,\r\n  uploadCloud?: IconConfig,\r\n  check?: IconConfig,\r\n  help?: IconConfig,\r\n  alert?: IconConfig,\r\n  question?: IconConfig,\r\n  info?: IconConfig,\r\n  success?: IconConfig,\r\n  warning?: IconConfig,\r\n  error?: IconConfig,\r\n  delete?: IconConfig,\r\n  preview?: IconConfig,\r\n  image?: IconConfig,\r\n  plus?: IconConfig,\r\n  minus?: IconConfig,\r\n  plusSquare?: IconConfig,\r\n  minusSquare?: IconConfig,\r\n  cipherText?: IconConfig,\r\n  plainText?: IconConfig,\r\n  user?: IconConfig,\r\n  light?: IconConfig,\r\n  dark?: IconConfig,\r\n  signOut?: IconConfig,\r\n  indent?: IconConfig,\r\n  outdent?: IconConfig,\r\n  search?: IconConfig,\r\n  rotateRight?: IconConfig,\r\n  rotateLeft?: IconConfig,\r\n  flipX?: IconConfig,\r\n  flipY?: IconConfig,\r\n  zoomIn?: IconConfig,\r\n  zoonOut?: IconConfig,\r\n  fullScreen?: IconConfig,\r\n  resetScreen?: IconConfig,\r\n  dragger?: IconConfig,\r\n  file?: IconConfig,\r\n  fileText?: IconConfig,\r\n  fileCode?: IconConfig,\r\n  fileImage?: IconConfig,\r\n  fileAudio?: IconConfig,\r\n  fileVideo?: IconConfig,\r\n  fileZip?: IconConfig,\r\n  volume?: IconConfig,\r\n  volumeLow?: IconConfig,\r\n  volumeMute?: IconConfig,\r\n  play?: IconConfig,\r\n  pause?: IconConfig,\r\n  fullWindow?: IconConfig,\r\n  pip?: IconConfig,\r\n  playState?: IconConfig,\r\n  pauseState?: IconConfig,\r\n  playPrev?: IconConfig,\r\n  playNext?: IconConfig,\r\n}\r\n\r\nexport type IconName = keyof IconsOptions\r\nexport type IconsConfig = {\r\n  [K in keyof IconsOptions]-?: IconConfig\r\n}\r\nexport type NormalizedIconsConfig = Record<IconName, IconOptions & { icon: IconValue }>\r\n\r\nconst iconMap: IconsConfig = {\r\n  loading: [Loader2, { effect: 'spin-in' }],\r\n  clear: XCircle,\r\n  close: X,\r\n  calendar: Calendar,\r\n  clock: Clock,\r\n  exchange: ArrowLeftRight,\r\n  angleUp: ChevronUp,\r\n  angleRight: ChevronRight,\r\n  angleDown: ChevronDown,\r\n  angleLeft: ChevronLeft,\r\n  anglesRight: ChevronsRight,\r\n  anglesLeft: ChevronsLeft,\r\n  retweet: Repeat2,\r\n  refresh: RefreshCw,\r\n  filter: Filter,\r\n  ellipsis: MoreHorizontal,\r\n  upload: Upload,\r\n  uploadCloud: UploadCloud,\r\n  check: Check,\r\n  help: HelpCircle,\r\n  alert: Siren,\r\n  question: MessageCircleQuestion,\r\n  info: Info,\r\n  success: CheckCircle2,\r\n  warning: AlertCircle,\r\n  error: XCircle,\r\n  delete: Trash2,\r\n  preview: Eye,\r\n  image: Image,\r\n  plus: Plus,\r\n  minus: Minus,\r\n  plusSquare: PlusSquare,\r\n  minusSquare: MinusSquare,\r\n  cipherText: EyeOff,\r\n  plainText: Eye,\r\n  user: UserRound,\r\n  light: Sun,\r\n  dark: Moon,\r\n  signOut: LogOut,\r\n  indent: Indent,\r\n  outdent: Outdent,\r\n  search: Search,\r\n  rotateRight: RotateCw,\r\n  rotateLeft: RotateCcw,\r\n  flipX: FlipHorizontal,\r\n  flipY: FlipVertical,\r\n  zoomIn: ZoomIn,\r\n  zoonOut: ZoomOut,\r\n  fullScreen: Maximize,\r\n  resetScreen: Minimize,\r\n  dragger: GripVertical,\r\n  file: File,\r\n  fileText: FileText,\r\n  fileCode: FileCode,\r\n  fileImage: FileImage,\r\n  fileAudio: FileMusic,\r\n  fileVideo: FileVideo,\r\n  fileZip: FileArchive,\r\n  volume: Volume2,\r\n  volumeLow: Volume1,\r\n  volumeMute: VolumeX,\r\n  play: Play,\r\n  pause: Pause,\r\n  fullWindow: Fullscreen,\r\n  pip: PictureInPicture,\r\n  playState: Play,\r\n  pauseState: Pause,\r\n  playPrev: SkipBack,\r\n  playNext: SkipForward,\r\n}\r\n\r\nexport const iconNames = Object.freeze(Object.keys(iconMap) as IconName[])\r\n\r\nexport const globalIcons = computed(() => {\r\n  const icons = {} as NormalizedIconsConfig\r\n\r\n  for (const name of iconNames) {\r\n    const [icon, options = {}] = ensureArray(iconMap[name]) as [Record<string, any>, IconOptions?]\r\n\r\n    icons[name] = { ...options, icon }\r\n  }\r\n\r\n  return icons\r\n})\r\n\r\n/**\r\n * Provide a icons config for under components.\r\n *\r\n * @param icons icons config\r\n * @param app the app of Vue, will use app.provide if specify\r\n */\r\nexport function configIcons(icons: MaybeRef<IconsOptions>, app?: App) {\r\n  const upstreamIcons =\r\n    app || !getCurrentScope()\r\n      ? globalIcons\r\n      : inject<ComputedRef<IconsConfig> | null>(PROVIDED_ICONS, null)\r\n  const normalizedIcons = computed(() => {\r\n    const normalizedIcons = {} as IconsConfig\r\n    const unrefIcons = unref(icons)\r\n\r\n    for (const name of iconNames) {\r\n      const config = unrefIcons[name]\r\n\r\n      if (!config) {\r\n        normalizedIcons[name] = upstreamIcons?.value[name] || globalIcons.value[name]\r\n      } else {\r\n        const [icon, options = {}] = ensureArray(config) as IconArrayValue\r\n        const normalizedIcon = typeof icon === 'function' ? icon : markRaw(icon)\r\n\r\n        normalizedIcons[name] = { ...options, icon: normalizedIcon }\r\n      }\r\n    }\r\n\r\n    return normalizedIcons\r\n  })\r\n\r\n  if (app) {\r\n    app.provide(PROVIDED_ICONS, normalizedIcons)\r\n  } else {\r\n    provide(PROVIDED_ICONS, normalizedIcons)\r\n  }\r\n}\r\n\r\nexport function useIcons() {\r\n  return inject<ComputedRef<NormalizedIconsConfig>>(PROVIDED_ICONS, globalIcons)\r\n}\r\n","import type { BEM, NBEM } from './types'\r\n\r\nexport * from './types'\r\n\r\n/**\r\n * Get `--variable` CSS variable.\r\n *\r\n * @param v the variable\r\n */\r\nexport const cv = <V extends string>(v: V) => `--${v}` as const\r\n/**\r\n * Get `var(--variable)` CSS style value.\r\n *\r\n * @param v the variable\r\n */\r\nexport const gcv = <V extends string>(v: V) => `var(--${v})` as const\r\n/**\r\n * Get `--variable: style;` CSS style content.\r\n *\r\n * @param v the variable\r\n * @param s the style\r\n */\r\nexport const scv = <V extends string, S extends string>(v: V, s: S) => `--${v}: ${s};` as const\r\n\r\nexport function useBEM<B extends string>(block: B): BEM<B>\r\nexport function useBEM<B extends string, N extends string>(block: B, namespace: N): NBEM<B, N>\r\nexport function useBEM<B extends string, N extends string>(\r\n  block: B,\r\n  namespace: (isVar?: boolean) => N\r\n): NBEM<B, N>\r\nexport function useBEM<B extends string, N extends string>(\r\n  block: B,\r\n  namespace?: N | ((isVar?: boolean) => N),\r\n) {\r\n  if (!namespace) {\r\n    return <BEM<B>>{\r\n      b: () => `${block}`,\r\n      be: e => `${block}__${e}`,\r\n      bm: m => `${block}--${m}`,\r\n      bem: (e, m) => `${block}__${e}--${m}`,\r\n      bs: s => `${block}-${s}`,\r\n\r\n      cb: () => `.${block}`,\r\n      cbe: e => `.${block}__${e}`,\r\n      cbm: m => `.${block}--${m}`,\r\n      cbem: (e, m) => `.${block}__${e}--${m}`,\r\n      cbs: s => `.${block}-${s}`,\r\n\r\n      cv: v => cv(`${block}-${v}`),\r\n      cvm: (m, s = {} as any) => {\r\n        for (const key of Object.keys(m)) {\r\n          s[cv(`${block}-${key}`)] = m[key]\r\n        }\r\n\r\n        return s\r\n      },\r\n      gcv: v => gcv(`${block}-${v}`),\r\n      scv: (v, s) => scv(`${block}-${v}`, s),\r\n    }\r\n  }\r\n\r\n  const n = (isVar?: boolean) => (typeof namespace === 'function' ? namespace(isVar) : namespace)\r\n\r\n  return <NBEM<B, N>>{\r\n    b: () => `${n()}-${block}`,\r\n    be: e => `${n()}-${block}__${e}`,\r\n    bm: m => `${n()}-${block}--${m}`,\r\n    bem: (e, m) => `${n()}-${block}__${e}--${m}`,\r\n    bs: s => `${n()}-${block}-${s}`,\r\n    ns: s => `${n()}-${s}`,\r\n\r\n    cb: () => `.${n()}-${block}`,\r\n    cbe: e => `.${n()}-${block}__${e}`,\r\n    cbm: m => `.${n()}-${block}--${m}`,\r\n    cbem: (e, m) => `.${n()}-${block}__${e}--${m}`,\r\n    cbs: s => `.${n()}-${block}-${s}`,\r\n    cns: s => `.${n()}-${s}`,\r\n\r\n    cv: v => cv(`${n(true)}-${block}-${v}`),\r\n    cvm: (m, s = {} as any) => {\r\n      const namespace = n(true)\r\n\r\n      for (const key of Object.keys(m)) {\r\n        s[cv(`${namespace}-${block}-${key}`)] = m[key]\r\n      }\r\n\r\n      return s\r\n    },\r\n    gcv: v => gcv(`${n(true)}-${block}-${v}`),\r\n    scv: (v, s) => scv(`${n(true)}-${block}-${v}`, s),\r\n    nv: v => cv(`${n(true)}-${v}`),\r\n    nvm: (m, s = {} as any) => {\r\n      const namespace = n(true)\r\n\r\n      for (const key of Object.keys(m)) {\r\n        s[cv(`${namespace}-${key}`)] = m[key]\r\n      }\r\n\r\n      return s\r\n    },\r\n    gnv: v => gcv(`${n(true)}-${v}`),\r\n    snv: (v, s) => scv(`${n(true)}-${v}`, s),\r\n  }\r\n}\r\n","import { computed, inject, provide, unref } from 'vue'\r\n\r\nimport { useBEM } from '@vexip-ui/bem-helper'\r\n\r\nimport type { App, ComputedRef, MaybeRef } from 'vue'\r\n\r\nexport type Namespace = 'vxp'\r\n\r\nexport const PROVIDED_NAMESPACE = '__vxp-provided-namespace'\r\nexport const globalNamespace = computed(() => 'vxp' as Namespace)\r\n\r\n/**\r\n * Provide a namespace config for under components.\r\n *\r\n * You only should use this method when initialize application.\r\n *\r\n * @param sourceNamespace namespace config\r\n * @param app the app of Vue, will use app.provide if specify\r\n */\r\nexport function configNamespace<N extends string = Namespace>(\r\n  sourceNamespace: MaybeRef<N>,\r\n  app?: App,\r\n) {\r\n  if (app) {\r\n    const namespace = computed(() => {\r\n      const namespace = unref(sourceNamespace)\r\n\r\n      return namespace || globalNamespace.value\r\n    })\r\n\r\n    app.provide(PROVIDED_NAMESPACE, namespace)\r\n  } else {\r\n    const upstreamNamespace = inject<ComputedRef<string> | null>(PROVIDED_NAMESPACE, null)\r\n    const namespace = computed(() => {\r\n      return unref(sourceNamespace) || upstreamNamespace?.value || globalNamespace.value\r\n    })\r\n\r\n    provide(PROVIDED_NAMESPACE, namespace)\r\n  }\r\n}\r\n\r\nexport function useNamespace<N extends string = Namespace>() {\r\n  return inject(PROVIDED_NAMESPACE, globalNamespace) as ComputedRef<N>\r\n}\r\n\r\n/**\r\n * Create a name helper for BEM.\r\n *\r\n * For css vars name, the namespace is fixed to 'vxp' (not responsive).\r\n */\r\nexport function useNameHelper<B extends string, N extends string = Namespace>(\r\n  block: B,\r\n  namespace: MaybeRef<N> = useNamespace(),\r\n) {\r\n  return useBEM(block, isVar => (isVar ? 'vxp' : unref(namespace)))\r\n}\r\n\r\nexport type NameHelper = ReturnType<typeof useNameHelper>\r\n","import { getCurrentInstance, inject, provide, readonly, shallowRef, unref, watchEffect } from 'vue'\r\n\r\nimport { useNamespace } from './namespace'\r\n\r\nimport type { App, MaybeRef } from 'vue'\r\n\r\nexport const PROVIDED_ID_CONTER = '__vxp-provided-id-counter'\r\n\r\nexport interface IDCounter {\r\n  getNext: () => number | string,\r\n}\r\n\r\nclass VxpIDCounter implements IDCounter {\r\n  private current: number\r\n\r\n  constructor({ current = 0 }: { current?: number } = {}) {\r\n    this.current = current\r\n  }\r\n\r\n  getNext() {\r\n    return this.current++\r\n  }\r\n}\r\n\r\nconst defaultCounter = new VxpIDCounter()\r\n\r\n/**\r\n * Provide a id counter config for under components.\r\n *\r\n * You only should use this method when initialize application.\r\n *\r\n * @param sourceCounter id counter config\r\n * @param app the app of Vue, will use app.provide if specify\r\n */\r\nexport function configIdCounter(sourceCounter: IDCounter = defaultCounter, app?: App) {\r\n  if (app) {\r\n    app.provide(PROVIDED_ID_CONTER, sourceCounter)\r\n  } else {\r\n    const upstreamCounter = inject<IDCounter | null>(PROVIDED_ID_CONTER, null)\r\n\r\n    provide(PROVIDED_ID_CONTER, sourceCounter || upstreamCounter)\r\n  }\r\n}\r\n\r\nexport function useId(customId?: MaybeRef<string>) {\r\n  const namespace = useNamespace()\r\n  const counter = getCurrentInstance()\r\n    ? inject<IDCounter>(PROVIDED_ID_CONTER, defaultCounter)\r\n    : defaultCounter\r\n\r\n  const id = shallowRef()\r\n\r\n  watchEffect(\r\n    () => {\r\n      id.value = unref(customId) || `${namespace.value}-id-${counter.getNext()}`\r\n    },\r\n    { flush: 'sync' },\r\n  )\r\n\r\n  return readonly(id)\r\n}\r\n","import { computed, inject, provide, reactive, unref, watch } from 'vue'\r\n\r\nimport { has, isFunction, isNull, isObject, mergeObjects } from '@vexip-ui/utils'\r\n\r\nimport type {\r\n  App,\r\n  CSSProperties,\r\n  ComponentObjectPropsOptions,\r\n  ComputedRef,\r\n  MaybeRef,\r\n  PropType,\r\n} from 'vue'\r\nimport type { LocaleConfig, LocaleNames } from './locale'\r\nimport type { AnyFunction, EnsureValue, Expand, MaybeFunction, VoidFunction } from './types'\r\n\r\nexport type PropsOptions = Record<string, Record<string, unknown>>\r\n\r\ninterface PropsConfig<T = any> {\r\n  /**\r\n   * The default value of the prop\r\n   */\r\n  default: T | (() => T) | null,\r\n  /**\r\n   * Whether the prop is a function type\r\n   *\r\n   * @default false\r\n   */\r\n  isFunc?: boolean,\r\n  /**\r\n   * Whether the prop is not configurable\r\n   *\r\n   * @default false\r\n   */\r\n  static?: boolean,\r\n  /**\r\n   * Whether the prop is required\r\n   *\r\n   * @default false\r\n   */\r\n  required?: boolean,\r\n  /**\r\n   * The validator for the prop, decide whether the value of the prop is valid\r\n   *\r\n   * @param value the value of the prop\r\n   */\r\n  validator?: (value: T) => any,\r\n}\r\n\r\ntype PropsConfigOptions<T> = {\r\n  [K in keyof T]?:\r\n    | PropsConfig<EnsureValue<T[K]>>\r\n    | EnsureValue<T[K]>\r\n    | (() => EnsureValue<T[K]>)\r\n    | null\r\n}\r\n\r\nexport const PROVIDED_PROPS = '__vxp-provided-props'\r\nconst eventPropRE = /^on[A-Z]/\r\n\r\n/**\r\n * Provide a props config for under components.\r\n *\r\n * @param props props config\r\n * @param app the app of Vue, will use app.provide if specify\r\n */\r\nexport function configProps<T>(props: MaybeRef<T>, app?: App) {\r\n  if (app) {\r\n    app.provide(\r\n      PROVIDED_PROPS,\r\n      computed(() => unref(props)),\r\n    )\r\n  } else {\r\n    const upstreamProps = inject<ComputedRef<Record<string, any>> | null>(PROVIDED_PROPS, null)\r\n    const providedProps = computed(() => {\r\n      if (!upstreamProps?.value) {\r\n        return unref(props)\r\n      }\r\n\r\n      return mergeObjects(upstreamProps.value, unref(props) as any)\r\n    })\r\n\r\n    provide(PROVIDED_PROPS, providedProps)\r\n  }\r\n}\r\n\r\nexport function useProps<T extends Record<string, any>>(\r\n  name: string,\r\n  sourceProps: T,\r\n  config: PropsConfigOptions<T> = {},\r\n) {\r\n  const providedProps = inject<ComputedRef<Record<string, PropsConfigOptions<T>>> | null>(\r\n    PROVIDED_PROPS,\r\n    null,\r\n  )\r\n  const commonProps = computed<PropsConfigOptions<T>>(() => {\r\n    return providedProps?.value?.default ?? {}\r\n  })\r\n  const configProps = computed<PropsConfigOptions<T>>(() => {\r\n    return providedProps?.value?.[name] ?? {}\r\n  })\r\n  const keys = Object.keys(sourceProps) as Array<keyof T>\r\n  const props: {\r\n    [P in keyof T]?: ComputedRef<T[P]>\r\n  } = {}\r\n\r\n  keys.forEach(key => {\r\n    const defs = config[key]\r\n    const propOptions = (\r\n      isObject(defs) && has(defs, 'default') ? defs : { default: defs }\r\n    ) as PropsConfig<T[keyof T]>\r\n    const validator = isFunction(propOptions.validator) ? propOptions.validator : null\r\n    const defaultValue = propOptions.default\r\n    const isFunc = isNull(propOptions.isFunc) ? eventPropRE.test(String(key)) : propOptions.isFunc\r\n    const getValue = (value: PropsConfigOptions<T>[keyof T]) =>\r\n      !isFunc && isFunction(value) ? value() : value\r\n    const getDefault = () =>\r\n      (!isFunc && isFunction(defaultValue) ? defaultValue() : defaultValue) as T[keyof T]\r\n\r\n    ;(propOptions.required || validator) &&\r\n      watch(\r\n        () => sourceProps[key],\r\n        value => {\r\n          if (isNull(value)) {\r\n            if (propOptions.required) {\r\n              console.warn(`${toWarnPrefix(name)}: '${key as string}' prop is required but not set`)\r\n            }\r\n\r\n            return\r\n          } else if (!validator) {\r\n            return\r\n          }\r\n\r\n          const result = validator(value)\r\n\r\n          if (result === false) {\r\n            console.warn(\r\n              `${toWarnPrefix(name)}: an invalid value is set to '${key as string}' prop`,\r\n            )\r\n          }\r\n        },\r\n        { immediate: true },\r\n      )\r\n\r\n    if (propOptions.static) {\r\n      props[key] = computed(() => sourceProps[key] ?? getDefault())\r\n    } else {\r\n      props[key] = computed(() => {\r\n        if (isNull(sourceProps[key])) {\r\n          if (!isNull(configProps.value[key])) {\r\n            return getValue(configProps.value[key])\r\n          }\r\n          if (!isNull(commonProps.value[key])) {\r\n            return getValue(commonProps.value[key])\r\n          }\r\n\r\n          return getDefault()\r\n        }\r\n\r\n        return sourceProps[key]\r\n      })\r\n    }\r\n  })\r\n\r\n  return reactive(props) as {\r\n    [P in keyof T]-?: Exclude<T[P], undefined>\r\n  }\r\n}\r\n\r\nexport function useHookProps<T extends Record<any, any>>(\r\n  props: T,\r\n  defaults: { [K in keyof T]: T[K] | null },\r\n) {\r\n  const propsWithDefault: { [P in keyof T]?: ComputedRef<T[P]> } = {}\r\n\r\n  for (const key of Object.keys(props) as (keyof T)[]) {\r\n    propsWithDefault[key] = computed(() => props[key] ?? defaults[key]!)\r\n  }\r\n\r\n  return reactive(propsWithDefault) as {\r\n    [P in keyof T]-?: Exclude<T[P], undefined>\r\n  }\r\n}\r\n\r\nfunction toWarnPrefix(name: string) {\r\n  return `[vexip-ui:${name.charAt(0).toLocaleUpperCase() + name.substring(1)}]`\r\n}\r\n\r\nexport const booleanProp = {\r\n  type: Boolean,\r\n  default: null,\r\n}\r\nexport const booleanStringProp = {\r\n  type: [Boolean, String],\r\n  default: null,\r\n}\r\nexport const booleanNumberProp = {\r\n  type: [Boolean, Number],\r\n  default: null,\r\n}\r\n\r\ntype CommonExcludedProps =\r\n  | 'inherit'\r\n  | 'value'\r\n  | 'checked'\r\n  | 'active'\r\n  | 'visible'\r\n  | 'label'\r\n  | 'options'\r\n  | 'name'\r\ntype ExcludeProps<P, E extends string = never, I extends string = never> =\r\n  | Exclude<CommonExcludedProps, I>\r\n  | Exclude<E, I>\r\n  | (P extends I ? never : P extends `on${Capitalize<string>}` ? P : never)\r\ntype PostProps<T, E extends string> = Omit<{ [P in keyof T]: MaybeFunction<T[P]> }, E>\r\n\r\n/**\r\n * Create a configurable props\r\n *\r\n * @param T the type of import('vue').ExtractPropTypes\r\n * @param E the props should force exclude\r\n * @param I the props should force include\r\n */\r\nexport type ConfigurableProps<T, E extends string = never, I extends string = never> = PostProps<\r\n  {\r\n    [P in keyof T]?: P extends I\r\n      ? T[P]\r\n      : P extends `on${Capitalize<string>}`\r\n        ? never\r\n        : T[Exclude<P, CommonExcludedProps | E>]\r\n  },\r\n  ExcludeProps<keyof T, E, I>\r\n>\r\n\r\ntype VexipProps<T> = {\r\n  [P in keyof T]: T[P] extends PropType<infer I>\r\n    ? PropType<I & {}>\r\n    : T[P] extends { type: PropType<infer I> }\r\n      ? PropType<I & {}>\r\n      : T[P]\r\n}\r\n\r\nexport function wrapProps<T extends ComponentObjectPropsOptions>(props: T) {\r\n  return Object.freeze(props) as Expand<T>\r\n}\r\n\r\nexport function buildProps<T extends ComponentObjectPropsOptions>(props: T) {\r\n  const common = {\r\n    inherit: booleanProp,\r\n  }\r\n\r\n  return Object.freeze({ ...common, ...props }) as Expand<VexipProps<typeof common & T>>\r\n}\r\n\r\nexport function omitProps<T extends ComponentObjectPropsOptions, K extends keyof T>(\r\n  props: T,\r\n  keys: K[],\r\n): Expand<Omit<T, K>>\r\nexport function omitProps<\r\n  T extends ComponentObjectPropsOptions,\r\n  K extends keyof T,\r\n  E extends ComponentObjectPropsOptions,\r\n>(props: T, keys: K[], extra: E): Expand<Omit<T, K> & E>\r\nexport function omitProps<\r\n  T extends ComponentObjectPropsOptions,\r\n  K extends keyof T,\r\n  E extends ComponentObjectPropsOptions,\r\n>(props: T, keys: K[], extra?: E) {\r\n  const omittedKeys = new Set(keys)\r\n\r\n  return Object.freeze(\r\n    Object.assign(\r\n      (Object.keys(props) as any[]).reduce((prev, current) => {\r\n        if (!omittedKeys.has(current)) {\r\n          prev[current] = props[current]\r\n        }\r\n\r\n        return prev\r\n      }, {}),\r\n      extra || {},\r\n    ),\r\n  )\r\n}\r\n\r\nexport type ComponentSize = 'small' | 'default' | 'large'\r\n\r\nexport const sizeProp = String as PropType<ComponentSize>\r\nconst validSizeValues: ComponentSize[] = ['small', 'default', 'large']\r\nconst sizeValidator = (value: ComponentSize) => validSizeValues.includes(value)\r\n\r\nexport function createSizeProp(defaultValue: MaybeRef<ComponentSize> = 'default') {\r\n  return {\r\n    default: () => unref(defaultValue),\r\n    validator: sizeValidator,\r\n  }\r\n}\r\n\r\nexport type ComponentState = 'default' | 'success' | 'error' | 'warning'\r\n\r\nexport const stateProp = String as PropType<ComponentState>\r\nconst validStateValues: ComponentState[] = ['default', 'success', 'error', 'warning']\r\nconst stateValidator = (value: ComponentState) => validStateValues.includes(value)\r\n\r\nexport function createStateProp(defaultValue: MaybeRef<ComponentState> = 'default') {\r\n  return {\r\n    default: () => unref(defaultValue),\r\n    validator: stateValidator,\r\n  }\r\n}\r\n\r\ntype MaybeArray<T> = T | T[]\r\n// type MaybeArrayDeep<T> = T | (MaybeArrayDeep<T>[] extends infer R ? R : never)\r\n\r\nexport type ClassType = string | Record<string, any> | Array<string | Record<string, any>>\r\nexport type StyleType = string | CSSProperties | Array<string | CSSProperties>\r\n\r\nexport const classProp = [String, Object, Array] as PropType<ClassType>\r\nexport const styleProp = [String, Object, Array] as PropType<StyleType>\r\n\r\ntype ForceBoolean<T> = true extends T\r\n  ? Exclude<T, boolean> | boolean\r\n  : false extends T\r\n    ? Exclude<T, boolean> | boolean\r\n    : T\r\ntype ForceBooleanDeep<T> = T extends unknown ? { [K in keyof T]: ForceBoolean<T[K]> } : never\r\ntype SplitAndCombo<T, O = T> = T extends unknown\r\n  ?\r\n      | [T]\r\n      | (SplitAndCombo<Exclude<O, T>> extends infer U extends any[]\r\n        ? U extends U\r\n          ? [ForceBoolean<T | U[number]>]\r\n          : never\r\n        : never)\r\n  : never\r\ntype GenerateEvent<T extends any[], Others extends any[], R = any> = T extends unknown\r\n  ? Others extends never\r\n    ? (value: T[0]) => R\r\n    : (value: T[0], ...args: Others) => R\r\n  : never\r\n\r\n/**\r\n * Split and combo the first parameter of the given function\r\n *\r\n * @example\r\n * ```ts\r\n * // origin function\r\n * type Fn = (value: string | number | boolean) => void\r\n *\r\n * // after transform\r\n * type After =\r\n *  | ((value: string | number | boolean) => void)\r\n *  | ((value: string | number) => void)\r\n *  | ((value: string | boolean) => void)\r\n *  | ((value: number | boolean) => void)\r\n *  | ((value: string) => void)\r\n *  | ((value: number) => void)\r\n *  | ((value: boolean) => void)\r\n * ```\r\n */\r\nexport type EventListener<T extends AnyFunction> =\r\n  Expand<ForceBooleanDeep<SplitAndCombo<Parameters<T>[0]>>> extends infer F extends any[]\r\n    ? Parameters<T> extends [unknown, ...infer Others]\r\n      ? GenerateEvent<F, Others, ReturnType<T>>\r\n      : GenerateEvent<F, never, ReturnType<T>>\r\n    : never\r\n\r\nconst eventTypes = [Function, Array]\r\n\r\nexport function eventProp<F extends AnyFunction = VoidFunction>() {\r\n  return eventTypes as PropType<MaybeArray<F>>\r\n}\r\n\r\nexport function emitEvent<A extends any[]>(\r\n  handlers: MaybeArray<(...args: A) => void> | undefined,\r\n  ...args: A\r\n) {\r\n  if (Array.isArray(handlers)) {\r\n    for (let i = 0, len = handlers.length; i < len; ++i) {\r\n      const handler = handlers[i]\r\n\r\n      typeof handler === 'function' && handler(...args)\r\n    }\r\n  } else {\r\n    typeof handlers === 'function' && handlers(...args)\r\n  }\r\n}\r\n\r\nexport function localeProp<N extends LocaleNames>(_name: N) {\r\n  return Object as PropType<Partial<LocaleConfig[N]>>\r\n}\r\n\r\nexport const valueProp = {\r\n  type: [String, Number, Boolean],\r\n  default: null,\r\n}\r\nexport const valuesProp = {\r\n  type: [String, Number, Boolean, Array] as PropType<MaybeArray<string | number | boolean>>,\r\n  default: null,\r\n}\r\n\r\nexport const iconProp = [Object, Function]\r\n\r\nexport function createIconProp(defaultValue: Record<any, any> | AnyFunction | null = null) {\r\n  return {\r\n    isFunc: true,\r\n    default: defaultValue,\r\n  }\r\n}\r\n","import { computed, getCurrentInstance, inject, provide, unref } from 'vue'\r\n\r\nimport { isClient, isDefined } from '@vexip-ui/utils'\r\n\r\nimport type { App, ComputedRef, MaybeRef } from 'vue'\r\n\r\nexport const PROVIDED_Z_INDEX = '___vxp-provided-z-index'\r\n\r\nlet initZIndex = 2000\r\n\r\nif (isClient) {\r\n  const rootStyle = getComputedStyle(document.documentElement)\r\n  const cssZIndex = parseFloat(rootStyle.getPropertyValue('--vxp-z-index-popup').trim())\r\n\r\n  if (!Number.isNaN(cssZIndex)) {\r\n    initZIndex = cssZIndex\r\n  }\r\n}\r\n\r\nconst counter = {\r\n  current: 0,\r\n}\r\n\r\nexport const globalZIndex = computed(() => initZIndex)\r\n\r\nfunction getOrDefault(num: number, def: number) {\r\n  return isDefined(num) && !Number.isNaN(num) ? num : def\r\n}\r\n\r\n/**\r\n * Provide a z-index config for under components.\r\n *\r\n * @param sourceZIndex z-index config\r\n * @param app the app of Vue, will use app.provide if specify\r\n */\r\nexport function configZIndex(sourceZIndex: MaybeRef<number>, app?: App) {\r\n  if (app) {\r\n    const zIndex = computed(() => {\r\n      const zIndex = unref(sourceZIndex)\r\n\r\n      return getOrDefault(zIndex, globalZIndex.value)\r\n    })\r\n\r\n    app.provide(PROVIDED_Z_INDEX, zIndex)\r\n  } else {\r\n    const upstreamZIndex = inject<ComputedRef<number> | null>(PROVIDED_Z_INDEX, null)\r\n    const zIndex = computed(() => {\r\n      const zIndex = unref(sourceZIndex)\r\n\r\n      return getOrDefault(\r\n        zIndex,\r\n        upstreamZIndex ? getOrDefault(upstreamZIndex.value, globalZIndex.value) : globalZIndex.value,\r\n      )\r\n    })\r\n\r\n    provide(PROVIDED_Z_INDEX, zIndex)\r\n  }\r\n}\r\n\r\nexport function useZIndex() {\r\n  const zIndex = getCurrentInstance()\r\n    ? inject<ComputedRef<number>>(PROVIDED_Z_INDEX, globalZIndex)\r\n    : globalZIndex\r\n\r\n  // return computed(() => zIndex.value + counter++)\r\n  return () => zIndex.value + counter.current++\r\n}\r\n","import { buildProps, iconProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { IconEffect, IconRenderer } from './symbol'\r\n\r\nexport const iconProps = buildProps({\r\n  icon: iconProp,\r\n  scale: [Number, String],\r\n  title: String,\r\n  label: String,\r\n  flip: String as PropType<'horizontal' | 'vertical' | 'both'>,\r\n  effect: String as PropType<IconEffect>,\r\n  size: String,\r\n  color: String,\r\n  rotate: [Number, String],\r\n  renderer: Function as PropType<IconRenderer>,\r\n})\r\n\r\nexport type IconProps = ExtractPropTypes<typeof iconProps>\r\nexport type IconCProps = ConfigurableProps<IconProps, 'icon'>\r\n","import { computed, defineComponent, h, renderSlot } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { toNumber } from '@vexip-ui/utils'\r\nimport { iconProps } from './props'\r\n\r\nimport type { CSSProperties } from 'vue'\r\nimport type { IconPresetEffect } from './symbol'\r\n\r\nconst internalEffects = Object.freeze<IconPresetEffect[]>([\r\n  'spin-in',\r\n  'spin-out',\r\n  'pulse-in',\r\n  'pulse-out',\r\n])\r\n\r\nconst angleRE = /(^\\s*[+-]?\\d*\\.?\\d+\\s*)(deg|grad|turn|rad)?\\s*/i\r\n\r\nexport default defineComponent({\r\n  name: 'Icon',\r\n  props: iconProps,\r\n  setup(_props, { attrs, slots }) {\r\n    const props = useProps('icon', _props, {\r\n      icon: {\r\n        isFunc: true,\r\n        default: null,\r\n        static: true,\r\n      },\r\n      scale: 1,\r\n      title: null,\r\n      label: null,\r\n      flip: {\r\n        default: null,\r\n        validator: value => ['horizontal', 'vertical', 'both'].includes(value),\r\n      },\r\n      effect: null,\r\n      size: null,\r\n      color: null,\r\n      rotate: null,\r\n      renderer: {\r\n        default: null,\r\n        isFunc: true,\r\n      },\r\n    })\r\n\r\n    const nh = useNameHelper('icon')\r\n\r\n    const className = computed(() => {\r\n      let effectCls = ''\r\n\r\n      if (props.effect) {\r\n        effectCls = internalEffects.includes(props.effect as IconPresetEffect)\r\n          ? nh.bm(props.effect)\r\n          : props.effect\r\n      }\r\n\r\n      return {\r\n        [nh.b()]: true,\r\n        [nh.bm(`flip-${props.flip}`)]: props.flip,\r\n        [effectCls]: effectCls,\r\n      }\r\n    })\r\n    const computedScale = computed(() => toNumber(props.scale) || 1)\r\n    const rotate = computed(() => {\r\n      if (typeof props.rotate === 'number') {\r\n        return `${(props.rotate % 4) / 4}turn`\r\n      }\r\n\r\n      const matched = props.rotate?.match(angleRE)\r\n\r\n      if (!matched) return null\r\n\r\n      const number = toNumber(matched[1])\r\n\r\n      if (!matched[2]) {\r\n        return `${(number % 4) / 4}turn`\r\n      }\r\n\r\n      return number ? `${number}${matched[2]}` : null\r\n    })\r\n    const style = computed(() => {\r\n      const style: CSSProperties = {\r\n        color: props.color,\r\n      }\r\n\r\n      if (props.size) {\r\n        style.fontSize = props.size\r\n      } else if (computedScale.value !== 1) {\r\n        style.fontSize = `${computedScale.value}em`\r\n      }\r\n\r\n      if (rotate.value) {\r\n        style[nh.cv('rotate')] = rotate.value\r\n      }\r\n\r\n      return style\r\n    })\r\n\r\n    function renderDefault() {\r\n      const iAttrs = {\r\n        class: className.value,\r\n        style: style.value,\r\n        title: props.title,\r\n        role: (attrs.role as string) || (props.label || props.title ? 'img' : undefined),\r\n        'aria-label': props.label,\r\n        'aria-hidden': !(props.label || props.title),\r\n      }\r\n\r\n      if (slots.default) {\r\n        return (\r\n          <i {...iAttrs}>\r\n            <g>{renderSlot(slots, 'default')}</g>\r\n          </i>\r\n        )\r\n      }\r\n\r\n      if (props.icon) {\r\n        return (\r\n          <i {...iAttrs}>\r\n            <g>{h(props.icon)}</g>\r\n          </i>\r\n        )\r\n      }\r\n\r\n      return <i {...iAttrs}></i>\r\n    }\r\n\r\n    return () => {\r\n      if (typeof props.renderer === 'function') {\r\n        return props.renderer(props as any, attrs, renderDefault)\r\n      }\r\n\r\n      return renderDefault()\r\n    }\r\n  },\r\n})\r\n","import { wrapProps } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\n\r\nexport const rendererProps = wrapProps({\r\n  renderer: {\r\n    type: Function,\r\n    default: null,\r\n  },\r\n  data: {\r\n    type: Object as PropType<Record<string, any>>,\r\n    default: undefined,\r\n  },\r\n})\r\n\r\nexport type RendererProps = ExtractPropTypes<typeof rendererProps>\r\n","import { defineComponent, renderSlot } from 'vue'\r\n\r\nimport { rendererProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'Renderer',\r\n  props: rendererProps,\r\n  setup(props, { slots }) {\r\n    return () => {\r\n      if (typeof props.renderer !== 'function') {\r\n        return renderSlot(slots, 'default', props.data)\r\n      }\r\n\r\n      return props.renderer(props.data)\r\n    }\r\n  },\r\n})\r\n","import { booleanProp, buildProps, classProp, eventProp, iconProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { SpinSlots } from './symbol'\r\n\r\nexport const spinProps = buildProps({\r\n  active: booleanProp,\r\n  icon: iconProp,\r\n  inner: booleanProp,\r\n  delay: {\r\n    type: [Boolean, Number, Array] as PropType<boolean | number | number[]>,\r\n    default: null,\r\n  },\r\n  tip: String,\r\n  hideMask: booleanProp,\r\n  maskColor: String,\r\n  maskClass: classProp,\r\n  transitionName: String,\r\n  iconEffect: String as PropType<IconEffect>,\r\n  slots: Object as PropType<SpinSlots>,\r\n  onMaskClick: eventProp<(event: MouseEvent) => void>(),\r\n  onShow: eventProp(),\r\n  onHide: eventProp(),\r\n})\r\n\r\nexport type SpinProps = ExtractPropTypes<typeof spinProps>\r\nexport type SpinCProps = ConfigurableProps<SpinProps>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, ref, watch } from 'vue'\r\n\r\nimport { createIconProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { toNumber } from '@vexip-ui/utils'\r\nimport { spinProps } from './props'\r\n\r\nimport type { SpinSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'Spin' })\r\n\r\nconst nh = useNameHelper('spin')\r\nconst _props = defineProps(spinProps)\r\nconst props = useProps('spin', _props, {\r\n  active: {\r\n    default: false,\r\n    static: true,\r\n  },\r\n  icon: createIconProp(),\r\n  inner: false,\r\n  delay: false,\r\n  tip: '',\r\n  hideMask: false,\r\n  maskColor: '',\r\n  maskClass: null,\r\n  transitionName: () => nh.ns('fade'),\r\n  iconEffect: null,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst slots = defineSlots<SpinSlots>()\r\n\r\nconst icons = useIcons()\r\n\r\nconst currentActive = ref(props.active)\r\n\r\nconst hasTip = computed(() => !!(props.tip || slots.tip))\r\nconst maskStyle = computed(() => {\r\n  const style = {} as any\r\n\r\n  if (props.maskColor) {\r\n    style[nh.cv('mask-bg-color')] = props.maskColor\r\n  }\r\n\r\n  return style\r\n})\r\nconst delayTime = computed(() => {\r\n  if (props.delay) {\r\n    if (props.delay === true) {\r\n      return { enter: 500, leave: 500 }\r\n    }\r\n\r\n    if (typeof props.delay === 'number') {\r\n      return { enter: props.delay, leave: props.delay }\r\n    }\r\n\r\n    if (Array.isArray(props.delay)) {\r\n      return { enter: toNumber(props.delay[0]), leave: toNumber(props.delay[1]) }\r\n    }\r\n  }\r\n\r\n  return { enter: 0, leave: 0 }\r\n})\r\n\r\nlet timer: ReturnType<typeof setTimeout>\r\n\r\nwatch(\r\n  () => props.active,\r\n  value => {\r\n    clearTimeout(timer)\r\n\r\n    const delay = value ? delayTime.value.enter : delayTime.value.leave\r\n\r\n    if (delay) {\r\n      timer = setTimeout(() => {\r\n        currentActive.value = value\r\n      }, delay)\r\n    } else {\r\n      currentActive.value = value\r\n    }\r\n  },\r\n)\r\n\r\ndefineExpose({\r\n  currentActive,\r\n  hasTip,\r\n  handleShow,\r\n  handleHide,\r\n})\r\n\r\nfunction handleMaskClick(event: MouseEvent) {\r\n  emitEvent(props.onMaskClick, event)\r\n}\r\n\r\nfunction handleShow() {\r\n  emitEvent(props.onShow)\r\n}\r\n\r\nfunction handleHide() {\r\n  emitEvent(props.onHide)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    v-if=\"!props.inner\"\r\n    :class=\"[nh.b(), nh.bs('vars'), props.inherit && nh.bm('inherit')]\"\r\n    :aria-busy=\"currentActive ? 'true' : undefined\"\r\n  >\r\n    <slot>\r\n      <Renderer :renderer=\"props.slots.default\"></Renderer>\r\n    </slot>\r\n    <Transition\r\n      appear\r\n      :name=\"props.transitionName\"\r\n      @after-enter=\"handleShow\"\r\n      @after-leave=\"handleHide\"\r\n    >\r\n      <div v-if=\"currentActive\" :class=\"nh.be('loading')\">\r\n        <div\r\n          v-if=\"!props.hideMask\"\r\n          :class=\"[nh.be('mask'), props.maskClass]\"\r\n          :style=\"maskStyle\"\r\n          @click=\"handleMaskClick\"\r\n        ></div>\r\n        <slot name=\"content\">\r\n          <Renderer :renderer=\"props.slots.content\">\r\n            <div :class=\"nh.be('icon')\">\r\n              <slot name=\"icon\">\r\n                <Renderer :renderer=\"props.slots.icon\">\r\n                  <Icon\r\n                    v-bind=\"icons.loading\"\r\n                    :icon=\"props.icon || icons.loading.icon\"\r\n                    :effect=\"props.iconEffect || icons.loading.effect\"\r\n                    label=\"loading\"\r\n                  ></Icon>\r\n                </Renderer>\r\n              </slot>\r\n            </div>\r\n            <div v-if=\"hasTip\" :class=\"nh.be('tip')\">\r\n              <slot name=\"tip\">\r\n                <Renderer :renderer=\"props.slots.tip\">\r\n                  {{ props.tip }}\r\n                </Renderer>\r\n              </slot>\r\n            </div>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n    </Transition>\r\n  </div>\r\n  <Transition\r\n    v-else\r\n    appear\r\n    :name=\"props.transitionName\"\r\n    @after-enter=\"handleShow\"\r\n    @after-leave=\"handleHide\"\r\n  >\r\n    <div v-if=\"currentActive\" :class=\"[nh.b(), nh.bs('vars'), nh.bm('inner')]\">\r\n      <div\r\n        v-if=\"!props.hideMask\"\r\n        :class=\"[nh.be('mask'), props.maskClass]\"\r\n        :style=\"maskStyle\"\r\n        @click=\"handleMaskClick\"\r\n      ></div>\r\n      <slot name=\"content\">\r\n        <Renderer :renderer=\"props.slots.content\">\r\n          <div :class=\"nh.be('icon')\">\r\n            <slot name=\"icon\">\r\n              <Renderer :renderer=\"props.slots.icon\">\r\n                <Icon\r\n                  v-bind=\"icons.loading\"\r\n                  :icon=\"props.icon || icons.loading.icon\"\r\n                  :effect=\"props.iconEffect || icons.loading.effect\"\r\n                  label=\"loading\"\r\n                ></Icon>\r\n              </Renderer>\r\n            </slot>\r\n          </div>\r\n          <div v-if=\"hasTip\" :class=\"nh.be('tip')\">\r\n            <slot name=\"tip\">\r\n              <Renderer :renderer=\"props.slots.tip\">\r\n                {{ props.tip }}\r\n              </Renderer>\r\n            </slot>\r\n          </div>\r\n        </Renderer>\r\n      </slot>\r\n    </div>\r\n  </Transition>\r\n</template>\r\n","import { Spin } from '@/components/spin'\r\n\r\nimport { createVNode, nextTick, render } from 'vue'\r\n\r\nimport { isObject } from '@vexip-ui/utils'\r\n\r\nimport type { SpinProps } from '@/components/spin'\r\nimport type { DirectiveBinding, ObjectDirective, VNode } from 'vue'\r\n\r\ninterface LoadingRecord {\r\n  spin: VNode,\r\n  props: SpinProps,\r\n  originPosition: string,\r\n}\r\n\r\ntype LoadingElement = HTMLElement & { __loading?: LoadingRecord }\r\n\r\nfunction createSpin(\r\n  el: LoadingElement,\r\n  binding: DirectiveBinding<boolean | SpinProps>,\r\n  vnode: VNode<any, LoadingElement>,\r\n) {\r\n  const props: SpinProps = isObject(binding.value)\r\n    ? { ...binding.value }\r\n    : { active: binding.value }\r\n\r\n  props.inner = true\r\n\r\n  const spin = createVNode(Spin, props, null, 0, Object.keys(props))\r\n  const position = getComputedStyle(el).position\r\n\r\n  spin.appContext = vnode.appContext ?? (vnode as any).ctx?.appContext\r\n\r\n  el.__loading = {\r\n    spin,\r\n    props,\r\n    originPosition: position,\r\n  }\r\n\r\n  if (position === 'static') {\r\n    el.style.position = 'relative'\r\n  }\r\n\r\n  render(spin, el)\r\n}\r\n\r\nexport const vLoading: ObjectDirective<LoadingElement, boolean | SpinProps> = {\r\n  mounted(el, binding, vnode) {\r\n    nextTick(() => createSpin(el, binding, vnode))\r\n  },\r\n  updated(el, binding, vnode) {\r\n    nextTick(() => {\r\n      if (!el.__loading) {\r\n        createSpin(el, binding, vnode)\r\n        return\r\n      }\r\n\r\n      const props: SpinProps = isObject(binding.value) ? binding.value : { active: binding.value }\r\n      const component = el.__loading.spin.component\r\n\r\n      if (component) {\r\n        Object.keys(props).forEach(key => {\r\n          component.props[key] = props[key as keyof SpinProps]\r\n        })\r\n\r\n        component.props.inner = true\r\n      }\r\n    })\r\n  },\r\n  beforeUnmount(el) {\r\n    if (!el.__loading) return\r\n\r\n    render(null, el)\r\n    delete el.__loading\r\n  },\r\n}\r\n","import { computed, getCurrentScope, onScopeDispose, unref, watch } from 'vue'\r\n\r\nimport { noop } from '@vexip-ui/utils'\r\n\r\nimport type { MaybeRef } from 'vue'\r\n\r\nexport interface UseListenerOptions extends AddEventListenerOptions {\r\n  /**\r\n   * 是否禁用整个 hook 的事件处理\r\n   */\r\n  disabled?: MaybeRef<boolean>,\r\n}\r\n\r\nexport function useListener<E = Event>(\r\n  target: MaybeRef<EventTarget | null | undefined>,\r\n  event: string,\r\n  listener: (event: E) => any,\r\n  options?: UseListenerOptions | boolean,\r\n) {\r\n  if (!target) {\r\n    return noop\r\n  }\r\n\r\n  const normalizedOptions = computed(() => {\r\n    if (typeof options === 'boolean') {\r\n      return { capture: options }\r\n    }\r\n\r\n    return options || {}\r\n  })\r\n\r\n  let remove = noop\r\n\r\n  const stopWatch = watch(\r\n    () => unref(target),\r\n    el => {\r\n      remove()\r\n\r\n      if (!el) {\r\n        return\r\n      }\r\n\r\n      const { disabled, ...opts } = normalizedOptions.value\r\n      const handler = (event: Event) => {\r\n        if (!unref(disabled)) {\r\n          listener(event as E)\r\n        }\r\n      }\r\n\r\n      el.addEventListener(event, handler, opts)\r\n\r\n      remove = () => {\r\n        el.removeEventListener(event, handler, opts)\r\n        remove = noop\r\n      }\r\n    },\r\n    { immediate: true, flush: 'post' },\r\n  )\r\n\r\n  const stop = () => {\r\n    stopWatch()\r\n    remove()\r\n  }\r\n\r\n  getCurrentScope() && onScopeDispose(stop)\r\n\r\n  return stop\r\n}\r\n","import { getCurrentScope, onScopeDispose, ref, unref, watch } from 'vue'\r\n\r\nimport { CLICK_TYPE, dispatchEvent, isClient, noop } from '@vexip-ui/utils'\r\nimport { useListener } from './listener'\r\n\r\nimport type { Ref } from 'vue'\r\nimport type { TransferNode } from '@vexip-ui/utils'\r\n\r\nexport const CLICK_OUTSIDE = 'clickoutside'\r\n\r\nconst elements = new Set<TransferNode>()\r\n\r\nif (isClient) {\r\n  document.addEventListener(\r\n    CLICK_TYPE,\r\n    (event: Event) => {\r\n      const target = event.target as Node | null\r\n      const path = event.composedPath && event.composedPath()\r\n\r\n      elements.forEach(el => {\r\n        if (\r\n          el !== target &&\r\n          (path ? !path.includes(el) : !el.contains(target)) &&\r\n          (!el.__transferElement ||\r\n            (el.__transferElement !== target && !el.__transferElement.contains(target)))\r\n        ) {\r\n          dispatchEvent(el, { type: CLICK_OUTSIDE })\r\n        }\r\n      })\r\n    },\r\n    true,\r\n  )\r\n}\r\n\r\n/**\r\n * 创建一个可以添加 clickoutside 事件的元素 Ref\r\n *\r\n * @param handler 事件的回调方法\r\n * @param target 需要处理的元素 ref，可不传\r\n */\r\nexport function useClickOutside(\r\n  handler: () => void,\r\n  target: Ref<HTMLElement | null | undefined> = ref(null),\r\n) {\r\n  let remove = noop\r\n\r\n  const stopWatch = watch(\r\n    () => unref(target),\r\n    el => {\r\n      remove()\r\n\r\n      if (!el) {\r\n        return\r\n      }\r\n\r\n      elements.add(el)\r\n\r\n      remove = () => {\r\n        elements.delete(el)\r\n        remove = noop\r\n      }\r\n    },\r\n    { immediate: true, flush: 'post' },\r\n  )\r\n\r\n  const stop = () => {\r\n    stopWatch()\r\n    remove()\r\n  }\r\n\r\n  getCurrentScope() && onScopeDispose(stop)\r\n  useListener(target, CLICK_OUTSIDE, handler)\r\n\r\n  return target\r\n}\r\n","import { nextTick, onBeforeUnmount, onMounted, ref } from 'vue'\r\n\r\nimport { noop } from '@vexip-ui/utils'\r\n\r\nimport type { Ref } from 'vue'\r\n\r\n/**\r\n * 创建一个观察了最近的上级元素 display 变化的元素 Ref\r\n *\r\n * @param displayInit 元素初次显示后执行的回调\r\n * @returns 观察了 display 变化的元素 Ref\r\n */\r\nexport function useDisplay(\r\n  displayInit = noop,\r\n  element: Ref<HTMLElement | null | undefined> = ref(null),\r\n) {\r\n  let observer: MutationObserver | null\r\n\r\n  onMounted(() => {\r\n    nextTick(() => {\r\n      const hiddenParentNode = queryOutsideHiddenElement(element.value)\r\n\r\n      if (hiddenParentNode) {\r\n        observer = new MutationObserver(() => {\r\n          if (hiddenParentNode.style.display !== 'none') {\r\n            if (typeof displayInit === 'function') {\r\n              displayInit()\r\n            }\r\n\r\n            observer?.disconnect()\r\n            observer = null\r\n          }\r\n        })\r\n\r\n        observer.observe(hiddenParentNode, {\r\n          attributes: true,\r\n          childList: true,\r\n          characterData: true,\r\n          attributeFilter: ['style'],\r\n        })\r\n      } else {\r\n        typeof displayInit === 'function' && displayInit()\r\n      }\r\n    })\r\n  })\r\n\r\n  onBeforeUnmount(() => {\r\n    observer?.disconnect()\r\n    observer = null\r\n  })\r\n\r\n  return element\r\n}\r\n\r\nexport function queryOutsideHiddenElement(el?: Element | null) {\r\n  if (el) {\r\n    let parentElement = el.parentElement\r\n\r\n    while (parentElement && parentElement !== document.body) {\r\n      if (parentElement.style.display === 'none') {\r\n        return parentElement\r\n      }\r\n\r\n      parentElement = parentElement.parentElement\r\n    }\r\n  }\r\n\r\n  return null\r\n}\r\n\r\nexport function isHiddenElement(el?: HTMLElement | null) {\r\n  if (el?.style.display !== 'none') {\r\n    return !!queryOutsideHiddenElement(el)\r\n  }\r\n\r\n  return true\r\n}\r\n","import {\r\n  Comment,\r\n  Fragment,\r\n  createTextVNode,\r\n  isVNode,\r\n  readonly,\r\n  ref,\r\n  renderSlot,\r\n  toRef,\r\n  unref,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { ensureArray, isClient, noop } from '@vexip-ui/utils'\r\n\r\nimport type {\r\n  ComponentPublicInstance,\r\n  MaybeRef,\r\n  Ref,\r\n  Slots,\r\n  VNode,\r\n  VNodeChild,\r\n  VNodeNormalizedChildren,\r\n} from 'vue'\r\nimport type { MaybeElement, MaybeInstance } from './types'\r\n\r\nexport function createSlotRender(\r\n  slots: Slots,\r\n  names: string[]\r\n): ((params?: any) => VNodeChild) | null\r\nexport function createSlotRender(\r\n  slots: Slots,\r\n  names: string[],\r\n  fallback: (params?: any) => VNodeChild\r\n): (params?: any) => VNodeChild\r\nexport function createSlotRender(\r\n  slots: Slots,\r\n  names: string[],\r\n  fallback?: (params?: any) => VNodeChild,\r\n) {\r\n  for (const name of names) {\r\n    if (slots[name]) {\r\n      return (params: any) =>\r\n        renderSlot(slots, name, params, () => {\r\n          const vnodes = fallback?.(params)\r\n\r\n          return vnodes ? ensureArray(vnodes) : []\r\n        })\r\n    }\r\n  }\r\n\r\n  return fallback || null\r\n}\r\n\r\nexport function flatVNodes(children: VNodeNormalizedChildren) {\r\n  const result: VNode[] = []\r\n  const loop = Array.isArray(children) ? [...children] : []\r\n\r\n  while (loop.length) {\r\n    const vnode = loop.shift()!\r\n\r\n    if (vnode === null) continue\r\n\r\n    if (Array.isArray(vnode)) {\r\n      loop.unshift(...vnode)\r\n    }\r\n\r\n    if (\r\n      typeof vnode !== 'string' &&\r\n      typeof vnode !== 'number' &&\r\n      (!isVNode(vnode) || vnode.type === Comment)\r\n    ) {\r\n      continue\r\n    }\r\n\r\n    if (typeof vnode === 'string' || typeof vnode === 'number') {\r\n      result.push(createTextVNode(String(vnode)))\r\n    } else if (vnode.type === Fragment && Array.isArray(vnode.children)) {\r\n      loop.unshift(vnode.children)\r\n    } else {\r\n      result.push(vnode)\r\n    }\r\n  }\r\n\r\n  return result\r\n}\r\n\r\nexport function unrefElement<T extends string | MaybeInstance = string | MaybeInstance>(\r\n  ref: MaybeRef<T>,\r\n): T extends string | ComponentPublicInstance ? MaybeElement : T {\r\n  const plain = unref(ref)\r\n\r\n  if (typeof plain === 'string') {\r\n    return (isClient ? document.querySelector(plain) : null) as any\r\n  }\r\n\r\n  return (plain as ComponentPublicInstance)?.$el ?? plain\r\n}\r\n\r\nexport function proxyExposed<T>(vnode: VNode): T {\r\n  return new Proxy({} as any, {\r\n    get(_, key) {\r\n      if (!vnode.component) return undefined\r\n\r\n      return (\r\n        (vnode.component.proxy as any)?.[key] ??\r\n        (vnode.component.exposeProxy as any)?.[key] ??\r\n        (vnode.component.exposed as any)?.[key]\r\n      )\r\n    },\r\n  }) as T\r\n}\r\n\r\nexport function watchPauseable(...args: Parameters<typeof watch>) {\r\n  const active = ref(true)\r\n  const handle = args[1] || noop\r\n\r\n  function pause() {\r\n    active.value = false\r\n  }\r\n\r\n  function resume() {\r\n    active.value = true\r\n  }\r\n\r\n  const stop = watch(\r\n    args[0],\r\n    (...callbackArgs) =>\r\n      new Promise<void>((resolve, reject) => {\r\n        if (active.value) {\r\n          Promise.resolve(handle(...callbackArgs))\r\n            .then(resolve)\r\n            .catch(reject)\r\n        }\r\n      }),\r\n    args[2],\r\n  )\r\n\r\n  return { active: readonly(active), pause, resume, stop }\r\n}\r\n\r\nexport function pickToRefs<T extends Record<any, any>, K extends keyof T>(reactive: T, keys: K[]) {\r\n  return keys.map(key => toRef(reactive, key)) as { [P in K]: Ref<T[P]> }\r\n}\r\n","import { computed, getCurrentScope, isRef, onScopeDispose, ref, watch } from 'vue'\r\n\r\nimport { isClient, noop } from '@vexip-ui/utils'\r\nimport { unrefElement } from './shared/utils'\r\n\r\nimport type { ComputedRef, MaybeRef, Ref } from 'vue'\r\nimport type { MaybeInstance } from './shared/types'\r\n\r\nexport interface UseFullScreenResult {\r\n  target: Ref<MaybeInstance>,\r\n  supported: boolean,\r\n  full: ComputedRef<boolean>,\r\n  enter: (force?: boolean) => Promise<boolean>,\r\n  exit: (force?: boolean) => Promise<boolean>,\r\n  toggle: (force?: boolean) => Promise<boolean>,\r\n}\r\n\r\ntype PropertiesMap = [\r\n  'requestFullscreen',\r\n  'exitFullscreen',\r\n  'fullscreenElement',\r\n  'fullscreenEnabled',\r\n  'fullscreenchange',\r\n  'fullscreenerror',\r\n]\r\n\r\nconst functionsMap = [\r\n  [\r\n    'requestFullscreen',\r\n    'exitFullscreen',\r\n    'fullscreenElement',\r\n    'fullscreenEnabled',\r\n    'fullscreenchange',\r\n    'fullscreenerror',\r\n  ],\r\n  // New WebKit\r\n  [\r\n    'webkitRequestFullscreen',\r\n    'webkitExitFullscreen',\r\n    'webkitFullscreenElement',\r\n    'webkitFullscreenEnabled',\r\n    'webkitfullscreenchange',\r\n    'webkitfullscreenerror',\r\n  ],\r\n  // Old WebKit\r\n  [\r\n    'webkitRequestFullScreen',\r\n    'webkitCancelFullScreen',\r\n    'webkitCurrentFullScreenElement',\r\n    'webkitCancelFullScreen',\r\n    'webkitfullscreenchange',\r\n    'webkitfullscreenerror',\r\n  ],\r\n  [\r\n    'mozRequestFullScreen',\r\n    'mozCancelFullScreen',\r\n    'mozFullScreenElement',\r\n    'mozFullScreenEnabled',\r\n    'mozfullscreenchange',\r\n    'mozfullscreenerror',\r\n  ],\r\n  [\r\n    'msRequestFullscreen',\r\n    'msExitFullscreen',\r\n    'msFullscreenElement',\r\n    'msFullscreenEnabled',\r\n    'MSFullscreenChange',\r\n    'MSFullscreenError',\r\n  ],\r\n] as PropertiesMap[]\r\n\r\nlet map!: PropertiesMap\r\n\r\nif (isClient) {\r\n  for (const m of functionsMap) {\r\n    if (m[1] in document) {\r\n      map = m\r\n      break\r\n    }\r\n  }\r\n}\r\n\r\nconst supported = !!map\r\nconst notSupportedResult = {\r\n  supported,\r\n  full: computed(() => false),\r\n  enter: noop,\r\n  exit: noop,\r\n  toggle: noop,\r\n}\r\n\r\nconst states = new Set<Ref<boolean>>()\r\nconst subscriptions = new WeakMap<Element, Ref<boolean>>()\r\n\r\nif (isClient && map) {\r\n  const ELEMENT = map[2]\r\n  const EVENT = map[4]\r\n\r\n  document.addEventListener(\r\n    EVENT,\r\n    () => {\r\n      states.forEach(state => {\r\n        state.value = false\r\n      })\r\n\r\n      if (document[ELEMENT]) {\r\n        const full = subscriptions.get(document[ELEMENT])\r\n\r\n        if (full) {\r\n          full.value = true\r\n        }\r\n      }\r\n    },\r\n    false,\r\n  )\r\n}\r\n\r\nexport function useFullScreen(target: MaybeRef<MaybeInstance> = ref(null)): UseFullScreenResult {\r\n  const targetRef = computed({\r\n    get: () => unrefElement(target),\r\n    set: el => {\r\n      if (isRef(target)) {\r\n        target.value = el\r\n      }\r\n    },\r\n  })\r\n\r\n  if (!isClient || !supported) {\r\n    return { ...notSupportedResult, target: targetRef }\r\n  }\r\n\r\n  const [REQUEST, EXIT, ELEMENT] = map\r\n  const full = ref(false)\r\n\r\n  watch(\r\n    () => unrefElement(target),\r\n    (el, old) => {\r\n      old && subscriptions.delete(old)\r\n      el && subscriptions.set(el, full)\r\n    },\r\n    { immediate: true, flush: 'post' },\r\n  )\r\n\r\n  states.add(full)\r\n\r\n  if (getCurrentScope()) {\r\n    onScopeDispose(exit)\r\n  }\r\n\r\n  async function enter(force = false) {\r\n    await exit()\r\n\r\n    const el = unrefElement(target)\r\n\r\n    if (el) {\r\n      if (force || !document[ELEMENT]) {\r\n        await el[REQUEST]()\r\n        full.value = true\r\n\r\n        return document[ELEMENT] === el\r\n      }\r\n    }\r\n\r\n    return false\r\n  }\r\n\r\n  async function exit(force = false) {\r\n    const el = unrefElement(target)\r\n\r\n    if (force || (document[ELEMENT] && document[ELEMENT] === el)) {\r\n      await document[EXIT]()\r\n      full.value = false\r\n\r\n      return document[ELEMENT] !== el\r\n    }\r\n\r\n    return false\r\n  }\r\n\r\n  async function toggle(force = false) {\r\n    return full.value ? await exit(force) : await enter(force)\r\n  }\r\n\r\n  return {\r\n    supported,\r\n    target: targetRef,\r\n    full: computed(() => full.value),\r\n    enter,\r\n    exit,\r\n    toggle,\r\n  }\r\n}\r\n","import { ref } from 'vue'\r\n\r\nimport { useListener } from './listener'\r\n\r\nimport type { Ref } from 'vue'\r\n\r\nexport function useHover(wrapper: Ref<HTMLElement | null | undefined> = ref(null)) {\r\n  const isHover = ref(false)\r\n\r\n  useListener(wrapper, 'mouseenter', enterWrapper)\r\n  useListener(wrapper, 'mouseleave', leaveWrapper)\r\n\r\n  function enterWrapper() {\r\n    isHover.value = true\r\n  }\r\n\r\n  function leaveWrapper() {\r\n    isHover.value = false\r\n  }\r\n\r\n  return { wrapper, isHover }\r\n}\r\n","import { getCurrentScope, onScopeDispose, ref, unref, watch } from 'vue'\r\n\r\nimport { ensureArray, isClient, noop, toNumber } from '@vexip-ui/utils'\r\n\r\nimport type { Ref } from 'vue'\r\n\r\nexport type IntersectionHandler = (entry: IntersectionObserverEntry) => any\r\nexport type UseIntersectionOptions = IntersectionObserverInit & {\r\n  /**\r\n   * 元素交叉状态变化时的回调方法\r\n   */\r\n  handler: IntersectionHandler,\r\n  /**\r\n   * 作用的目标元素的 Ref\r\n   */\r\n  target?: Ref<HTMLElement | null | undefined>,\r\n}\r\n\r\nconst observerCache = new WeakMap<\r\n  Element | Document,\r\n  Map<\r\n    string,\r\n    Map<\r\n      string,\r\n      { ob: IntersectionObserver, count: number, handlers: WeakMap<Element, IntersectionHandler> }\r\n    >\r\n  >\r\n>()\r\n\r\nconst spaceRE = /\\s+/g\r\nconst unitRE = /(px|%)$/\r\n\r\nexport function useIntersection(options: UseIntersectionOptions) {\r\n  const target = options.target || ref(null)\r\n\r\n  if (!isClient) {\r\n    return { target, disconnect: noop }\r\n  }\r\n\r\n  const { handler } = options\r\n\r\n  let root = options.root ?? document\r\n\r\n  const threshold = ensureArray(options.threshold || 0).join() || '0'\r\n  const margin = normalizeMargin(options.rootMargin)\r\n\r\n  if (!observerCache.has(root)) {\r\n    observerCache.set(root, new Map())\r\n  }\r\n\r\n  const thresholdCache = observerCache.get(root)!\r\n\r\n  if (!thresholdCache.has(threshold)) {\r\n    thresholdCache.set(threshold, new Map())\r\n  }\r\n\r\n  const marginCache = thresholdCache.get(threshold)!\r\n\r\n  if (!marginCache.has(margin)) {\r\n    marginCache.set(margin, {\r\n      ob: new IntersectionObserver(handleIntersect, { ...options, rootMargin: margin }),\r\n      count: 0,\r\n      handlers: new WeakMap<Element, IntersectionHandler>(),\r\n    })\r\n  }\r\n\r\n  let state = marginCache.get(margin)\r\n  let { ob: observer, handlers } = state!\r\n\r\n  let remove = noop\r\n\r\n  const stopWatch = watch(\r\n    () => unref(target),\r\n    el => {\r\n      remove()\r\n\r\n      if (!el || !observer) {\r\n        return\r\n      }\r\n\r\n      handlers.set(el, handler)\r\n      observer.observe(el)\r\n      state && state.count++\r\n\r\n      remove = () => {\r\n        observer.unobserve(el)\r\n        handlers.delete(el)\r\n        state && state.count--\r\n        remove = noop\r\n      }\r\n    },\r\n    { immediate: true, flush: 'post' },\r\n  )\r\n\r\n  getCurrentScope() && onScopeDispose(disconnect)\r\n\r\n  function normalizeMargin(margin?: string) {\r\n    if (!margin || !margin.trim()) return '_'\r\n\r\n    const parts = margin.trim().split(spaceRE, 4)\r\n    parts.length = 4\r\n\r\n    for (let i = 0; i < 4; ++i) {\r\n      const part = parts[i]\r\n\r\n      parts[i] = unitRE.test(part) ? part : `${toNumber(part)}px`\r\n    }\r\n\r\n    return parts.join(' ')\r\n  }\r\n\r\n  function handleIntersect(entries: IntersectionObserverEntry[]) {\r\n    for (let i = 0, len = entries.length; i < len; ++i) {\r\n      const entry = entries[i]\r\n      const handler = handlers.get(entry.target)\r\n\r\n      if (typeof handler === 'function') {\r\n        handler(entry)\r\n      }\r\n    }\r\n  }\r\n\r\n  function disconnect() {\r\n    stopWatch()\r\n    remove()\r\n\r\n    if (!state) return\r\n\r\n    if (state.count <= 0) {\r\n      marginCache.delete(margin)\r\n\r\n      if (!marginCache.size) {\r\n        thresholdCache.delete(threshold)\r\n\r\n        if (!thresholdCache.size) {\r\n          observerCache.delete(root)\r\n        }\r\n      }\r\n    }\r\n\r\n    state = undefined\r\n    observer = undefined!\r\n    handlers = undefined!\r\n    root = undefined!\r\n  }\r\n\r\n  return { target, disconnect }\r\n}\r\n","import { customRef } from 'vue'\r\n\r\nexport function useManualRef() {\r\n  const updateSet = new Set<() => void>()\r\n\r\n  function manualRef<T>(value: T) {\r\n    return customRef<T>((track, trigger) => {\r\n      let origin = value\r\n\r\n      const update = () => {\r\n        if (value !== origin) {\r\n          origin = value\r\n          trigger()\r\n        }\r\n      }\r\n\r\n      return {\r\n        get: () => (track(), value),\r\n        set: newValue => {\r\n          if (newValue === value) return\r\n\r\n          value = newValue\r\n          updateSet.add(update)\r\n        },\r\n      }\r\n    })\r\n  }\r\n\r\n  function triggerUpdate() {\r\n    for (const trigger of updateSet) {\r\n      trigger()\r\n    }\r\n\r\n    updateSet.clear()\r\n  }\r\n\r\n  return { updateSet, manualRef, triggerUpdate }\r\n}\r\n","import { computed, isRef, reactive, ref, unref } from 'vue'\r\n\r\nimport { noop } from '@vexip-ui/utils'\r\nimport { useListener } from './listener'\r\n\r\nimport type { MaybeRef, Ref } from 'vue'\r\n\r\nexport type ModifierState = Readonly<\r\n  Omit<Record<string, boolean>, 'activeKeys'> & {\r\n    activeKeys: Set<string>,\r\n    resetAll: () => void,\r\n  }\r\n>\r\n\r\nexport interface UseModifierOptions {\r\n  /**\r\n   * 作用的目标元素的 Ref\r\n   */\r\n  target?: Ref<HTMLElement | null | undefined>,\r\n  /**\r\n   * 是否禁用整个 hook 的事件处理\r\n   */\r\n  disabled?: MaybeRef<boolean>,\r\n  /**\r\n   * 配置键名的别名，会与默认别名动态合并\r\n   */\r\n  aliasMap?: Record<string, string>,\r\n  /**\r\n   * 是否在目标元素失去焦点时重置修饰符\r\n   *\r\n   * @default true\r\n   */\r\n  autoReset?: boolean,\r\n  /**\r\n   * 事件的 capture 选项\r\n   *\r\n   * @default false\r\n   */\r\n  capture?: boolean,\r\n  /**\r\n   * 事件的 passive 选项\r\n   *\r\n   * @default true\r\n   */\r\n  passive?: boolean,\r\n  /**\r\n   * 是否严格匹配目标元素\r\n   */\r\n  strictTarget?: boolean,\r\n  /**\r\n   * 键按下的事件回调函数\r\n   */\r\n  onKeyDown?: (event: KeyboardEvent, modifier: ModifierState) => void,\r\n  /**\r\n   * 键抬起的时间回调函数\r\n   */\r\n  onKeyUp?: (event: KeyboardEvent, modifier: ModifierState) => void,\r\n}\r\n\r\nconst defaultAliasMap: Record<string, string> = {\r\n  ctrl: 'control',\r\n  command: 'meta',\r\n  cmd: 'meta',\r\n  option: 'alt',\r\n  up: 'arrowup',\r\n  down: 'arrowdown',\r\n  left: 'arrowleft',\r\n  right: 'arrowright',\r\n}\r\n\r\nconst separatorRE = /[+_-]/\r\nconst splitRE = /[+_-]/g\r\n\r\nconst internalProps = ['activeKeys', 'resetAll']\r\n\r\nexport function useModifier(options: UseModifierOptions = {}) {\r\n  const {\r\n    autoReset = true,\r\n    capture = false,\r\n    passive = true,\r\n    strictTarget = false,\r\n    onKeyDown = noop,\r\n    onKeyUp = noop,\r\n  } = options\r\n\r\n  const target = options.target || ref(null)\r\n  const disabled = isRef(options.disabled) ? options.disabled : ref(options.disabled || false)\r\n  const aliasMap = { ...defaultAliasMap, ...(options.aliasMap || {}) }\r\n  const activeKeys = reactive(new Set<string>())\r\n  const metaDeps = new Set<string>()\r\n  const modifier: Record<string, any> = reactive({ activeKeys, resetAll })\r\n\r\n  function setModifier(key: string, value: boolean) {\r\n    if (key in modifier) {\r\n      modifier[key] = value\r\n    }\r\n  }\r\n\r\n  function updateModifier(event: KeyboardEvent, value: boolean) {\r\n    const key = event.key?.toLocaleLowerCase()\r\n    const code = event.code?.toLocaleLowerCase()\r\n    const keys = [code, key].filter(Boolean)\r\n\r\n    for (const key of keys) {\r\n      activeKeys[value ? 'add' : 'delete'](key)\r\n      setModifier(key, value)\r\n    }\r\n\r\n    if (!value && key === 'meta') {\r\n      for (const key of metaDeps) {\r\n        activeKeys.delete(key)\r\n        setModifier(key, false)\r\n      }\r\n\r\n      metaDeps.clear()\r\n    } else if (\r\n      value &&\r\n      typeof event.getModifierState === 'function' &&\r\n      event.getModifierState('Meta')\r\n    ) {\r\n      for (const key of [...activeKeys, ...keys]) {\r\n        metaDeps.add(key)\r\n      }\r\n    }\r\n  }\r\n\r\n  function resetAll() {\r\n    Object.keys(modifier).forEach(key => {\r\n      modifier[key] = false\r\n    })\r\n\r\n    modifier.activeKeys = activeKeys\r\n    modifier.resetAll = resetAll\r\n  }\r\n\r\n  const modifierProxy = new Proxy(modifier, {\r\n    get(target, prop, receiver) {\r\n      if (typeof prop !== 'string' || internalProps.includes(prop)) {\r\n        return Reflect.get(target, prop, receiver)\r\n      }\r\n\r\n      prop = prop.toLocaleLowerCase()\r\n\r\n      if (prop in aliasMap) {\r\n        prop = aliasMap[prop]\r\n      }\r\n\r\n      if (!(prop in modifier)) {\r\n        if (separatorRE.test(prop)) {\r\n          const keys = prop.split(splitRE).map(key => key.trim())\r\n\r\n          modifier[prop] = computed(() => keys.every(key => unref(modifierProxy[key])))\r\n        } else {\r\n          modifier[prop] = ref(activeKeys.has(prop))\r\n        }\r\n      }\r\n\r\n      return unref(Reflect.get(target, prop, receiver))\r\n    },\r\n  })\r\n\r\n  useListener(\r\n    target,\r\n    'keydown',\r\n    (event: KeyboardEvent) => {\r\n      if (strictTarget && event.target !== unref(target)) {\r\n        return\r\n      }\r\n\r\n      updateModifier(event, true)\r\n      onKeyDown(event, modifierProxy)\r\n    },\r\n    { capture, passive, disabled },\r\n  )\r\n  useListener(\r\n    target,\r\n    'keyup',\r\n    (event: KeyboardEvent) => {\r\n      if (strictTarget && event.target !== unref(target)) {\r\n        return\r\n      }\r\n\r\n      updateModifier(event, false)\r\n      onKeyUp(event, modifierProxy)\r\n    },\r\n    { capture, passive, disabled },\r\n  )\r\n\r\n  if (autoReset) {\r\n    useListener(target, 'blur', resetAll, { capture, passive, disabled })\r\n  }\r\n\r\n  return { target, modifier: modifierProxy as ModifierState }\r\n}\r\n","import { nextTick, onBeforeUnmount, onMounted, readonly, ref } from 'vue'\r\n\r\nexport function useMounted(wait?: 'tick' | 'frame') {\r\n  const isMounted = ref(false)\r\n\r\n  const mount = () => (isMounted.value = true)\r\n\r\n  onMounted(() => {\r\n    if (wait === 'tick') {\r\n      nextTick(mount)\r\n    } else if (wait === 'frame') {\r\n      requestAnimationFrame(mount)\r\n    } else {\r\n      mount()\r\n    }\r\n  })\r\n\r\n  onBeforeUnmount(() => {\r\n    isMounted.value = false\r\n  })\r\n\r\n  return { isMounted: readonly(isMounted) }\r\n}\r\n","import { computed, isRef, ref } from 'vue'\r\n\r\nimport { throttle } from '@vexip-ui/utils'\r\nimport { useListener } from './listener'\r\n\r\nimport type { MaybeRef, Ref } from 'vue'\r\n\r\nexport interface MovingState {\r\n  xStart: number,\r\n  yStart: number,\r\n  xEnd: number,\r\n  yEnd: number,\r\n  clientX: number,\r\n  clientY: number,\r\n  deltaX: number,\r\n  deltaY: number,\r\n  lazy: boolean,\r\n  [custom: string]: unknown,\r\n}\r\n\r\nexport interface UseMovingOptions {\r\n  /**\r\n   * 作用的目标元素的 Ref\r\n   */\r\n  target?: Ref<HTMLElement | null | undefined>,\r\n  /**\r\n   * 横向位置的初始值\r\n   */\r\n  x?: MaybeRef<number>,\r\n  /**\r\n   * 纵向位置的初始值\r\n   */\r\n  y?: MaybeRef<number>,\r\n  /**\r\n   * 为否为懒加载，开启后会在 End 事件再更新位置状态\r\n   */\r\n  lazy?: MaybeRef<boolean>,\r\n  /**\r\n   * 是否禁用整个 hook 的事件处理\r\n   */\r\n  disabled?: MaybeRef<boolean>,\r\n  /**\r\n   * 事件的 capture 选项\r\n   *\r\n   * @default true\r\n   */\r\n  capture?: boolean,\r\n  /**\r\n   * 是否阻止 MouseDown 事件冒泡和默认行为\r\n   *\r\n   * @default true\r\n   */\r\n  stopMouse?: boolean,\r\n  /**\r\n   * 是否阻止 TouchStart 事件冒泡和默认行为\r\n   *\r\n   * @default true\r\n   */\r\n  stopTouch?: boolean,\r\n  /**\r\n   * 移动开始时的回调函数，返回 false 可以阻止本次移动\r\n   */\r\n  onStart?: (state: MovingState, event: PointerEvent) => any,\r\n  /**\r\n   * 移动中的回调函数\r\n   */\r\n  onMove?: (state: MovingState, event: PointerEvent) => void,\r\n  /**\r\n   * 移动结束时的回调函数\r\n   */\r\n  onEnd?: (state: MovingState, event: PointerEvent) => void,\r\n}\r\n\r\nfunction disableEvent<E extends Event>(event: E) {\r\n  if (event.cancelable) {\r\n    event.stopPropagation()\r\n    event.preventDefault()\r\n  }\r\n}\r\n\r\nexport function useMoving(options: UseMovingOptions) {\r\n  const target = options.target || ref(null)\r\n  const x = isRef(options.x) ? options.x : ref(0)\r\n  const y = isRef(options.y) ? options.y : ref(0)\r\n  const lazy = isRef(options.lazy) ? options.lazy : ref(options.lazy || false)\r\n  const disabled = isRef(options.disabled) ? options.disabled : ref(options.disabled || false)\r\n\r\n  const { capture = true, stopMouse = true, stopTouch = true } = options\r\n\r\n  const moving = ref(false)\r\n  const internalState: MovingState = {\r\n    xStart: 0,\r\n    yStart: 0,\r\n    xEnd: 0,\r\n    yEnd: 0,\r\n    clientX: 0,\r\n    clientY: 0,\r\n    deltaX: 0,\r\n    deltaY: 0,\r\n    lazy: false,\r\n  }\r\n\r\n  let current = 0\r\n  let record = 0\r\n\r\n  const throttleMove = throttle((event: PointerEvent) => {\r\n    if (record < current) return\r\n\r\n    updateState(event)\r\n\r\n    if (!internalState.lazy) {\r\n      x.value = internalState.xEnd\r\n      y.value = internalState.yEnd\r\n    }\r\n\r\n    options.onMove?.(internalState, event)\r\n  })\r\n\r\n  function start(event: PointerEvent) {\r\n    if (disabled.value) return\r\n\r\n    Object.assign(internalState, {\r\n      xStart: x.value,\r\n      yStart: y.value,\r\n      xEnd: x.value,\r\n      yEnd: y.value,\r\n      clientX: event.clientX,\r\n      clientY: event.clientY,\r\n      lazy: lazy.value,\r\n    })\r\n\r\n    if (options.onStart?.(internalState, event) === false) {\r\n      return\r\n    }\r\n\r\n    document.addEventListener('pointermove', move, { capture })\r\n    document.addEventListener('pointerup', end, { capture })\r\n\r\n    record = current\r\n    moving.value = true\r\n  }\r\n\r\n  function move(event: PointerEvent) {\r\n    if (disabled.value) return\r\n\r\n    disableEvent(event)\r\n    throttleMove(event)\r\n  }\r\n\r\n  function end(event: PointerEvent) {\r\n    document.removeEventListener('pointermove', move, { capture })\r\n    document.removeEventListener('pointerup', end, { capture })\r\n\r\n    if (disabled.value) return\r\n\r\n    updateState(event)\r\n\r\n    if (internalState.lazy) {\r\n      x.value = internalState.xEnd\r\n      y.value = internalState.yEnd\r\n    }\r\n\r\n    moving.value = false\r\n    ++current\r\n\r\n    options.onEnd?.(internalState, event)\r\n  }\r\n\r\n  function updateState(event: PointerEvent) {\r\n    const { clientX, clientY } = event\r\n    const { xStart, yStart, clientX: clientXStart, clientY: clientYStart } = internalState\r\n    const deltaX = clientX - clientXStart\r\n    const deltaY = clientY - clientYStart\r\n\r\n    internalState.deltaX = deltaX\r\n    internalState.deltaY = deltaY\r\n    internalState.xEnd = xStart + deltaX\r\n    internalState.yEnd = yStart + deltaY\r\n  }\r\n\r\n  useListener(target, 'pointerdown', start, { capture })\r\n\r\n  stopMouse && useListener(target, 'mousedown', disableEvent, { capture })\r\n  stopTouch && useListener(target, 'touchstart', disableEvent, { capture })\r\n\r\n  return {\r\n    target,\r\n    moving: computed(() => moving.value),\r\n    x,\r\n    y,\r\n    lazy,\r\n    disabled,\r\n  }\r\n}\r\n","import { onBeforeUnmount, ref } from 'vue'\r\n\r\nimport { throttle } from '@vexip-ui/utils'\r\n\r\nimport type { Ref } from 'vue'\r\n\r\nexport interface UsePointerOption {\r\n  /**\r\n   * 横向位置的初始值\r\n   */\r\n  x?: number,\r\n  /**\r\n   * 纵向位置的初始值\r\n   */\r\n  y?: number,\r\n  /**\r\n   * 是否手动停止，默认情况下会在组件的 BeforeUnmount 生命周期注销\r\n   *\r\n   * @default false\r\n   */\r\n  manualStop?: boolean,\r\n}\r\n\r\ninterface PointerState {\r\n  x: Ref<number>,\r\n  y: Ref<number>,\r\n}\r\n\r\nconst registered = new Set<PointerState>()\r\nconst record = new Map<'x' | 'y', number>()\r\n\r\nrecord.set('x', 0)\r\nrecord.set('y', 0)\r\n\r\nfunction handler(event: PointerEvent) {\r\n  const { pageX, pageY } = event\r\n\r\n  record.set('x', pageX)\r\n  record.set('y', pageY)\r\n\r\n  registered.forEach(state => {\r\n    state.x.value = pageX\r\n    state.y.value = pageY\r\n  })\r\n}\r\n\r\nconst throttleHandler = throttle(handler)\r\n\r\nfunction register(state: PointerState) {\r\n  if (!registered.size && window) {\r\n    record.set('x', 0)\r\n    record.set('y', 0)\r\n    window.addEventListener('pointermove', throttleHandler, { passive: true })\r\n  }\r\n\r\n  registered.add(state)\r\n}\r\n\r\nfunction unregister(state: PointerState) {\r\n  registered.delete(state)\r\n\r\n  if (!registered.size && window) {\r\n    window.removeEventListener('pointermove', throttleHandler)\r\n  }\r\n}\r\n\r\nexport function usePointer(options: UsePointerOption = {}) {\r\n  const x = ref(options.x ?? record.get('x')!)\r\n  const y = ref(options.y ?? record.get('y')!)\r\n\r\n  const state = { x, y }\r\n\r\n  register(state)\r\n\r\n  if (!options.manualStop) {\r\n    onBeforeUnmount(() => {\r\n      unregister(state)\r\n    })\r\n  }\r\n\r\n  return { ...state, unregister: () => unregister(state) }\r\n}\r\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          var _overflowsData$;\n          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n          const hasInitialMainAxisOverflow = ((_overflowsData$ = overflowsData[0]) == null ? void 0 : _overflowsData$.overflows[0]) > 0;\n          if (!ignoreCrossAxisOverflow || hasInitialMainAxisOverflow) {\n            // Try next placement and re-run the lifecycle.\n            return {\n              data: {\n                index: nextIndex,\n                overflows: overflowsData\n              },\n              reset: {\n                placement: nextPlacement\n              }\n            };\n          }\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n  return [':popover-open', ':modal'].some(selector => {\n    try {\n      return element.matches(selector);\n    } catch (e) {\n      return false;\n    }\n  });\n}\nfunction isContainingBlock(elementOrCss) {\n  const webkit = isWebKit();\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return ['transform', 'translate', 'scale', 'rotate', 'perspective'].some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n  return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll, ignoreScrollbarX) {\n  if (ignoreScrollbarX === void 0) {\n    ignoreScrollbarX = false;\n  }\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - (ignoreScrollbarX ? 0 :\n  // RTL <body> scrollbar.\n  getWindowScrollBarX(documentElement, htmlRect));\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll, true) : createCoords(0);\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  function setLeftRTLScrollbarOffset() {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      setLeftRTLScrollbarOffset();\n    }\n  }\n  if (isFixed && !isOffsetParentAnElement && documentElement) {\n    setLeftRTLScrollbarOffset();\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        // It's possible that even though the ratio is reported as 1, the\n        // element is not actually fully within the IntersectionObserver's root\n        // area anymore. This can happen under performance constraints. This may\n        // be a bug in the browser's IntersectionObserver implementation. To\n        // work around this, we compare the element's bounding rect now with\n        // what it was at the time we created the IntersectionObserver. If they\n        // are not equal then the element moved, so we refresh.\n        refresh();\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (_e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","var resizeObservers = [];\nexport { resizeObservers };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasActiveObservations = function () {\n    return resizeObservers.some(function (ro) { return ro.activeTargets.length > 0; });\n};\nexport { hasActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasSkippedObservations = function () {\n    return resizeObservers.some(function (ro) { return ro.skippedTargets.length > 0; });\n};\nexport { hasSkippedObservations };\n","var msg = 'ResizeObserver loop completed with undelivered notifications.';\nvar deliverResizeLoopError = function () {\n    var event;\n    if (typeof ErrorEvent === 'function') {\n        event = new ErrorEvent('error', {\n            message: msg\n        });\n    }\n    else {\n        event = document.createEvent('Event');\n        event.initEvent('error', false, false);\n        event.message = msg;\n    }\n    window.dispatchEvent(event);\n};\nexport { deliverResizeLoopError };\n","var ResizeObserverBoxOptions;\n(function (ResizeObserverBoxOptions) {\n    ResizeObserverBoxOptions[\"BORDER_BOX\"] = \"border-box\";\n    ResizeObserverBoxOptions[\"CONTENT_BOX\"] = \"content-box\";\n    ResizeObserverBoxOptions[\"DEVICE_PIXEL_CONTENT_BOX\"] = \"device-pixel-content-box\";\n})(ResizeObserverBoxOptions || (ResizeObserverBoxOptions = {}));\nexport { ResizeObserverBoxOptions };\n","export var freeze = function (obj) { return Object.freeze(obj); };\n","import { freeze } from './utils/freeze';\nvar ResizeObserverSize = (function () {\n    function ResizeObserverSize(inlineSize, blockSize) {\n        this.inlineSize = inlineSize;\n        this.blockSize = blockSize;\n        freeze(this);\n    }\n    return ResizeObserverSize;\n}());\nexport { ResizeObserverSize };\n","import { freeze } from './utils/freeze';\nvar DOMRectReadOnly = (function () {\n    function DOMRectReadOnly(x, y, width, height) {\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n        this.top = this.y;\n        this.left = this.x;\n        this.bottom = this.top + this.height;\n        this.right = this.left + this.width;\n        return freeze(this);\n    }\n    DOMRectReadOnly.prototype.toJSON = function () {\n        var _a = this, x = _a.x, y = _a.y, top = _a.top, right = _a.right, bottom = _a.bottom, left = _a.left, width = _a.width, height = _a.height;\n        return { x: x, y: y, top: top, right: right, bottom: bottom, left: left, width: width, height: height };\n    };\n    DOMRectReadOnly.fromRect = function (rectangle) {\n        return new DOMRectReadOnly(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n    };\n    return DOMRectReadOnly;\n}());\nexport { DOMRectReadOnly };\n","var isSVG = function (target) { return target instanceof SVGElement && 'getBBox' in target; };\nvar isHidden = function (target) {\n    if (isSVG(target)) {\n        var _a = target.getBBox(), width = _a.width, height = _a.height;\n        return !width && !height;\n    }\n    var _b = target, offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight;\n    return !(offsetWidth || offsetHeight || target.getClientRects().length);\n};\nvar isElement = function (obj) {\n    var _a;\n    if (obj instanceof Element) {\n        return true;\n    }\n    var scope = (_a = obj === null || obj === void 0 ? void 0 : obj.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView;\n    return !!(scope && obj instanceof scope.Element);\n};\nvar isReplacedElement = function (target) {\n    switch (target.tagName) {\n        case 'INPUT':\n            if (target.type !== 'image') {\n                break;\n            }\n        case 'VIDEO':\n        case 'AUDIO':\n        case 'EMBED':\n        case 'OBJECT':\n        case 'CANVAS':\n        case 'IFRAME':\n        case 'IMG':\n            return true;\n    }\n    return false;\n};\nexport { isSVG, isHidden, isElement, isReplacedElement };\n","export var global = typeof window !== 'undefined' ? window : {};\n","import { ResizeObserverBoxOptions } from '../ResizeObserverBoxOptions';\nimport { ResizeObserverSize } from '../ResizeObserverSize';\nimport { DOMRectReadOnly } from '../DOMRectReadOnly';\nimport { isSVG, isHidden } from '../utils/element';\nimport { freeze } from '../utils/freeze';\nimport { global } from '../utils/global';\nvar cache = new WeakMap();\nvar scrollRegexp = /auto|scroll/;\nvar verticalRegexp = /^tb|vertical/;\nvar IE = (/msie|trident/i).test(global.navigator && global.navigator.userAgent);\nvar parseDimension = function (pixel) { return parseFloat(pixel || '0'); };\nvar size = function (inlineSize, blockSize, switchSizes) {\n    if (inlineSize === void 0) { inlineSize = 0; }\n    if (blockSize === void 0) { blockSize = 0; }\n    if (switchSizes === void 0) { switchSizes = false; }\n    return new ResizeObserverSize((switchSizes ? blockSize : inlineSize) || 0, (switchSizes ? inlineSize : blockSize) || 0);\n};\nvar zeroBoxes = freeze({\n    devicePixelContentBoxSize: size(),\n    borderBoxSize: size(),\n    contentBoxSize: size(),\n    contentRect: new DOMRectReadOnly(0, 0, 0, 0)\n});\nvar calculateBoxSizes = function (target, forceRecalculation) {\n    if (forceRecalculation === void 0) { forceRecalculation = false; }\n    if (cache.has(target) && !forceRecalculation) {\n        return cache.get(target);\n    }\n    if (isHidden(target)) {\n        cache.set(target, zeroBoxes);\n        return zeroBoxes;\n    }\n    var cs = getComputedStyle(target);\n    var svg = isSVG(target) && target.ownerSVGElement && target.getBBox();\n    var removePadding = !IE && cs.boxSizing === 'border-box';\n    var switchSizes = verticalRegexp.test(cs.writingMode || '');\n    var canScrollVertically = !svg && scrollRegexp.test(cs.overflowY || '');\n    var canScrollHorizontally = !svg && scrollRegexp.test(cs.overflowX || '');\n    var paddingTop = svg ? 0 : parseDimension(cs.paddingTop);\n    var paddingRight = svg ? 0 : parseDimension(cs.paddingRight);\n    var paddingBottom = svg ? 0 : parseDimension(cs.paddingBottom);\n    var paddingLeft = svg ? 0 : parseDimension(cs.paddingLeft);\n    var borderTop = svg ? 0 : parseDimension(cs.borderTopWidth);\n    var borderRight = svg ? 0 : parseDimension(cs.borderRightWidth);\n    var borderBottom = svg ? 0 : parseDimension(cs.borderBottomWidth);\n    var borderLeft = svg ? 0 : parseDimension(cs.borderLeftWidth);\n    var horizontalPadding = paddingLeft + paddingRight;\n    var verticalPadding = paddingTop + paddingBottom;\n    var horizontalBorderArea = borderLeft + borderRight;\n    var verticalBorderArea = borderTop + borderBottom;\n    var horizontalScrollbarThickness = !canScrollHorizontally ? 0 : target.offsetHeight - verticalBorderArea - target.clientHeight;\n    var verticalScrollbarThickness = !canScrollVertically ? 0 : target.offsetWidth - horizontalBorderArea - target.clientWidth;\n    var widthReduction = removePadding ? horizontalPadding + horizontalBorderArea : 0;\n    var heightReduction = removePadding ? verticalPadding + verticalBorderArea : 0;\n    var contentWidth = svg ? svg.width : parseDimension(cs.width) - widthReduction - verticalScrollbarThickness;\n    var contentHeight = svg ? svg.height : parseDimension(cs.height) - heightReduction - horizontalScrollbarThickness;\n    var borderBoxWidth = contentWidth + horizontalPadding + verticalScrollbarThickness + horizontalBorderArea;\n    var borderBoxHeight = contentHeight + verticalPadding + horizontalScrollbarThickness + verticalBorderArea;\n    var boxes = freeze({\n        devicePixelContentBoxSize: size(Math.round(contentWidth * devicePixelRatio), Math.round(contentHeight * devicePixelRatio), switchSizes),\n        borderBoxSize: size(borderBoxWidth, borderBoxHeight, switchSizes),\n        contentBoxSize: size(contentWidth, contentHeight, switchSizes),\n        contentRect: new DOMRectReadOnly(paddingLeft, paddingTop, contentWidth, contentHeight)\n    });\n    cache.set(target, boxes);\n    return boxes;\n};\nvar calculateBoxSize = function (target, observedBox, forceRecalculation) {\n    var _a = calculateBoxSizes(target, forceRecalculation), borderBoxSize = _a.borderBoxSize, contentBoxSize = _a.contentBoxSize, devicePixelContentBoxSize = _a.devicePixelContentBoxSize;\n    switch (observedBox) {\n        case ResizeObserverBoxOptions.DEVICE_PIXEL_CONTENT_BOX:\n            return devicePixelContentBoxSize;\n        case ResizeObserverBoxOptions.BORDER_BOX:\n            return borderBoxSize;\n        default:\n            return contentBoxSize;\n    }\n};\nexport { calculateBoxSize, calculateBoxSizes };\n","import { calculateBoxSizes } from './algorithms/calculateBoxSize';\nimport { freeze } from './utils/freeze';\nvar ResizeObserverEntry = (function () {\n    function ResizeObserverEntry(target) {\n        var boxes = calculateBoxSizes(target);\n        this.target = target;\n        this.contentRect = boxes.contentRect;\n        this.borderBoxSize = freeze([boxes.borderBoxSize]);\n        this.contentBoxSize = freeze([boxes.contentBoxSize]);\n        this.devicePixelContentBoxSize = freeze([boxes.devicePixelContentBoxSize]);\n    }\n    return ResizeObserverEntry;\n}());\nexport { ResizeObserverEntry };\n","import { isHidden } from '../utils/element';\nvar calculateDepthForNode = function (node) {\n    if (isHidden(node)) {\n        return Infinity;\n    }\n    var depth = 0;\n    var parent = node.parentNode;\n    while (parent) {\n        depth += 1;\n        parent = parent.parentNode;\n    }\n    return depth;\n};\nexport { calculateDepthForNode };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { ResizeObserverEntry } from '../ResizeObserverEntry';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nimport { calculateBoxSize } from './calculateBoxSize';\nvar broadcastActiveObservations = function () {\n    var shallowestDepth = Infinity;\n    var callbacks = [];\n    resizeObservers.forEach(function processObserver(ro) {\n        if (ro.activeTargets.length === 0) {\n            return;\n        }\n        var entries = [];\n        ro.activeTargets.forEach(function processTarget(ot) {\n            var entry = new ResizeObserverEntry(ot.target);\n            var targetDepth = calculateDepthForNode(ot.target);\n            entries.push(entry);\n            ot.lastReportedSize = calculateBoxSize(ot.target, ot.observedBox);\n            if (targetDepth < shallowestDepth) {\n                shallowestDepth = targetDepth;\n            }\n        });\n        callbacks.push(function resizeObserverCallback() {\n            ro.callback.call(ro.observer, entries, ro.observer);\n        });\n        ro.activeTargets.splice(0, ro.activeTargets.length);\n    });\n    for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) {\n        var callback = callbacks_1[_i];\n        callback();\n    }\n    return shallowestDepth;\n};\nexport { broadcastActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nvar gatherActiveObservationsAtDepth = function (depth) {\n    resizeObservers.forEach(function processObserver(ro) {\n        ro.activeTargets.splice(0, ro.activeTargets.length);\n        ro.skippedTargets.splice(0, ro.skippedTargets.length);\n        ro.observationTargets.forEach(function processTarget(ot) {\n            if (ot.isActive()) {\n                if (calculateDepthForNode(ot.target) > depth) {\n                    ro.activeTargets.push(ot);\n                }\n                else {\n                    ro.skippedTargets.push(ot);\n                }\n            }\n        });\n    });\n};\nexport { gatherActiveObservationsAtDepth };\n","import { hasActiveObservations } from '../algorithms/hasActiveObservations';\nimport { hasSkippedObservations } from '../algorithms/hasSkippedObservations';\nimport { deliverResizeLoopError } from '../algorithms/deliverResizeLoopError';\nimport { broadcastActiveObservations } from '../algorithms/broadcastActiveObservations';\nimport { gatherActiveObservationsAtDepth } from '../algorithms/gatherActiveObservationsAtDepth';\nvar process = function () {\n    var depth = 0;\n    gatherActiveObservationsAtDepth(depth);\n    while (hasActiveObservations()) {\n        depth = broadcastActiveObservations();\n        gatherActiveObservationsAtDepth(depth);\n    }\n    if (hasSkippedObservations()) {\n        deliverResizeLoopError();\n    }\n    return depth > 0;\n};\nexport { process };\n","var trigger;\nvar callbacks = [];\nvar notify = function () { return callbacks.splice(0).forEach(function (cb) { return cb(); }); };\nvar queueMicroTask = function (callback) {\n    if (!trigger) {\n        var toggle_1 = 0;\n        var el_1 = document.createTextNode('');\n        var config = { characterData: true };\n        new MutationObserver(function () { return notify(); }).observe(el_1, config);\n        trigger = function () { el_1.textContent = \"\".concat(toggle_1 ? toggle_1-- : toggle_1++); };\n    }\n    callbacks.push(callback);\n    trigger();\n};\nexport { queueMicroTask };\n","import { queueMicroTask } from './queueMicroTask';\nvar queueResizeObserver = function (cb) {\n    queueMicroTask(function ResizeObserver() {\n        requestAnimationFrame(cb);\n    });\n};\nexport { queueResizeObserver };\n","import { process } from './process';\nimport { global } from './global';\nimport { queueResizeObserver } from './queueResizeObserver';\nvar watching = 0;\nvar isWatching = function () { return !!watching; };\nvar CATCH_PERIOD = 250;\nvar observerConfig = { attributes: true, characterData: true, childList: true, subtree: true };\nvar events = [\n    'resize',\n    'load',\n    'transitionend',\n    'animationend',\n    'animationstart',\n    'animationiteration',\n    'keyup',\n    'keydown',\n    'mouseup',\n    'mousedown',\n    'mouseover',\n    'mouseout',\n    'blur',\n    'focus'\n];\nvar time = function (timeout) {\n    if (timeout === void 0) { timeout = 0; }\n    return Date.now() + timeout;\n};\nvar scheduled = false;\nvar Scheduler = (function () {\n    function Scheduler() {\n        var _this = this;\n        this.stopped = true;\n        this.listener = function () { return _this.schedule(); };\n    }\n    Scheduler.prototype.run = function (timeout) {\n        var _this = this;\n        if (timeout === void 0) { timeout = CATCH_PERIOD; }\n        if (scheduled) {\n            return;\n        }\n        scheduled = true;\n        var until = time(timeout);\n        queueResizeObserver(function () {\n            var elementsHaveResized = false;\n            try {\n                elementsHaveResized = process();\n            }\n            finally {\n                scheduled = false;\n                timeout = until - time();\n                if (!isWatching()) {\n                    return;\n                }\n                if (elementsHaveResized) {\n                    _this.run(1000);\n                }\n                else if (timeout > 0) {\n                    _this.run(timeout);\n                }\n                else {\n                    _this.start();\n                }\n            }\n        });\n    };\n    Scheduler.prototype.schedule = function () {\n        this.stop();\n        this.run();\n    };\n    Scheduler.prototype.observe = function () {\n        var _this = this;\n        var cb = function () { return _this.observer && _this.observer.observe(document.body, observerConfig); };\n        document.body ? cb() : global.addEventListener('DOMContentLoaded', cb);\n    };\n    Scheduler.prototype.start = function () {\n        var _this = this;\n        if (this.stopped) {\n            this.stopped = false;\n            this.observer = new MutationObserver(this.listener);\n            this.observe();\n            events.forEach(function (name) { return global.addEventListener(name, _this.listener, true); });\n        }\n    };\n    Scheduler.prototype.stop = function () {\n        var _this = this;\n        if (!this.stopped) {\n            this.observer && this.observer.disconnect();\n            events.forEach(function (name) { return global.removeEventListener(name, _this.listener, true); });\n            this.stopped = true;\n        }\n    };\n    return Scheduler;\n}());\nvar scheduler = new Scheduler();\nvar updateCount = function (n) {\n    !watching && n > 0 && scheduler.start();\n    watching += n;\n    !watching && scheduler.stop();\n};\nexport { scheduler, updateCount };\n","import { ResizeObserverBoxOptions } from './ResizeObserverBoxOptions';\nimport { calculateBoxSize } from './algorithms/calculateBoxSize';\nimport { isSVG, isReplacedElement } from './utils/element';\nvar skipNotifyOnElement = function (target) {\n    return !isSVG(target)\n        && !isReplacedElement(target)\n        && getComputedStyle(target).display === 'inline';\n};\nvar ResizeObservation = (function () {\n    function ResizeObservation(target, observedBox) {\n        this.target = target;\n        this.observedBox = observedBox || ResizeObserverBoxOptions.CONTENT_BOX;\n        this.lastReportedSize = {\n            inlineSize: 0,\n            blockSize: 0\n        };\n    }\n    ResizeObservation.prototype.isActive = function () {\n        var size = calculateBoxSize(this.target, this.observedBox, true);\n        if (skipNotifyOnElement(this.target)) {\n            this.lastReportedSize = size;\n        }\n        if (this.lastReportedSize.inlineSize !== size.inlineSize\n            || this.lastReportedSize.blockSize !== size.blockSize) {\n            return true;\n        }\n        return false;\n    };\n    return ResizeObservation;\n}());\nexport { ResizeObservation };\n","var ResizeObserverDetail = (function () {\n    function ResizeObserverDetail(resizeObserver, callback) {\n        this.activeTargets = [];\n        this.skippedTargets = [];\n        this.observationTargets = [];\n        this.observer = resizeObserver;\n        this.callback = callback;\n    }\n    return ResizeObserverDetail;\n}());\nexport { ResizeObserverDetail };\n","import { scheduler, updateCount } from './utils/scheduler';\nimport { ResizeObservation } from './ResizeObservation';\nimport { ResizeObserverDetail } from './ResizeObserverDetail';\nimport { resizeObservers } from './utils/resizeObservers';\nvar observerMap = new WeakMap();\nvar getObservationIndex = function (observationTargets, target) {\n    for (var i = 0; i < observationTargets.length; i += 1) {\n        if (observationTargets[i].target === target) {\n            return i;\n        }\n    }\n    return -1;\n};\nvar ResizeObserverController = (function () {\n    function ResizeObserverController() {\n    }\n    ResizeObserverController.connect = function (resizeObserver, callback) {\n        var detail = new ResizeObserverDetail(resizeObserver, callback);\n        observerMap.set(resizeObserver, detail);\n    };\n    ResizeObserverController.observe = function (resizeObserver, target, options) {\n        var detail = observerMap.get(resizeObserver);\n        var firstObservation = detail.observationTargets.length === 0;\n        if (getObservationIndex(detail.observationTargets, target) < 0) {\n            firstObservation && resizeObservers.push(detail);\n            detail.observationTargets.push(new ResizeObservation(target, options && options.box));\n            updateCount(1);\n            scheduler.schedule();\n        }\n    };\n    ResizeObserverController.unobserve = function (resizeObserver, target) {\n        var detail = observerMap.get(resizeObserver);\n        var index = getObservationIndex(detail.observationTargets, target);\n        var lastObservation = detail.observationTargets.length === 1;\n        if (index >= 0) {\n            lastObservation && resizeObservers.splice(resizeObservers.indexOf(detail), 1);\n            detail.observationTargets.splice(index, 1);\n            updateCount(-1);\n        }\n    };\n    ResizeObserverController.disconnect = function (resizeObserver) {\n        var _this = this;\n        var detail = observerMap.get(resizeObserver);\n        detail.observationTargets.slice().forEach(function (ot) { return _this.unobserve(resizeObserver, ot.target); });\n        detail.activeTargets.splice(0, detail.activeTargets.length);\n    };\n    return ResizeObserverController;\n}());\nexport { ResizeObserverController };\n","import { ResizeObserverController } from './ResizeObserverController';\nimport { isElement } from './utils/element';\nvar ResizeObserver = (function () {\n    function ResizeObserver(callback) {\n        if (arguments.length === 0) {\n            throw new TypeError(\"Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.\");\n        }\n        if (typeof callback !== 'function') {\n            throw new TypeError(\"Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.\");\n        }\n        ResizeObserverController.connect(this, callback);\n    }\n    ResizeObserver.prototype.observe = function (target, options) {\n        if (arguments.length === 0) {\n            throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n        }\n        if (!isElement(target)) {\n            throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n        }\n        ResizeObserverController.observe(this, target, options);\n    };\n    ResizeObserver.prototype.unobserve = function (target) {\n        if (arguments.length === 0) {\n            throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n        }\n        if (!isElement(target)) {\n            throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n        }\n        ResizeObserverController.unobserve(this, target);\n    };\n    ResizeObserver.prototype.disconnect = function () {\n        ResizeObserverController.disconnect(this);\n    };\n    ResizeObserver.toString = function () {\n        return 'function ResizeObserver () { [polyfill code] }';\n    };\n    return ResizeObserver;\n}());\nexport { ResizeObserver };\n","import { type MaybeRef, getCurrentScope, onScopeDispose, unref, watch } from 'vue'\r\n\r\nimport { isClient, noop } from '@vexip-ui/utils'\r\nimport { ResizeObserver } from '@juggle/resize-observer'\r\n\r\nexport interface ResizeInfo extends ResizeObserverEntry {\r\n  offsetWidth: number,\r\n  offsetHeight: number,\r\n  width: number,\r\n  height: number,\r\n}\r\n\r\nexport type ResizeHandler = (entry: ResizeInfo) => any\r\n\r\nexport interface UseResizeOptions {\r\n  /**\r\n   * 作用的目标元素的 Ref\r\n   */\r\n  target?: MaybeRef<HTMLElement | null | undefined>,\r\n  onResize?: ResizeHandler,\r\n}\r\n\r\nconst handlerMap = new WeakMap<Element, ResizeHandler>()\r\n\r\nfunction handleResize(entries: ResizeObserverEntry[]) {\r\n  for (let i = 0, len = entries.length; i < len; ++i) {\r\n    const entry = entries[i]\r\n    const handler = handlerMap.get(entry.target)\r\n\r\n    if (typeof handler === 'function') {\r\n      const { inlineSize, blockSize } = entry.borderBoxSize?.[0] ?? {}\r\n      const { offsetWidth, offsetHeight } = entry.target as HTMLElement\r\n\r\n      handler(\r\n        Object.assign(entry, {\r\n          offsetWidth,\r\n          offsetHeight,\r\n          width: inlineSize ?? offsetWidth,\r\n          height: blockSize ?? offsetHeight,\r\n        }),\r\n      )\r\n    }\r\n  }\r\n}\r\n\r\nconst resizeObserver = new (isClient ? window.ResizeObserver || ResizeObserver : ResizeObserver)(\r\n  handleResize,\r\n)\r\n\r\nexport function observeResize(el: Element, handler: ResizeHandler) {\r\n  handlerMap.set(el, handler)\r\n  resizeObserver.observe(el)\r\n}\r\n\r\nexport function unobserveResize(el: Element) {\r\n  if (handlerMap.has(el)) {\r\n    resizeObserver.unobserve(el)\r\n    handlerMap.delete(el)\r\n  }\r\n}\r\n\r\nexport function useResize(options: UseResizeOptions = {}) {\r\n  let remove = noop\r\n\r\n  const stopWatch = watch(\r\n    () => unref(options.target),\r\n    el => {\r\n      remove()\r\n\r\n      if (!el || typeof options.onResize !== 'function') {\r\n        return\r\n      }\r\n\r\n      observeResize(el, options.onResize)\r\n\r\n      remove = () => {\r\n        unobserveResize(el)\r\n        remove = noop\r\n      }\r\n    },\r\n    { immediate: true },\r\n  )\r\n\r\n  const unobserve = () => {\r\n    stopWatch()\r\n    remove()\r\n  }\r\n\r\n  getCurrentScope() && onScopeDispose(unobserve)\r\n\r\n  return {\r\n    /**\r\n     * @deprecated Will be removed in next major version, please directly use `observeResize` from imports.\r\n     */\r\n    observeResize,\r\n    /**\r\n     * @deprecated Will be removed in next major version, please directly use `unobserveResize` from imports.\r\n     */\r\n    unobserveResize,\r\n    unobserve,\r\n  }\r\n}\r\n","import { computed, ref } from 'vue'\r\n\r\nimport { isClient } from '@vexip-ui/utils'\r\nimport { observeResize } from './resize'\r\n\r\nimport type { Ref } from 'vue'\r\n\r\nconst rtl = ref(false)\r\nconst computedRtl: Ref<boolean> = computed(() => rtl.value)\r\n\r\nconst elId = '__rtl_observer__'\r\n\r\nexport function useRtl() {\r\n  if (isClient && !document.querySelector(`#${elId}`)) {\r\n    initObserver()\r\n  }\r\n\r\n  return { isRtl: computedRtl }\r\n}\r\n\r\nfunction initObserver() {\r\n  if (!isClient) return\r\n\r\n  const style = document.createElement('style')\r\n  const content = `#${elId} { width: 1px } html.rtl #${elId}, html[dir='rtl'] #${elId} { width: 2px }`\r\n\r\n  style.textContent = content\r\n  document.head.appendChild(style)\r\n\r\n  const observer = document.createElement('div')\r\n\r\n  observer.id = elId\r\n  observer.role = 'none'\r\n  observer.style.cssText =\r\n    'position: fixed; top -10px; left: -10px; height: 1px; visibility: hidden;'\r\n\r\n  observeResize(observer, () => {\r\n    if (!isClient) return\r\n\r\n    rtl.value =\r\n      document.documentElement.classList.contains('rtl') ||\r\n      document.documentElement.getAttribute('dir') === 'rtl'\r\n  })\r\n\r\n  document.body.appendChild(observer)\r\n}\r\n","import { onMounted, ref, shallowRef, unref, watch, watchEffect } from 'vue'\r\n\r\nimport {\r\n  arrow,\r\n  autoUpdate,\r\n  computePosition,\r\n  flip,\r\n  hide,\r\n  offset,\r\n  platform,\r\n  shift,\r\n} from '@floating-ui/dom'\r\nimport { useRtl } from './rtl'\r\nimport { isClient } from '@vexip-ui/utils'\r\n\r\nimport type { MaybeRef, Ref } from 'vue'\r\nimport type {\r\n  ComputePositionConfig,\r\n  Middleware,\r\n  OffsetOptions,\r\n  Placement,\r\n  ShiftOptions,\r\n  VirtualElement,\r\n} from '@floating-ui/dom'\r\nimport type { TransferNode } from '@vexip-ui/utils'\r\n\r\nexport interface UsePopperOptions {\r\n  /**\r\n   * popper 元素出现的位置\r\n   */\r\n  placement: MaybeRef<Placement>,\r\n  /**\r\n   * popper 元素需要迁移至的目标选择器，为 true 时会迁移至 body\r\n   */\r\n  transfer?: MaybeRef<boolean | string>,\r\n  /**\r\n   * 设置是否为从右向左的阅读方向\r\n   */\r\n  isRtl?: MaybeRef<boolean>,\r\n  /**\r\n   * 包围元素，用于判断 clickoutside 事件\r\n   *\r\n   * 即使 popper 元素迁移至 wrapper 元素外部，点击 popper 元素时仍认为处于 wrapper 元素内部\r\n   */\r\n  wrapper?: Ref<HTMLElement | null | undefined>,\r\n  /**\r\n   * 设置 popper 元素为否需要 drop，此时 transform-origin 会自动调整\r\n   */\r\n  isDrop?: MaybeRef<boolean>,\r\n  /**\r\n   * 参考元素，popper 元素的位置计算依据\r\n   */\r\n  reference?: Ref<HTMLElement | VirtualElement | null | undefined>,\r\n  /**\r\n   * popper 元素\r\n   */\r\n  popper?: Ref<HTMLElement | null | undefined>,\r\n  /**\r\n   * arrow 元素\r\n   */\r\n  arrow?: Ref<HTMLElement | null | undefined>,\r\n  /**\r\n   * popper 元素的偏移量，可传入一个回调函数\r\n   */\r\n  offset?: MaybeRef<number[] | OffsetOptions>,\r\n  /**\r\n   * popper 元素是否限制在窗口内\r\n   */\r\n  shift?: MaybeRef<boolean | ShiftOptions>,\r\n  /**\r\n   * 设置是否自动更新 popper 元素\r\n   *\r\n   * @default false\r\n   */\r\n  autoUpdate?: boolean,\r\n}\r\n\r\nexport type { Placement, VirtualElement }\r\n\r\nexport const placementWhileList = Object.freeze<Placement[]>([\r\n  'top',\r\n  'top-start',\r\n  'top-end',\r\n  'bottom',\r\n  'bottom-start',\r\n  'bottom-end',\r\n  'left',\r\n  'left-start',\r\n  'left-end',\r\n  'right',\r\n  'right-start',\r\n  'right-end',\r\n])\r\n\r\nexport function usePopper(initOptions: UsePopperOptions) {\r\n  const { transfer, wrapper, isDrop = false } = initOptions\r\n\r\n  const reference: Ref<HTMLElement | null | undefined> =\r\n    (initOptions.reference as any) ?? shallowRef(null)\r\n  const popper: Ref<HTMLElement | null | undefined> = initOptions.popper ?? shallowRef(null)\r\n  const arrowRef: Ref<HTMLElement | null | undefined> = initOptions.arrow ?? shallowRef(null)\r\n\r\n  const placement = ref(unref(initOptions.placement))\r\n  const transferTo = ref('')\r\n  const isRtl = initOptions.isRtl ?? useRtl().isRtl\r\n\r\n  if (wrapper) {\r\n    watchEffect(() => {\r\n      const wrapperEl = unref(wrapper)\r\n      const popperEl = unref(popper)\r\n\r\n      if (wrapperEl) {\r\n        ;(wrapperEl as TransferNode).__transferElement = popperEl\r\n      }\r\n    })\r\n  }\r\n\r\n  if (transfer != null) {\r\n    watch(\r\n      () => unref(transfer),\r\n      value => {\r\n        setTransferTo(value)\r\n        updatePopper()\r\n      },\r\n    )\r\n\r\n    setTransferTo(unref(transfer))\r\n  }\r\n\r\n  onMounted(() => {\r\n    requestAnimationFrame(() => {\r\n      watchEffect(updatePopperInternal)\r\n    })\r\n  })\r\n\r\n  let cleanup: (() => void) | undefined\r\n\r\n  async function updatePopperInternal() {\r\n    if (!isClient) return\r\n\r\n    cleanup?.()\r\n\r\n    const referenceEl = unref(reference)\r\n    const popperEl = unref(popper)\r\n\r\n    if (!referenceEl || !popperEl) return\r\n\r\n    const arrowEl = unref(arrowRef)\r\n\r\n    const middleware: Middleware[] = [flip()]\r\n\r\n    if (isDrop) {\r\n      middleware.push({\r\n        name: 'origin',\r\n        fn({ placement, elements }) {\r\n          const origin = setPopperDropOrigin(placement)\r\n\r\n          if (origin) {\r\n            elements.floating.style.transformOrigin = origin\r\n          }\r\n\r\n          return {}\r\n        },\r\n      })\r\n    }\r\n\r\n    if (initOptions.offset) {\r\n      let offsetOptions = unref(initOptions.offset)\r\n\r\n      if (Array.isArray(offsetOptions)) {\r\n        offsetOptions = {\r\n          mainAxis: offsetOptions[1],\r\n          crossAxis: offsetOptions[0],\r\n        }\r\n      }\r\n\r\n      middleware.push(offset(offsetOptions))\r\n    }\r\n\r\n    if (initOptions.shift) {\r\n      let shiftOptions = unref(initOptions.shift)\r\n\r\n      if (typeof shiftOptions === 'boolean') {\r\n        shiftOptions = {}\r\n      }\r\n\r\n      middleware.push(shift(shiftOptions))\r\n    }\r\n\r\n    if (arrowEl) {\r\n      middleware.push(arrow({ element: arrowEl }))\r\n    }\r\n\r\n    middleware.push(hide({ strategy: 'escaped' }))\r\n\r\n    const rtl = unref(isRtl) || false\r\n    const options: ComputePositionConfig = {\r\n      middleware,\r\n      placement: unref(initOptions.placement),\r\n      platform: {\r\n        ...platform,\r\n        isRTL: async () => rtl,\r\n      },\r\n    }\r\n\r\n    const update = async () => {\r\n      const {\r\n        x,\r\n        y,\r\n        placement: activePlacement,\r\n        strategy,\r\n        middlewareData,\r\n      } = await computePosition(referenceEl, popperEl, options)\r\n\r\n      if (unref(reference) !== referenceEl) {\r\n        if (unref(popper) === popperEl) {\r\n          Object.assign(popperEl.style, {\r\n            position: '',\r\n            top: '',\r\n            left: '',\r\n          })\r\n        }\r\n\r\n        return\r\n      }\r\n\r\n      const style: Partial<CSSStyleDeclaration> = {\r\n        position: strategy,\r\n        top: `${y}px`,\r\n        left: `${x}px`,\r\n      }\r\n\r\n      // if (middlewareData.hide?.escaped) {\r\n      //   style.visibility = 'hidden'\r\n      // } else {\r\n      //   style.visibility = ''\r\n      // }\r\n\r\n      if (arrowEl) {\r\n        if (middlewareData.arrow) {\r\n          const { x, y } = middlewareData.arrow\r\n\r\n          Object.assign(arrowEl.style, {\r\n            top: y != null ? `${y}px` : '',\r\n            left: x != null ? `${x}px` : '',\r\n          })\r\n        } else {\r\n          Object.assign(arrowEl.style, { top: '', left: '' })\r\n        }\r\n      }\r\n\r\n      Object.assign(popperEl.style, style)\r\n      popperEl.dataset.popperPlacement = activePlacement\r\n      placement.value = activePlacement\r\n    }\r\n\r\n    if (initOptions.autoUpdate) {\r\n      cleanup = autoUpdate(referenceEl, popperEl, update)\r\n    }\r\n\r\n    await update()\r\n  }\r\n\r\n  const updatePopper = () => {\r\n    return new Promise<void>(resolve => {\r\n      requestAnimationFrame(() => {\r\n        updatePopperInternal().then(resolve)\r\n      })\r\n    })\r\n  }\r\n\r\n  function setTransferTo(value: boolean | string) {\r\n    transferTo.value = typeof value === 'boolean' ? (value ? 'body' : '') : value\r\n  }\r\n\r\n  // function normalizePlacement(placement: Placement, rtl: boolean) {\r\n  //   if (!rtl) return placement\r\n\r\n  //   let [start, end] = placement.split('-')\r\n\r\n  //   if (start === 'left' || start === 'right') {\r\n  //     start = start === 'left' ? 'right' : 'left'\r\n  //   } else {\r\n  //     if (!end) return placement\r\n\r\n  //     end = end === 'start' ? 'end' : 'start'\r\n  //   }\r\n\r\n  //   return `${start}-${end}` as Placement\r\n  // }\r\n\r\n  function setPopperDropOrigin(placement: Placement) {\r\n    if (placement !== 'left' && placement !== 'right') {\r\n      const [start, end] = placement.split('-')\r\n\r\n      return start === 'bottom' || (start !== 'top' && end === 'start')\r\n        ? 'center top'\r\n        : 'center bottom'\r\n    }\r\n  }\r\n\r\n  return {\r\n    wrapper,\r\n    reference,\r\n    popper,\r\n    placement,\r\n    transferTo,\r\n    updatePopper,\r\n  }\r\n}\r\n","import { reactive, ref, watch } from 'vue'\r\n\r\nimport { isClient } from '@vexip-ui/utils'\r\nimport { observeResize } from './resize'\r\n\r\nimport type { Ref } from 'vue'\r\nimport type { MaybeElement } from './shared/types'\r\n\r\nexport interface InitThemeOptions {\r\n  name: string,\r\n  rootClass?: string,\r\n  varsClass?: string,\r\n}\r\n\r\nconst styleId = '__theme_style__'\r\nconst elClass = '__theme_observer__'\r\n\r\nconst elCache = new WeakMap<Element, Element>()\r\n\r\nexport function useTheme(wrapper?: MaybeElement) {\r\n  const theme = ref<string>()\r\n\r\n  if (isClient) {\r\n    wrapper = wrapper || document.body\r\n\r\n    let observer = elCache.get(wrapper)\r\n\r\n    if (!observer) {\r\n      observer = createObserver(theme)!\r\n      wrapper.appendChild(observer)\r\n      elCache.set(wrapper, observer)\r\n    }\r\n  }\r\n\r\n  return { theme }\r\n}\r\n\r\nconst activeThemes = reactive(new Map<string, string[]>())\r\nconst themeWidths = new Map<number, string>()\r\n\r\nwatch(activeThemes, () => {\r\n  if (!isClient) return\r\n\r\n  themeWidths.clear()\r\n\r\n  const prevStyle = document.head.querySelector(`#${styleId}`)\r\n\r\n  if (prevStyle) {\r\n    document.head.removeChild(prevStyle)\r\n  }\r\n\r\n  const style = document.createElement('style')\r\n\r\n  let content = `.${elClass} { width: 1px }`\r\n  let width = 1\r\n\r\n  for (const [name, [rootClass, varsClass]] of activeThemes.entries()) {\r\n    content += ` html.${rootClass} .${elClass}, .${varsClass} .${elClass} { width: ${++width}px }`\r\n    themeWidths.set(width, name)\r\n  }\r\n\r\n  style.textContent = content\r\n  style.id = styleId\r\n  document.head.appendChild(style)\r\n})\r\n\r\nexport function addActiveThemes(themes: (string | InitThemeOptions)[]) {\r\n  for (const theme of themes) {\r\n    const {\r\n      name,\r\n      rootClass = name,\r\n      varsClass = `vxp-theme-vars-${rootClass}`,\r\n    } = typeof theme === 'string' ? ({ name: theme } as InitThemeOptions) : theme\r\n\r\n    activeThemes.set(name, [rootClass, varsClass])\r\n  }\r\n}\r\n\r\nexport function setActiveThemes(themes: (string | InitThemeOptions)[]) {\r\n  activeThemes.clear()\r\n  addActiveThemes(themes)\r\n}\r\n\r\nlet idCount = 0\r\n\r\nfunction getElId() {\r\n  return `__theme_observer_${idCount++}__`\r\n}\r\n\r\nfunction createObserver(theme: Ref<string | undefined>) {\r\n  if (!isClient) return\r\n\r\n  const observer = document.createElement('div')\r\n\r\n  observer.id = getElId()\r\n  observer.className = elClass\r\n  observer.role = 'none'\r\n  observer.style.cssText =\r\n    'position: fixed; top -10px; left: -10px; height: 1px; visibility: hidden;'\r\n\r\n  observeResize(observer, entry => {\r\n    if (!isClient) return\r\n\r\n    const width = entry.borderBoxSize?.[0].inlineSize ?? entry.contentRect.width\r\n\r\n    theme.value = themeWidths.get(width)\r\n  })\r\n\r\n  return observer\r\n}\r\n","import { onScopeDispose } from 'vue'\r\n\r\n/**\r\n * 获取用于记录 `setTimeout` 返回值的对象，记录的定时器会在作用域消除时自动清理\r\n */\r\nexport function useSetTimeout() {\r\n  const timer: Record<string, any> = {}\r\n\r\n  onScopeDispose(() => {\r\n    Object.keys(timer).forEach(key => {\r\n      clearTimeout(timer[key])\r\n    })\r\n  })\r\n\r\n  return { timer }\r\n}\r\n\r\n/**\r\n * 获取用于记录 `setInterval` 返回值的对象，记录的定时器会在作用域消除时自动清理\r\n */\r\nexport function useSetInterval() {\r\n  const timer: Record<string, any> = {}\r\n\r\n  onScopeDispose(() => {\r\n    Object.keys(timer).forEach(key => {\r\n      clearInterval(timer[key])\r\n    })\r\n  })\r\n\r\n  return { timer }\r\n}\r\n\r\n/**\r\n * 获取用于记录 `requestAnimationFrame` 返回值的对象，记录的定时器会在作用域消除时自动清理\r\n */\r\nexport function useRaf() {\r\n  const timer: Record<string, any> = {}\r\n\r\n  onScopeDispose(() => {\r\n    Object.keys(timer).forEach(key => {\r\n      cancelAnimationFrame(timer[key])\r\n    })\r\n  })\r\n\r\n  return { timer }\r\n}\r\n\r\n/**\r\n * 获取三个分别用于记录 `setTimeout`、`setInterval` 和 `requestAnimationFrame` 返回值的对象\r\n *\r\n * 记录在这些对象上的定时器将会在作用域消除时自动清理\r\n */\r\nexport function useTimerRecord() {\r\n  const { timer: timeout } = useSetTimeout()\r\n  const { timer: interval } = useSetInterval()\r\n  const { timer: raf } = useRaf()\r\n\r\n  return { timeout, interval, raf }\r\n}\r\n","import { computed, onScopeDispose, ref, unref, watch } from 'vue'\r\n\r\nimport { createBITree, isDefined, nextFrameOnce, noop } from '@vexip-ui/utils'\r\nimport { isHiddenElement } from './display'\r\nimport { observeResize, unobserveResize } from './resize'\r\n\r\nimport type { MaybeRef } from 'vue'\r\n\r\ntype Key = number | string | symbol\r\ntype Data = Record<string, any>\r\ntype Behavior = ScrollToOptions['behavior']\r\n\r\nexport interface VirtualOptions<T extends Data> {\r\n  /**\r\n   * 虚拟滚动的元素\r\n   */\r\n  items: MaybeRef<T[]>,\r\n  /**\r\n   * 设置元素的最小高度\r\n   */\r\n  itemSize: MaybeRef<number>,\r\n  /**\r\n   * 设置元素是否为固定高度，固定高度时不处理 resize\r\n   */\r\n  itemFixed: MaybeRef<boolean>,\r\n  /**\r\n   * 元素的主键\r\n   */\r\n  idKey: MaybeRef<keyof T>,\r\n  /**\r\n   * 默认停留在的元素的主键，未实现\r\n   */\r\n  defaultKeyAt?: Key,\r\n  /**\r\n   * 设置前后的缓冲元素的个数\r\n   */\r\n  bufferSize?: MaybeRef<number>,\r\n  /**\r\n   * 虚拟滚动的包围元素\r\n   */\r\n  wrapper?: MaybeRef<HTMLElement | null | undefined>,\r\n  /**\r\n   * 是否自动观察 wrapper 缩放\r\n   *\r\n   * @default true\r\n   */\r\n  autoResize?: boolean,\r\n}\r\n\r\nexport function useVirtual<T extends Data = Data>(options: VirtualOptions<T>) {\r\n  const {\r\n    items,\r\n    itemSize,\r\n    itemFixed,\r\n    idKey,\r\n    defaultKeyAt,\r\n    bufferSize = ref(5),\r\n    wrapper = ref(null),\r\n    autoResize = true,\r\n  } = options\r\n\r\n  const indexMap = computed(() => {\r\n    const itemList = unref(items)\r\n    const length = itemList.length\r\n    const keyField = unref(idKey)\r\n    const map = new Map<Key, number>()\r\n\r\n    for (let i = 0; i < length; ++i) {\r\n      map.set(itemList[i][keyField], i)\r\n    }\r\n\r\n    return map\r\n  })\r\n  const visibleHeight = ref(0)\r\n  const heightDiffMap = new Map<Key, number>()\r\n  const heightTree = computed(() => {\r\n    const itemList = unref(items)\r\n    const length = itemList.length\r\n    const keyField = unref(idKey)\r\n    const tree = createBITree(length, unref(itemSize))\r\n\r\n    for (let i = 0; i < length; ++i) {\r\n      const key = itemList[i][keyField]\r\n      const heightDiff = heightDiffMap.get(key)\r\n\r\n      if (heightDiff) {\r\n        tree.add(i, heightDiff)\r\n      }\r\n    }\r\n\r\n    return tree\r\n  })\r\n  const treeUpdateDep = ref(0)\r\n  const scrollOffset = ref(0)\r\n  const startIndex = computed(() => {\r\n    return Math.max(\r\n      heightTree.value.boundIndex(scrollOffset.value) - Math.max(unref(bufferSize), 0),\r\n      0,\r\n    )\r\n  })\r\n  const visibleItems = computed(() => {\r\n    if (!visibleHeight.value || visibleHeight.value < 0) return []\r\n\r\n    const unrefItems = unref(items)\r\n    const endIndex = Math.min(\r\n      heightTree.value.boundIndex(scrollOffset.value + visibleHeight.value) +\r\n        1 +\r\n        Math.max(unref(bufferSize), 0),\r\n      unrefItems.length,\r\n    )\r\n\r\n    return unrefItems.slice(startIndex.value, endIndex)\r\n  })\r\n  const listStyle = computed(() => {\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n    treeUpdateDep.value\r\n\r\n    const height = heightTree.value.sum()\r\n    const fixed = unref(itemFixed)\r\n\r\n    return {\r\n      height: fixed ? `${height}px` : undefined,\r\n      minHeight: fixed ? undefined : `${height}px`,\r\n      boxSizing: 'content-box',\r\n    } as const\r\n  })\r\n  const itemsStyle = computed(() => {\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n    treeUpdateDep.value\r\n\r\n    return {\r\n      transform: `translate3d(0, ${heightTree.value.sum(startIndex.value)}px, 0)`,\r\n    }\r\n  })\r\n\r\n  watch(\r\n    () => unref(wrapper),\r\n    el => {\r\n      if (el && isDefined(defaultKeyAt)) {\r\n        requestAnimationFrame(() => {\r\n          requestAnimationFrame(() => {\r\n            scrollToKey(defaultKeyAt)\r\n          })\r\n        })\r\n      }\r\n    },\r\n    { immediate: true, flush: 'post' },\r\n  )\r\n\r\n  if (autoResize) {\r\n    let unobserve = noop\r\n\r\n    const stopWatch = watch(\r\n      () => [unref(wrapper), autoResize] as const,\r\n      ([el]) => {\r\n        unobserve()\r\n\r\n        if (!el) return\r\n\r\n        observeResize(el, handleResize)\r\n\r\n        unobserve = () => {\r\n          unobserveResize(el)\r\n          unobserve = noop\r\n        }\r\n\r\n        if (isDefined(defaultKeyAt)) {\r\n          scrollToKey(defaultKeyAt)\r\n        }\r\n      },\r\n      { immediate: true, flush: 'post' },\r\n    )\r\n\r\n    onScopeDispose(() => {\r\n      stopWatch()\r\n      unobserve()\r\n    })\r\n  }\r\n\r\n  function syncScrollOffset() {\r\n    const wrapperEl = unref(wrapper)\r\n\r\n    if (wrapperEl) {\r\n      scrollOffset.value = wrapperEl.scrollTop\r\n    }\r\n  }\r\n\r\n  function handleScroll() {\r\n    nextFrameOnce(syncScrollOffset)\r\n  }\r\n\r\n  function handleResize(entry: ResizeObserverEntry) {\r\n    if (\r\n      isHiddenElement(entry.target as HTMLElement) ||\r\n      entry.contentRect.height === visibleHeight.value\r\n    ) {\r\n      return\r\n    }\r\n\r\n    visibleHeight.value = entry.contentRect.height\r\n  }\r\n\r\n  function handleItemResize(key: Key, entry: ResizeObserverEntry) {\r\n    if (unref(itemFixed)) return\r\n\r\n    const index = indexMap.value.get(key)!\r\n    const tree = heightTree.value\r\n    const prevHeight = tree.get(index)\r\n    const height = entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height\r\n\r\n    if (height === prevHeight) return\r\n\r\n    if (isHiddenElement(entry.target as HTMLElement)) {\r\n      if (prevHeight) {\r\n        tree.add(index, -prevHeight)\r\n        treeUpdateDep.value++\r\n      }\r\n\r\n      return\r\n    }\r\n\r\n    const diff = height - unref(itemSize)\r\n    const delta = height - prevHeight\r\n\r\n    if (diff) {\r\n      heightDiffMap.set(key, diff)\r\n    } else {\r\n      heightDiffMap.delete(key)\r\n    }\r\n\r\n    if (!delta) return\r\n\r\n    tree.add(index, delta)\r\n    treeUpdateDep.value++\r\n\r\n    const wrapperEl = unref(wrapper)\r\n\r\n    if (wrapperEl) {\r\n      const prevTop = tree.sum(index)\r\n\r\n      if (wrapperEl.scrollTop > prevTop) {\r\n        wrapperEl.scrollBy(0, delta)\r\n      }\r\n\r\n      scrollOffset.value = wrapperEl.scrollTop\r\n    }\r\n  }\r\n\r\n  function scrollTo(top: number, behavior?: Behavior) {\r\n    const wrapperEl = unref(wrapper)\r\n\r\n    if (wrapperEl) {\r\n      wrapperEl.scrollTo({\r\n        behavior,\r\n        top,\r\n        left: 0,\r\n      })\r\n    }\r\n  }\r\n\r\n  function scrollBy(delta: number, behavior?: Behavior) {\r\n    const wrapperEl = unref(wrapper)\r\n\r\n    if (wrapperEl) {\r\n      wrapperEl.scrollBy({\r\n        behavior,\r\n        top: delta,\r\n        left: 0,\r\n      })\r\n    }\r\n  }\r\n\r\n  function scrollToKey(key: Key, behavior?: Behavior) {\r\n    const index = indexMap.value.get(key)\r\n\r\n    if (index != null) {\r\n      scrollToIndex(index, behavior)\r\n    }\r\n  }\r\n\r\n  function scrollToIndex(index: number, behavior?: Behavior) {\r\n    const wrapperEl = unref(wrapper)\r\n\r\n    if (wrapperEl) {\r\n      wrapperEl.scrollTo({\r\n        behavior,\r\n        top: heightTree.value.sum(index),\r\n        left: 0,\r\n      })\r\n    }\r\n  }\r\n\r\n  function ensureIndexInView(index: number, behavior?: Behavior) {\r\n    const wrapperEl = unref(wrapper)\r\n\r\n    if (!wrapperEl) return\r\n\r\n    const tree = heightTree.value\r\n    const viewTop = wrapperEl.scrollTop\r\n    const top = tree.sum(index)\r\n\r\n    if (top < viewTop) {\r\n      scrollToIndex(index, behavior)\r\n      return\r\n    }\r\n\r\n    const viewHeight = wrapperEl.offsetHeight\r\n    const viewBottom = viewTop + viewHeight\r\n    const bottom = tree.sum(index + 1)\r\n\r\n    if (bottom > viewBottom) {\r\n      scrollTo(bottom - viewHeight, behavior)\r\n    }\r\n  }\r\n\r\n  function ensureKeyInView(key: Key, behavior?: Behavior) {\r\n    const index = indexMap.value.get(key)\r\n\r\n    if (index != null) {\r\n      ensureIndexInView(index, behavior)\r\n    }\r\n  }\r\n\r\n  return {\r\n    wrapper,\r\n    indexMap,\r\n    heightTree,\r\n    startIndex,\r\n    scrollOffset,\r\n    visibleItems,\r\n    listStyle,\r\n    itemsStyle,\r\n    handleScroll,\r\n    handleResize,\r\n    handleItemResize,\r\n    scrollTo,\r\n    scrollBy,\r\n    scrollToKey,\r\n    scrollToIndex,\r\n    ensureIndexInView,\r\n    ensureKeyInView,\r\n  }\r\n}\r\n","import { observeResize, unobserveResize } from '@vexip-ui/hooks'\r\nimport { noop, throttle } from '@vexip-ui/utils'\r\n\r\nimport type { DirectiveBinding, ObjectDirective } from 'vue'\r\nimport type { ResizeHandler } from '@vexip-ui/hooks'\r\n\r\nexport interface VResizeOptions {\r\n  handler: ResizeHandler,\r\n  throttle?: boolean | number,\r\n  disabled?: boolean,\r\n}\r\n\r\ninterface ResizeRecord {\r\n  useThrottle: boolean | number,\r\n  observed: boolean,\r\n}\r\n\r\nfunction createObserver(\r\n  el: HTMLElement & { __resize?: ResizeRecord },\r\n  binding: DirectiveBinding<ResizeHandler | VResizeOptions>,\r\n) {\r\n  const options: VResizeOptions =\r\n    typeof binding.value === 'function' ? { handler: binding.value } : { ...binding.value }\r\n  const useThrottle = options.throttle || binding.modifiers.throttle || false\r\n\r\n  el.__resize = {\r\n    useThrottle,\r\n    observed: false,\r\n  }\r\n\r\n  if (options.disabled) {\r\n    unobserveResize(el)\r\n    el.__resize.observed = false\r\n    return\r\n  }\r\n\r\n  const throttleResize = useThrottle\r\n    ? throttle(options.handler, typeof useThrottle === 'boolean' ? 16 : useThrottle)\r\n    : options.handler\r\n\r\n  observeResize(el, throttleResize)\r\n  el.__resize.observed = true\r\n}\r\n\r\nexport const vResize: ObjectDirective<\r\n  HTMLElement & { __resize?: ResizeRecord },\r\n  ResizeHandler | VResizeOptions\r\n> = {\r\n  mounted(el, binding) {\r\n    createObserver(el, binding)\r\n  },\r\n  updated(el, binding) {\r\n    if (!el.__resize) {\r\n      createObserver(el, binding)\r\n      return\r\n    }\r\n\r\n    const options: VResizeOptions =\r\n      typeof binding.value === 'function' ? { handler: binding.value } : { ...binding.value }\r\n    const useThrottle = options.throttle || binding.modifiers.throttle\r\n\r\n    const getHandler = () =>\r\n      useThrottle\r\n        ? throttle(options.handler, typeof useThrottle === 'boolean' ? 16 : useThrottle)\r\n        : options.handler\r\n\r\n    if (options.disabled) {\r\n      if (el.__resize.observed) {\r\n        unobserveResize(el)\r\n        el.__resize.observed = false\r\n      }\r\n    } else if (!el.__resize.observed) {\r\n      observeResize(el, getHandler())\r\n      el.__resize.observed = true\r\n    } else {\r\n      const prevOptions: VResizeOptions =\r\n        typeof binding.oldValue === 'function'\r\n          ? { handler: binding.oldValue }\r\n          : { ...(binding.oldValue || { handler: noop }) }\r\n\r\n      if (useThrottle !== el.__resize.useThrottle || options.handler !== prevOptions.handler) {\r\n        unobserveResize(el)\r\n        observeResize(el, getHandler())\r\n      }\r\n    }\r\n  },\r\n  beforeUnmount(el) {\r\n    if (el.__resize?.observed) {\r\n      unobserveResize(el)\r\n    }\r\n\r\n    delete el.__resize\r\n  },\r\n}\r\n","import { vLoading } from './loading'\r\nimport { vResize } from './resize'\r\n\r\nimport type { App } from 'vue'\r\n\r\nexport function installDirectives(app: App) {\r\n  app.directive('loading', vLoading)\r\n  app.directive('resize', vResize)\r\n}\r\n\r\nexport * from './loading'\r\nexport * from './resize'\r\n","import { buildProps, eventProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { AffixPositionType } from './symbol'\r\n\r\nexport const affixProps = buildProps({\r\n  offset: Number,\r\n  zIndex: Number,\r\n  position: String as PropType<AffixPositionType>,\r\n  target: [String, Object, Function] as PropType<unknown>,\r\n\r\n  onScroll: eventProp(),\r\n  onChange: eventProp(),\r\n})\r\n\r\nexport type AffixProps = ExtractPropTypes<typeof affixProps>\r\nexport type AffixCProps = ConfigurableProps<ExtractPropTypes<typeof affixProps>>\r\n","import { unref } from 'vue'\r\n\r\nimport type { MaybeRef } from 'vue'\r\n\r\nlet lastScroller: Window | HTMLElement | null | undefined = null\r\n\r\nexport function handleLastScroller(target: MaybeRef<HTMLElement | null | undefined>) {\r\n  target = unref(target)\r\n\r\n  if (lastScroller !== unref(target)) {\r\n    if (lastScroller && lastScroller !== window && lastScroller !== document.documentElement) {\r\n      const targetAffix = (lastScroller as HTMLElement).querySelector(\r\n        '.vxp-affix--fixed',\r\n      ) as HTMLElement\r\n\r\n      if (targetAffix) {\r\n        targetAffix.classList.remove('vxp-affix--fixed')\r\n      }\r\n    }\r\n\r\n    lastScroller = target\r\n  }\r\n}\r\n\r\nexport function clearLastScroller(target: MaybeRef<HTMLElement | null | undefined>) {\r\n  if (lastScroller && lastScroller === unref(target)) {\r\n    lastScroller = null\r\n  }\r\n}\r\n","<script setup lang=\"ts\">\r\nimport {\r\n  computed,\r\n  getCurrentInstance,\r\n  onBeforeUnmount,\r\n  onMounted,\r\n  ref,\r\n  shallowRef,\r\n  watch,\r\n  watchEffect,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { affixProps } from './props'\r\nimport { callIfFunc, isClient, isElement } from '@vexip-ui/utils'\r\nimport { clearLastScroller, handleLastScroller } from './helpers'\r\n\r\nimport type { NativeScrollExposed } from '@/components/native-scroll'\r\nimport type { ScrollExposed } from '@/components/scroll'\r\n\r\nimport type { CSSProperties, ComponentInternalInstance } from 'vue'\r\n\r\ntype ScrollType = NativeScrollExposed & ScrollExposed\r\n\r\ndefineOptions({ name: 'Affix' })\r\n\r\nconst _props = defineProps(affixProps)\r\nconst props = useProps('affix', _props, {\r\n  offset: 0,\r\n  zIndex: 100,\r\n  position: 'top',\r\n  target: null,\r\n})\r\n\r\nconst nh = useNameHelper('affix')\r\n\r\nconst instance = getCurrentInstance()!\r\n\r\nconst wrapper = shallowRef<HTMLElement>()\r\nconst target = shallowRef<HTMLElement>()\r\nconst container = shallowRef<Window | HTMLElement>()\r\n\r\nlet isRawViewer = false\r\nlet scroller: ScrollType | null = null\r\n\r\nconst fixed = ref(false)\r\nconst affixHeight = ref(0)\r\nconst affixWidth = ref(0)\r\nconst scrollTop = ref(0)\r\nconst clientHeight = ref(0)\r\nconst transform = ref(0)\r\n\r\nconst affixStyle = computed<CSSProperties>(() => {\r\n  return {\r\n    height: fixed.value ? `${affixHeight.value}px` : '',\r\n    width: fixed.value ? `${affixWidth.value}px` : '',\r\n  }\r\n})\r\nconst fixedStyle = computed<CSSProperties>(() => {\r\n  if (!fixed.value) return {}\r\n\r\n  let _top = props.offset\r\n  let _bottom = props.offset\r\n\r\n  if (isElement(container.value)) {\r\n    if (props.target && props.position === 'top') {\r\n      _top += transform.value\r\n    } else {\r\n      _bottom += transform.value\r\n    }\r\n  }\r\n\r\n  return {\r\n    height: `${affixHeight.value}px`,\r\n    width: `${affixWidth.value}px`,\r\n    top: props.position === 'top' ? `${_top}px` : '',\r\n    bottom: props.position === 'bottom' ? `${_bottom}px` : '',\r\n    zIndex: props.zIndex,\r\n  }\r\n})\r\n\r\nwatchEffect(update)\r\nwatch(fixed, fixed => {\r\n  emitEvent(props.onChange, fixed)\r\n})\r\n\r\ndefineExpose({ update })\r\n\r\nonMounted(() => {\r\n  if (props.target) {\r\n    const _target: unknown = callIfFunc(props.target)\r\n\r\n    if (typeof _target === 'string') {\r\n      target.value = document.querySelector<HTMLElement>(_target) ?? undefined\r\n\r\n      if (!target.value) {\r\n        throw new Error(`[vexip-ui:Affix] target not exists: ${props.target}`)\r\n      }\r\n    } else {\r\n      target.value = _target as any\r\n    }\r\n  } else {\r\n    target.value = document.documentElement\r\n  }\r\n\r\n  updateContainer()\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n  removeListener()\r\n})\r\n\r\nfunction update() {\r\n  if (!wrapper.value || !target.value || !container.value) return\r\n\r\n  const wrapperRect = wrapper.value.getBoundingClientRect()\r\n  const targetRect = target.value.getBoundingClientRect()\r\n\r\n  affixHeight.value = wrapperRect.height\r\n  affixWidth.value = wrapperRect.width\r\n  scrollTop.value =\r\n    container.value === window\r\n      ? document.documentElement.scrollTop\r\n      : (container.value as unknown as ScrollType).scrollY || 0\r\n  scrollTop.value = document.documentElement.scrollTop\r\n  clientHeight.value = document.documentElement.clientHeight\r\n\r\n  if (props.position === 'top') {\r\n    if (props.target) {\r\n      transform.value = targetRect.top\r\n      fixed.value = wrapperRect.top < targetRect.top + props.offset\r\n    } else {\r\n      fixed.value = props.offset > wrapperRect.top\r\n    }\r\n  } else {\r\n    if (props.target) {\r\n      transform.value = clientHeight.value - targetRect.bottom\r\n      fixed.value = targetRect.bottom < props.offset + wrapperRect.bottom\r\n    } else {\r\n      fixed.value = clientHeight.value - props.offset < wrapperRect.bottom\r\n    }\r\n  }\r\n}\r\n\r\nfunction handleContainerScroll() {\r\n  handleLastScroller(target)\r\n  update()\r\n\r\n  emitEvent(props.onScroll, {\r\n    scrollTop: scrollTop.value,\r\n    fixed: fixed.value,\r\n  })\r\n}\r\n\r\nfunction updateContainer() {\r\n  removeListener()\r\n\r\n  if (!isClient) return\r\n\r\n  if (props.target) {\r\n    container.value = target.value!\r\n    container.value.addEventListener('scroll', handleContainerScroll)\r\n  } else {\r\n    let _container: ComponentInternalInstance | null = instance.parent!\r\n    const refName = 'scroll'\r\n\r\n    while (_container) {\r\n      const name = _container.type?.name\r\n\r\n      if (name === 'Scroll' || name === 'NativeScroll') {\r\n        const { exposeProxy, exposed, proxy } = _container\r\n        const _scroller = new Proxy({} as any, {\r\n          get(_, key) {\r\n            return (proxy as any)?.[key] ?? (exposeProxy as any)?.[key] ?? (exposed as any)?.[key]\r\n          },\r\n        })\r\n        const scrollerEl = _scroller?.$el as HTMLElement\r\n\r\n        if (!scrollerEl.getAttribute('class')?.includes('vxp-native-scroll--horizontal')) {\r\n          scroller = _scroller\r\n          break\r\n        }\r\n      }\r\n\r\n      const refTemp = _container.refs?.[refName]\r\n\r\n      if (refTemp) {\r\n        if (isElement(refTemp)) {\r\n          isRawViewer = true\r\n          container.value = refTemp as HTMLElement\r\n        } else {\r\n          scroller = refTemp as ScrollType\r\n        }\r\n\r\n        break\r\n      }\r\n\r\n      _container = _container.parent\r\n    }\r\n\r\n    if (scroller) {\r\n      scroller.addScrollListener(handleContainerScroll)\r\n      container.value = scroller.$el\r\n    } else if (!container.value) {\r\n      isRawViewer = true\r\n      container.value = window\r\n    }\r\n\r\n    if (isRawViewer && container.value) {\r\n      container.value.addEventListener('scroll', handleContainerScroll)\r\n    }\r\n  }\r\n}\r\n\r\nfunction removeListener() {\r\n  if (scroller) {\r\n    scroller.removeScrollListener(handleContainerScroll)\r\n    scroller = null\r\n  }\r\n\r\n  if (container.value) {\r\n    container.value.removeEventListener('scroll', handleContainerScroll)\r\n    container.value = undefined\r\n  }\r\n\r\n  clearLastScroller(target)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div ref=\"wrapper\" :class=\"nh.b()\" :style=\"affixStyle\">\r\n    <div :class=\"{ [nh.bm('fixed')]: fixed }\" :style=\"fixedStyle\">\r\n      <slot></slot>\r\n    </div>\r\n  </div>\r\n</template>\r\n","import { booleanProp, buildProps, eventProp, iconProp, styleProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { CollapseArrowType, CollapsePanelSlots } from './symbol'\r\n\r\nexport const collapseProps = buildProps({\r\n  expanded: [String, Number, Array] as PropType<string | number | (string | number)[]>,\r\n  card: booleanProp,\r\n  accordion: booleanProp,\r\n  arrowType: String as PropType<CollapseArrowType>,\r\n  ghost: booleanProp,\r\n  onChange: eventProp<(expanded: (string | number)[]) => void>(),\r\n})\r\n\r\nexport type CollapseProps = ExtractPropTypes<typeof collapseProps>\r\nexport type CollapseCProps = ConfigurableProps<CollapseProps, 'expanded'>\r\n\r\nexport const collapsePanelProps = buildProps({\r\n  label: [String, Number],\r\n  title: String,\r\n  disabled: booleanProp,\r\n  contentStyle: styleProp,\r\n  expanded: booleanProp,\r\n  card: booleanProp,\r\n  arrowType: String as PropType<CollapseArrowType>,\r\n  icon: iconProp,\r\n  ghost: booleanProp,\r\n  slots: Object as PropType<CollapsePanelSlots>,\r\n  onToggle: eventProp<(expanded: boolean) => void>(),\r\n})\r\n\r\nexport type CollapsePanelProps = ExtractPropTypes<typeof collapsePanelProps>\r\nexport type CollapsePanelCProps = ConfigurableProps<CollapsePanelProps>\r\n\r\ntype TransitionMode = 'in-out' | 'out-in' | 'default'\r\n\r\nexport const collapseTransitionProps = buildProps({\r\n  appear: booleanProp,\r\n  mode: String as PropType<TransitionMode>,\r\n  horizontal: booleanProp,\r\n  duration: Number,\r\n  timing: String,\r\n  fadeEffect: booleanProp,\r\n  /**\r\n   * Internal prop for Tree, reverse the enter transition\r\n   *\r\n   * @internal\r\n   */\r\n  reverse: booleanProp,\r\n  disabled: booleanProp,\r\n  onBeforeEnter: eventProp<(el: Element) => void>(),\r\n  onEnter: eventProp<(el: Element) => void>(),\r\n  onAfterEnter: eventProp<(el: Element) => void>(),\r\n  onEnterCancelled: eventProp<(el: Element) => void>(),\r\n  onBeforeLeave: eventProp<(el: Element) => void>(),\r\n  onLeave: eventProp<(el: Element) => void>(),\r\n  onAfterLeave: eventProp<(el: Element) => void>(),\r\n  onLeaveCancelled: eventProp<(el: Element) => void>(),\r\n})\r\n\r\nexport type CollapseTransitionProps = ExtractPropTypes<typeof collapseTransitionProps>\r\nexport type CollapseTransitionCProps = ConfigurableProps<CollapseTransitionProps>\r\n","import { Transition, defineComponent, h, renderSlot } from 'vue'\r\n\r\nimport { emitEvent, useProps } from '@vexip-ui/config'\r\nimport { collapseTransitionProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'CollapseTransition',\r\n  props: collapseTransitionProps,\r\n  emits: [],\r\n  setup(_props, { slots }) {\r\n    const props = useProps('collapseTransition', _props, {\r\n      appear: false,\r\n      mode: {\r\n        default: 'default',\r\n        validator: value => ['in-out', 'out-in', 'default'].includes(value),\r\n      },\r\n      horizontal: false,\r\n      duration: {\r\n        default: 250,\r\n        validator: (value: number) => value >= 200,\r\n      },\r\n      timing: null,\r\n      fadeEffect: false,\r\n      reverse: false,\r\n    })\r\n\r\n    let enterStage: 'before' | 'in' | null = null\r\n    let leaveStage: 'before' | 'in' | null = null\r\n\r\n    return () => {\r\n      if (props.disabled) {\r\n        return renderSlot(slots, 'default')\r\n      }\r\n\r\n      const duration = props.duration\r\n      const timing = props.timing || 'ease-in-out'\r\n\r\n      let height: 'maxWidth' | 'maxHeight' = 'maxHeight'\r\n      let paddingTop: 'paddingTop' | 'paddingLeft' = 'paddingTop'\r\n      let paddingBottom: 'paddingRight' | 'paddingBottom' = 'paddingBottom'\r\n      let marginTop: 'marginTop' | 'marginLeft' = 'marginTop'\r\n      let marginBottom: 'marginRight' | 'marginBottom' = 'marginBottom'\r\n      let scrollHeight: 'scrollHeight' | 'scrollWidth' = 'scrollHeight'\r\n      let transition = `\r\n        max-height ${duration}ms ${timing},\r\n        padding-top ${duration}ms ${timing},\r\n        padding-bottom ${duration}ms ${timing},\r\n        margin-top ${duration}ms ${timing},\r\n        margin-bottom ${duration}ms ${timing}\r\n      `\r\n\r\n      if (props.horizontal) {\r\n        height = 'maxWidth'\r\n        paddingTop = 'paddingLeft'\r\n        paddingBottom = 'paddingRight'\r\n        marginTop = 'marginLeft'\r\n        marginBottom = 'marginRight'\r\n        scrollHeight = 'scrollWidth'\r\n        transition = `\r\n          max-width ${duration}ms ${timing},\r\n          padding-inline-start ${duration}ms ${timing},\r\n          padding-inline-end ${duration}ms ${timing},\r\n          margin-inline-start ${duration}ms ${timing},\r\n          margin-inline-end ${duration}ms ${timing}\r\n        `\r\n      }\r\n\r\n      if (props.fadeEffect) {\r\n        transition = `\r\n          ${transition},\r\n          opacity ${duration}ms ease\r\n        `\r\n      }\r\n\r\n      const enterRecord: Partial<CSSStyleDeclaration> = {}\r\n      const leaveRecord: Partial<CSSStyleDeclaration> = {}\r\n\r\n      return h(\r\n        Transition,\r\n        {\r\n          appear: props.appear,\r\n          mode: props.mode,\r\n          onBeforeEnter($el) {\r\n            if (enterStage) return\r\n\r\n            enterStage = 'before'\r\n            const el = $el as HTMLElement\r\n\r\n            enterRecord.paddingTop = el.style[paddingTop]\r\n            enterRecord.paddingBottom = el.style[paddingBottom]\r\n            enterRecord.marginTop = el.style[marginTop]\r\n            enterRecord.marginBottom = el.style[marginBottom]\r\n            enterRecord.transition = el.style.transition\r\n            enterRecord.boxSizing = el.style.boxSizing\r\n            enterRecord.opacity = el.style.opacity\r\n\r\n            el.style.transition = transition\r\n\r\n            if (!props.reverse) {\r\n              el.style[height] = '0'\r\n              el.style[paddingTop] = '0'\r\n              el.style[paddingBottom] = '0'\r\n              el.style[marginTop] = '0'\r\n              el.style[marginBottom] = '0'\r\n              el.style.boxSizing = 'content-box'\r\n\r\n              if (props.fadeEffect) {\r\n                el.style.opacity = '0'\r\n              }\r\n            }\r\n\r\n            emitEvent(props.onBeforeEnter, $el)\r\n          },\r\n          onEnter($el) {\r\n            if (enterStage === 'in') return\r\n\r\n            enterStage = 'in'\r\n            const el = $el as HTMLElement\r\n\r\n            enterRecord.overflow = el.style.overflow\r\n            el.style.overflow = 'hidden'\r\n\r\n            if (el[scrollHeight] !== 0) {\r\n              el.style[height] = `${el[scrollHeight]}px`\r\n            } else {\r\n              el.style[height] = ''\r\n            }\r\n\r\n            el.style[paddingTop] = enterRecord.paddingTop!\r\n            el.style[paddingBottom] = enterRecord.paddingBottom!\r\n            el.style[marginTop] = enterRecord.marginTop!\r\n            el.style[marginBottom] = enterRecord.marginBottom!\r\n\r\n            if (!props.reverse) {\r\n              if (props.fadeEffect) {\r\n                el.style.opacity = enterRecord.opacity!\r\n              }\r\n            } else {\r\n              // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n              el[scrollHeight]\r\n\r\n              el.style[height] = '0'\r\n              el.style[paddingTop] = '0'\r\n              el.style[paddingBottom] = '0'\r\n              el.style[marginTop] = '0'\r\n              el.style[marginBottom] = '0'\r\n              el.style.boxSizing = 'content-box'\r\n\r\n              if (props.fadeEffect) {\r\n                el.style.opacity = '0'\r\n              }\r\n            }\r\n\r\n            emitEvent(props.onEnter, $el)\r\n          },\r\n          onAfterEnter($el) {\r\n            const el = $el as HTMLElement\r\n\r\n            el.style.transition = enterRecord.transition || ''\r\n\r\n            if (!props.reverse) {\r\n              el.style[height] = ''\r\n              el.style.overflow = enterRecord.overflow!\r\n              el.style.boxSizing = enterRecord.boxSizing!\r\n            }\r\n\r\n            enterStage = null\r\n            emitEvent(props.onAfterEnter, $el)\r\n          },\r\n          onEnterCancelled($el) {\r\n            const el = $el as HTMLElement\r\n\r\n            el.style.transition = enterRecord.transition || ''\r\n            el.style[height] = ''\r\n            el.style.overflow = enterRecord.overflow!\r\n            el.style.boxSizing = enterRecord.boxSizing!\r\n\r\n            enterStage = null\r\n            emitEvent(props.onEnterCancelled, $el)\r\n          },\r\n          onBeforeLeave($el) {\r\n            if (leaveStage) return\r\n\r\n            leaveStage = 'before'\r\n            const el = $el as HTMLElement\r\n\r\n            leaveRecord.paddingTop = el.style[paddingTop]\r\n            leaveRecord.paddingBottom = el.style[paddingBottom]\r\n            leaveRecord.marginTop = el.style[marginTop]\r\n            leaveRecord.marginBottom = el.style[marginBottom]\r\n            leaveRecord.overflow = el.style.overflow\r\n            leaveRecord.boxSizing = el.style.boxSizing\r\n            leaveRecord.opacity = el.style.opacity\r\n\r\n            el.style[height] = `${el[scrollHeight]}px`\r\n            el.style.overflow = 'hidden'\r\n\r\n            emitEvent(props.onBeforeLeave, $el)\r\n          },\r\n          onLeave($el) {\r\n            if (leaveStage === 'in') return\r\n\r\n            leaveStage = 'in'\r\n            const el = $el as HTMLElement\r\n\r\n            if (el[scrollHeight] !== 0) {\r\n              leaveRecord.transition = el.style.transition\r\n\r\n              el.style.transition = transition\r\n\r\n              el.style[height] = '0'\r\n              el.style[paddingTop] = '0'\r\n              el.style[paddingBottom] = '0'\r\n              el.style[marginTop] = '0'\r\n              el.style[marginBottom] = '0'\r\n\r\n              if (props.fadeEffect) {\r\n                el.style.opacity = '0'\r\n              }\r\n            }\r\n\r\n            emitEvent(props.onLeave, $el)\r\n          },\r\n          onAfterLeave($el) {\r\n            const el = $el as HTMLElement\r\n\r\n            el.style[height] = ''\r\n            el.style[paddingTop] = leaveRecord.paddingTop!\r\n            el.style[paddingBottom] = leaveRecord.paddingBottom!\r\n            el.style[marginTop] = leaveRecord.marginTop!\r\n            el.style[marginBottom] = leaveRecord.marginBottom!\r\n            el.style.overflow = leaveRecord.overflow!\r\n            el.style.transition = leaveRecord.transition || ''\r\n            el.style.boxSizing = leaveRecord.boxSizing!\r\n            el.style.opacity = leaveRecord.opacity!\r\n\r\n            leaveStage = null\r\n            emitEvent(props.onAfterLeave, $el)\r\n          },\r\n          onLeaveCancelled($el) {\r\n            const el = $el as HTMLElement\r\n\r\n            el.style[height] = ''\r\n            el.style[paddingTop] = leaveRecord.paddingTop!\r\n            el.style[paddingBottom] = leaveRecord.paddingBottom!\r\n            el.style[marginTop] = leaveRecord.marginTop!\r\n            el.style[marginBottom] = leaveRecord.marginBottom!\r\n            el.style.overflow = leaveRecord.overflow!\r\n            el.style.transition = leaveRecord.transition || ''\r\n            el.style.boxSizing = leaveRecord.boxSizing!\r\n            el.style.opacity = leaveRecord.opacity!\r\n\r\n            leaveStage = null\r\n            emitEvent(props.onLeaveCancelled, $el)\r\n          },\r\n        },\r\n        slots,\r\n      )\r\n    }\r\n  },\r\n})\r\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { AlertSlots, AlertType } from './symbol'\r\n\r\nexport const alertProps = buildProps({\r\n  type: String as PropType<AlertType>,\r\n  title: String,\r\n  colorfulText: booleanProp,\r\n  icon: {\r\n    type: [Boolean, Object, Function],\r\n    default: null,\r\n  },\r\n  closable: booleanProp,\r\n  iconColor: String,\r\n  noBorder: booleanProp,\r\n  banner: booleanProp,\r\n  manual: booleanProp,\r\n  scroll: booleanProp,\r\n  scrollSpeed: Number,\r\n  color: String,\r\n  slots: Object as PropType<AlertSlots>,\r\n  onClose: eventProp(),\r\n  onHide: eventProp(),\r\n  onScrollEnd: eventProp(),\r\n})\r\n\r\nexport type AlertProps = ExtractPropTypes<typeof alertProps>\r\nexport type AlertCProps = ConfigurableProps<ExtractPropTypes<typeof alertProps>>\r\n","export type AlertType = 'default' | 'primary' | 'info' | 'success' | 'warning' | 'error'\r\n\r\nexport interface AlertSlots {\r\n  default?: () => any,\r\n  title?: () => any,\r\n  close?: () => any,\r\n  icon?: () => any,\r\n}\r\n\r\nexport const alertTypes = Object.freeze<AlertType[]>([\r\n  'default',\r\n  'primary',\r\n  'info',\r\n  'success',\r\n  'warning',\r\n  'error',\r\n])\r\n","<script setup lang=\"ts\">\r\nimport { CollapseTransition } from '@/components/collapse-transition'\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, onMounted, ref, watch } from 'vue'\r\n\r\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { adjustAlpha, getRangeWidth, isClient, mixColor, parseColorToRgba } from '@vexip-ui/utils'\r\nimport { alertProps } from './props'\r\nimport { alertTypes } from './symbol'\r\n\r\nimport type { AlertSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'Alert' })\r\n\r\nconst _props = defineProps(alertProps)\r\nconst props = useProps('alert', _props, {\r\n  type: {\r\n    default: 'primary',\r\n    validator: value => alertTypes.includes(value),\r\n  },\r\n  title: '',\r\n  colorfulText: false,\r\n  icon: {\r\n    isFunc: true,\r\n    default: false,\r\n  },\r\n  closable: false,\r\n  iconColor: '',\r\n  noBorder: false,\r\n  banner: false,\r\n  manual: false,\r\n  scroll: false,\r\n  scrollSpeed: 1,\r\n  color: null,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst slots = defineSlots<AlertSlots>()\r\n\r\nconst nh = useNameHelper('alert')\r\nconst icons = useIcons()\r\n\r\nconst predefinedIcons = computed(() => ({\r\n  default: icons.value.alert,\r\n  primary: icons.value.info,\r\n  info: icons.value.info,\r\n  success: icons.value.success,\r\n  warning: icons.value.warning,\r\n  error: icons.value.error,\r\n}))\r\n\r\nconst closed = ref(false)\r\nconst hidden = ref(false)\r\nconst scrollDuration = ref(0)\r\nconst scrollOffset = ref(0)\r\nconst scrollWidth = ref(0)\r\n\r\nconst content = ref<HTMLElement>()\r\nconst scrollEl = ref<HTMLElement>()\r\n\r\nconst hasTitle = computed(() => {\r\n  return !!(props.title || slots.title)\r\n})\r\nconst hasIcon = computed(() => {\r\n  return !!(props.icon || slots.icon)\r\n})\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm(props.type)]: props.type,\r\n    [nh.bm('colorful-text')]: props.colorfulText,\r\n    [nh.bm('has-title')]: hasTitle.value,\r\n    [nh.bm('has-icon')]: hasIcon.value,\r\n    [nh.bm('closable')]: props.closable,\r\n    [nh.bm('no-border')]: !props.banner && props.noBorder,\r\n    [nh.bm('banner')]: props.banner,\r\n  }\r\n})\r\nconst style = computed(() => {\r\n  if (!props.color) return undefined\r\n\r\n  const rootStyle = isClient ? getComputedStyle(document.documentElement) : null\r\n  const black = parseColorToRgba(rootStyle?.getPropertyValue(nh.nv('color-black')) || '#000')\r\n  const baseColor = parseColorToRgba(props.color)\r\n\r\n  return nh.cvm({\r\n    'bg-color': adjustAlpha(baseColor, 0.2).toString(),\r\n    'b-color': adjustAlpha(baseColor, 0.5).toString(),\r\n    'icon-color': mixColor(black, baseColor, 0.2).toString(),\r\n    ...(props.colorfulText\r\n      ? {\r\n        'text-color': mixColor(black, baseColor, 0.2).toString(),\r\n        'title-color': mixColor(black, baseColor, 0.2).toString(),\r\n      }\r\n      : {}),\r\n  })\r\n})\r\nconst iconComp = computed(() => {\r\n  if (typeof props.icon === 'boolean') {\r\n    return predefinedIcons.value[props.type] ?? {}\r\n  }\r\n\r\n  return { icon: props.icon }\r\n})\r\nconst scrollStyle = computed(() => {\r\n  return {\r\n    width: `${scrollWidth.value}px`,\r\n    transitionDuration: `${scrollDuration.value}ms`,\r\n    transform: `translateX(${scrollOffset.value}px)`,\r\n  }\r\n})\r\n\r\nwatch(\r\n  () => props.scroll,\r\n  value => {\r\n    value && startScroll()\r\n  },\r\n)\r\n\r\nonMounted(() => {\r\n  props.scroll && startScroll()\r\n})\r\n\r\nfunction handleClose() {\r\n  if (!props.manual) {\r\n    closed.value = true\r\n  }\r\n\r\n  emitEvent(props.onClose)\r\n}\r\n\r\nfunction handleAfterLeave() {\r\n  emitEvent(props.onHide)\r\n  hidden.value = true\r\n}\r\n\r\nfunction startScroll() {\r\n  if (content.value && scrollEl.value) {\r\n    const contentRect = content.value.getBoundingClientRect()\r\n    const rangeWidth = getRangeWidth(scrollEl.value)\r\n    const duration = ((contentRect.width + rangeWidth) * 12) / (Math.max(props.scrollSpeed, 0) || 1)\r\n\r\n    scrollDuration.value = 0\r\n    scrollOffset.value = contentRect.width\r\n    scrollWidth.value = rangeWidth\r\n\r\n    requestAnimationFrame(() => {\r\n      requestAnimationFrame(() => {\r\n        scrollDuration.value = duration\r\n        scrollOffset.value = -rangeWidth\r\n      })\r\n    })\r\n  }\r\n}\r\n\r\nfunction handleScrollEnd() {\r\n  emitEvent(props.onScrollEnd)\r\n  requestAnimationFrame(startScroll)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <CollapseTransition v-if=\"!hidden\" fade-effect @after-leave=\"handleAfterLeave\">\r\n    <div\r\n      v-if=\"!closed\"\r\n      :class=\"className\"\r\n      role=\"alert\"\r\n      :style=\"style\"\r\n    >\r\n      <div :class=\"nh.be('wrapper')\">\r\n        <div v-if=\"hasTitle\" :class=\"nh.be('title')\">\r\n          <slot name=\"title\">\r\n            <Renderer :renderer=\"props.slots.title\">\r\n              {{ title }}\r\n            </Renderer>\r\n          </slot>\r\n        </div>\r\n        <div ref=\"content\" :class=\"[nh.be('content'), props.scroll && nh.bem('content', 'scroll')]\">\r\n          <span\r\n            v-if=\"props.scroll\"\r\n            ref=\"scrollEl\"\r\n            :class=\"nh.be('scroll')\"\r\n            :style=\"scrollStyle\"\r\n            @transitionend=\"handleScrollEnd\"\r\n          >\r\n            <slot>\r\n              <Renderer :renderer=\"props.slots.default\"></Renderer>\r\n            </slot>\r\n          </span>\r\n          <slot v-else>\r\n            <Renderer :renderer=\"props.slots.default\"></Renderer>\r\n          </slot>\r\n        </div>\r\n      </div>\r\n      <button\r\n        v-if=\"props.closable\"\r\n        type=\"button\"\r\n        :class=\"nh.be('close')\"\r\n        @click=\"handleClose\"\r\n      >\r\n        <slot name=\"close\">\r\n          <Renderer :renderer=\"props.slots.close\">\r\n            <Icon v-bind=\"icons.close\" label=\"close\"></Icon>\r\n          </Renderer>\r\n        </slot>\r\n      </button>\r\n      <div v-if=\"hasIcon\" :class=\"nh.be('icon')\">\r\n        <slot name=\"icon\">\r\n          <Renderer :renderer=\"props.slots.icon\">\r\n            <Icon\r\n              v-bind=\"iconComp\"\r\n              :scale=\"hasTitle ? 2 : 1\"\r\n              :style=\"{ color: props.iconColor }\"\r\n            ></Icon>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n    </div>\r\n  </CollapseTransition>\r\n</template>\r\n","import { booleanProp, buildProps, eventProp, wrapProps } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { AnchorLinkOptions, AnchorSlots } from './symbol'\r\n\r\nexport const anchorProps = buildProps({\r\n  active: String,\r\n  viewer: [String, Object, Function] as PropType<unknown>,\r\n  offset: Number,\r\n  marker: booleanProp,\r\n  scrollDuration: Number,\r\n  markerTransition: String,\r\n  options: Array as PropType<AnchorLinkOptions[]>,\r\n  bindHash: booleanProp,\r\n  forceActive: booleanProp,\r\n  slots: Object as PropType<AnchorSlots>,\r\n  onChange: eventProp<(value: string) => void>(),\r\n})\r\n\r\nexport type AnchorProps = ExtractPropTypes<typeof anchorProps>\r\nexport type AnchorCProps = ConfigurableProps<AnchorProps, 'viewer'>\r\n\r\nexport const anchorLinkProps = wrapProps({\r\n  to: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n  title: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n  children: {\r\n    type: Array as PropType<AnchorLinkOptions[]>,\r\n    default: () => [],\r\n  },\r\n})\r\n\r\nexport type AnchorLinkProps = ExtractPropTypes<typeof anchorLinkProps>\r\n","import type { InjectionKey } from 'vue'\r\n\r\nexport interface AnchorLinkOptions {\r\n  to: string,\r\n  label: string,\r\n  title?: string,\r\n  children?: AnchorLinkOptions[],\r\n}\r\n\r\nexport interface AnchorLinkState {\r\n  el?: HTMLElement,\r\n  to: string,\r\n  active: boolean,\r\n  indent: number,\r\n}\r\n\r\nexport interface AnchorState {\r\n  currentActive: string,\r\n  increaseLink(state: AnchorLinkState): void,\r\n  decreaseLink(state: AnchorLinkState): void,\r\n  handleActive(label: string): void,\r\n}\r\n\r\nexport interface AnchorSlots {\r\n  default?: () => any,\r\n  marker?: () => any,\r\n}\r\n\r\nexport const baseIndentWidth = 14 // px\r\nexport const LINK_STATE = '__VXP_ANCHOR_LINK_STATE' as unknown as InjectionKey<AnchorLinkState>\r\nexport const ANCHOR_STATE = '__VXP_ANCHOR_STATE' as unknown as InjectionKey<AnchorState>\r\n","<script setup lang=\"ts\">\r\nimport {\r\n  computed,\r\n  inject,\r\n  onBeforeUnmount,\r\n  onMounted,\r\n  provide,\r\n  reactive,\r\n  ref,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { anchorLinkProps } from './props'\r\nimport { ANCHOR_STATE, LINK_STATE, baseIndentWidth } from './symbol'\r\n\r\ndefineOptions({ name: 'AnchorLink' })\r\n\r\nconst props = defineProps(anchorLinkProps)\r\n\r\nconst anchorState = inject(ANCHOR_STATE, null)\r\nconst parentLinkState = inject(LINK_STATE, null)\r\n\r\nconst nh = useNameHelper('anchor')\r\nconst indent = ref(parentLinkState?.indent ? parentLinkState?.indent + 1 : 1)\r\nconst active = ref(false)\r\n\r\nconst link = ref<HTMLElement>()\r\n\r\nconst state = reactive({\r\n  el: link,\r\n  to: toRef(props, 'to'),\r\n  active,\r\n  indent,\r\n})\r\n\r\nconst linkClass = computed(() => {\r\n  return {\r\n    [nh.be('link')]: true,\r\n    [nh.bem('link', 'active')]: state.active,\r\n  }\r\n})\r\nconst linkStyle = computed(() => {\r\n  return {\r\n    paddingInlineStart: `${baseIndentWidth * indent.value}px`,\r\n  }\r\n})\r\n\r\nprovide(LINK_STATE, state)\r\n\r\nif (anchorState) {\r\n  watch(\r\n    () => anchorState.currentActive,\r\n    value => {\r\n      active.value = value === props.to\r\n    },\r\n  )\r\n\r\n  onMounted(() => {\r\n    anchorState.increaseLink(state)\r\n  })\r\n\r\n  onBeforeUnmount(() => {\r\n    anchorState.decreaseLink(state)\r\n  })\r\n}\r\n\r\nfunction handleSelect() {\r\n  if (anchorState) {\r\n    anchorState.handleActive(props.to)\r\n  }\r\n\r\n  return false\r\n}\r\n</script>\r\n\r\n<template>\r\n  <li :class=\"nh.be('item')\">\r\n    <a\r\n      ref=\"link\"\r\n      :class=\"linkClass\"\r\n      :href=\"to\"\r\n      :style=\"linkStyle\"\r\n      :title=\"title\"\r\n      @click.prevent=\"handleSelect\"\r\n    >\r\n      <slot></slot>\r\n    </a>\r\n    <ul v-if=\"$slots.group || (children && children.length)\" :class=\"nh.be('list')\">\r\n      <slot name=\"group\">\r\n        <template v-if=\"children && children.length\">\r\n          <AnchorLink\r\n            v-for=\"child in children\"\r\n            :key=\"child.to\"\r\n            :to=\"child.to\"\r\n            :title=\"child.title\"\r\n            :children=\"child.children\"\r\n          >\r\n            {{ child.label }}\r\n          </AnchorLink>\r\n        </template>\r\n      </slot>\r\n    </ul>\r\n  </li>\r\n</template>\r\n","export interface ScrollElement {\r\n  scrollTo(x: number, y: number): void,\r\n  [prop: string]: any,\r\n}\r\n\r\nexport function animateScrollTo(\r\n  el: ScrollElement,\r\n  from: number,\r\n  to: number,\r\n  duration: number,\r\n  callback: unknown,\r\n): void {\r\n  const distance = to - from\r\n  const step = Math.ceil((distance / duration) * 16)\r\n\r\n  const end = () => {\r\n    typeof callback === 'function' && callback()\r\n  }\r\n\r\n  if (!distance) {\r\n    end()\r\n    return\r\n  }\r\n\r\n  if (duration <= 0) {\r\n    el.scrollTo(0, to)\r\n    end()\r\n    return\r\n  }\r\n\r\n  let current = from\r\n\r\n  const scroll = () => {\r\n    if (!distance) return\r\n\r\n    current = current + step\r\n\r\n    if ((to - current) / distance <= 0) {\r\n      current = to\r\n    }\r\n\r\n    el.scrollTo(0, current)\r\n\r\n    if (current === to) {\r\n      end()\r\n    } else {\r\n      requestAnimationFrame(scroll)\r\n    }\r\n  }\r\n\r\n  scroll()\r\n}\r\n","<script setup lang=\"ts\">\r\nimport { AnchorLink } from '@/components/anchor-link'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport {\r\n  getCurrentInstance,\r\n  isVNode,\r\n  nextTick,\r\n  onBeforeUnmount,\r\n  onMounted,\r\n  provide,\r\n  reactive,\r\n  ref,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { proxyExposed } from '@vexip-ui/hooks'\r\nimport { isClient, isElement } from '@vexip-ui/utils'\r\nimport { anchorProps } from './props'\r\nimport { animateScrollTo } from './helper'\r\nimport { ANCHOR_STATE } from './symbol'\r\n\r\nimport type { ComponentInternalInstance } from 'vue'\r\nimport type { NativeScrollExposed } from '@/components/native-scroll'\r\nimport type { Scroll } from '@/components/scroll'\r\nimport type { AnchorLinkState, AnchorSlots, AnchorState } from './symbol'\r\n\r\ntype ScrollType = NativeScrollExposed & InstanceType<typeof Scroll>\r\n\r\ndefineOptions({ name: 'Anchor' })\r\n\r\nconst nh = useNameHelper('anchor')\r\n\r\nconst _props = defineProps(anchorProps)\r\nconst props = useProps('anchor', _props, {\r\n  active: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  viewer: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  offset: 8,\r\n  marker: false,\r\n  scrollDuration: 500,\r\n  markerTransition: () => nh.ns('fade'),\r\n  options: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  bindHash: false,\r\n  forceActive: false,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:active'])\r\n\r\ndefineSlots<AnchorSlots>()\r\n\r\nconst currentActive = ref(props.active)\r\nconst animating = ref(false)\r\nconst markerTop = ref(0)\r\nconst linkStates = new Set<AnchorLinkState>()\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nlet timer: ReturnType<typeof setTimeout>\r\n\r\nlet isRawViewer = false\r\nlet container: Window | HTMLElement | null = null\r\nlet scroller: ScrollType | null = null\r\nlet prevScrollTop = 0\r\n\r\nif (isClient && !currentActive.value && props.bindHash) {\r\n  currentActive.value = decodeURIComponent(location.hash)\r\n}\r\n\r\nprovide<AnchorState>(\r\n  ANCHOR_STATE,\r\n  reactive({\r\n    currentActive,\r\n    increaseLink,\r\n    decreaseLink,\r\n    handleActive,\r\n  }),\r\n)\r\n\r\nwatch(\r\n  () => props.active,\r\n  value => {\r\n    currentActive.value = value\r\n  },\r\n)\r\nwatch(() => props.viewer, updateContainer)\r\n\r\nonMounted(() => {\r\n  updateContainer()\r\n  computeMarkerPosition()\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n  removeListener()\r\n  clearTimeout(timer)\r\n})\r\n\r\nfunction increaseLink(state: AnchorLinkState) {\r\n  linkStates.add(state)\r\n  state.active = currentActive.value === state.to\r\n}\r\n\r\nfunction decreaseLink(state: AnchorLinkState) {\r\n  linkStates.delete(state)\r\n}\r\n\r\nconst instance = getCurrentInstance()!\r\n\r\nfunction updateContainer() {\r\n  removeListener()\r\n  isClient &&\r\n    nextTick(() => {\r\n      const viewer: unknown = props.viewer\r\n\r\n      prevScrollTop = 0\r\n\r\n      let _container: Window | Node | ComponentInternalInstance | null = null\r\n      let refName = 'scroll'\r\n\r\n      if (typeof viewer === 'string') {\r\n        if (viewer.startsWith('ref:')) {\r\n          refName = viewer.substring(4)\r\n          refName = refName || 'scroll'\r\n        } else if (['window', 'document', 'html'].includes(viewer)) {\r\n          _container = window\r\n        } else if (viewer === 'body') {\r\n          _container = document.body\r\n        } else if (viewer === 'root') {\r\n          _container = instance.root\r\n        } else {\r\n          _container = document.querySelector(viewer)\r\n        }\r\n      } else if (typeof viewer === 'function') {\r\n        _container = viewer()\r\n      } else if (isElement(viewer)) {\r\n        _container = viewer\r\n      }\r\n\r\n      if (_container === window || isElement(_container)) {\r\n        isRawViewer = true\r\n      } else {\r\n        isRawViewer = false\r\n        // container = this.$parent\r\n      }\r\n\r\n      if (!isRawViewer) {\r\n        // ComponentInternalInstance\r\n        _container = _container as ComponentInternalInstance\r\n        _container = isVNode(_container?.vnode) ? _container : instance.parent\r\n\r\n        while (_container) {\r\n          const name = _container.type?.name\r\n\r\n          if (name === 'Scroll' || name === 'NativeScroll') {\r\n            scroller = proxyExposed({ component: _container } as any)\r\n\r\n            break\r\n          }\r\n\r\n          const refTemp = _container.refs?.[refName]\r\n\r\n          if (refTemp) {\r\n            if (isElement(refTemp)) {\r\n              isRawViewer = true\r\n              container = refTemp as HTMLElement\r\n            } else {\r\n              scroller = refTemp as ScrollType\r\n            }\r\n\r\n            break\r\n          }\r\n\r\n          _container = _container.parent\r\n        }\r\n\r\n        if (scroller) {\r\n          scroller.addScrollListener(handleContainerScroll)\r\n          container = scroller.$el\r\n        } else if (!container) {\r\n          isRawViewer = true\r\n          container = instance.parent?.proxy?.$el as HTMLElement\r\n        }\r\n\r\n        if (isRawViewer && container) {\r\n          container.addEventListener('scroll', handleContainerScroll)\r\n        }\r\n      } else {\r\n        container = _container as HTMLElement\r\n        container.addEventListener('scroll', handleContainerScroll)\r\n      }\r\n    })\r\n}\r\n\r\nfunction getContainerEl() {\r\n  if (!container) return null\r\n\r\n  return container === window ? document.documentElement : (container as HTMLElement)\r\n}\r\n\r\nfunction computeCurrentLink(scrollTop: number) {\r\n  if (!linkStates.size || !container) return\r\n\r\n  const containerTop = getContainerEl()!.offsetTop\r\n  const offsetList: { link: string, offset: number }[] = []\r\n\r\n  let offset = scrollTop + props.offset\r\n\r\n  if (isRawViewer) {\r\n    offset += containerTop\r\n  }\r\n\r\n  linkStates.forEach(state => {\r\n    const id = state.to\r\n\r\n    if (!id.startsWith('#')) return\r\n\r\n    const element = document.querySelector(id) as HTMLElement | null\r\n\r\n    if (element) {\r\n      offsetList.push({\r\n        link: id,\r\n        offset: element.offsetTop,\r\n      })\r\n    }\r\n  })\r\n\r\n  offsetList.sort((prev, next) => prev.offset - next.offset)\r\n  offsetList.push({\r\n    link: '',\r\n    offset: Infinity,\r\n  })\r\n\r\n  let currentLink = ''\r\n\r\n  for (let i = 0, len = offsetList.length - 1; i < len; ++i) {\r\n    const current = offsetList[i]\r\n    const next = offsetList[i + 1]\r\n\r\n    if (current.offset <= offset && next.offset > offset) {\r\n      currentLink = current.link\r\n\r\n      break\r\n    }\r\n  }\r\n\r\n  prevScrollTop = scrollTop\r\n\r\n  if (currentActive.value !== currentLink) {\r\n    currentActive.value = currentLink\r\n    emit('update:active', currentLink)\r\n    emitEvent(props.onChange, currentLink)\r\n  }\r\n}\r\n\r\nfunction handleContainerScroll(event: Event) {\r\n  if (animating.value) return\r\n\r\n  const scrollTop = isRawViewer\r\n    ? (\r\n      (event.target === window || event.target === document\r\n        ? document.documentElement\r\n        : event.target) as HTMLElement\r\n    ).scrollTop\r\n    : (event as MouseEvent).clientY\r\n\r\n  computeCurrentLink(scrollTop)\r\n  computeMarkerPosition()\r\n}\r\n\r\nfunction removeListener() {\r\n  if (scroller) {\r\n    scroller.removeScrollListener(handleContainerScroll)\r\n    scroller = null\r\n  }\r\n\r\n  if (container) {\r\n    container.removeEventListener('scroll', handleContainerScroll)\r\n  }\r\n}\r\n\r\nfunction handleActive(link: string) {\r\n  if (\r\n    (!props.forceActive && link === currentActive.value) ||\r\n    !link.startsWith('#') ||\r\n    link.length < 2\r\n  ) {\r\n    return\r\n  }\r\n\r\n  const element = document.querySelector(link) as HTMLElement | null\r\n\r\n  if (!element) return\r\n\r\n  clearTimeout(timer)\r\n\r\n  animating.value = true\r\n\r\n  const elementTop = element.offsetTop\r\n  const duration = Math.max(props.scrollDuration, 0)\r\n\r\n  if (isRawViewer && container) {\r\n    const containerEl = getContainerEl()!\r\n    // const from = containerEl.scrollTop\r\n    const to = Math.min(\r\n      elementTop - containerEl.offsetTop - props.offset,\r\n      containerEl.scrollHeight - containerEl.clientHeight,\r\n    )\r\n\r\n    animateScrollTo(containerEl, prevScrollTop, to, duration, () => {\r\n      timer = setTimeout(() => {\r\n        animating.value = false\r\n      }, 10)\r\n    })\r\n    computeCurrentLink(to)\r\n    computeMarkerPosition()\r\n  } else if (scroller) {\r\n    const [min, max] = scroller.getYScrollLimit()\r\n    const clientY = Math.max(Math.min(elementTop - props.offset, max), min)\r\n\r\n    scroller.scrollTo(0, clientY, duration).then(() => {\r\n      timer = setTimeout(() => {\r\n        animating.value = false\r\n      }, duration + 10)\r\n    })\r\n\r\n    computeCurrentLink(clientY)\r\n    computeMarkerPosition()\r\n  } else {\r\n    animating.value = false\r\n  }\r\n\r\n  if (isClient && props.bindHash && location) {\r\n    location.hash = encodeURIComponent(currentActive.value.replace(/^#/, ''))\r\n  }\r\n}\r\n\r\nfunction computeMarkerPosition() {\r\n  const currentLink = Array.from(linkStates).find(\r\n    state => state.to && state.to === currentActive.value,\r\n  )\r\n\r\n  if (currentLink?.el) {\r\n    const linkRect = currentLink.el.getBoundingClientRect()\r\n    const wrapperTop = wrapper.value?.getBoundingClientRect().top ?? 0\r\n\r\n    markerTop.value = linkRect.top - wrapperTop + linkRect.height / 2 + 0.5\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"{\r\n      [nh.b()]: true,\r\n      [nh.bs('vars')]: true,\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('no-marker')]: !props.marker\r\n    }\"\r\n  >\r\n    <ul :class=\"nh.be('list')\">\r\n      <slot>\r\n        <Renderer :renderer=\"props.slots.default\">\r\n          <AnchorLink\r\n            v-for=\"link in props.options\"\r\n            :key=\"link.to\"\r\n            :to=\"link.to\"\r\n            :title=\"link.title\"\r\n            :children=\"link.children\"\r\n          >\r\n            {{ link.label }}\r\n          </AnchorLink>\r\n        </Renderer>\r\n      </slot>\r\n    </ul>\r\n    <Transition appear :name=\"props.markerTransition\">\r\n      <div\r\n        v-if=\"props.marker && currentActive\"\r\n        :class=\"nh.be('marker')\"\r\n        :style=\"{ top: `${markerTop}px` }\"\r\n      >\r\n        <slot name=\"marker\">\r\n          <Renderer :renderer=\"props.slots.marker\">\r\n            <div :class=\"nh.be('pointer')\"></div>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n    </Transition>\r\n  </div>\r\n</template>\r\n","import { buildProps } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { ColumnFlex, ColumnOptions, RowGridAlign, RowGridJustify } from './symbol'\r\n\r\nexport const rowProps = buildProps({\r\n  tag: String,\r\n  gap: [Number, Array] as PropType<number | number[]>,\r\n  justify: String as PropType<RowGridJustify>,\r\n  align: String as PropType<RowGridAlign>,\r\n  columnFlex: {\r\n    type: [Boolean, Object] as PropType<boolean | Partial<ColumnFlex>>,\r\n    default: null,\r\n  },\r\n})\r\n\r\nexport type RowProps = ExtractPropTypes<typeof rowProps>\r\nexport type RowCProps = ConfigurableProps<RowProps>\r\n\r\nconst mediaProp = [Number, Object] as PropType<number | ColumnOptions>\r\n\r\nexport const columnProps = buildProps({\r\n  tag: String,\r\n  span: Number,\r\n  offset: Number,\r\n  push: Number,\r\n  pull: Number,\r\n  order: Number,\r\n  xs: mediaProp,\r\n  sm: mediaProp,\r\n  md: mediaProp,\r\n  lg: mediaProp,\r\n  xl: mediaProp,\r\n  xxl: mediaProp,\r\n  flex: [Number, String],\r\n  useFlex: {\r\n    type: [Boolean, Object] as PropType<boolean | Partial<ColumnFlex>>,\r\n    default: null,\r\n  },\r\n})\r\n\r\nexport type ColumnProps = ExtractPropTypes<typeof columnProps>\r\nexport type ColumnCProps = ConfigurableProps<ColumnProps>\r\n","import type { InjectionKey } from 'vue'\r\n\r\nexport type BreakPoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'\r\n\r\nexport type RowGridJustify =\r\n  | 'start'\r\n  | 'end'\r\n  | 'center'\r\n  | 'space-around'\r\n  | 'space-between'\r\n  | 'space-evenly'\r\nexport type RowGridAlign = 'top' | 'middle' | 'bottom' | 'stretch'\r\n\r\nexport interface ColumnFlex {\r\n  justify: RowGridJustify,\r\n  align: RowGridAlign,\r\n}\r\n\r\nexport interface RowState {\r\n  columnFlex: ColumnFlex | false,\r\n  gap: number | number[],\r\n}\r\n\r\nexport interface ColumnOptions {\r\n  span?: number,\r\n  offset?: number,\r\n  pull?: number,\r\n  push?: number,\r\n  order?: number,\r\n}\r\n\r\nexport const breakPoints = Object.freeze<BreakPoint[]>(['xs', 'sm', 'md', 'lg', 'xl', 'xxl'])\r\n\r\nexport const ROW_STATE = '__VXP_GRID_ROW_STATE' as unknown as InjectionKey<RowState>\r\n","import { computed, defineComponent, h, provide, reactive, toRef } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { rowProps } from './props'\r\nimport { ROW_STATE } from './symbol'\r\n\r\nimport type { RowGridAlign, RowGridJustify, RowState } from './symbol'\r\n\r\nconst justifyList = Object.freeze<RowGridJustify[]>([\r\n  'start',\r\n  'end',\r\n  'center',\r\n  'space-around',\r\n  'space-between',\r\n  'space-evenly',\r\n])\r\nconst alignList = Object.freeze<RowGridAlign[]>(['top', 'middle', 'bottom', 'stretch'])\r\n\r\nexport default defineComponent({\r\n  name: 'Row',\r\n  props: rowProps,\r\n  setup(_props, { slots }) {\r\n    const props = useProps('row', _props, {\r\n      tag: 'div',\r\n      gap: 0,\r\n      justify: {\r\n        default: 'start',\r\n        validator: value => justifyList.includes(value),\r\n      },\r\n      align: {\r\n        default: 'top',\r\n        validator: value => alignList.includes(value),\r\n      },\r\n      columnFlex: false,\r\n    })\r\n\r\n    const nh = useNameHelper('row')\r\n\r\n    const className = computed(() => {\r\n      return [\r\n        nh.b(),\r\n        nh.bs('vars'),\r\n        nh.bm(props.justify),\r\n        nh.bm(props.align),\r\n        {\r\n          [nh.bm('inherit')]: props.inherit,\r\n        },\r\n      ]\r\n    })\r\n    const style = computed(() => {\r\n      if (!props.gap) return null\r\n\r\n      if (typeof props.gap === 'number') {\r\n        return {\r\n          [nh.cv('h-gap')]: `${props.gap}px`,\r\n        }\r\n      }\r\n\r\n      if (Array.isArray(props.gap)) {\r\n        const [horizontal, vertical] = props.gap\r\n\r\n        return {\r\n          [nh.cv('h-gap')]: `${horizontal}px`,\r\n          [nh.cv('v-gap')]: `${vertical}px`,\r\n        }\r\n      }\r\n\r\n      return null\r\n    })\r\n    const columnFlex = computed(() => {\r\n      if (props.columnFlex === true) {\r\n        return {\r\n          justify: 'start',\r\n          align: 'top',\r\n        }\r\n      } else if (props.columnFlex) {\r\n        return {\r\n          justify: 'start',\r\n          align: 'top',\r\n          ...props.columnFlex,\r\n        }\r\n      }\r\n\r\n      return false\r\n    })\r\n\r\n    provide(\r\n      ROW_STATE,\r\n      reactive({\r\n        columnFlex,\r\n        gap: toRef(props, 'gap'),\r\n      }) as RowState,\r\n    )\r\n\r\n    return () =>\r\n      h(\r\n        props.tag || 'div',\r\n        {\r\n          class: className.value,\r\n          style: style.value,\r\n        },\r\n        {\r\n          default: () => slots.default && slots.default(),\r\n        },\r\n      )\r\n  },\r\n})\r\n","import {\r\n  booleanProp,\r\n  buildProps,\r\n  eventProp,\r\n  iconProp,\r\n  localeProp,\r\n  sizeProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { ButtonAttrType, ButtonType } from '@/components/button'\r\nimport type { RowGridAlign, RowGridJustify } from '@/components/row'\r\nimport type { ColumnOptions } from '@/components/column'\r\nimport type { Rule } from './validator'\r\nimport type { FormLabelAlign, SubmitMethod } from './symbol'\r\n\r\nexport const formProps = buildProps({\r\n  method: String as PropType<SubmitMethod>,\r\n  action: String,\r\n  model: Object,\r\n  rules: Object,\r\n  labelWidth: [Number, String] as PropType<number | 'auto'>,\r\n  labelAlign: String as PropType<FormLabelAlign>,\r\n  allRequired: booleanProp,\r\n  labelSuffix: String,\r\n  hideAsterisk: booleanProp,\r\n  validateAll: booleanProp,\r\n  hideLabel: booleanProp,\r\n  disabled: booleanProp,\r\n  loading: booleanProp,\r\n  size: sizeProp,\r\n  inline: booleanProp,\r\n  gap: [Number, Array] as PropType<number | number[]>,\r\n  justify: String as PropType<RowGridJustify>,\r\n  align: String as PropType<RowGridAlign>,\r\n  onSubmit: eventProp<(e: SubmitEvent) => void>(),\r\n})\r\n\r\nexport type FormProps = ExtractPropTypes<typeof formProps>\r\nexport type FormCProps = ConfigurableProps<FormProps, 'model'>\r\n\r\nconst mediaProp = [Number, Object] as PropType<number | ColumnOptions>\r\n\r\nexport const formItemProps = buildProps({\r\n  locale: localeProp('form'),\r\n  label: String,\r\n  prop: String,\r\n  name: String,\r\n  rules: [Object, Array] as PropType<Rule | Rule[]>,\r\n  labelWidth: Number,\r\n  required: booleanProp,\r\n  htmlFor: String,\r\n  errorTransition: String,\r\n  defaultValue: {\r\n    type: [String, Number, Boolean, Object, Array, Function] as PropType<any>,\r\n    default: null,\r\n  },\r\n  hideErrorTip: booleanProp,\r\n  validateAll: booleanProp,\r\n  hideAsterisk: booleanProp,\r\n  hideLabel: booleanProp,\r\n  action: booleanProp,\r\n  help: String,\r\n  pure: booleanProp,\r\n  manual: booleanProp,\r\n  span: Number,\r\n  offset: Number,\r\n  push: Number,\r\n  pull: Number,\r\n  order: Number,\r\n  xs: mediaProp,\r\n  sm: mediaProp,\r\n  md: mediaProp,\r\n  lg: mediaProp,\r\n  xl: mediaProp,\r\n  xxl: mediaProp,\r\n  flex: [Number, String],\r\n})\r\n\r\nexport type FormItemProps = ExtractPropTypes<typeof formItemProps>\r\nexport type FormItemCProps = ConfigurableProps<FormItemProps, 'prop' | 'htmlFor' | 'defaultValue'>\r\n\r\nexport const formSubmitProps = buildProps({\r\n  size: sizeProp,\r\n  locale: localeProp('form'),\r\n  type: String as PropType<ButtonType>,\r\n  label: String,\r\n  dashed: booleanProp,\r\n  text: booleanProp,\r\n  simple: booleanProp,\r\n  ghost: booleanProp,\r\n  disabled: booleanProp,\r\n  circle: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  icon: iconProp,\r\n  color: String,\r\n  buttonType: String as PropType<ButtonAttrType>,\r\n  block: booleanProp,\r\n  tag: String,\r\n  onBeforeSubmit: Function as PropType<() => unknown>,\r\n  onSubmit: eventProp(),\r\n  onError: eventProp<(errors: string[]) => void>(),\r\n})\r\n\r\nexport type FormSubmitProps = ExtractPropTypes<typeof formSubmitProps>\r\nexport type FormSubmitCProps = ConfigurableProps<FormSubmitProps, never, 'onBeforeReset'>\r\n\r\nexport const formResetProps = buildProps({\r\n  size: sizeProp,\r\n  locale: localeProp('form'),\r\n  type: String as PropType<ButtonType>,\r\n  label: String,\r\n  dashed: booleanProp,\r\n  text: booleanProp,\r\n  simple: booleanProp,\r\n  ghost: booleanProp,\r\n  disabled: booleanProp,\r\n  loading: booleanProp,\r\n  circle: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  icon: iconProp,\r\n  color: String,\r\n  buttonType: String as PropType<ButtonAttrType>,\r\n  block: booleanProp,\r\n  tag: String,\r\n  onBeforeReset: Function as PropType<() => unknown>,\r\n  onReset: eventProp(),\r\n})\r\n\r\nexport type FormResetProps = ExtractPropTypes<typeof formResetProps>\r\nexport type FormResetCProps = ConfigurableProps<FormResetProps, never, 'onBeforeReset'>\r\n","import type { InjectionKey, Ref } from 'vue'\r\nimport type { ComponentSize, ComponentState } from '@vexip-ui/config'\r\nimport type { EventEmitter } from '@vexip-ui/utils'\r\nimport type { Rule } from './validator'\r\n\r\nexport type FormLabelAlign = 'right' | 'top' | 'left'\r\nexport type SubmitMethod = 'get' | 'post' | 'put' | 'delete'\r\n\r\nexport interface FormProps {\r\n  method: SubmitMethod,\r\n  action: string,\r\n  model: Record<string, any>,\r\n  rules: Record<string, any>,\r\n  labelWidth: number | 'auto',\r\n  labelAlign: FormLabelAlign,\r\n  allRequired: boolean,\r\n  labelSuffix: string,\r\n  hideAsterisk: boolean,\r\n  validateAll: boolean,\r\n  hideLabel: boolean,\r\n  disabled: boolean,\r\n  loading: boolean,\r\n  size: ComponentSize,\r\n  inline: boolean,\r\n}\r\n\r\nexport interface FormItemProps {\r\n  label: string,\r\n  prop: string,\r\n  rules: Rule | Rule[],\r\n  labelWidth: number | 'auto',\r\n  required: boolean,\r\n  htmlFor: string,\r\n  errorTransition: string,\r\n  defaultValue: unknown,\r\n  hideErrorTip: boolean,\r\n  validateAll: boolean,\r\n  hideAsterisk: boolean,\r\n}\r\n\r\nexport interface FormItemSlots {\r\n  default?: (parmas: { isError: boolean }) => any,\r\n  help?: () => any,\r\n  label?: () => any,\r\n  error?: (params: { tip: string }) => any,\r\n}\r\n\r\nexport interface FieldOptions {\r\n  prop: Ref<string>,\r\n  idFor: Ref<string>,\r\n  labelId: Ref<string>,\r\n  state: Ref<ComponentState>,\r\n  disabled: Ref<boolean>,\r\n  loading: Ref<boolean>,\r\n  size: Ref<ComponentSize>,\r\n  emitter: EventEmitter,\r\n  labelWidth: Ref<number>,\r\n  validate: () => Promise<string[] | null>,\r\n  reset: () => boolean,\r\n  clearError: () => void,\r\n  getValue: (defaultValue?: unknown) => unknown,\r\n  setValue: (value: unknown, strict?: boolean) => void,\r\n  sync: (instance: any) => void,\r\n  unSync: (instance: any) => void,\r\n}\r\n\r\nexport interface FormActions {\r\n  getLabelWidth: () => number,\r\n  validate: () => Promise<string[]>,\r\n  validateFields: (props: string | string[]) => Promise<string[]>,\r\n  reset: () => void,\r\n  resetFields: (props: string | string[]) => void,\r\n  clearError: () => void,\r\n  clearFieldsError: (props: string | string[]) => void,\r\n}\r\n\r\n// form\r\nexport const FORM_PROPS = '__VXP_FORM_PROPS' as unknown as InjectionKey<Partial<FormProps>>\r\nexport const FORM_FIELDS = '__VXP_FORM_FIELDS' as unknown as InjectionKey<Set<FieldOptions>>\r\nexport const FORM_ACTIONS = '__VXP_FORM_ACTIONS' as unknown as InjectionKey<FormActions>\r\n\r\n// form-item\r\nexport const FIELD_OPTIONS = '__VXP_FIELD_OPTIONS' as unknown as InjectionKey<FieldOptions | null>\r\n\r\nexport const submitMethods = Object.freeze<SubmitMethod[]>(['get', 'post', 'put', 'delete'])\r\nexport const labelAligns = Object.freeze<FormLabelAlign[]>(['right', 'top', 'left'])\r\n","<script setup lang=\"ts\">\r\nimport { Row } from '@/components/row'\r\n\r\nimport { computed, provide, reactive } from 'vue'\r\n\r\nimport { createSizeProp, emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { formProps } from './props'\r\nimport { FORM_ACTIONS, FORM_FIELDS, FORM_PROPS, labelAligns, submitMethods } from './symbol'\r\n\r\nimport type { FieldOptions } from './symbol'\r\n\r\ndefineOptions({ name: 'Form', inheritAttrs: true })\r\n\r\nconst _props = defineProps(formProps)\r\nconst props = useProps('form', _props, {\r\n  method: {\r\n    default: 'post',\r\n    validator: value => submitMethods.includes(value),\r\n  },\r\n  action: null,\r\n  model: {\r\n    default: () => ({}),\r\n    static: true,\r\n  },\r\n  rules: () => ({}),\r\n  labelWidth: 'auto',\r\n  labelAlign: {\r\n    default: 'right',\r\n    validator: value => labelAligns.includes(value),\r\n  },\r\n  allRequired: false,\r\n  labelSuffix: '',\r\n  hideAsterisk: false,\r\n  validateAll: false,\r\n  hideLabel: false,\r\n  disabled: false,\r\n  loading: false,\r\n  size: createSizeProp(),\r\n  inline: false,\r\n  gap: [8, 0],\r\n  justify: 'start',\r\n  align: 'top',\r\n})\r\n\r\nconst nh = useNameHelper('form')\r\nconst fieldSet: Set<FieldOptions> = reactive(new Set<any>())\r\n\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    nh.bm(`label-${props.labelAlign}`),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('disabled')]: props.disabled,\r\n      [nh.bm('loading')]: props.loading,\r\n      [nh.bm(props.size)]: props.size !== 'default',\r\n      [nh.bm('inline')]: props.inline,\r\n    },\r\n  ]\r\n})\r\nconst labelWidth = computed(() => {\r\n  return Math.max(...Array.from(fieldSet).map(field => field.labelWidth.value))\r\n})\r\n\r\nprovide(FORM_PROPS, props)\r\nprovide(FORM_FIELDS, fieldSet)\r\nprovide(FORM_ACTIONS, {\r\n  getLabelWidth,\r\n  validate,\r\n  validateFields,\r\n  reset,\r\n  resetFields,\r\n  clearError,\r\n  clearFieldsError,\r\n})\r\n\r\ndefineExpose({\r\n  validate,\r\n  validateFields,\r\n  reset,\r\n  resetFields,\r\n  clearError,\r\n  clearFieldsError,\r\n})\r\n\r\nfunction getLabelWidth() {\r\n  if (typeof props.labelWidth === 'number') {\r\n    return props.labelWidth\r\n  }\r\n\r\n  return labelWidth.value\r\n}\r\n\r\nfunction getPropMap() {\r\n  const propMap: Record<string, FieldOptions> = {}\r\n\r\n  for (const field of fieldSet) {\r\n    if (field.prop.value) {\r\n      propMap[field.prop.value] = field\r\n    }\r\n  }\r\n\r\n  return propMap\r\n}\r\n\r\nfunction validate() {\r\n  return validateItems(fieldSet)\r\n}\r\n\r\nfunction validateFields(props: string | string[]) {\r\n  if (!Array.isArray(props)) {\r\n    props = [props]\r\n  }\r\n\r\n  const propMap = getPropMap()\r\n  const fields = new Set<FieldOptions>()\r\n\r\n  props.forEach(prop => {\r\n    if (propMap[prop]) {\r\n      fields.add(propMap[prop])\r\n    }\r\n  })\r\n\r\n  return validateItems(fields)\r\n}\r\n\r\nfunction validateItems(items: Set<FieldOptions>) {\r\n  const validations: Promise<string[] | null>[] = []\r\n\r\n  items.forEach(item => {\r\n    validations.push(item.validate())\r\n  })\r\n\r\n  return new Promise<string[]>(resolve => {\r\n    Promise.all(validations).then(errors => {\r\n      resolve(errors.flat().filter(Boolean) as string[])\r\n    })\r\n  })\r\n}\r\n\r\nfunction reset() {\r\n  fieldSet.forEach(field => {\r\n    field.reset()\r\n  })\r\n}\r\n\r\nfunction resetFields(props: string | string[]) {\r\n  if (!Array.isArray(props)) {\r\n    props = [props]\r\n  }\r\n\r\n  const propMap = getPropMap()\r\n\r\n  props.forEach(prop => {\r\n    if (propMap[prop]) {\r\n      propMap[prop].reset()\r\n    }\r\n  })\r\n}\r\n\r\nfunction clearError() {\r\n  fieldSet.forEach(field => {\r\n    field.clearError()\r\n  })\r\n}\r\n\r\nfunction clearFieldsError(props: string | string[]) {\r\n  if (!Array.isArray(props)) {\r\n    props = [props]\r\n  }\r\n\r\n  const propMap = getPropMap()\r\n\r\n  props.forEach(prop => {\r\n    if (propMap[prop]) {\r\n      propMap[prop].clearError()\r\n    }\r\n  })\r\n}\r\n\r\nfunction handleSubmit(event: SubmitEvent) {\r\n  event.stopPropagation()\r\n\r\n  if (!props.action) {\r\n    event.preventDefault()\r\n  }\r\n\r\n  emitEvent(props.onSubmit, event)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <Row\r\n    v-bind=\"$attrs\"\r\n    :class=\"className\"\r\n    :inherit=\"props.inherit\"\r\n    tag=\"form\"\r\n    :method=\"props.action && props.method\"\r\n    :action=\"props.action\"\r\n    :gap=\"props.gap\"\r\n    :justify=\"props.justify\"\r\n    :align=\"props.align\"\r\n    :column-flex=\"undefined\"\r\n    @submit=\"handleSubmit\"\r\n    @reset.prevent.stop\r\n  >\r\n    <slot></slot>\r\n  </Row>\r\n</template>\r\n","import { computed, getCurrentInstance, inject, onBeforeUnmount, provide } from 'vue'\r\n\r\nimport { isNull, noop, toFalse } from '@vexip-ui/utils'\r\nimport { FIELD_OPTIONS } from './symbol'\r\n\r\nimport type { Ref } from 'vue'\r\nimport type { ComponentSize, ComponentState } from '@vexip-ui/config'\r\n\r\n/**\r\n * 根据路径读取对象中的值 (实现 ?. 的逻辑)\r\n *\r\n * @param obj 需要被读取的对象\r\n * @param path 读取的路径\r\n * @param strict 是否开启严格模式 (非法路径报错)\r\n */\r\nexport function getValueByPath<T = unknown>(\r\n  obj: Record<string, any>,\r\n  path: string | string[],\r\n  strict = false,\r\n): T | null {\r\n  if (!obj || !path) return null\r\n\r\n  if (typeof path === 'string') {\r\n    if (path in obj) return obj[path]\r\n\r\n    path = path.split('.')\r\n  }\r\n\r\n  if (Array.isArray(path) && path.length) {\r\n    const lastKey = path.pop()\r\n\r\n    if (!lastKey) return null\r\n\r\n    for (let i = 0, len = path.length; i < len; ++i) {\r\n      const key = String(path[i])\r\n\r\n      if (!key) break\r\n\r\n      obj = obj[key]\r\n\r\n      if (isNull(obj)) {\r\n        if (strict) {\r\n          throw new Error('[vexip-ui:Form] Get value by an invalid path')\r\n        }\r\n\r\n        return obj\r\n      }\r\n    }\r\n\r\n    if (strict && isNull(obj[lastKey])) {\r\n      throw new Error('[vexip-ui:Form] Get value by an invalid path')\r\n    }\r\n\r\n    return obj[lastKey]\r\n  }\r\n\r\n  return null\r\n}\r\n\r\n/**\r\n * 根据路径设置对象中的值\r\n *\r\n * @param obj 需要被设置的对象\r\n * @param path 设置的路径\r\n * @param value 需要设置的值\r\n * @param strict 是否开启严格模式 (非法路径报错)\r\n */\r\nexport function setValueByPath(\r\n  obj: Record<string, any>,\r\n  path: string | string[],\r\n  value: unknown,\r\n  strict = false,\r\n): boolean {\r\n  if (!obj || !path) return false\r\n\r\n  if (typeof path === 'string') {\r\n    if (path in obj) {\r\n      obj[path] = value\r\n\r\n      return true\r\n    }\r\n\r\n    path = path.split('.')\r\n  }\r\n\r\n  if (Array.isArray(path) && path.length) {\r\n    const lastKey = path.pop()\r\n\r\n    if (!lastKey) return false\r\n\r\n    for (let i = 0, len = path.length; i < len; ++i) {\r\n      const key = String(path[i])\r\n\r\n      if (!key) {\r\n        return false\r\n      }\r\n\r\n      if (typeof obj[key] !== 'object') {\r\n        if (strict) {\r\n          throw new Error('[vexip-ui:Form] Set value by an invalid path')\r\n        }\r\n\r\n        obj[key] = {}\r\n      }\r\n\r\n      obj = obj[key]\r\n    }\r\n\r\n    if (strict && typeof obj !== 'object') {\r\n      throw new Error('[vexip-ui:Form] Set value by an invalid path')\r\n    }\r\n\r\n    obj[lastKey] = value\r\n\r\n    return true\r\n  }\r\n\r\n  return false\r\n}\r\n\r\nexport interface FormFieldStore<V = unknown> {\r\n  isField: boolean,\r\n  idFor: Ref<string | undefined>,\r\n  labelId: Ref<string | undefined>,\r\n  state: Ref<ComponentState>,\r\n  disabled: Ref<boolean>,\r\n  loading: Ref<boolean>,\r\n  size: Ref<ComponentSize>,\r\n  validateField: () => Promise<string[] | null>,\r\n  clearField: (defaultValue?: V) => void,\r\n  resetField: () => boolean,\r\n  getFieldValue: (defaultValue?: V) => V,\r\n  setFieldValue: (value: V, strict?: boolean) => void,\r\n}\r\n\r\nconst defaultId = computed(() => undefined as string | undefined)\r\nconst defaultState = computed(() => 'default' as ComponentState)\r\nconst defaultFalse = computed(() => false)\r\nconst defaultSize = computed(() => 'default' as ComponentSize)\r\n\r\nfunction getEmptyActions<V>() {\r\n  return {\r\n    isField: false,\r\n    idFor: defaultId,\r\n    labelId: defaultId,\r\n    state: defaultState,\r\n    disabled: defaultFalse,\r\n    loading: defaultFalse,\r\n    size: defaultSize,\r\n    validateField: noop,\r\n    clearField: noop,\r\n    resetField: toFalse,\r\n    getFieldValue: v => v,\r\n    setFieldValue: noop,\r\n  } as FormFieldStore<V>\r\n}\r\n\r\n/**\r\n * Create a field store, provide field states and control methods\r\n *\r\n * @param onFocus a focus method for focusing when label is clicked\r\n */\r\nexport function useFieldStore<V = unknown>(onFocus?: () => void): FormFieldStore<V> {\r\n  const instance = getCurrentInstance()\r\n\r\n  if (!instance) return getEmptyActions<V>()\r\n\r\n  const fieldOptions = inject(FIELD_OPTIONS, null)\r\n\r\n  if (!fieldOptions) {\r\n    return getEmptyActions<V>()\r\n  }\r\n\r\n  // Block the provided if there are dependencies between control components.\r\n  // e.g. AutoComplete -> Select, ColorPicker -> Input\r\n  provide(FIELD_OPTIONS, null)\r\n  fieldOptions.sync(instance)\r\n  onFocus && fieldOptions.emitter.on('focus', onFocus)\r\n\r\n  onBeforeUnmount(() => {\r\n    fieldOptions.unSync(instance)\r\n    onFocus && fieldOptions.emitter.off('focus', onFocus)\r\n  })\r\n\r\n  function clearField(defaultValue?: V) {\r\n    if (!fieldOptions) return\r\n\r\n    fieldOptions.setValue(defaultValue)\r\n    fieldOptions.clearError()\r\n  }\r\n\r\n  return {\r\n    isField: true,\r\n    idFor: fieldOptions.idFor,\r\n    labelId: fieldOptions.labelId,\r\n    state: fieldOptions.state,\r\n    disabled: fieldOptions.disabled,\r\n    loading: fieldOptions.loading,\r\n    size: fieldOptions.size,\r\n    validateField: fieldOptions.validate,\r\n    clearField,\r\n    resetField: fieldOptions.reset,\r\n    getFieldValue: fieldOptions.getValue as (defaultValue?: V) => V,\r\n    setFieldValue: fieldOptions.setValue as (value: V, strict?: boolean) => void,\r\n  }\r\n}\r\n","import { isColor, isDefined, isObject, isPromise, toDate, toNumber } from '@vexip-ui/utils'\r\n\r\n// export type Trigger = 'blur' | 'change'\r\n\r\nexport type Types =\r\n  | 'string'\r\n  | 'number'\r\n  | 'boolean'\r\n  | 'int'\r\n  | 'float'\r\n  | 'array'\r\n  | 'object'\r\n  | 'date'\r\n  | 'url'\r\n  | 'color'\r\n  | 'email'\r\ntype Range = [number, number]\r\ntype ValidatorResult = boolean | string | Error | Promise<boolean | string | Error>\r\n\r\nexport interface Rule<T = any> {\r\n  // trigger?: Trigger,\r\n  required?: boolean,\r\n  type?: Types,\r\n  length?: number,\r\n  range?: Range,\r\n  strict?: boolean,\r\n  enums?: T[],\r\n  message?: string,\r\n  validator?(value: T, model: Record<string, any>): ValidatorResult,\r\n}\r\n\r\ntype TypeOptions = Pick<Rule, 'length' | 'range' | 'strict'>\r\n\r\nconst DEFAULT_MESSAGE = 'Validate failed'\r\n\r\nconst N_100_200 = '1\\\\d\\\\d|2([0-4]\\\\d|5[0-5])'\r\nconst IPV4_FIRST = `[1-9](\\\\d)?|${N_100_200}`\r\nconst IPV4_UNIT = `\\\\d{1,2}|${N_100_200}`\r\nconst IPV4_REG = `(?:${IPV4_FIRST})\\\\.(?:${IPV4_UNIT})\\\\.(?:${IPV4_UNIT})\\\\.(?:${IPV4_UNIT})`\r\n\r\nconst HOST_REG = '(?:[a-zA-Z0-9][\\\\w-]*\\\\.)?(?:[a-zA-Z0-9][\\\\w-]*)(?:\\\\.[a-zA-Z]+){1,2}'\r\nconst PARAM_REG =\r\n  '(?:(?:[\\\\/]+[^\\\\?\\\\.]+)+)?(?:[\\\\/]*)?(\\\\?([^&\\\\.]+=[^&\\\\.]*)(&[^&\\\\.]+=[^&\\\\.]*)*)?(#.*)?'\r\nconst URL_REG = new RegExp(\r\n  `^(?:[a-z]{2,5}:(\\\\/+)?)?\\\\/\\\\/((?:${IPV4_REG})|(?:${HOST_REG}))(?:${PARAM_REG})?$`,\r\n)\r\n\r\nconst EMAIL_REG = /^(?:[a-zA-Z0-9][\\w-]*)@(?:[a-zA-Z0-9][\\w-]*)(?:\\.[a-zA-Z]+){1,2}$/\r\n\r\nconst TYPE_LIST = new Set([\r\n  'string',\r\n  'number',\r\n  'boolean',\r\n  'int',\r\n  'float',\r\n  'array',\r\n  'object',\r\n  'date',\r\n  'url',\r\n  'color',\r\n  'email',\r\n] as Types[])\r\n\r\nexport async function validate(\r\n  rules: Rule | Rule[],\r\n  value: unknown,\r\n  model: Record<string, unknown>,\r\n  validateAll = true,\r\n  defaultMsg = DEFAULT_MESSAGE,\r\n) {\r\n  if (!Array.isArray(rules)) {\r\n    rules = [rules]\r\n  }\r\n\r\n  const errors: string[] = []\r\n\r\n  for (const rule of rules as Rule[]) {\r\n    const { message = defaultMsg, validator } = rule\r\n\r\n    if (typeof validator === 'function') {\r\n      let result\r\n\r\n      try {\r\n        result = validator(value, model)\r\n\r\n        if (isPromise(result)) {\r\n          result = await result\r\n        }\r\n      } catch (error) {\r\n        result = error instanceof Error ? error.message : error\r\n      }\r\n\r\n      if (result !== true) {\r\n        const errorMessage = typeof result === 'string' ? result : message\r\n\r\n        errors.push(errorMessage)\r\n\r\n        if (!validateAll) break\r\n      }\r\n    }\r\n\r\n    if (rule.required && !validateRequirement(value)) {\r\n      errors.push(message)\r\n\r\n      if (!validateAll) break\r\n    }\r\n\r\n    if (isDefined(value) && value !== '') {\r\n      if (rule.enums && !validateEnumeration(value, rule.enums)) {\r\n        errors.push(message)\r\n\r\n        if (!validateAll) break\r\n      }\r\n\r\n      if (rule.type && !validateType(value, rule.type, rule)) {\r\n        errors.push(message)\r\n\r\n        if (!validateAll) break\r\n      }\r\n    }\r\n  }\r\n\r\n  return errors\r\n}\r\n\r\nexport function validateRequirement(value: any) {\r\n  return !(\r\n    !isDefined(value) ||\r\n    value.toString().trim() === '' ||\r\n    (Array.isArray(value) && !value.length) ||\r\n    (isObject(value) && !Object.keys(value).length)\r\n  )\r\n}\r\n\r\nexport function validateEnumeration<T>(value: T | T[], options: T[]) {\r\n  if (!Array.isArray(options) || !options.length) return true\r\n\r\n  if (Array.isArray(value)) {\r\n    const enumSet = new Set(options)\r\n\r\n    for (const item of value) {\r\n      if (!enumSet.has(item)) {\r\n        return false\r\n      }\r\n    }\r\n\r\n    return true\r\n  } else {\r\n    return options.includes(value)\r\n  }\r\n}\r\n\r\nexport function validateType(value: unknown, type: Types, options: TypeOptions = {}) {\r\n  if (!TYPE_LIST.has(type)) return true\r\n\r\n  switch (type) {\r\n    case 'string':\r\n      return validateString(value, options.length, options.range)\r\n    case 'number':\r\n      return validateNumber(value, options.strict, options.length, options.range)\r\n    case 'boolean':\r\n      return validateBoolean(value, options.strict)\r\n    case 'int':\r\n      return validateInt(value, options.strict, options.length, options.range)\r\n    case 'float':\r\n      return validateFloat(value, options.strict, options.length, options.range)\r\n    case 'array':\r\n      return Array.isArray(value)\r\n    case 'object':\r\n      return isObject(value)\r\n    case 'date':\r\n      return validateDate(value, options.strict)\r\n    case 'url':\r\n      return validateUrl(value)\r\n    case 'color':\r\n      return typeof value === 'string' && isColor(value)\r\n    case 'email':\r\n      return validateEmail(value)\r\n  }\r\n}\r\n\r\nexport function validateString(value: unknown, length?: number, range?: Range) {\r\n  if (typeof value !== 'string') return false\r\n\r\n  if (isDefined(length) && value.length !== length) {\r\n    return false\r\n  }\r\n\r\n  if (Array.isArray(range)) {\r\n    const [min, max] = range\r\n\r\n    if (min && value.length < min) return false\r\n\r\n    if (max && value.length > max) return false\r\n  }\r\n\r\n  return true\r\n}\r\n\r\nexport function validateNumber(value: unknown, strict?: boolean, length?: number, range?: Range) {\r\n  if (strict) {\r\n    if (typeof value !== 'number') return false\r\n  } else {\r\n    value = Number(value)\r\n\r\n    if (Number.isNaN(value)) return false\r\n  }\r\n\r\n  const number = value as number\r\n\r\n  if (isDefined(length) && number.toString().length !== length) {\r\n    return false\r\n  }\r\n\r\n  if (Array.isArray(range)) {\r\n    const [min, max] = range\r\n\r\n    if (isDefined(min) && number < min) return false\r\n\r\n    if (isDefined(max) && number > max) return false\r\n  }\r\n\r\n  return true\r\n}\r\n\r\nexport function validateBoolean(value: unknown, strict?: boolean) {\r\n  if (!strict) {\r\n    if (typeof value === 'string') {\r\n      return value === 'true' || value === 'false'\r\n    }\r\n\r\n    if (typeof value === 'number') {\r\n      return value === 1 || value === 0\r\n    }\r\n  }\r\n\r\n  return typeof value === 'boolean'\r\n}\r\n\r\nexport function validateInt(value: unknown, strict?: boolean, length?: number, range?: Range) {\r\n  if (validateNumber(value, strict, length, range)) {\r\n    const number = toNumber(value as any)\r\n\r\n    return Math.ceil(number) === number\r\n  }\r\n\r\n  return false\r\n}\r\n\r\nexport function validateFloat(value: unknown, strict?: boolean, length?: number, range?: Range) {\r\n  if (validateNumber(value, strict, length, range)) {\r\n    const number = toNumber(value as any)\r\n\r\n    return strict ? Math.ceil(number) !== number : number.toString().includes('.')\r\n  }\r\n\r\n  return false\r\n}\r\n\r\nexport function validateDate(value: unknown, strict?: boolean) {\r\n  if (strict && !(value instanceof Date)) {\r\n    return false\r\n  }\r\n\r\n  try {\r\n    toDate(value as any)\r\n  } catch (e) {\r\n    return false\r\n  }\r\n\r\n  return true\r\n}\r\n\r\nexport function validateUrl(value: unknown) {\r\n  return typeof value === 'string' && URL_REG.test(value)\r\n}\r\n\r\nexport function validateEmail(value: unknown) {\r\n  return typeof value === 'string' && EMAIL_REG.test(value)\r\n}\r\n","import {\r\n  booleanProp,\r\n  booleanStringProp,\r\n  buildProps,\r\n  classProp,\r\n  eventProp,\r\n  iconProp,\r\n  localeProp,\r\n  sizeProp,\r\n  stateProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\r\nimport type { ChangeEvent, InputSlots, InputType } from './symbol'\r\n\r\nexport const inputProps = buildProps({\r\n  size: sizeProp,\r\n  state: stateProp,\r\n  locale: localeProp('input'),\r\n  type: String as PropType<InputType>,\r\n  prefix: iconProp,\r\n  prefixColor: String,\r\n  suffix: iconProp,\r\n  suffixColor: String,\r\n  formatter: Function as PropType<(value: string | number) => string | number>,\r\n  value: [String, Number],\r\n  placeholder: String,\r\n  autofocus: booleanProp,\r\n  spellcheck: booleanProp,\r\n  autocomplete: booleanStringProp,\r\n  readonly: booleanProp,\r\n  disabled: booleanProp,\r\n  controlClass: classProp,\r\n  debounce: booleanProp,\r\n  delay: Number,\r\n  maxLength: Number,\r\n  hideCount: booleanProp,\r\n  before: String,\r\n  after: String,\r\n  /**\r\n   * 是否显示切换 password 为明文的按钮\r\n   */\r\n  plainPassword: booleanProp,\r\n  clearable: booleanProp,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingLock: booleanProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  transparent: booleanProp,\r\n  sync: booleanProp,\r\n  controlAttrs: Object as PropType<Record<string, any>>,\r\n  name: String,\r\n  slots: Object as PropType<InputSlots>,\r\n  onFocus: eventProp<(event: FocusEvent) => void>(),\r\n  onBlur: eventProp<(event: FocusEvent) => void>(),\r\n  onInput: eventProp<EventListener<ChangeEvent>>(),\r\n  onChange: eventProp<EventListener<ChangeEvent>>(),\r\n  onEnter: eventProp(),\r\n  onClear: eventProp(),\r\n  onPrefixClick: eventProp<(event: MouseEvent) => void>(),\r\n  onSuffixClick: eventProp<(event: MouseEvent) => void>(),\r\n  onKeyDown: eventProp<(event: KeyboardEvent) => void>(),\r\n  onKeyPress: eventProp<(event: KeyboardEvent) => void>(),\r\n  onKeyUp: eventProp<(event: KeyboardEvent) => void>(),\r\n  onCompositionStart: eventProp<(event: CompositionEvent) => void>(),\r\n  onCompositionEnd: eventProp<(event: CompositionEvent) => void>(),\r\n})\r\n\r\nexport type InputProps = ExtractPropTypes<typeof inputProps>\r\nexport type InputCProps = ConfigurableProps<InputProps>\r\n","import { Icon } from '@/components/icon'\r\nimport { useFieldStore } from '@/components/form'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { Transition, computed, defineComponent, nextTick, ref, renderSlot, toRef, watch } from 'vue'\r\n\r\nimport { useHover } from '@vexip-ui/hooks'\r\nimport {\r\n  createIconProp,\r\n  createSizeProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { debounce, isNull, noop, throttle, toNumber } from '@vexip-ui/utils'\r\nimport { inputProps } from './props'\r\n\r\nimport type { ChangeEvent, InputType } from './symbol'\r\n\r\ntype InputEventType = 'input' | 'change'\r\n\r\nconst inputTypes = Object.freeze<InputType[]>(['text', 'password', 'date', 'datetime', 'time'])\r\n\r\nfunction toNotNullString(value: any) {\r\n  return isNull(value) ? '' : String(value)\r\n}\r\n\r\nexport default defineComponent({\r\n  name: 'Input',\r\n  props: inputProps,\r\n  emits: ['update:value'],\r\n  setup(_props, { slots, emit, expose }) {\r\n    const {\r\n      idFor,\r\n      labelId,\r\n      state,\r\n      disabled,\r\n      loading,\r\n      size,\r\n      validateField,\r\n      clearField,\r\n      getFieldValue,\r\n      setFieldValue,\r\n    } = useFieldStore<string | number>(() => inputControl.value?.focus())\r\n\r\n    const props = useProps('input', _props, {\r\n      size: createSizeProp(size),\r\n      state: createStateProp(state),\r\n      locale: null,\r\n      type: {\r\n        default: 'text',\r\n        validator: value => inputTypes.includes(value),\r\n      },\r\n      prefix: createIconProp(),\r\n      prefixColor: '',\r\n      suffix: createIconProp(),\r\n      suffixColor: '',\r\n      formatter: {\r\n        default: null,\r\n        isFunc: true,\r\n      },\r\n      value: {\r\n        default: () => getFieldValue(),\r\n        static: true,\r\n      },\r\n      placeholder: null,\r\n      autofocus: false,\r\n      spellcheck: false,\r\n      autocomplete: false,\r\n      readonly: false,\r\n      disabled: () => disabled.value,\r\n      controlClass: null,\r\n      debounce: false,\r\n      delay: null,\r\n      maxLength: 0,\r\n      hideCount: false,\r\n      before: '',\r\n      after: '',\r\n      plainPassword: false,\r\n      clearable: false,\r\n      loading: () => loading.value,\r\n      loadingIcon: createIconProp(),\r\n      loadingLock: false,\r\n      loadingEffect: null,\r\n      transparent: false,\r\n      sync: false,\r\n      controlAttrs: null,\r\n      name: {\r\n        default: '',\r\n        static: true,\r\n      },\r\n      slots: () => ({}),\r\n    })\r\n\r\n    const initValue = toNotNullString(props.value)\r\n\r\n    const nh = useNameHelper('input')\r\n    const icons = useIcons()\r\n    const focused = ref(false)\r\n    const currentValue = ref(initValue)\r\n    const showPassword = ref(false)\r\n    const currentLength = ref(initValue.length)\r\n    const beforeHover = ref(false)\r\n    const afterHover = ref(false)\r\n    const composing = ref(false)\r\n\r\n    const inputControl = ref<HTMLInputElement>()\r\n\r\n    const { wrapper: control, isHover } = useHover()\r\n    const locale = useLocale('input', toRef(props, 'locale'))\r\n\r\n    let lastValue = props.value\r\n\r\n    const hasBefore = computed(() => {\r\n      return !!(\r\n        slots.before ||\r\n        slots.beforeAction ||\r\n        slots['before-action'] ||\r\n        props.before ||\r\n        props.slots.before ||\r\n        props.slots.beforeAction\r\n      )\r\n    })\r\n    const hasAfter = computed(() => {\r\n      return !!(\r\n        slots.after ||\r\n        slots.afterAction ||\r\n        slots['after-action'] ||\r\n        props.after ||\r\n        props.slots.after ||\r\n        props.slots.afterAction\r\n      )\r\n    })\r\n    const basisClass = computed(() => {\r\n      return {\r\n        [nh.bs('wrapper')]: true,\r\n        [nh.bs('vars')]: true,\r\n        [nh.bm('inherit')]: props.inherit,\r\n        [nh.bm(props.size)]: props.size !== 'default',\r\n      }\r\n    })\r\n    const readonly = computed(() => (props.loading && props.loadingLock) || props.readonly)\r\n    const className = computed(() => {\r\n      return [\r\n        nh.b(),\r\n        nh.bm(props.type),\r\n        !hasBefore.value && !hasAfter.value && basisClass.value,\r\n        {\r\n          [nh.bm('focused')]: focused.value,\r\n          [nh.bm('disabled')]: props.disabled,\r\n          [nh.bm('readonly')]: readonly.value,\r\n          [nh.bm('loading')]: props.loading,\r\n          [nh.bm(props.state)]: props.state !== 'default',\r\n          [nh.bm('before')]: slots.beforeAction || slots['before-action'] || props.slots.before,\r\n          [nh.bm('after')]: slots.afterAction || slots['after-action'] || props.slots.after,\r\n          [nh.bm('transparent')]: props.transparent,\r\n          [nh.bm('plain-password')]: props.plainPassword,\r\n        },\r\n      ]\r\n    })\r\n    const wrapperClass = computed(() => {\r\n      return {\r\n        ...basisClass.value,\r\n        [nh.bm(`wrapper--${props.size}`)]: props.size !== 'default',\r\n        [nh.bs('wrapper--before-only')]: hasBefore.value && !hasAfter.value,\r\n        [nh.bs('wrapper--after-only')]: !hasBefore.value && hasAfter.value,\r\n        [nh.bm('transparent')]: props.transparent,\r\n      }\r\n    })\r\n    const hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\r\n    const hasSuffix = computed(() => !!(slots.suffix || props.suffix || props.slots.suffix))\r\n    const inputType = computed(() => {\r\n      const type = props.type\r\n\r\n      if (type === 'password') {\r\n        return showPassword.value ? 'text' : 'password'\r\n      }\r\n\r\n      if (type === 'datetime') {\r\n        return 'datetime-local'\r\n      }\r\n\r\n      return type\r\n    })\r\n    const formattedValue = computed(() => {\r\n      return typeof props.formatter === 'function'\r\n        ? toNotNullString(props.formatter(currentValue.value))\r\n        : currentValue.value\r\n    })\r\n    const passwordIcon = computed(() =>\r\n      showPassword.value ? icons.value.plainText : icons.value.cipherText,\r\n    )\r\n    const hasValue = computed(() => {\r\n      return !(isNull(currentValue.value) || currentValue.value === '')\r\n    })\r\n    const showClear = computed(() => {\r\n      return (\r\n        !props.disabled && !readonly.value && props.clearable && hasValue.value && isHover.value\r\n      )\r\n    })\r\n    const autoComplete = computed(() => {\r\n      return typeof props.autocomplete === 'boolean'\r\n        ? props.autocomplete\r\n          ? 'on'\r\n          : 'off'\r\n        : props.autocomplete\r\n    })\r\n\r\n    watch(\r\n      () => props.value,\r\n      value => {\r\n        currentValue.value = toNotNullString(value)\r\n        lastValue = currentValue.value\r\n        limitValueLength()\r\n      },\r\n    )\r\n    watch(\r\n      [formattedValue, inputControl],\r\n      () => {\r\n        if (inputControl.value) {\r\n          inputControl.value.value = formattedValue.value\r\n        }\r\n      },\r\n      { immediate: true, flush: 'post' },\r\n    )\r\n\r\n    // Expose api methods.\r\n    // Need to define some same name methods in 'methods' option to support infer types.\r\n    expose({\r\n      idFor,\r\n      labelId,\r\n      focused,\r\n      currentValue,\r\n      showPassword,\r\n      currentLength,\r\n      composing,\r\n      input: inputControl,\r\n      copyValue,\r\n      focus: (options?: FocusOptions) => {\r\n        inputControl.value?.focus(options)\r\n      },\r\n      blur: () => {\r\n        inputControl.value?.blur()\r\n      },\r\n    })\r\n\r\n    function getLatestValue() {\r\n      return typeof props.value === 'number' ? parseFloat(currentValue.value) : currentValue.value\r\n    }\r\n\r\n    function handleFocus(event: FocusEvent) {\r\n      if (!focused.value) {\r\n        focused.value = true\r\n        emitEvent(props.onFocus, event)\r\n      }\r\n    }\r\n\r\n    function handleBlur(event: FocusEvent) {\r\n      if (focused.value) {\r\n        focused.value = false\r\n\r\n        setTimeout(() => {\r\n          if (!focused.value) {\r\n            emitEvent(props.onBlur, event)\r\n            lastValue !== getLatestValue() && emitChangeEvent('change')\r\n          }\r\n        }, 120)\r\n      }\r\n    }\r\n\r\n    function handleChange(event: Event) {\r\n      const type = event.type as InputEventType\r\n\r\n      if (composing.value) {\r\n        if (type === 'input') return\r\n\r\n        composing.value = false\r\n      }\r\n\r\n      currentValue.value = (event.target as HTMLInputElement).value\r\n      limitValueLength()\r\n\r\n      const value = currentValue.value\r\n\r\n      setValue(value, type)\r\n    }\r\n\r\n    function setValue(value: string, type: InputEventType, sync = props.sync) {\r\n      currentValue.value = value\r\n      emitChangeEvent(type, sync)\r\n    }\r\n\r\n    function emitChangeEvent(type: InputEventType, sync = props.sync) {\r\n      type = type === 'input' ? 'input' : 'change'\r\n\r\n      const value = getLatestValue()\r\n\r\n      if (type === 'change') {\r\n        lastValue = value\r\n\r\n        if (!sync) {\r\n          emit('update:value', value)\r\n          setFieldValue(value)\r\n        }\r\n\r\n        emitEvent(props.onChange as ChangeEvent, value)\r\n\r\n        if (!sync) {\r\n          validateField()\r\n        }\r\n      } else {\r\n        if (sync) {\r\n          emit('update:value', value)\r\n          setFieldValue(value)\r\n        }\r\n\r\n        emitEvent(props.onInput as ChangeEvent, value)\r\n\r\n        if (sync) {\r\n          validateField()\r\n        }\r\n      }\r\n    }\r\n\r\n    function limitValueLength() {\r\n      let value = currentValue.value\r\n\r\n      if (isNull(value)) {\r\n        currentLength.value = 0\r\n\r\n        return\r\n      }\r\n\r\n      const maxLength = props.maxLength\r\n\r\n      if (maxLength && value.length > maxLength) {\r\n        value = value.slice(0, maxLength)\r\n      }\r\n\r\n      currentLength.value = value.length\r\n      currentValue.value = value\r\n    }\r\n\r\n    function toggleShowPassword() {\r\n      if (props.disabled) {\r\n        return\r\n      }\r\n\r\n      showPassword.value = !showPassword.value\r\n      nextTick(() => {\r\n        inputControl.value?.focus()\r\n      })\r\n    }\r\n\r\n    function handleClear(event: MouseEvent) {\r\n      if (props.disabled || readonly.value) return\r\n\r\n      event.stopPropagation()\r\n      setValue('', 'change', false)\r\n      emitEvent(props.onClear)\r\n      nextTick(() => clearField(''))\r\n      currentLength.value = 0\r\n      inputControl.value?.focus()\r\n    }\r\n\r\n    function handleEnter() {\r\n      emitEvent(props.onEnter)\r\n    }\r\n\r\n    function handlePrefixClick(event: MouseEvent) {\r\n      emitEvent(props.onPrefixClick, event)\r\n    }\r\n\r\n    function handleSuffixClick(event: MouseEvent) {\r\n      emitEvent(props.onSuffixClick, event)\r\n    }\r\n\r\n    function handleKeyDown(event: KeyboardEvent) {\r\n      emitEvent(props.onKeyDown, event)\r\n    }\r\n\r\n    function handleKeyPress(event: KeyboardEvent) {\r\n      emitEvent(props.onKeyPress, event)\r\n    }\r\n\r\n    function handleKeyUp(event: KeyboardEvent) {\r\n      if (event.key === 'Enter') {\r\n        handleEnter()\r\n      }\r\n\r\n      emitEvent(props.onKeyUp, event)\r\n    }\r\n\r\n    function handleCompositionStart(event: CompositionEvent) {\r\n      composing.value = true\r\n      emitEvent(props.onCompositionStart, event)\r\n    }\r\n\r\n    function handleCompositionEnd(event: CompositionEvent) {\r\n      if (composing.value) {\r\n        composing.value = false\r\n\r\n        if (inputControl.value) {\r\n          inputControl.value.dispatchEvent(new Event('input'))\r\n        }\r\n      }\r\n\r\n      emitEvent(props.onCompositionEnd, event)\r\n    }\r\n\r\n    function copyValue() {\r\n      const input = document.createElement('input')\r\n\r\n      input.style.height = '0'\r\n      input.setAttribute('readonly', 'readonly')\r\n      input.value = currentValue.value\r\n      document.body.appendChild(input)\r\n      input.select()\r\n\r\n      const isSuccess = document.execCommand('copy')\r\n\r\n      document.body.removeChild(input)\r\n\r\n      return isSuccess\r\n    }\r\n\r\n    function preventDefault(event: Event) {\r\n      event.preventDefault()\r\n    }\r\n\r\n    const delay = toNumber(props.delay)\r\n    const handleInput = props.debounce\r\n      ? debounce(handleChange, delay || 100)\r\n      : throttle(handleChange, delay || 16)\r\n\r\n    function renderPrefix() {\r\n      return (\r\n        <div\r\n          class={[nh.be('icon'), nh.be('prefix')]}\r\n          style={{ color: props.prefixColor }}\r\n          onClick={handlePrefixClick}\r\n        >\r\n          {renderSlot(slots, 'prefix', undefined, () => [\r\n            <Renderer renderer={props.slots.prefix}>\r\n              <Icon icon={props.prefix}></Icon>\r\n            </Renderer>,\r\n          ])}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderCustomSuffix() {\r\n      if (hasSuffix.value) {\r\n        return (\r\n          <div\r\n            key={'suffix'}\r\n            class={[nh.be('icon'), nh.be('suffix')]}\r\n            style={{\r\n              color: props.suffixColor,\r\n              opacity: showClear.value || props.loading ? '0%' : '',\r\n            }}\r\n            onClick={handleSuffixClick}\r\n          >\r\n            {renderSlot(slots, 'suffix', undefined, () => [\r\n              <Renderer renderer={props.slots.suffix}>\r\n                <Icon icon={props.suffix}></Icon>\r\n              </Renderer>,\r\n            ])}\r\n          </div>\r\n        )\r\n      }\r\n\r\n      if (props.clearable || props.loading) {\r\n        return (\r\n          <div key={'placeholder'} class={[nh.be('icon'), nh.bem('icon', 'placeholder')]}></div>\r\n        )\r\n      }\r\n\r\n      return null\r\n    }\r\n\r\n    function renderSuffixAction() {\r\n      if (showClear.value) {\r\n        return (\r\n          <button\r\n            key={'clear'}\r\n            class={[nh.be('icon'), nh.be('clear')]}\r\n            type={'button'}\r\n            tabindex={-1}\r\n            aria-label={locale.value.ariaLabel.clear}\r\n            onClick={handleClear}\r\n          >\r\n            <Icon {...icons.value.clear} label={'clear'}></Icon>\r\n          </button>\r\n        )\r\n      }\r\n\r\n      if (props.loading) {\r\n        return (\r\n          <div key={'loading'} class={[nh.be('icon'), nh.be('loading')]}>\r\n            <Icon\r\n              {...icons.value.loading}\r\n              effect={props.loadingEffect || icons.value.loading.effect}\r\n              icon={props.loadingIcon || icons.value.loading.icon}\r\n              label={'loading'}\r\n            ></Icon>\r\n          </div>\r\n        )\r\n      }\r\n\r\n      return null\r\n    }\r\n\r\n    function renderSuffix() {\r\n      return (\r\n        <div class={nh.be('suffix-wrapper')}>\r\n          {renderCustomSuffix()}\r\n          <Transition name={nh.ns('fade')} appear>\r\n            {renderSuffixAction()}\r\n          </Transition>\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderCount() {\r\n      return (\r\n        <div class={nh.be('count')}>\r\n          {renderSlot(slots, 'count', { value: currentValue.value }, () => [\r\n            <Renderer renderer={props.slots.count} data={{ value: currentValue.value }}>\r\n              {props.maxLength === Infinity\r\n                ? currentLength.value\r\n                : `${currentLength.value}/${props.maxLength}`}\r\n            </Renderer>,\r\n          ])}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderPlainPassword() {\r\n      if (props.type === 'password' && props.plainPassword) {\r\n        return (\r\n          <div\r\n            key={'password'}\r\n            class={[nh.be('icon'), nh.be('password')]}\r\n            style={{\r\n              color: props.suffixColor,\r\n            }}\r\n            onClick={toggleShowPassword}\r\n          >\r\n            {renderSlot(slots, 'password', { plain: showPassword.value }, () => [\r\n              <Renderer renderer={props.slots.password} data={{ plain: showPassword.value }}>\r\n                <Icon {...passwordIcon.value}></Icon>\r\n              </Renderer>,\r\n            ])}\r\n          </div>\r\n        )\r\n      }\r\n\r\n      return null\r\n    }\r\n\r\n    function renderControl() {\r\n      return (\r\n        <div\r\n          id={idFor.value}\r\n          ref={control}\r\n          class={className.value}\r\n          onClick={() => inputControl.value?.focus()}\r\n        >\r\n          {hasPrefix.value && renderPrefix()}\r\n          <input\r\n            {...props.controlAttrs}\r\n            ref={inputControl}\r\n            class={[nh.be('control'), props.controlAttrs?.class, props.controlClass]}\r\n            type={inputType.value}\r\n            autofocus={props.autofocus}\r\n            autocomplete={autoComplete.value}\r\n            spellcheck={props.spellcheck}\r\n            disabled={props.disabled}\r\n            readonly={readonly.value || undefined}\r\n            placeholder={props.placeholder ?? locale.value.placeholder}\r\n            maxlength={props.maxLength > 0 ? props.maxLength : undefined}\r\n            name={props.name || props.controlAttrs?.name}\r\n            aria-labelledby={labelId.value}\r\n            onBlur={handleBlur}\r\n            onFocus={handleFocus}\r\n            onInput={handleInput}\r\n            onChange={handleChange}\r\n            onKeypress={handleKeyPress}\r\n            onKeydown={handleKeyDown}\r\n            onKeyup={handleKeyUp}\r\n            onSubmit={preventDefault}\r\n            onCompositionstart={handleCompositionStart}\r\n            onCompositionend={handleCompositionEnd}\r\n          />\r\n          {renderSuffix()}\r\n          {props.maxLength > 0 && !props.hideCount ? renderCount() : null}\r\n          {renderPlainPassword()}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderAside(type: 'before' | 'after') {\r\n      const buttonSlot =\r\n        slots[`${type}Action`] || slots[`${type}-action`] || props.slots[`${type}Action`]\r\n\r\n      if (buttonSlot) {\r\n        return (\r\n          <div\r\n            class={[nh.be(type), nh.bem(type, 'action')]}\r\n            onMouseenter={() => ((type === 'before' ? beforeHover : afterHover).value = true)}\r\n            onMouseleave={() => ((type === 'before' ? beforeHover : afterHover).value = false)}\r\n          >\r\n            {buttonSlot()}\r\n          </div>\r\n        )\r\n      }\r\n\r\n      return (\r\n        <div class={nh.be(type)}>\r\n          {slots[type] ? (\r\n            slots[type]!()\r\n          ) : (\r\n            <Renderer renderer={props.slots[type]}>{props[type]}</Renderer>\r\n          )}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      if (hasBefore.value || hasAfter.value) {\r\n        return (\r\n          <div class={wrapperClass.value}>\r\n            {hasBefore.value && renderAside('before')}\r\n            {renderControl()}\r\n            {hasAfter.value && renderAside('after')}\r\n          </div>\r\n        )\r\n      }\r\n\r\n      return renderControl()\r\n    }\r\n  },\r\n  methods: {\r\n    focus: noop as (options?: FocusOptions) => void,\r\n    blur: noop as () => void,\r\n  },\r\n})\r\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { ScrollbarPlacement } from './symbol'\r\n\r\nexport const scrollbarProps = buildProps({\r\n  placement: String as PropType<ScrollbarPlacement>,\r\n  scroll: Number,\r\n  barLength: Number,\r\n  width: Number,\r\n  appear: booleanProp,\r\n  fade: Number,\r\n  barColor: String,\r\n  trackColor: String,\r\n  disabled: booleanProp,\r\n  wrapper: [String, Object] as PropType<string | HTMLElement>,\r\n  duration: Number,\r\n  useTrack: booleanProp,\r\n  trackSpeed: Number,\r\n  onScrollStart: eventProp<(percent: number) => void>(),\r\n  onScroll: eventProp<(percent: number) => void>(),\r\n  onScrollEnd: eventProp<(percent: number) => void>(),\r\n})\r\n\r\nexport type ScrollbarProps = ExtractPropTypes<typeof scrollbarProps>\r\nexport type ScrollbarCProps = ConfigurableProps<ScrollbarProps, 'scroll'>\r\n","export type ScrollbarPlacement = 'top' | 'right' | 'bottom' | 'left'\r\n\r\nexport const enum ScrollbarType {\r\n  HORIZONTAL,\r\n  VERTICAL,\r\n}\r\n\r\nexport const scrollbarPlacements = Object.freeze<ScrollbarPlacement[]>([\r\n  'top',\r\n  'right',\r\n  'bottom',\r\n  'left',\r\n])\r\n","import { ref } from 'vue'\r\n\r\nimport { USE_TOUCH, noop } from '@vexip-ui/utils'\r\nimport { ScrollbarType } from './symbol'\r\n\r\nimport type { Ref } from 'vue'\r\n\r\nexport function useTrack({\r\n  currentScroll = ref(0),\r\n  trackSpeed = ref(2),\r\n  track = ref(null),\r\n  bar = ref(null),\r\n  tracking = ref(false),\r\n  type = ref(ScrollbarType.VERTICAL),\r\n  barLength = ref(35),\r\n  disabled = ref(false),\r\n  onDown = noop,\r\n  onMove = noop,\r\n  onUp = noop,\r\n  onScroll = noop,\r\n}: {\r\n  currentScroll: Ref<number>,\r\n  type: Ref<ScrollbarType>,\r\n  trackSpeed?: Ref<number>,\r\n  track?: Ref<HTMLElement | null | undefined>,\r\n  bar?: Ref<HTMLElement | null | undefined>,\r\n  tracking?: Ref<boolean>,\r\n  barLength?: Ref<number>,\r\n  disabled?: Ref<boolean>,\r\n  onDown?: (scroll: number) => void,\r\n  onMove?: (scroll: number) => void,\r\n  onUp?: (scroll: number) => void,\r\n  onScroll?: (scroll: number) => void,\r\n}) {\r\n  let length: number\r\n  let startAt: number\r\n  let cursorAt: number\r\n  let targetScroll: number\r\n  let forward = true\r\n  let processing = false\r\n\r\n  function animateMoveBar() {\r\n    if (!tracking.value) return\r\n\r\n    processing = true\r\n\r\n    const speedRate = computeSpeedRate(targetScroll, currentScroll.value)\r\n    let changed = false\r\n\r\n    if (forward) {\r\n      if (currentScroll.value < targetScroll) {\r\n        currentScroll.value += speedRate * trackSpeed.value\r\n        changed = true\r\n      }\r\n    } else if (currentScroll.value > targetScroll) {\r\n      currentScroll.value -= speedRate * trackSpeed.value\r\n      changed = true\r\n    }\r\n\r\n    if (changed) {\r\n      verifyScroll()\r\n      onScroll(currentScroll.value)\r\n    }\r\n\r\n    if (\r\n      tracking.value && forward\r\n        ? currentScroll.value < targetScroll\r\n        : currentScroll.value > targetScroll\r\n    ) {\r\n      requestAnimationFrame(animateMoveBar)\r\n    } else {\r\n      processing = false\r\n    }\r\n  }\r\n\r\n  function handleMouseDown(event: PointerEvent) {\r\n    if (disabled.value || event.button > 0) {\r\n      return false\r\n    }\r\n\r\n    event.stopPropagation()\r\n    event.preventDefault()\r\n\r\n    if (!track.value || !bar.value) return false\r\n\r\n    document.addEventListener('pointermove', handleMouseMove)\r\n    document.addEventListener('pointerup', handleMouseUp)\r\n\r\n    const rect = track.value.getBoundingClientRect()\r\n    const barRect = bar.value.getBoundingClientRect()\r\n\r\n    let position: number\r\n\r\n    if (type.value === ScrollbarType.VERTICAL) {\r\n      length = rect.height\r\n      startAt = barRect.top - rect.top\r\n      cursorAt = barRect.top\r\n      position = startAt + event.clientY - cursorAt\r\n    } else {\r\n      length = rect.width\r\n      startAt = barRect.left - rect.left\r\n      cursorAt = barRect.left\r\n      position = startAt + event.clientX - cursorAt\r\n    }\r\n\r\n    targetScroll = Math.max(\r\n      0,\r\n      Math.min((position / length / (100 - barLength.value / 2)) * 1e4, 100),\r\n    )\r\n    forward = targetScroll >= currentScroll.value\r\n\r\n    tracking.value = true\r\n\r\n    onDown(currentScroll.value)\r\n    animateMoveBar()\r\n  }\r\n\r\n  function handleMouseMove(event: PointerEvent) {\r\n    event.stopPropagation()\r\n\r\n    if (!USE_TOUCH) {\r\n      event.preventDefault()\r\n    }\r\n\r\n    onMove(currentScroll.value)\r\n\r\n    let position: number\r\n\r\n    if (type.value === ScrollbarType.VERTICAL) {\r\n      position = startAt + event.clientY - cursorAt\r\n    } else {\r\n      position = startAt + event.clientX - cursorAt\r\n    }\r\n\r\n    targetScroll = Math.max(\r\n      0,\r\n      Math.min((position / length / (100 - barLength.value / 2)) * 1e4, 100),\r\n    )\r\n\r\n    !processing && animateMoveBar()\r\n  }\r\n\r\n  function handleMouseUp(event: PointerEvent) {\r\n    event.preventDefault()\r\n\r\n    document.removeEventListener('pointermove', handleMouseMove)\r\n    document.removeEventListener('pointerup', handleMouseUp)\r\n\r\n    tracking.value = false\r\n\r\n    onUp(currentScroll.value)\r\n  }\r\n\r\n  function verifyScroll() {\r\n    currentScroll.value = Math.max(0, Math.min(currentScroll.value, 100))\r\n  }\r\n\r\n  return {\r\n    currentScroll,\r\n    trackSpeed,\r\n    track,\r\n    bar,\r\n    tracking,\r\n    type,\r\n    barLength,\r\n    disabled,\r\n\r\n    handleMouseDown,\r\n  }\r\n}\r\n\r\nfunction computeSpeedRate(start: number, end: number) {\r\n  const span = Math.abs(start - end)\r\n\r\n  for (let i = 0; i < 5; ++i) {\r\n    if (span < (i + 1) * 20) {\r\n      return 1 + 0.25 * i\r\n    }\r\n  }\r\n\r\n  return 2\r\n}\r\n","<script setup lang=\"ts\">\r\nimport {\r\n  computed,\r\n  getCurrentInstance,\r\n  nextTick,\r\n  onBeforeUnmount,\r\n  onMounted,\r\n  ref,\r\n  toRef,\r\n  watch,\r\n  watchEffect,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useManualRef, useRtl, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { USE_TOUCH, boundRange, isDefined, throttle } from '@vexip-ui/utils'\r\nimport { scrollbarProps } from './props'\r\nimport { useTrack } from './hooks'\r\nimport { ScrollbarType, scrollbarPlacements } from './symbol'\r\n\r\ndefineOptions({ name: 'Scrollbar' })\r\n\r\nconst _props = defineProps(scrollbarProps)\r\nconst props = useProps('scrollbar', _props, {\r\n  placement: {\r\n    default: 'right',\r\n    validator: value => scrollbarPlacements.includes(value),\r\n  },\r\n  scroll: {\r\n    default: 0,\r\n    validator: value => value >= 0 && value <= 100,\r\n    static: true,\r\n  },\r\n  barLength: {\r\n    default: 35,\r\n    validator: value => value > 0 && value < 100,\r\n  },\r\n  width: null,\r\n  appear: false,\r\n  fade: 1500,\r\n  barColor: null,\r\n  trackColor: null,\r\n  disabled: false,\r\n  wrapper: null,\r\n  duration: null,\r\n  useTrack: false,\r\n  trackSpeed: {\r\n    default: 2,\r\n    validator: value => value > 0 && value < 10,\r\n  },\r\n})\r\n\r\nconst nh = useNameHelper('scrollbar')\r\nconst active = ref(false)\r\nconst scrolling = ref(false)\r\n\r\nconst { manualRef, triggerUpdate } = useManualRef()\r\n\r\nconst { isRtl } = useRtl()\r\n\r\nconst currentScroll = manualRef(props.scroll)\r\n\r\nconst container = ref<HTMLElement>()\r\nconst bar = ref<HTMLElement>()\r\nconst track = ref<HTMLElement>()\r\n\r\nconst { timer } = useSetTimeout()\r\n\r\nconst type = computed(() => {\r\n  return props.placement === 'right' || props.placement === 'left'\r\n    ? ScrollbarType.VERTICAL\r\n    : ScrollbarType.HORIZONTAL\r\n})\r\n\r\nconst { tracking, handleMouseDown: handleTrackMouseDown } = useTrack({\r\n  currentScroll,\r\n  track,\r\n  bar,\r\n  type,\r\n  trackSpeed: toRef(props, 'trackSpeed'),\r\n  barLength: toRef(props, 'barLength'),\r\n  disabled: toRef(props, 'disabled'),\r\n  onDown: scroll => {\r\n    clearTimeout(timer.fade)\r\n    emitEvent(props.onScrollStart, scroll)\r\n  },\r\n  // onMove: () => clearTimeout(timer.fade),\r\n  onUp: scroll => {\r\n    setScrollbarFade()\r\n    triggerUpdate()\r\n    emitEvent(props.onScrollEnd, scroll)\r\n  },\r\n  onScroll: scroll => {\r\n    triggerUpdate()\r\n    emitEvent(props.onScroll, scroll)\r\n  },\r\n})\r\n\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    nh.bm(props.placement),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('fade')]: props.fade,\r\n      [nh.bm('scrolling')]: scrolling.value,\r\n      [nh.bm('tracking')]: tracking.value,\r\n      [nh.bm('active')]: active.value,\r\n      [nh.bm('disabled')]: props.disabled,\r\n    },\r\n  ]\r\n})\r\nconst style = computed<Record<string, string>>(() => {\r\n  return {\r\n    [nh.cv('bar-bg-color')]: props.barColor,\r\n    [nh.cv('track-bg-color')]: props.trackColor,\r\n    [nh.cv('width')]: props.width ? `${props.width}px` : null!,\r\n  }\r\n})\r\n\r\nwatch(\r\n  () => props.scroll,\r\n  value => {\r\n    currentScroll.value = value\r\n    triggerUpdate()\r\n  },\r\n)\r\nwatchEffect(() => {\r\n  if (!bar.value) return\r\n\r\n  const position = `${((100 - props.barLength) * currentScroll.value) / props.barLength}%`\r\n  const length = `${props.barLength}%`\r\n\r\n  if (type.value === ScrollbarType.VERTICAL) {\r\n    bar.value.style.height = length\r\n    bar.value.style.transform = `translate3d(0, ${position}, 0)`\r\n  } else {\r\n    bar.value.style.width = length\r\n    bar.value.style.transform = `translate3d(${isRtl.value ? '-' : ''}${position}, 0, 0)`\r\n  }\r\n})\r\nwatchEffect(() => {\r\n  if (!bar.value) return\r\n\r\n  bar.value.style.transitionDuration =\r\n    isDefined(props.duration) && props.duration >= 0 ? `${props.duration}ms` : ''\r\n})\r\n\r\nif (props.appear) {\r\n  watch(currentScroll, () => {\r\n    clearTimeout(timer.fade)\r\n    active.value = true\r\n\r\n    if (!scrolling.value && !tracking.value) {\r\n      setScrollbarFade()\r\n    }\r\n  })\r\n}\r\n\r\nconst handleWrapperMouseMove = throttle(() => {\r\n  clearTimeout(timer.fade)\r\n\r\n  if (props.disabled) {\r\n    active.value = false\r\n  } else {\r\n    active.value = true\r\n\r\n    if (!scrolling.value && !tracking.value) {\r\n      setScrollbarFade()\r\n    }\r\n  }\r\n})\r\n\r\nlet wrapperElement: HTMLElement | null\r\n\r\nonMounted(() => {\r\n  let instance = getCurrentInstance()\r\n\r\n  nextTick(() => {\r\n    if (typeof props.wrapper === 'string') {\r\n      wrapperElement = document.querySelector(props.wrapper)\r\n    } else {\r\n      wrapperElement = props.wrapper\r\n    }\r\n\r\n    if (!wrapperElement) {\r\n      if (instance?.parent) {\r\n        wrapperElement = instance.parent.proxy?.$el\r\n\r\n        if (!wrapperElement) {\r\n          wrapperElement = container.value?.parentElement ?? null\r\n        }\r\n      } else {\r\n        wrapperElement = container.value?.parentElement ?? null\r\n      }\r\n    }\r\n\r\n    if (wrapperElement && props.fade >= 300) {\r\n      wrapperElement.addEventListener('mousemove', handleWrapperMouseMove)\r\n    }\r\n\r\n    instance = null\r\n\r\n    if (!props.appear) {\r\n      watch(currentScroll, () => {\r\n        clearInterval(timer.fade)\r\n        active.value = true\r\n        setScrollbarFade()\r\n      })\r\n    }\r\n  })\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n  if (wrapperElement) {\r\n    wrapperElement.removeEventListener('mousemove', handleWrapperMouseMove)\r\n  }\r\n\r\n  wrapperElement = null\r\n  clearTimeout(timer.fade)\r\n})\r\n\r\ndefineExpose({\r\n  currentScroll,\r\n  container,\r\n  bar,\r\n  track,\r\n  handleScroll,\r\n})\r\n\r\nlet length: number\r\nlet startAt: number\r\nlet cursorAt: number\r\n\r\nfunction handleMouseDown(event: PointerEvent) {\r\n  if (event.button !== 0 || props.disabled) {\r\n    return false\r\n  }\r\n\r\n  event.stopPropagation()\r\n  event.preventDefault()\r\n\r\n  if (!track.value || !bar.value) return false\r\n\r\n  document.addEventListener('pointermove', handleMouseMove)\r\n  document.addEventListener('pointerup', handleMouseUp)\r\n\r\n  const rect = track.value.getBoundingClientRect()\r\n  const barRect = bar.value.getBoundingClientRect()\r\n\r\n  if (type.value === ScrollbarType.VERTICAL) {\r\n    length = rect.height\r\n    startAt = barRect.top - rect.top\r\n    cursorAt = event.clientY\r\n  } else {\r\n    length = rect.width\r\n    startAt = isRtl.value ? barRect.right - rect.right : barRect.left - rect.left\r\n    cursorAt = event.clientX\r\n  }\r\n\r\n  clearTimeout(timer.fade)\r\n\r\n  scrolling.value = true\r\n  emitEvent(props.onScrollStart, currentScroll.value)\r\n}\r\n\r\nfunction handleMouseMove(event: PointerEvent) {\r\n  event.stopPropagation()\r\n\r\n  if (!USE_TOUCH) {\r\n    event.preventDefault()\r\n  }\r\n\r\n  let position: number\r\n\r\n  if (type.value === ScrollbarType.VERTICAL) {\r\n    position = startAt + event.clientY - cursorAt\r\n  } else {\r\n    position = isRtl.value\r\n      ? -(startAt + event.clientX - cursorAt)\r\n      : startAt + event.clientX - cursorAt\r\n  }\r\n\r\n  // position / length * 100 === (100 - barLength) * currentScroll / 100\r\n  currentScroll.value = (position / length / (100 - props.barLength)) * 1e4\r\n\r\n  verifyScroll()\r\n  triggerUpdate()\r\n  emitEvent(props.onScroll, currentScroll.value)\r\n}\r\n\r\nfunction handleMouseUp(event: PointerEvent) {\r\n  event.preventDefault()\r\n\r\n  document.removeEventListener('pointermove', handleMouseMove)\r\n  document.removeEventListener('pointerup', handleMouseUp)\r\n\r\n  setScrollbarFade()\r\n\r\n  scrolling.value = false\r\n  emitEvent(props.onScrollEnd, currentScroll.value)\r\n}\r\n\r\nfunction verifyScroll() {\r\n  currentScroll.value = Math.max(0, Math.min(currentScroll.value, 100))\r\n}\r\n\r\nfunction setScrollbarFade() {\r\n  if (props.fade >= 300) {\r\n    timer.fade = setTimeout(() => {\r\n      active.value = false\r\n    }, props.fade)\r\n  }\r\n}\r\n\r\nfunction handleScroll(scroll: number) {\r\n  if (Math.abs(currentScroll.value - scroll) < 0.0001) return\r\n\r\n  currentScroll.value = boundRange(scroll, 0, 100)\r\n  triggerUpdate()\r\n}\r\n\r\nfunction disableEvent<E extends Event>(event: E) {\r\n  if (event.cancelable) {\r\n    event.stopPropagation()\r\n    event.preventDefault()\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"container\"\r\n    :class=\"className\"\r\n    role=\"scrollbar\"\r\n    :style=\"style\"\r\n  >\r\n    <div\r\n      ref=\"track\"\r\n      :class=\"[nh.be('track'), props.useTrack ? null : nh.bem('track', 'disabled')]\"\r\n      @touchstart=\"disableEvent\"\r\n      @pointerdown=\"handleTrackMouseDown\"\r\n    ></div>\r\n    <div\r\n      ref=\"bar\"\r\n      :class=\"nh.be('bar')\"\r\n      @touchstart=\"disableEvent\"\r\n      @pointerdown=\"handleMouseDown\"\r\n    ></div>\r\n  </div>\r\n</template>\r\n","import { booleanNumberProp, booleanProp, buildProps, eventProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\n\r\nexport const resizeObserverProps = buildProps({\r\n  throttle: booleanNumberProp,\r\n  disabled: booleanProp,\r\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>(),\r\n})\r\n\r\nexport type ResizeObserverProps = ExtractPropTypes<typeof resizeObserverProps>\r\nexport type ResizeObserverCProps = ConfigurableProps<ResizeObserverProps>\r\n","import {\r\n  defineComponent,\r\n  getCurrentInstance,\r\n  onBeforeUnmount,\r\n  onMounted,\r\n  renderSlot,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useProps } from '@vexip-ui/config'\r\nimport { useResize } from '@vexip-ui/hooks'\r\nimport { throttle } from '@vexip-ui/utils'\r\nimport { resizeObserverProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'ResizeObserver',\r\n  props: resizeObserverProps,\r\n  setup(_props, { slots }) {\r\n    const props = useProps('resizeObserver', _props, {\r\n      throttle: {\r\n        default: false,\r\n        validator: value => typeof value === 'boolean' || value > 0,\r\n      },\r\n      disabled: false,\r\n    })\r\n\r\n    const { observeResize, unobserveResize } = useResize()\r\n\r\n    let observed = false\r\n\r\n    function handleResize(entry: ResizeObserverEntry) {\r\n      emitEvent(props.onResize, entry)\r\n    }\r\n\r\n    const throttleResize = props.throttle\r\n      ? throttle(handleResize, typeof props.throttle === 'boolean' ? 16 : props.throttle)\r\n      : handleResize\r\n\r\n    const instance = getCurrentInstance()\r\n\r\n    onMounted(() => {\r\n      watch(\r\n        () => props.disabled,\r\n        value => {\r\n          value ? unobserve() : observe()\r\n        },\r\n        { immediate: true, flush: 'post' },\r\n      )\r\n    })\r\n\r\n    onBeforeUnmount(() => {\r\n      if (observed) {\r\n        const el = getCurrentInstance()?.proxy?.$el as Element | null\r\n\r\n        if (el?.nextElementSibling) {\r\n          unobserveResize(el.nextElementSibling)\r\n        }\r\n      }\r\n    })\r\n\r\n    function observe() {\r\n      if (observed) return\r\n\r\n      const el = instance?.proxy?.$el as Element | null\r\n\r\n      if (el?.nextElementSibling) {\r\n        if (el.nextElementSibling !== el.nextSibling && el.nodeType === 3 && el.nodeValue !== '') {\r\n          return\r\n        }\r\n\r\n        observeResize(el.nextElementSibling, throttleResize)\r\n        observed = true\r\n      }\r\n    }\r\n\r\n    function unobserve() {\r\n      if (observed) {\r\n        const el = instance?.proxy?.$el as Element | null\r\n\r\n        if (el?.nextElementSibling) {\r\n          unobserveResize(el.nextElementSibling)\r\n        }\r\n\r\n        observed = false\r\n      }\r\n    }\r\n\r\n    return () => renderSlot(slots, 'default')\r\n  },\r\n})\r\n","import {\r\n  booleanNumberProp,\r\n  booleanProp,\r\n  buildProps,\r\n  classProp,\r\n  eventProp,\r\n  styleProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { BarScrollPayload } from '@/components/scroll'\r\nimport type { NativeScrollMode, NativeScrollPayload } from './symbol'\r\n\r\nexport const nativeScrollProps = buildProps({\r\n  scrollClass: classProp,\r\n  scrollStyle: styleProp,\r\n  scrollAttrs: Object as PropType<Record<string, any>>,\r\n  mode: String as PropType<NativeScrollMode>,\r\n  width: [Number, String],\r\n  height: [Number, String],\r\n  disabled: booleanProp,\r\n  pointer: booleanProp,\r\n  scrollX: Number,\r\n  scrollY: Number,\r\n  useXBar: booleanProp,\r\n  useYBar: booleanProp,\r\n  barFade: Number,\r\n  barClass: classProp,\r\n  autoplay: booleanNumberProp,\r\n  playWaiting: Number,\r\n  appear: booleanProp,\r\n  barDuration: Number,\r\n  useBarTrack: booleanProp,\r\n  scrollTag: String,\r\n  observeDeep: booleanProp,\r\n  scrollOnly: booleanProp,\r\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>(),\r\n  onXEnabledChange: eventProp<(enabled: boolean) => void>(),\r\n  onYEnabledChange: eventProp<(enabled: boolean) => void>(),\r\n  onWheel: eventProp<(event: WheelEvent, type: 'vertical' | 'horizontal') => void>(),\r\n  onScrollStart: eventProp<(payload: Omit<NativeScrollPayload, 'type'>) => void>(),\r\n  onScroll: eventProp<(payload: NativeScrollPayload) => void>(),\r\n  onScrollEnd: eventProp<(payload: Omit<NativeScrollPayload, 'type'>) => void>(),\r\n  onBarScrollStart: eventProp<(payload: BarScrollPayload) => void>(),\r\n  onBarScroll: eventProp<(payload: BarScrollPayload) => void>(),\r\n  onBarScrollEnd: eventProp<(payload: BarScrollPayload) => void>(),\r\n})\r\n\r\nexport type NativeScrollProps = ExtractPropTypes<typeof nativeScrollProps>\r\nexport type NativeScrollCProps = ConfigurableProps<\r\n  NativeScrollProps,\r\n  'scrollX' | 'scrollY',\r\n  'onBeforeScroll'\r\n>\r\n","interface ScrollElement {\r\n  scrollTo(x: number, y: number): void,\r\n  [prop: string]: any,\r\n}\r\n\r\nexport function animateScrollTo(options: {\r\n  el: ScrollElement,\r\n  xFrom?: number,\r\n  xTo?: number,\r\n  yFrom?: number,\r\n  yTo?: number,\r\n  duration?: number,\r\n  callback?: null | (() => any),\r\n}): void {\r\n  const { el, xFrom = 0, xTo = 0, yFrom = 0, yTo = 0, duration = 500, callback = null } = options\r\n\r\n  if (!el) return\r\n\r\n  const end = () => {\r\n    typeof callback === 'function' && callback()\r\n  }\r\n\r\n  if (duration <= 0) {\r\n    el.scrollTo(xTo, yTo)\r\n    end()\r\n    return\r\n  }\r\n\r\n  const xDistance = xTo - xFrom\r\n  const yDistance = yTo - yFrom\r\n\r\n  if (!xDistance && !yDistance) {\r\n    end()\r\n    return\r\n  }\r\n\r\n  const xStep = Math.ceil((xDistance / duration) * 16)\r\n  const yStep = Math.ceil((yDistance / duration) * 16)\r\n\r\n  let currentX = xFrom\r\n  let currentY = yFrom\r\n\r\n  const scroll = () => {\r\n    currentX += xStep\r\n    currentY += yStep\r\n\r\n    if (xDistance && (xTo - currentX) / xDistance <= 0) {\r\n      currentX = xTo\r\n    }\r\n\r\n    if (yDistance && (yTo - currentY) / yDistance <= 0) {\r\n      currentY = yTo\r\n    }\r\n\r\n    el.scrollTo(currentX, currentY)\r\n\r\n    if ((!xDistance || currentX === xTo) && (!yDistance || currentY === yTo)) {\r\n      end()\r\n    } else {\r\n      requestAnimationFrame(scroll)\r\n    }\r\n  }\r\n\r\n  scroll()\r\n}\r\n","import { computed, onMounted, reactive, ref, watch } from 'vue'\r\n\r\nimport { isHiddenElement, useManualRef, useMounted, useRtl } from '@vexip-ui/hooks'\r\nimport { boundRange, debounce, debounceMinor, isElement, multipleFixed } from '@vexip-ui/utils'\r\nimport { animateScrollTo } from './helper'\r\n\r\nimport type { Ref } from 'vue'\r\nimport type { NativeScrollMode } from './symbol'\r\n\r\nexport function useScrollWrapper({\r\n  mode,\r\n  disabled,\r\n  appear,\r\n  scrollX,\r\n  scrollY,\r\n  onResize,\r\n  onBeforeRefresh,\r\n  onAfterRefresh,\r\n}: {\r\n  mode: Ref<NativeScrollMode>,\r\n  disabled: Ref<boolean>,\r\n  appear: Ref<boolean>,\r\n  // width: Ref<number | string>,\r\n  // height: Ref<number | string>,\r\n  scrollX: Ref<number>,\r\n  scrollY: Ref<number>,\r\n  onResize?: (entity: ResizeObserverEntry) => void,\r\n  onBeforeRefresh?: () => void,\r\n  onAfterRefresh?: () => void,\r\n}) {\r\n  const { manualRef, triggerUpdate } = useManualRef()\r\n\r\n  const { isRtl } = useRtl()\r\n\r\n  const contentEl = ref<HTMLElement>()\r\n\r\n  const content = reactive({\r\n    el: contentEl,\r\n    scrollWidth: 0,\r\n    offsetWidth: 0,\r\n    scrollHeight: 0,\r\n    offsetHeight: 0,\r\n  })\r\n\r\n  // 当前滚动位置\r\n  const x = manualRef(0)\r\n  const y = manualRef(0)\r\n\r\n  const percentX = manualRef(0)\r\n  const percentY = manualRef(0)\r\n\r\n  const xScrollLimit = computed(() => {\r\n    return content.el ? content.scrollWidth - content.offsetWidth : 0\r\n  })\r\n  const yScrollLimit = computed(() => {\r\n    return content.el ? content.scrollHeight - content.offsetHeight : 0\r\n  })\r\n  const enableXScroll = computed(() => {\r\n    return (\r\n      !disabled.value &&\r\n      mode.value !== 'vertical' &&\r\n      !!content.el &&\r\n      content.scrollWidth > content.offsetWidth\r\n    )\r\n  })\r\n  const enableYScroll = computed(() => {\r\n    return (\r\n      !disabled.value &&\r\n      mode.value !== 'horizontal' &&\r\n      !!content.el &&\r\n      content.scrollHeight > content.offsetHeight\r\n    )\r\n  })\r\n  const xBarLength = computed(() => {\r\n    if (content.el) {\r\n      return boundRange((content.offsetWidth / (content.scrollWidth || 1)) * 100, 5, 99)\r\n    }\r\n\r\n    return 35\r\n  })\r\n  const yBarLength = computed(() => {\r\n    if (content.el) {\r\n      return boundRange((content.offsetHeight / (content.scrollHeight || 1)) * 100, 5, 99)\r\n    }\r\n\r\n    return 35\r\n  })\r\n\r\n  watch(contentEl, () => {\r\n    computeContentSize()\r\n  })\r\n  watch(scrollX, value => {\r\n    setScrollX(value)\r\n  })\r\n  watch(scrollY, value => {\r\n    setScrollY(value)\r\n  })\r\n\r\n  function setScrollX(value: number) {\r\n    x.value = boundRange(value, 0, xScrollLimit.value)\r\n    syncScroll()\r\n  }\r\n\r\n  function setScrollY(value: number) {\r\n    y.value = boundRange(value, 0, yScrollLimit.value)\r\n    syncScroll()\r\n  }\r\n\r\n  function syncScroll() {\r\n    if (content.el) {\r\n      content.el.scrollTo({\r\n        top: y.value,\r\n        left: isRtl.value ? -x.value : x.value,\r\n        behavior: 'instant',\r\n      })\r\n    }\r\n  }\r\n\r\n  const { isMounted } = useMounted()\r\n\r\n  function computeContentSize() {\r\n    if (!content.el || isHiddenElement(content.el)) return\r\n\r\n    content.scrollWidth = content.el.scrollWidth\r\n    content.offsetWidth = content.el.offsetWidth\r\n    content.scrollHeight = content.el.scrollHeight\r\n    content.offsetHeight = content.el.offsetHeight\r\n\r\n    if (mode.value !== 'vertical') {\r\n      setScrollX(!isMounted.value && appear.value ? scrollX.value : x.value || 0)\r\n    }\r\n\r\n    if (mode.value !== 'horizontal') {\r\n      setScrollY(!isMounted.value && appear.value ? scrollY.value : y.value || 0)\r\n    }\r\n\r\n    computePercent()\r\n    triggerUpdate()\r\n  }\r\n\r\n  function computePercent() {\r\n    if (content.el) {\r\n      percentX.value = isRtl.value\r\n        ? -multipleFixed(x.value / (xScrollLimit.value || 1), 100, 2)\r\n        : multipleFixed(x.value / (xScrollLimit.value || 1), 100, 2)\r\n      percentY.value = multipleFixed(y.value / (yScrollLimit.value || 1), 100, 2)\r\n    }\r\n  }\r\n\r\n  function handleResize(entity: ResizeObserverEntry) {\r\n    refresh()\r\n    onResize?.(entity)\r\n  }\r\n\r\n  onMounted(() => {\r\n    refresh()\r\n\r\n    if (appear.value) {\r\n      scrollTo(scrollX.value, scrollY.value)\r\n    }\r\n  })\r\n\r\n  const refresh = debounceMinor(() => {\r\n    return new Promise<void>(resolve => {\r\n      if (typeof onBeforeRefresh === 'function') {\r\n        onBeforeRefresh()\r\n      }\r\n\r\n      computeContentSize()\r\n      setTimeout(() => {\r\n        if (typeof onAfterRefresh === 'function') {\r\n          onAfterRefresh()\r\n        }\r\n\r\n        resolve()\r\n      }, 0)\r\n    })\r\n  })\r\n\r\n  function scrollTo(clientX: number, clientY: number, duration = 500) {\r\n    return new Promise<void>(resolve => {\r\n      if (!content.el) return\r\n\r\n      if (!enableXScroll.value || Math.abs(x.value - clientX) < 0.01) {\r\n        clientX = x.value\r\n      }\r\n\r\n      if (!enableYScroll.value || Math.abs(y.value - clientY) < 0.01) {\r\n        clientY = y.value\r\n      }\r\n\r\n      animateScrollTo({\r\n        duration,\r\n        el: content.el,\r\n        xFrom: x.value,\r\n        xTo: boundRange(clientX, 0, xScrollLimit.value),\r\n        yFrom: y.value,\r\n        yTo: boundRange(clientY, 0, yScrollLimit.value),\r\n        callback: resolve,\r\n      })\r\n    })\r\n  }\r\n\r\n  function scrollBy(deltaX: number, deltaY: number, duration = 500) {\r\n    return scrollTo(x.value + deltaX, y.value + deltaY, duration)\r\n  }\r\n\r\n  function scrollToElement(el: string | Element, duration?: number, offset = 0) {\r\n    if (!content.el) return Promise.resolve()\r\n\r\n    if (typeof el === 'string') {\r\n      el = content.el.querySelector(el)!\r\n    }\r\n\r\n    if (!isElement(el)) return Promise.resolve()\r\n\r\n    const wrapperRect = content.el.getBoundingClientRect()\r\n    const elRect = el.getBoundingClientRect()\r\n\r\n    let clientX = 0\r\n    let clientY = 0\r\n\r\n    if (mode.value !== 'vertical') {\r\n      clientX = elRect.left - wrapperRect.left + offset\r\n    }\r\n\r\n    if (mode.value !== 'horizontal') {\r\n      clientY = elRect.top - wrapperRect.top + offset\r\n    }\r\n\r\n    return scrollTo(clientX, clientY, duration)\r\n  }\r\n\r\n  return {\r\n    contentEl,\r\n\r\n    content,\r\n    x,\r\n    y,\r\n    percentX,\r\n    percentY,\r\n    xScrollLimit,\r\n    yScrollLimit,\r\n    enableXScroll,\r\n    enableYScroll,\r\n    xBarLength,\r\n    yBarLength,\r\n\r\n    handleResize: debounce(handleResize),\r\n    setScrollX,\r\n    setScrollY,\r\n    computePercent,\r\n    refresh,\r\n    scrollTo,\r\n    scrollBy,\r\n    scrollToElement,\r\n    triggerUpdate,\r\n  }\r\n}\r\n","import { Scrollbar } from '@/components/scrollbar'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  nextTick,\r\n  onBeforeUnmount,\r\n  ref,\r\n  renderSlot,\r\n  shallowReadonly,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { createSlotRender, flatVNodes, useRtl } from '@vexip-ui/hooks'\r\nimport { USE_TOUCH, createEventEmitter, isClient, isElement, isTrue } from '@vexip-ui/utils'\r\nimport { nativeScrollProps } from './props'\r\nimport { useScrollWrapper } from './hooks'\r\n\r\nimport type { EventHandler } from '@vexip-ui/utils'\r\nimport type { NativeScrollMode } from './symbol'\r\n\r\nconst scrollModes = Object.freeze<NativeScrollMode[]>(['horizontal', 'vertical', 'both'])\r\n\r\nconst MOVE_EVENT = 'mousemove'\r\nconst UP_EVENT = 'mouseup'\r\n\r\nexport default defineComponent({\r\n  name: 'NativeScroll',\r\n  inheritAttrs: false,\r\n  props: nativeScrollProps,\r\n  emits: [],\r\n  setup(_props, { attrs, slots, expose }) {\r\n    const props = useProps('nativeScroll', _props, {\r\n      scrollClass: null,\r\n      scrollStyle: null,\r\n      scrollAttrs: null,\r\n      mode: {\r\n        default: 'vertical',\r\n        validator: value => scrollModes.includes(value),\r\n      },\r\n      width: '',\r\n      height: '',\r\n      disabled: false,\r\n      pointer: false,\r\n      scrollX: {\r\n        default: 0,\r\n        static: true,\r\n      },\r\n      scrollY: {\r\n        default: 0,\r\n        static: true,\r\n      },\r\n      useXBar: false,\r\n      useYBar: false,\r\n      barFade: 1500,\r\n      barClass: null,\r\n      autoplay: false,\r\n      playWaiting: 500,\r\n      appear: false,\r\n      barDuration: null,\r\n      useBarTrack: false,\r\n      scrollTag: 'div',\r\n      observeDeep: false,\r\n      scrollOnly: false,\r\n    })\r\n\r\n    const emitter = createEventEmitter()\r\n\r\n    const nh = useNameHelper('native-scroll')\r\n    const { isRtl } = useRtl()\r\n    const usingBar = ref(false)\r\n    const scrolling = ref(false)\r\n\r\n    const wrapper = ref<HTMLElement>()\r\n    const xBar = ref<InstanceType<typeof Scrollbar>>()\r\n    const yBar = ref<InstanceType<typeof Scrollbar>>()\r\n\r\n    let initialized = false\r\n\r\n    const {\r\n      contentEl,\r\n\r\n      content,\r\n      x,\r\n      y,\r\n      percentX,\r\n      percentY,\r\n      xScrollLimit,\r\n      yScrollLimit,\r\n      enableXScroll,\r\n      enableYScroll,\r\n      xBarLength,\r\n      yBarLength,\r\n\r\n      handleResize,\r\n      setScrollX,\r\n      setScrollY,\r\n      computePercent,\r\n      refresh,\r\n      scrollTo,\r\n      scrollBy,\r\n      scrollToElement,\r\n      triggerUpdate,\r\n    } = useScrollWrapper({\r\n      mode: toRef(props, 'mode'),\r\n      disabled: toRef(props, 'disabled'),\r\n      appear: toRef(props, 'appear'),\r\n      // width: toRef(props, 'width'),\r\n      // height: toRef(props, 'height'),\r\n      scrollX: toRef(props, 'scrollX'),\r\n      scrollY: toRef(props, 'scrollY'),\r\n      onResize: entry => {\r\n        emitEvent(props.onResize, entry)\r\n      },\r\n      // onBeforeRefresh: stopAutoplay,\r\n      onAfterRefresh: () => {\r\n        syncBarScroll()\r\n\r\n        if (!initialized) {\r\n          initialized = true\r\n          startAutoplay()\r\n        }\r\n      },\r\n    })\r\n\r\n    const slotParams = shallowReadonly({\r\n      getState,\r\n      refresh,\r\n      scrollTo,\r\n      scrollBy,\r\n      scrollToElement,\r\n      ensureInView,\r\n    })\r\n\r\n    /* autoplay */\r\n    const canPlay = ref(false)\r\n\r\n    const canAutoplay = computed(() => {\r\n      return (\r\n        props.mode !== 'both' &&\r\n        (isTrue(props.autoplay) || +props.autoplay > 1000) &&\r\n        ((props.mode === 'horizontal' && enableXScroll.value) ||\r\n          (props.mode === 'vertical' && enableYScroll.value))\r\n      )\r\n    })\r\n\r\n    watch([() => props.autoplay, () => props.playWaiting, contentEl], () => {\r\n      stopAutoplay()\r\n      nextTick(startAutoplay)\r\n    })\r\n\r\n    let playTimer: ReturnType<typeof setTimeout>\r\n    let startTimer: ReturnType<typeof setTimeout>\r\n    let endTimer: ReturnType<typeof setTimeout>\r\n\r\n    onBeforeUnmount(stopAutoplay)\r\n\r\n    function startAutoplay() {\r\n      stopAutoplay()\r\n\r\n      if (!canAutoplay.value || !contentEl.value) return\r\n\r\n      const mode = props.mode\r\n      const distance = mode === 'horizontal' ? 'offsetWidth' : 'offsetHeight'\r\n      const limit = mode === 'horizontal' ? xScrollLimit : yScrollLimit\r\n      const prop = mode === 'horizontal' ? x : y\r\n      const waiting = props.playWaiting < 20 ? 20 : props.playWaiting\r\n      const setScroll = mode === 'horizontal' ? setScrollX : setScrollY\r\n\r\n      let playSpeed = 0.5\r\n\r\n      if (typeof props.autoplay === 'number') {\r\n        playSpeed = (contentEl.value[distance] / props.autoplay) * 16\r\n      }\r\n\r\n      const scroll = () => {\r\n        setScroll(prop.value + playSpeed)\r\n\r\n        if (prop.value >= limit.value) {\r\n          setScroll(limit.value)\r\n          canPlay.value = false\r\n\r\n          computePercent()\r\n          triggerUpdate()\r\n          syncBarScroll()\r\n\r\n          endTimer = setTimeout(() => {\r\n            scrollTo(0, 0, 500)\r\n\r\n            startTimer = setTimeout(() => {\r\n              canPlay.value = true\r\n              scroll()\r\n            }, 500 + waiting)\r\n          }, waiting)\r\n        } else {\r\n          computePercent()\r\n          triggerUpdate()\r\n          syncBarScroll()\r\n\r\n          if (canPlay.value) {\r\n            requestAnimationFrame(scroll)\r\n          }\r\n        }\r\n      }\r\n\r\n      playTimer = setTimeout(() => {\r\n        canPlay.value = true\r\n        scroll()\r\n      }, waiting)\r\n    }\r\n\r\n    function stopAutoplay() {\r\n      canPlay.value = false\r\n\r\n      clearTimeout(playTimer)\r\n      clearTimeout(startTimer)\r\n      clearTimeout(endTimer)\r\n    }\r\n    /* autoplay */\r\n\r\n    const className = computed(() => {\r\n      return [\r\n        nh.b(),\r\n        nh.bm(props.mode),\r\n        {\r\n          [nh.bm('inherit')]: props.inherit,\r\n          [nh.bm('scrolling')]: scrolling.value,\r\n          [nh.bm('using-bar')]: usingBar.value,\r\n        },\r\n      ]\r\n    })\r\n    const style = computed(() => {\r\n      const { width, height } = props\r\n\r\n      return {\r\n        width: width\r\n          ? typeof width === 'string'\r\n            ? Number.isNaN(Number(width))\r\n              ? width\r\n              : `${Number(width)}px`\r\n            : `${width}px`\r\n          : undefined,\r\n        height: height\r\n          ? typeof height === 'string'\r\n            ? Number.isNaN(Number(height))\r\n              ? height\r\n              : `${Number(height)}px`\r\n            : `${height}px`\r\n          : undefined,\r\n      }\r\n    })\r\n    const wrapperClass = computed(() => {\r\n      return [props.scrollAttrs?.class, props.scrollClass, nh.be('wrapper')]\r\n    })\r\n    const barFade = computed(() => (canAutoplay.value ? 0 : props.barFade))\r\n\r\n    const willMutate = ref(false)\r\n\r\n    function handleMutate() {\r\n      willMutate.value = true\r\n      nextTick(refresh)\r\n      requestAnimationFrame(() => {\r\n        willMutate.value = false\r\n      })\r\n    }\r\n\r\n    let observer: MutationObserver | undefined\r\n\r\n    function createMutation() {\r\n      if (!isClient || !contentEl.value) return\r\n\r\n      observer = new MutationObserver(handleMutate)\r\n      observer.observe(contentEl.value, {\r\n        childList: true,\r\n      })\r\n    }\r\n\r\n    function clearMutation() {\r\n      observer?.disconnect()\r\n      observer = undefined\r\n    }\r\n\r\n    watch(\r\n      contentEl,\r\n      () => {\r\n        clearMutation()\r\n        createMutation()\r\n      },\r\n      { immediate: true },\r\n    )\r\n    watch(enableXScroll, value => {\r\n      emitEvent(props.onXEnabledChange, value)\r\n    })\r\n    watch(enableYScroll, value => {\r\n      emitEvent(props.onYEnabledChange, value)\r\n    })\r\n\r\n    expose({\r\n      x,\r\n      y,\r\n      percentX,\r\n      percentY,\r\n      xScrollLimit,\r\n      yScrollLimit,\r\n\r\n      xBarLength,\r\n      yBarLength,\r\n      enableXScroll,\r\n      enableYScroll,\r\n\r\n      wrapper,\r\n      content: contentEl,\r\n      xBar,\r\n      yBar,\r\n\r\n      refresh,\r\n      scrollTo,\r\n      scrollBy,\r\n      scrollToElement,\r\n      ensureInView,\r\n      getXScrollLimit,\r\n      getYScrollLimit,\r\n      addScrollListener,\r\n      removeScrollListener,\r\n    })\r\n\r\n    function getCommonPayload() {\r\n      return {\r\n        clientX: (isRtl.value ? -1 : 1) * x.value,\r\n        clientY: y.value,\r\n        percentX: percentX.value,\r\n        percentY: percentY.value,\r\n      }\r\n    }\r\n\r\n    function syncBarScroll() {\r\n      xBar.value?.handleScroll(percentX.value)\r\n      yBar.value?.handleScroll(percentY.value)\r\n    }\r\n\r\n    function handleMouseDown(event: MouseEvent) {\r\n      if (!props.pointer || event.button !== 0 || USE_TOUCH) {\r\n        return false\r\n      }\r\n\r\n      handlePointerDown(event)\r\n    }\r\n\r\n    // 记录滚动开始位置\r\n    let xScrollStartAt = 0\r\n    let yScrollStartAt = 0\r\n\r\n    // 记录滚动开始鼠标位置\r\n    let cursorXPosition = 0\r\n    let cursorYPosition = 0\r\n\r\n    function handlePointerDown(event: MouseEvent) {\r\n      if (!enableXScroll.value && !enableYScroll.value) {\r\n        return false\r\n      }\r\n\r\n      prepareScroll()\r\n\r\n      xScrollStartAt = x.value\r\n      yScrollStartAt = y.value\r\n      cursorXPosition = event.clientX\r\n      cursorYPosition = event.clientY\r\n\r\n      document.addEventListener(MOVE_EVENT, handlePointerMove)\r\n      document.addEventListener(UP_EVENT, handlePointerUp)\r\n\r\n      emitEvent(props.onScrollStart, getCommonPayload())\r\n    }\r\n\r\n    function handlePointerMove(event: MouseEvent) {\r\n      event.stopPropagation()\r\n      event.preventDefault()\r\n\r\n      scrolling.value = true\r\n\r\n      if (enableXScroll.value) {\r\n        setScrollX(xScrollStartAt - (event.clientX - cursorXPosition))\r\n      }\r\n\r\n      if (enableYScroll.value) {\r\n        setScrollY(yScrollStartAt - (event.clientY - cursorYPosition))\r\n      }\r\n\r\n      computePercent()\r\n      triggerUpdate()\r\n      syncBarScroll()\r\n      emitScrollEvent(props.mode)\r\n    }\r\n\r\n    function handlePointerUp() {\r\n      document.removeEventListener(MOVE_EVENT, handlePointerMove)\r\n      document.removeEventListener(UP_EVENT, handlePointerUp)\r\n\r\n      emitEvent(props.onScrollEnd, getCommonPayload())\r\n      startAutoplay()\r\n    }\r\n\r\n    function handleWheel(event: WheelEvent, type: 'vertical' | 'horizontal') {\r\n      const isVerticalScroll = enableYScroll.value && type === 'vertical'\r\n      const isHorizontalScroll = enableXScroll.value && type === 'horizontal'\r\n      const sign = event.deltaY > 0 ? 1 : -1\r\n\r\n      emitEvent(props.onWheel, event, type)\r\n\r\n      if (isVerticalScroll || isHorizontalScroll) {\r\n        const maxLimit = isVerticalScroll ? yScrollLimit.value : xScrollLimit.value\r\n        const scroll = isVerticalScroll ? y.value : x.value\r\n\r\n        if (sign > 0 ? scroll < maxLimit : scroll > 0) {\r\n          event.stopPropagation()\r\n\r\n          return false\r\n        }\r\n      }\r\n    }\r\n\r\n    function handleScroll(event: UIEvent) {\r\n      if (!contentEl.value) return\r\n\r\n      event.stopPropagation()\r\n\r\n      const type = contentEl.value?.scrollLeft !== x.value ? 'horizontal' : 'vertical'\r\n\r\n      y.value = contentEl.value.scrollTop\r\n      x.value = contentEl.value.scrollLeft\r\n\r\n      computePercent()\r\n      triggerUpdate()\r\n      syncBarScroll()\r\n      emitScrollEvent(type)\r\n    }\r\n\r\n    function prepareScroll() {\r\n      stopAutoplay()\r\n    }\r\n\r\n    function handleBarScrollStart(type: 'vertical' | 'horizontal') {\r\n      usingBar.value = true\r\n      prepareScroll()\r\n      emitEvent(props.onBarScrollStart, {\r\n        ...getCommonPayload(),\r\n        type,\r\n      })\r\n    }\r\n\r\n    function handleBarScrollEnd(type: 'vertical' | 'horizontal') {\r\n      usingBar.value = false\r\n      startAutoplay()\r\n      emitEvent(props.onBarScrollEnd, {\r\n        ...getCommonPayload(),\r\n        type,\r\n      })\r\n    }\r\n\r\n    function handleXBarScroll(percent: number) {\r\n      percentX.value = percent\r\n      setScrollX((percent * xScrollLimit.value) / 100)\r\n      triggerUpdate()\r\n      emitEvent(props.onBarScroll, {\r\n        ...getCommonPayload(),\r\n        type: 'horizontal',\r\n      })\r\n      emitScrollEvent('horizontal')\r\n    }\r\n\r\n    function handleYBarScroll(percent: number) {\r\n      percentY.value = percent\r\n      setScrollY((percent * yScrollLimit.value) / 100)\r\n      triggerUpdate()\r\n      emitEvent(props.onBarScroll, {\r\n        ...getCommonPayload(),\r\n        type: 'vertical',\r\n      })\r\n      emitScrollEvent('vertical')\r\n    }\r\n\r\n    function emitScrollEvent(type: NativeScrollMode) {\r\n      emitEvent(props.onScroll, {\r\n        ...getCommonPayload(),\r\n        type,\r\n      })\r\n      emitter.emit('scroll', {\r\n        ...getCommonPayload(),\r\n        type,\r\n      })\r\n    }\r\n\r\n    function getState() {\r\n      const { clientX: scrollX, clientY: scrollY, percentX, percentY } = getCommonPayload()\r\n\r\n      return {\r\n        scrollX,\r\n        scrollY,\r\n        percentX,\r\n        percentY,\r\n        enableXScroll: enableXScroll.value,\r\n        enableYScroll: enableYScroll.value,\r\n      }\r\n    }\r\n\r\n    function getXScrollLimit() {\r\n      return [0, xScrollLimit.value]\r\n    }\r\n\r\n    function getYScrollLimit() {\r\n      return [0, yScrollLimit.value]\r\n    }\r\n\r\n    function ensureInView(el: string | Element, duration?: number, offset = 0) {\r\n      if (!wrapper.value) return Promise.resolve()\r\n\r\n      if (typeof el === 'string') {\r\n        el = wrapper.value.querySelector(el)!\r\n      }\r\n\r\n      if (!isElement(el)) return Promise.resolve()\r\n\r\n      const wrapperRect = wrapper.value.getBoundingClientRect()\r\n      const elRect = el.getBoundingClientRect()\r\n\r\n      let clientX = 0\r\n      let clientY = 0\r\n\r\n      if (props.mode !== 'vertical') {\r\n        if (elRect.left < wrapperRect.left + offset) {\r\n          clientX = elRect.left - wrapperRect.left - offset\r\n        } else if (elRect.right > wrapperRect.right - offset) {\r\n          clientX = elRect.right - wrapperRect.right + offset\r\n        }\r\n      }\r\n\r\n      if (props.mode !== 'horizontal') {\r\n        if (elRect.top < wrapperRect.top + offset) {\r\n          clientY = elRect.top - wrapperRect.top - offset\r\n        } else if (elRect.bottom > wrapperRect.bottom - offset) {\r\n          clientY = elRect.bottom - wrapperRect.bottom + offset\r\n        }\r\n      }\r\n\r\n      return scrollBy(clientX, clientY, duration)\r\n    }\r\n\r\n    function addScrollListener(listener: EventHandler) {\r\n      emitter.on('scroll', listener)\r\n    }\r\n\r\n    function removeScrollListener(listener: EventHandler) {\r\n      emitter.off('scroll', listener)\r\n    }\r\n\r\n    function renderContent() {\r\n      const Content = (props.scrollTag || 'div') as any\r\n      const children =\r\n        props.observeDeep && slots.default ? renderSlot(slots, 'default', slotParams).children : []\r\n\r\n      return (\r\n        <Content\r\n          {...props.scrollAttrs}\r\n          {...(props.scrollOnly ? attrs : {})}\r\n          ref={contentEl}\r\n          class={wrapperClass.value}\r\n          style={[props.scrollAttrs?.style, props.scrollStyle, props.scrollOnly && style.value]}\r\n          onMousedown={handleMouseDown}\r\n          onWheelPassive={(event: WheelEvent) =>\r\n            handleWheel(event, event.shiftKey ? 'horizontal' : 'vertical')}\r\n          onScroll={handleScroll}\r\n        >\r\n          {slots.extra && (\r\n            <div\r\n              class={nh.be('extra')}\r\n              style={{\r\n                width: willMutate.value ? undefined : `${content.scrollWidth}px`,\r\n                height: willMutate.value ? undefined : `${content.scrollHeight}px`,\r\n              }}\r\n            >\r\n              <div\r\n                class={nh.be('extra-inner')}\r\n                style={{\r\n                  width: `${content.offsetWidth}px`,\r\n                  height: `${content.offsetHeight}px`,\r\n                }}\r\n              >\r\n                {renderSlot(slots, 'extra', slotParams)}\r\n              </div>\r\n            </div>\r\n          )}\r\n          {slots.default &&\r\n            (props.observeDeep\r\n              ? flatVNodes(children).map((vnode, index) => {\r\n                return (\r\n                  <ResizeObserver key={vnode.key ?? index} on-resize={handleResize}>\r\n                    {() => vnode}\r\n                  </ResizeObserver>\r\n                )\r\n              })\r\n              : renderSlot(slots, 'default', slotParams))}\r\n        </Content>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      if (props.scrollOnly) {\r\n        return <ResizeObserver on-resize={handleResize}>{renderContent()}</ResizeObserver>\r\n      }\r\n\r\n      return (\r\n        <div\r\n          {...attrs}\r\n          ref={wrapper}\r\n          class={[className.value, attrs.class]}\r\n          style={[style.value, attrs.style as any]}\r\n        >\r\n          {createSlotRender(slots, ['prefix-trap', 'prefixTrap'])?.()}\r\n          <ResizeObserver on-resize={handleResize}>{renderContent()}</ResizeObserver>\r\n          {props.useXBar && (\r\n            <Scrollbar\r\n              ref={xBar}\r\n              inherit\r\n              placement={'bottom'}\r\n              class={[nh.bem('bar', 'horizontal'), props.barClass]}\r\n              fade={barFade.value}\r\n              bar-length={xBarLength.value}\r\n              disabled={!enableXScroll.value}\r\n              appear={props.appear}\r\n              duration={props.barDuration}\r\n              use-track={props.useBarTrack}\r\n              onScrollStart={() => handleBarScrollStart('horizontal')}\r\n              onScroll={handleXBarScroll}\r\n              onScrollEnd={() => handleBarScrollEnd('horizontal')}\r\n            ></Scrollbar>\r\n          )}\r\n          {props.useYBar && (\r\n            <Scrollbar\r\n              ref={yBar}\r\n              inherit\r\n              placement={'right'}\r\n              class={[nh.bem('bar', 'vertical'), props.barClass]}\r\n              fade={barFade.value}\r\n              bar-length={yBarLength.value}\r\n              disabled={!enableYScroll.value}\r\n              appear={props.appear}\r\n              duration={props.barDuration}\r\n              use-track={props.useBarTrack}\r\n              onScrollStart={() => handleBarScrollStart('vertical')}\r\n              onScroll={handleYBarScroll}\r\n              onScrollEnd={() => handleBarScrollEnd('vertical')}\r\n            ></Scrollbar>\r\n          )}\r\n          {createSlotRender(slots, ['suffix-trap', 'suffixTrap'])?.()}\r\n        </div>\r\n      )\r\n    }\r\n  },\r\n})\r\n","import { eventProp, valueProp, wrapProps } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes } from 'vue'\r\n\r\nexport const optionProps = wrapProps({\r\n  value: valueProp,\r\n  label: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n  disabled: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  divided: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  title: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n  hitting: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  noHover: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  selected: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  onSelect: eventProp(),\r\n})\r\n\r\nexport type OptionProps = ExtractPropTypes<typeof optionProps>\r\n\r\nexport const optionGroupProps = wrapProps({\r\n  label: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n  divided: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n})\r\n\r\nexport type OptionGroupProps = ExtractPropTypes<typeof optionGroupProps>\r\n","<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper } from '@vexip-ui/config'\r\nimport { toAttrValue } from '@vexip-ui/utils'\r\nimport { optionProps } from './props'\r\n\r\ndefineOptions({ name: 'Option' })\r\n\r\nconst props = defineProps(optionProps)\r\n\r\nconst nh = useNameHelper('option')\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('disabled')]: props.disabled,\r\n    [nh.bm('selected')]: !props.disabled && props.selected,\r\n    [nh.bm('divided')]: props.divided,\r\n    [nh.bm('hitting')]: props.hitting,\r\n    [nh.bm('no-hover')]: props.noHover,\r\n  }\r\n})\r\n\r\nfunction handleSelect() {\r\n  if (props.disabled) return\r\n\r\n  emitEvent(props.onSelect!)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <li\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    :title=\"title || undefined\"\r\n    role=\"option\"\r\n    :aria-disabled=\"toAttrValue(disabled)\"\r\n    :aria-selected=\"selected\"\r\n    @click=\"handleSelect\"\r\n  >\r\n    <slot>{{ label || value }}</slot>\r\n  </li>\r\n</template>\r\n","import { booleanProp, booleanStringProp, buildProps, eventProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\n\r\nexport const overflowProps = buildProps({\r\n  items: Array as PropType<any[]>,\r\n  tag: String,\r\n  attrFlag: booleanStringProp,\r\n  static: booleanProp,\r\n  maxCount: Number,\r\n  onRestChange: eventProp<(rest: number) => void>(),\r\n  onToggle: eventProp<(overflow: boolean) => void>(),\r\n})\r\n\r\nexport type OverflowProps = ExtractPropTypes<typeof overflowProps>\r\nexport type OverflowCProps = ConfigurableProps<OverflowProps, 'items'>\r\n","import { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport {\r\n  Fragment,\r\n  computed,\r\n  createTextVNode,\r\n  defineComponent,\r\n  nextTick,\r\n  onMounted,\r\n  ref,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { isDefined } from '@vexip-ui/utils'\r\nimport { overflowProps } from './props'\r\n\r\nconst TEXT_VNODE = createTextVNode('').type\r\n\r\nexport default defineComponent({\r\n  name: 'Overflow',\r\n  inheritAttrs: false,\r\n  props: overflowProps,\r\n  emits: [],\r\n  setup(_props, { attrs, slots, expose }) {\r\n    const props = useProps('overflow', _props, {\r\n      items: {\r\n        default: null,\r\n        static: true,\r\n      },\r\n      tag: 'div',\r\n      attrFlag: false,\r\n      static: false,\r\n      maxCount: 0,\r\n    })\r\n\r\n    const nh = useNameHelper('overflow')\r\n    const restCount = ref(0)\r\n\r\n    const wrapper = ref<HTMLElement>()\r\n    const counter = ref<HTMLElement>()\r\n    const suffix = ref<HTMLElement>()\r\n\r\n    const className = computed(() => {\r\n      return [\r\n        nh.b(),\r\n        nh.bs('vars'),\r\n        {\r\n          [nh.bm('inherit')]: props.inherit,\r\n          [nh.bm('manual')]: props.maxCount > 0,\r\n        },\r\n      ]\r\n    })\r\n    const hiddenFlag = computed(() => {\r\n      return props.attrFlag ? (props.attrFlag === true ? 'hidden' : props.attrFlag) : false\r\n    })\r\n\r\n    watch([() => props.items?.length, () => props.maxCount], () => {\r\n      nextTick(refresh)\r\n    })\r\n\r\n    expose({ refresh })\r\n\r\n    onMounted(refresh)\r\n\r\n    function toggleDisplay(el: HTMLElement, show: boolean) {\r\n      if (hiddenFlag.value) {\r\n        show ? el.removeAttribute(hiddenFlag.value) : el.setAttribute(hiddenFlag.value, '')\r\n      } else {\r\n        if (show) {\r\n          el.style.display = ''\r\n        } else {\r\n          el.style.display = 'none'\r\n        }\r\n      }\r\n    }\r\n\r\n    function computeHorizontalMargin(el: HTMLElement) {\r\n      const style = getComputedStyle(el)\r\n      const marginLeft = parseFloat(style.marginLeft) || 0\r\n      const marginRight = parseFloat(style.marginRight) || 0\r\n\r\n      return marginLeft + marginRight\r\n    }\r\n\r\n    function computeHorizontalPadding(elOrStyle: HTMLElement | CSSStyleDeclaration) {\r\n      const style = elOrStyle instanceof Element ? getComputedStyle(elOrStyle) : elOrStyle\r\n      const paddingLeft = parseFloat(style.paddingLeft) || 0\r\n      const paddingRight = parseFloat(style.paddingRight) || 0\r\n\r\n      return paddingLeft + paddingRight\r\n    }\r\n\r\n    function computeOuterWidth(el: HTMLElement) {\r\n      return el.offsetWidth + computeHorizontalMargin(el)\r\n    }\r\n\r\n    let lastOverflow = false\r\n    let lastRestCount = restCount.value\r\n\r\n    function refresh() {\r\n      const counterEl = counter.value\r\n\r\n      if (!wrapper.value || !counterEl) return\r\n\r\n      toggleDisplay(counterEl, true)\r\n\r\n      const children = wrapper.value.children\r\n      const childCount = children.length\r\n\r\n      let overflow = false\r\n\r\n      if (props.maxCount > 0) {\r\n        for (let i = 0, len = childCount - 1; i < len; ++i) {\r\n          const child = children[i] as HTMLElement\r\n\r\n          child.style.display = i < props.maxCount ? '' : 'none'\r\n        }\r\n\r\n        if (props.maxCount > childCount - 1) {\r\n          toggleDisplay(counterEl, false)\r\n\r\n          restCount.value = 0\r\n        } else {\r\n          restCount.value = childCount - 1 - props.maxCount - (slots.suffix ? 1 : 0)\r\n          overflow = restCount.value > 0\r\n        }\r\n\r\n        postRefresh(overflow)\r\n        return\r\n      }\r\n\r\n      const suffixEl = suffix.value\r\n      const style = getComputedStyle(wrapper.value)\r\n      const wrapperWidth = wrapper.value.offsetWidth - computeHorizontalPadding(style)\r\n      const gap = parseFloat(style.columnGap) || 0\r\n      const childWidths: number[] = []\r\n\r\n      let totalWidth = suffixEl ? suffixEl.offsetWidth + computeHorizontalMargin(suffixEl) + gap : 0\r\n\r\n      const counterMargin = computeHorizontalMargin(counterEl)\r\n      const length = childCount - (suffixEl ? 2 : 1)\r\n\r\n      for (let i = 0; i < length; ++i) {\r\n        if (i < 0) continue\r\n\r\n        const child = children[i] as HTMLElement\r\n\r\n        if (overflow) {\r\n          toggleDisplay(child, false)\r\n          continue\r\n        } else {\r\n          toggleDisplay(child, true)\r\n        }\r\n\r\n        const childWidth = computeOuterWidth(child) + gap\r\n\r\n        totalWidth += childWidth\r\n        childWidths[i] = childWidth\r\n\r\n        if (totalWidth > wrapperWidth) {\r\n          for (let j = i; j >= 0; --j) {\r\n            restCount.value = length - j\r\n            totalWidth -= childWidths[j]\r\n\r\n            if (totalWidth + counterEl.offsetWidth + counterMargin <= wrapperWidth || !j) {\r\n              overflow = true\r\n              i = j - 1\r\n\r\n              if (suffixEl) {\r\n                suffixEl.style.maxWidth =\r\n                  i === -1 ? `${wrapperWidth - counterEl.offsetWidth}px` : ''\r\n              }\r\n\r\n              break\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      postRefresh(overflow)\r\n    }\r\n\r\n    function postRefresh(overflow: boolean) {\r\n      if (lastRestCount !== restCount.value) {\r\n        lastRestCount = restCount.value\r\n        emitEvent(props.onRestChange, restCount.value)\r\n      }\r\n\r\n      counter.value && toggleDisplay(counter.value, overflow)\r\n\r\n      if (overflow !== lastOverflow) {\r\n        lastOverflow = overflow\r\n        emitEvent(props.onToggle, overflow)\r\n      }\r\n    }\r\n\r\n    function syncCounterRef(el?: HTMLElement | null) {\r\n      if (el) {\r\n        counter.value = el.nextElementSibling as HTMLElement | undefined\r\n      } else {\r\n        counter.value = undefined\r\n      }\r\n    }\r\n\r\n    return () => {\r\n      const CustomTag = (props.tag || 'div') as any\r\n      const itemSlot = slots.default\r\n      const staticItem = props.static\r\n      const counterVNode = slots.counter?.({ count: restCount.value })[0] || null\r\n\r\n      const renderCounter = () =>\r\n        counterVNode?.type === TEXT_VNODE ? <span>{counterVNode}</span> : counterVNode\r\n      const render = () => (\r\n        <CustomTag {...attrs} ref={wrapper} class={className.value}>\r\n          {itemSlot && isDefined(props.items)\r\n            ? props.items.map((item, index) => {\r\n              const vnode = itemSlot({ item, index })[0]\r\n\r\n              if (staticItem) {\r\n                vnode.key = index\r\n\r\n                return vnode\r\n              }\r\n\r\n              return (\r\n                <ResizeObserver key={index} onResize={refresh}>\r\n                  {() => vnode}\r\n                </ResizeObserver>\r\n              )\r\n            })\r\n            : itemSlot?.()}\r\n          {counterVNode ? (\r\n            <Fragment ref={syncCounterRef as any}>{renderCounter()}</Fragment>\r\n          ) : (\r\n            <span ref={counter} style={{ display: 'inline-block' }}></span>\r\n          )}\r\n          {slots.suffix ? (\r\n            <ResizeObserver onResize={refresh}>\r\n              <div ref={suffix} class={nh.be('suffix')}>\r\n                {slots.suffix()}\r\n              </div>\r\n            </ResizeObserver>\r\n          ) : null}\r\n        </CustomTag>\r\n      )\r\n\r\n      if (import.meta.env.MODE === 'test') {\r\n        // It is difficult to test ResizeObserver in vitest, so directly rendering all items\r\n        return render()\r\n      }\r\n\r\n      return <ResizeObserver onResize={refresh}>{render()}</ResizeObserver>\r\n    }\r\n  },\r\n})\r\n","<script setup lang=\"ts\">\r\ndefineOptions({ name: 'Portal' })\r\n\r\ndefineProps({\r\n  to: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n})\r\n</script>\r\n\r\n<template>\r\n  <Teleport :to=\"to || 'body'\" :disabled=\"!to\">\r\n    <slot></slot>\r\n  </Teleport>\r\n</template>\r\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\n\r\nexport const popperProps = buildProps({\r\n  visible: booleanProp,\r\n  alive: booleanProp,\r\n  to: String,\r\n  transition: String,\r\n  appear: booleanProp,\r\n  role: String,\r\n  onBeforeEnter: eventProp<(el: Element) => void>(),\r\n  onEnter: eventProp<(el: Element) => void>(),\r\n  onAfterEnter: eventProp<(el: Element) => void>(),\r\n  onEnterCancelled: eventProp<(el: Element) => void>(),\r\n  onBeforeLeave: eventProp<(el: Element) => void>(),\r\n  onLeave: eventProp<(el: Element) => void>(),\r\n  onAfterLeave: eventProp<(el: Element) => void>(),\r\n  onLeaveCancelled: eventProp<(el: Element) => void>(),\r\n})\r\n\r\nexport type PopperProps = ExtractPropTypes<typeof popperProps>\r\nexport type PopperCProps = ConfigurableProps<PopperProps>\r\n","<template>\r\n  <Portal :to=\"props.to\">\r\n    <Transition\r\n      :name=\"props.transition\"\r\n      :appear=\"props.appear\"\r\n      @before-enter=\"emitHookEvent('be', $event)\"\r\n      @enter=\"emitHookEvent('e', $event)\"\r\n      @after-enter=\"emitHookEvent('ae', $event)\"\r\n      @enter-cancelled=\"emitHookEvent('ec', $event)\"\r\n      @before-leave=\"emitHookEvent('bl', $event)\"\r\n      @leave=\"emitHookEvent('l', $event)\"\r\n      @after-leave=\"emitHookEvent('al', $event)\"\r\n      @leave-cancelled=\"emitHookEvent('lc', $event)\"\r\n    >\r\n      <div\r\n        v-if=\"props.alive || props.visible\"\r\n        v-show=\"!props.alive || props.visible\"\r\n        ref=\"wrapper\"\r\n        v-bind=\"$attrs\"\r\n        :class=\"[nh.b(), props.to !== 'body' && nh.bm('inherit')]\"\r\n        :role=\"props.role\"\r\n        :style=\"{ zIndex: props.to && props.visible ? zIndex : undefined }\"\r\n      >\r\n        <slot></slot>\r\n      </div>\r\n    </Transition>\r\n  </Portal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { Portal } from '@/components/portal'\r\n\r\nimport { defineComponent, ref, watch } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\r\nimport { popperProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'Popper',\r\n  components: {\r\n    Portal,\r\n  },\r\n  inheritAttrs: false,\r\n  props: popperProps,\r\n  emits: [],\r\n  setup(_props) {\r\n    const nh = useNameHelper('popper')\r\n    const props = useProps('popper', _props, {\r\n      visible: false,\r\n      alive: false,\r\n      to: '',\r\n      transition: () => nh.ns('drop'),\r\n      appear: false,\r\n      role: 'dialog',\r\n    })\r\n    const getIndex = useZIndex()\r\n\r\n    const zIndex = ref(10)\r\n\r\n    const wrapper = ref<HTMLElement>()\r\n\r\n    watch(\r\n      () => props.visible,\r\n      value => {\r\n        if (props.to && value) {\r\n          zIndex.value = getIndex()\r\n        }\r\n      },\r\n      { immediate: true },\r\n    )\r\n\r\n    function emitHookEvent(name: 'be' | 'e' | 'ae' | 'ec' | 'bl' | 'l' | 'al' | 'lc', el: Element) {\r\n      switch (name) {\r\n        case 'be':\r\n          emitEvent(props.onBeforeEnter, el)\r\n          break\r\n        case 'e':\r\n          emitEvent(props.onEnter, el)\r\n          break\r\n        case 'ae':\r\n          emitEvent(props.onAfterEnter, el)\r\n          break\r\n        case 'ec':\r\n          emitEvent(props.onEnterCancelled, el)\r\n          break\r\n        case 'bl':\r\n          emitEvent(props.onBeforeLeave, el)\r\n          break\r\n        case 'l':\r\n          emitEvent(props.onLeave, el)\r\n          break\r\n        case 'al':\r\n          emitEvent(props.onAfterLeave, el)\r\n          break\r\n        case 'lc':\r\n          emitEvent(props.onLeaveCancelled, el)\r\n          break\r\n      }\r\n    }\r\n\r\n    return {\r\n      nh,\r\n      props,\r\n      zIndex,\r\n\r\n      wrapper,\r\n\r\n      emitHookEvent,\r\n    }\r\n  },\r\n})\r\n</script>\r\n","<template>\r\n  <Portal :to=\"props.to\">\r\n    <Transition\r\n      :name=\"props.transition\"\r\n      :appear=\"props.appear\"\r\n      @before-enter=\"emitHookEvent('be', $event)\"\r\n      @enter=\"emitHookEvent('e', $event)\"\r\n      @after-enter=\"emitHookEvent('ae', $event)\"\r\n      @enter-cancelled=\"emitHookEvent('ec', $event)\"\r\n      @before-leave=\"emitHookEvent('bl', $event)\"\r\n      @leave=\"emitHookEvent('l', $event)\"\r\n      @after-leave=\"emitHookEvent('al', $event)\"\r\n      @leave-cancelled=\"emitHookEvent('lc', $event)\"\r\n    >\r\n      <div\r\n        v-if=\"props.alive || props.visible\"\r\n        v-show=\"!props.alive || props.visible\"\r\n        ref=\"wrapper\"\r\n        v-bind=\"$attrs\"\r\n        :class=\"[nh.b(), props.to !== 'body' && nh.bm('inherit')]\"\r\n        :role=\"props.role\"\r\n        :style=\"{ zIndex: props.to && props.visible ? zIndex : undefined }\"\r\n      >\r\n        <slot></slot>\r\n      </div>\r\n    </Transition>\r\n  </Portal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { Portal } from '@/components/portal'\r\n\r\nimport { defineComponent, ref, watch } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\r\nimport { popperProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'Popper',\r\n  components: {\r\n    Portal,\r\n  },\r\n  inheritAttrs: false,\r\n  props: popperProps,\r\n  emits: [],\r\n  setup(_props) {\r\n    const nh = useNameHelper('popper')\r\n    const props = useProps('popper', _props, {\r\n      visible: false,\r\n      alive: false,\r\n      to: '',\r\n      transition: () => nh.ns('drop'),\r\n      appear: false,\r\n      role: 'dialog',\r\n    })\r\n    const getIndex = useZIndex()\r\n\r\n    const zIndex = ref(10)\r\n\r\n    const wrapper = ref<HTMLElement>()\r\n\r\n    watch(\r\n      () => props.visible,\r\n      value => {\r\n        if (props.to && value) {\r\n          zIndex.value = getIndex()\r\n        }\r\n      },\r\n      { immediate: true },\r\n    )\r\n\r\n    function emitHookEvent(name: 'be' | 'e' | 'ae' | 'ec' | 'bl' | 'l' | 'al' | 'lc', el: Element) {\r\n      switch (name) {\r\n        case 'be':\r\n          emitEvent(props.onBeforeEnter, el)\r\n          break\r\n        case 'e':\r\n          emitEvent(props.onEnter, el)\r\n          break\r\n        case 'ae':\r\n          emitEvent(props.onAfterEnter, el)\r\n          break\r\n        case 'ec':\r\n          emitEvent(props.onEnterCancelled, el)\r\n          break\r\n        case 'bl':\r\n          emitEvent(props.onBeforeLeave, el)\r\n          break\r\n        case 'l':\r\n          emitEvent(props.onLeave, el)\r\n          break\r\n        case 'al':\r\n          emitEvent(props.onAfterLeave, el)\r\n          break\r\n        case 'lc':\r\n          emitEvent(props.onLeaveCancelled, el)\r\n          break\r\n      }\r\n    }\r\n\r\n    return {\r\n      nh,\r\n      props,\r\n      zIndex,\r\n\r\n      wrapper,\r\n\r\n      emitHookEvent,\r\n    }\r\n  },\r\n})\r\n</script>\r\n","import { booleanProp, buildProps, eventProp, sizeProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { TagSlots, TagType } from './symbol'\r\n\r\nexport const tagProps = buildProps({\r\n  size: sizeProp,\r\n  type: String as PropType<TagType>,\r\n  border: booleanProp,\r\n  closable: booleanProp,\r\n  color: String,\r\n  simple: booleanProp,\r\n  circle: booleanProp,\r\n  prefix: [String, Number],\r\n  prefixBg: String,\r\n  prefixColor: String,\r\n  suffix: [String, Number],\r\n  suffixBg: String,\r\n  suffixColor: String,\r\n  disabled: booleanProp,\r\n  slots: Object as PropType<TagSlots>,\r\n  onClose: eventProp(),\r\n})\r\n\r\nexport type TagProps = ExtractPropTypes<typeof tagProps>\r\nexport type TagCProps = ConfigurableProps<TagProps>\r\n","import { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, defineComponent, renderSlot } from 'vue'\r\n\r\nimport { createSizeProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { adjustAlpha, isClient, mixColor, parseColorToRgba } from '@vexip-ui/utils'\r\nimport { tagProps } from './props'\r\n\r\nimport type { TagType } from './symbol'\r\n\r\nconst tagTypes = Object.freeze<TagType[]>([\r\n  'default',\r\n  'primary',\r\n  'info',\r\n  'success',\r\n  'error',\r\n  'warning',\r\n  'lime',\r\n  'pink',\r\n  'magenta',\r\n  'tomato',\r\n  'orange',\r\n  'cyan',\r\n  'navy',\r\n  'gold',\r\n  'purple',\r\n])\r\n\r\nexport default defineComponent({\r\n  name: 'Tag',\r\n  components: {\r\n    Icon,\r\n  },\r\n  props: tagProps,\r\n  emits: [],\r\n  setup(_props, { slots }) {\r\n    const props = useProps('tag', _props, {\r\n      size: createSizeProp(),\r\n      type: {\r\n        default: 'default',\r\n        validator: (value: TagType) => tagTypes.includes(value),\r\n      },\r\n      border: false,\r\n      closable: false,\r\n      color: null,\r\n      simple: false,\r\n      circle: false,\r\n      prefix: '',\r\n      prefixBg: '',\r\n      prefixColor: '',\r\n      suffix: '',\r\n      suffixBg: '',\r\n      suffixColor: '',\r\n      disabled: false,\r\n      slots: () => ({}),\r\n    })\r\n\r\n    const nh = useNameHelper('tag')\r\n    const icons = useIcons()\r\n\r\n    const className = computed(() => {\r\n      return {\r\n        [nh.b()]: true,\r\n        [nh.bs('vars')]: true,\r\n        [nh.bm('inherit')]: props.inherit,\r\n        [nh.bm(props.size)]: props.size !== 'default',\r\n        [nh.bm(props.type)]: props.type !== 'default',\r\n        [nh.bm('border')]: props.border,\r\n        [nh.bm('simple')]: props.simple,\r\n        [nh.bm('circle')]: props.circle,\r\n        [nh.bm('closable')]: props.closable,\r\n        [nh.bm('disabled')]: props.disabled,\r\n      }\r\n    })\r\n    const style = computed(() => {\r\n      if (!props.color) return undefined\r\n\r\n      const rootStyle = isClient ? getComputedStyle(document.documentElement) : null\r\n      const white = parseColorToRgba(rootStyle?.getPropertyValue(nh.nv('color-white')) || '#fff')\r\n      const baseColor = parseColorToRgba(props.color)\r\n      const base = baseColor.toString()\r\n\r\n      return nh.cvm({\r\n        color: 'var(--vxp-color-white)',\r\n        'bg-color': base,\r\n        'b-color': base,\r\n        'close-color': 'var(--vxp-color-white)',\r\n        'd-color': mixColor(white, baseColor, 0.3).toString(),\r\n        ...(props.simple || props.border\r\n          ? {\r\n            color: base,\r\n            'close-color': base,\r\n          }\r\n          : {}),\r\n        ...(props.simple\r\n          ? {\r\n            'bg-color': adjustAlpha(baseColor, 0.2).toString(),\r\n          }\r\n          : {}),\r\n      })\r\n    })\r\n\r\n    function handleClose(event: MouseEvent) {\r\n      if (!props.closable || props.disabled || event.button > 0) {\r\n        return false\r\n      }\r\n\r\n      event.stopPropagation()\r\n      emitEvent(props.onClose)\r\n    }\r\n\r\n    function renderClose() {\r\n      if (!props.closable) return null\r\n\r\n      return (\r\n        <button type={'button'} class={nh.be('close')} onClick={handleClose}>\r\n          <Icon {...icons.value.close} label={'close'}></Icon>\r\n        </button>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      const hasPrefix = !!(props.prefix === 0 || props.prefix || slots.prefix || props.slots.prefix)\r\n      const hasSuffix = !!(props.suffix === 0 || props.suffix || slots.suffix || props.slots.suffix)\r\n\r\n      return (\r\n        <div class={className.value} style={style.value}>\r\n          {hasPrefix ? (\r\n            <span\r\n              class={[nh.be('unit'), nh.be('prefix')]}\r\n              style={{\r\n                color: props.prefixColor,\r\n                backgroundColor: props.prefixBg,\r\n                borderColor: props.prefixBg,\r\n              }}\r\n            >\r\n              {renderSlot(slots, 'prefix', undefined, () => [\r\n                <Renderer renderer={props.slots.prefix}>{props.prefix}</Renderer>,\r\n              ])}\r\n            </span>\r\n          ) : null}\r\n          <span class={[nh.be('unit'), nh.be('content')]}>\r\n            {renderSlot(slots, 'default', undefined, () => [\r\n              <Renderer renderer={props.slots.default}></Renderer>,\r\n            ])}\r\n            {!hasSuffix && renderClose()}\r\n          </span>\r\n          {hasSuffix ? (\r\n            <span\r\n              class={[nh.be('unit'), nh.be('suffix')]}\r\n              style={{\r\n                color: props.suffixColor,\r\n                backgroundColor: props.suffixBg,\r\n                borderColor: props.suffixBg,\r\n              }}\r\n            >\r\n              {renderSlot(slots, 'suffix', undefined, () => [\r\n                <Renderer renderer={props.slots.suffix}>{props.suffix}</Renderer>,\r\n              ])}\r\n              {renderClose()}\r\n            </span>\r\n          ) : null}\r\n        </div>\r\n      )\r\n    }\r\n  },\r\n})\r\n","import {\r\n  booleanProp,\r\n  booleanStringProp,\r\n  buildProps,\r\n  classProp,\r\n  eventProp,\r\n  styleProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { Placement } from '@vexip-ui/hooks'\r\nimport type { TooltipShift, TooltipTrigger, TooltipVirtual } from './symbol'\r\n\r\nexport const tooltipProps = buildProps({\r\n  trigger: [String, Array] as PropType<TooltipTrigger>,\r\n  wrapper: booleanStringProp,\r\n  noArrow: booleanProp,\r\n  transitionName: String,\r\n  visible: booleanProp,\r\n  placement: String as PropType<Placement>,\r\n  outsideClose: booleanProp,\r\n  noHover: booleanProp,\r\n  tipClass: classProp,\r\n  tipStyle: styleProp,\r\n  transfer: booleanStringProp,\r\n  disabled: booleanProp,\r\n  raw: booleanProp,\r\n  delay: [Number, Array] as PropType<number | number[]>,\r\n  tipAlive: booleanProp,\r\n  reverse: booleanProp,\r\n  width: [String, Number] as PropType<number | 'trigger' | 'auto'>,\r\n  virtual: Object as PropType<TooltipVirtual>,\r\n  shift: {\r\n    type: [Boolean, String] as PropType<boolean | TooltipShift>,\r\n    default: null,\r\n  },\r\n  onToggle: eventProp<(visible: boolean) => void>(),\r\n  onTipEnter: eventProp(),\r\n  onTipLeave: eventProp(),\r\n  onClickOutside: eventProp(),\r\n  onOutsideClose: eventProp(),\r\n})\r\n\r\nexport type TooltipProps = ExtractPropTypes<typeof tooltipProps>\r\nexport type TooltipCProps = ConfigurableProps<TooltipProps>\r\n","import { Popper } from '@/components/popper'\r\n\r\nimport {\r\n  Fragment,\r\n  computed,\r\n  createTextVNode,\r\n  defineComponent,\r\n  mergeProps,\r\n  ref,\r\n  renderSlot,\r\n  shallowReadonly,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useHoverDelay, useId, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport {\r\n  placementWhileList,\r\n  useClickOutside,\r\n  useListener,\r\n  usePopper,\r\n  useSetTimeout,\r\n} from '@vexip-ui/hooks'\r\nimport { isElement } from '@vexip-ui/utils'\r\nimport { tooltipProps } from './props'\r\n\r\nimport type { PopperExposed } from '@/components/popper'\r\nimport type { VirtualElement } from '@vexip-ui/hooks'\r\n\r\nconst TEXT_VNODE = createTextVNode('').type\r\n\r\nexport default defineComponent({\r\n  name: 'Tooltip',\r\n  inheritAttrs: true,\r\n  props: tooltipProps,\r\n  emits: ['clickoutside', 'update:visible'],\r\n  setup(_props, { attrs, slots, emit, expose }) {\r\n    const nh = useNameHelper('tooltip')\r\n    const props = useProps('tooltip', _props, {\r\n      trigger: {\r\n        default: 'hover',\r\n        validator: value => {\r\n          return ['hover', 'click', 'focus', 'hover-focus', 'custom'].includes(value)\r\n        },\r\n      },\r\n      wrapper: false,\r\n      noArrow: false,\r\n      transitionName: () => nh.ns('fade'),\r\n      visible: false,\r\n      placement: {\r\n        default: 'top',\r\n        validator: value => placementWhileList.includes(value),\r\n      },\r\n      outsideClose: true,\r\n      noHover: false,\r\n      tipClass: null,\r\n      tipStyle: null,\r\n      transfer: false,\r\n      disabled: false,\r\n      raw: false,\r\n      delay: 250,\r\n      tipAlive: false,\r\n      reverse: false,\r\n      width: 'auto',\r\n      virtual: null,\r\n      shift: false,\r\n    })\r\n\r\n    const tooltipId = useId()\r\n\r\n    const hoverDelay = useHoverDelay()\r\n    const { timer } = useSetTimeout()\r\n\r\n    const placement = toRef(props, 'placement')\r\n    const currentVisible = ref(props.visible)\r\n    const rendering = ref(props.visible)\r\n    const transfer = toRef(props, 'transfer')\r\n    const triggerWidth = ref(100)\r\n\r\n    let hovered = false\r\n    let focused = false\r\n\r\n    const useHover = computed(() => props.trigger === 'hover' || props.trigger === 'hover-focus')\r\n    const useFocus = computed(() => props.trigger === 'focus' || props.trigger === 'hover-focus')\r\n\r\n    const originalTrigger = ref<HTMLElement>()\r\n\r\n    const reference = computed(() => {\r\n      const virtual = (props.virtual as any)?.$el ?? props.virtual\r\n\r\n      if (virtual) {\r\n        if ('getBoundingClientRect' in virtual) {\r\n          return virtual as VirtualElement\r\n        }\r\n\r\n        if ('x' in virtual && 'y' in virtual) {\r\n          return {\r\n            getBoundingClientRect: () => ({\r\n              x: virtual.x,\r\n              y: virtual.y,\r\n              left: virtual.x,\r\n              top: virtual.y,\r\n              width: 0,\r\n              height: 0,\r\n            }),\r\n          } as VirtualElement\r\n        }\r\n      }\r\n\r\n      return originalTrigger.value\r\n    })\r\n    const triggerEl = computed(() => (isElement(reference.value) ? reference.value : null))\r\n    const delay = computed(() => {\r\n      return typeof props.delay === 'number'\r\n        ? new Array<number>(2).fill(Math.max(props.delay, 0))\r\n        : props.delay.map(delay => Math.max(delay, 0))\r\n    })\r\n\r\n    const popper = ref<PopperExposed>()\r\n    const popperEl = computed(() => popper.value?.wrapper)\r\n    const arrow = ref<HTMLElement>()\r\n    const shift = computed<{ mainAxis?: boolean, crossAxis?: boolean }>(() => {\r\n      if (!props.shift) {\r\n        return { mainAxis: false }\r\n      }\r\n\r\n      if (props.shift === true || props.shift === 'both') {\r\n        return { crossAxis: true }\r\n      }\r\n\r\n      return props.shift === 'horizontal' ? { mainAxis: false, crossAxis: true } : {}\r\n    })\r\n    const { transferTo, updatePopper } = usePopper({\r\n      placement,\r\n      transfer,\r\n      arrow,\r\n      reference,\r\n      shift,\r\n      wrapper: originalTrigger,\r\n      popper: popperEl,\r\n    })\r\n\r\n    useClickOutside(handleClickOutside, originalTrigger)\r\n    useClickOutside(() => {\r\n      if (currentVisible.value && !originalTrigger.value) {\r\n        handleClickOutside()\r\n      }\r\n    }, popperEl)\r\n\r\n    const tipStyle = computed(() => {\r\n      if (props.width === 'auto') {\r\n        return props.tipStyle\r\n      }\r\n\r\n      if (props.width === 'trigger') {\r\n        return [{ width: `${triggerWidth.value}px` }, props.tipStyle]\r\n      }\r\n\r\n      return [{ width: `${props.width}px` }, props.tipStyle]\r\n    })\r\n\r\n    const slotParams = shallowReadonly({ toggleVisible, updatePopper })\r\n\r\n    useListener(triggerEl, 'mouseenter', handleTriggerEnter)\r\n    useListener(triggerEl, 'mouseleave', handleTriggerLeave)\r\n    useListener(triggerEl, 'click', handleTriggerClick)\r\n    useListener(triggerEl, 'focus', handleTriggerFocus)\r\n    useListener(triggerEl, 'blur', handleTriggerBlur)\r\n    useListener(popperEl, 'mouseenter', handleTriggerEnter)\r\n    useListener(popperEl, 'mouseleave', handleTriggerLeave)\r\n\r\n    watch(\r\n      () => props.visible,\r\n      value => {\r\n        currentVisible.value = value\r\n\r\n        if (value) {\r\n          rendering.value = true\r\n          updatePopper()\r\n        }\r\n      },\r\n    )\r\n    watch(\r\n      () => props.disabled,\r\n      value => {\r\n        if (value) {\r\n          toggleVisible(false)\r\n        }\r\n      },\r\n    )\r\n\r\n    expose({ rendering, trigger: triggerEl, toggleVisible, updatePopper })\r\n\r\n    function toggleVisible(visible = !currentVisible.value) {\r\n      if (currentVisible.value === visible) return\r\n\r\n      currentVisible.value = visible\r\n\r\n      if (visible) {\r\n        computeTriggerWidth()\r\n        rendering.value = true\r\n        updatePopper()\r\n      }\r\n\r\n      emit('update:visible', visible)\r\n      emitEvent(props.onToggle, visible)\r\n    }\r\n\r\n    function computeTriggerWidth() {\r\n      if (!triggerEl.value) return\r\n\r\n      triggerWidth.value = triggerEl.value.offsetWidth\r\n    }\r\n\r\n    function getActiveState() {\r\n      return (useHover.value && hovered) || (useFocus.value && focused)\r\n    }\r\n\r\n    function handleTriggerEnter() {\r\n      if (props.disabled) return\r\n\r\n      if (useHover.value) {\r\n        clearTimeout(timer.hover)\r\n\r\n        timer.hover = setTimeout(() => {\r\n          hovered = true\r\n          toggleVisible(getActiveState())\r\n        }, delay.value[0] ?? hoverDelay.value)\r\n      }\r\n\r\n      emitEvent(props.onTipEnter)\r\n    }\r\n\r\n    function handleTriggerLeave() {\r\n      if (props.disabled) return\r\n\r\n      if (useHover.value) {\r\n        clearTimeout(timer.hover)\r\n\r\n        timer.hover = setTimeout(() => {\r\n          hovered = false\r\n          toggleVisible(getActiveState())\r\n        }, delay.value[1] ?? hoverDelay.value)\r\n      }\r\n\r\n      emitEvent(props.onTipLeave)\r\n    }\r\n\r\n    function handleTriggerClick() {\r\n      if (props.disabled) return\r\n\r\n      if (props.trigger === 'click') {\r\n        toggleVisible()\r\n      }\r\n    }\r\n\r\n    function handleTriggerFocus() {\r\n      if (props.disabled) return\r\n\r\n      if (useFocus.value) {\r\n        focused = true\r\n        toggleVisible(getActiveState())\r\n      }\r\n    }\r\n\r\n    function handleTriggerBlur() {\r\n      if (props.disabled) return\r\n\r\n      if (useFocus.value) {\r\n        focused = false\r\n        toggleVisible(getActiveState())\r\n      }\r\n    }\r\n\r\n    function handleClickOutside() {\r\n      if (props.disabled) return\r\n\r\n      emitEvent(props.onClickOutside)\r\n\r\n      if (props.outsideClose && props.trigger !== 'custom' && currentVisible.value) {\r\n        toggleVisible(false)\r\n        emitEvent(props.onOutsideClose)\r\n      }\r\n    }\r\n\r\n    function syncTriggerRef(el?: HTMLElement | null) {\r\n      if (el) {\r\n        originalTrigger.value = el.nextElementSibling as HTMLElement | undefined\r\n      } else {\r\n        originalTrigger.value = undefined\r\n      }\r\n    }\r\n\r\n    function syncRendering() {\r\n      rendering.value = currentVisible.value\r\n    }\r\n\r\n    function stopPropagation(event: MouseEvent) {\r\n      event.stopPropagation()\r\n    }\r\n\r\n    return () => {\r\n      const Wrapper = props.wrapper\r\n        ? ((props.wrapper === true ? 'span' : props.wrapper) as any)\r\n        : null\r\n      const triggers = slots.trigger?.(slotParams)\r\n      const triggerVNode = triggers ? triggers[0] : null\r\n\r\n      const renderTrigger = () => {\r\n        if (!triggerVNode) return null\r\n\r\n        if (triggerVNode.type === TEXT_VNODE || triggerVNode.type === Fragment) {\r\n          return Wrapper ? <span>{triggerVNode}</span> : <span {...attrs}>{triggerVNode}</span>\r\n        }\r\n\r\n        if (!Wrapper) {\r\n          triggerVNode.props = mergeProps(triggerVNode.props || {}, attrs, {\r\n            'aria-describedby': tooltipId.value,\r\n          })\r\n        }\r\n\r\n        return triggerVNode\r\n      }\r\n\r\n      return [\r\n        triggerVNode &&\r\n          (Wrapper ? (\r\n            <Wrapper\r\n              {...attrs}\r\n              ref={originalTrigger}\r\n              class={[nh.b(), nh.bs('vars'), props.inherit && nh.bm('inherit')]}\r\n              aria-describedby={tooltipId.value}\r\n            >\r\n              {triggers}\r\n            </Wrapper>\r\n          ) : (\r\n            <Fragment ref={syncTriggerRef as any}>{renderTrigger()}</Fragment>\r\n          )),\r\n        !props.disabled && (props.tipAlive || rendering.value) && (\r\n          <Popper\r\n            ref={popper}\r\n            id={tooltipId.value}\r\n            class={{\r\n              [nh.be('popper')]: true,\r\n              [nh.bs('vars')]: true,\r\n              [nh.bem('popper', props.reverse ? 'dark' : 'light')]: true,\r\n              [nh.bem('popper', 'no-hover')]: props.noHover,\r\n              [nh.bem('popper', 'no-arrow')]: props.noArrow,\r\n            }}\r\n            appear\r\n            visible={currentVisible.value}\r\n            alive={props.tipAlive}\r\n            to={transferTo.value}\r\n            transition={props.transitionName}\r\n            role={'tooltip'}\r\n            tabindex={-1}\r\n            onClick={stopPropagation}\r\n            onAnimationend={syncRendering}\r\n            onTransitionend={syncRendering}\r\n          >\r\n            <div class={[!props.raw && nh.be('tip'), props.tipClass]} style={tipStyle.value}>\r\n              {renderSlot(slots, 'default', slotParams)}\r\n            </div>\r\n            {!props.raw && !props.noArrow && <div ref={arrow} class={nh.be('arrow')}></div>}\r\n          </Popper>\r\n        ),\r\n      ]\r\n    }\r\n  },\r\n})\r\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { ScrollPayload } from './symbol'\r\n\r\nexport const virtualListProps = buildProps({\r\n  items: Array as PropType<Array<Record<string, any>>>,\r\n  itemSize: Number,\r\n  itemFixed: booleanProp,\r\n  idKey: String,\r\n  defaultKeyAt: [Number, String, Symbol],\r\n  bufferSize: Number,\r\n  listTag: String,\r\n  itemsTag: String,\r\n  hideBar: booleanProp,\r\n  lockItems: booleanProp,\r\n  itemsAttrs: Object as PropType<Record<string, any>>,\r\n  autoplay: booleanProp,\r\n  ignoreResize: booleanProp,\r\n  disabled: booleanProp,\r\n  onScroll: eventProp<(payload: ScrollPayload) => void>(),\r\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>(),\r\n})\r\n\r\nexport type VirtualListProps = ExtractPropTypes<typeof virtualListProps>\r\nexport type VirtualListCProps = ConfigurableProps<VirtualListProps, 'items'>\r\n","import { NativeScroll } from '@/components/native-scroll'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport { computed, defineComponent, nextTick, ref, renderSlot, toRefs, watch } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { createSlotRender, useVirtual } from '@vexip-ui/hooks'\r\nimport { virtualListProps } from './props'\r\n\r\nimport type { NativeScrollExposed } from '@/components/native-scroll'\r\nimport type { ScrollPayload } from './symbol'\r\n\r\nexport default defineComponent({\r\n  name: 'VirtualList',\r\n  components: {\r\n    NativeScroll,\r\n    ResizeObserver,\r\n  },\r\n  inheritAttrs: false,\r\n  props: virtualListProps,\r\n  emits: [],\r\n  setup(_props, { slots, attrs, expose }) {\r\n    const props = useProps('virtualList', _props, {\r\n      items: {\r\n        default: () => [],\r\n        static: true,\r\n      },\r\n      itemSize: 36,\r\n      itemFixed: false,\r\n      idKey: 'id',\r\n      defaultKeyAt: null,\r\n      bufferSize: 5,\r\n      listTag: 'div',\r\n      itemsTag: 'ul',\r\n      itemsAttrs: null,\r\n      hideBar: false,\r\n      lockItems: false,\r\n      autoplay: false,\r\n      ignoreResize: false,\r\n      disabled: false,\r\n    })\r\n\r\n    const nh = useNameHelper('virtual-list')\r\n\r\n    const { items, itemSize, itemFixed, idKey, bufferSize } = toRefs(props)\r\n\r\n    const scroll = ref<NativeScrollExposed>()\r\n    const list = ref<HTMLElement>()\r\n    const wrapper = computed(() => scroll.value?.content)\r\n\r\n    const {\r\n      indexMap,\r\n      heightTree,\r\n      scrollOffset,\r\n      visibleItems,\r\n      listStyle,\r\n      itemsStyle,\r\n      handleScroll,\r\n      handleResize,\r\n      handleItemResize,\r\n      scrollTo,\r\n      scrollBy,\r\n      scrollToKey,\r\n      scrollToIndex,\r\n      ensureIndexInView,\r\n      ensureKeyInView,\r\n    } = useVirtual({\r\n      items,\r\n      itemSize,\r\n      itemFixed,\r\n      idKey,\r\n      bufferSize,\r\n      wrapper,\r\n      defaultKeyAt: props.defaultKeyAt,\r\n      autoResize: false,\r\n    })\r\n\r\n    expose({\r\n      scroll,\r\n      wrapper,\r\n      list,\r\n      indexMap,\r\n      heightTree,\r\n      scrollOffset,\r\n      scrollTo,\r\n      scrollBy,\r\n      scrollToKey,\r\n      scrollToIndex,\r\n      ensureIndexInView,\r\n      ensureKeyInView,\r\n      refresh,\r\n    })\r\n\r\n    watch(\r\n      () => props.items.length,\r\n      () => {\r\n        nextTick(refresh)\r\n      },\r\n    )\r\n\r\n    const className = computed(() => {\r\n      return [\r\n        nh.b(),\r\n        props.inherit && nh.bm('inherit'),\r\n        props.disabled && nh.bm('disabled'),\r\n        attrs.class,\r\n      ]\r\n    })\r\n\r\n    function onScroll(payload: ScrollPayload) {\r\n      handleScroll()\r\n      emitEvent(props.onScroll, payload)\r\n    }\r\n\r\n    function onResize(entry: ResizeObserverEntry) {\r\n      if (props.ignoreResize) return\r\n\r\n      handleResize(entry)\r\n      emitEvent(props.onResize, entry)\r\n    }\r\n\r\n    function onItemResize(key: number | string | symbol, entry: ResizeObserverEntry) {\r\n      if (!props.lockItems && !props.ignoreResize) {\r\n        handleItemResize(key, entry)\r\n      }\r\n    }\r\n\r\n    async function refresh() {\r\n      await scroll.value?.refresh()\r\n      handleScroll()\r\n    }\r\n\r\n    function renderList(items: Record<string, any>[]) {\r\n      const keyField = props.idKey\r\n      const itemFixed = props.itemFixed\r\n      const keyIndexMap = indexMap.value\r\n      const { class: itemsClass, style: itemsOtherStyle, ...itemsAttrs } = props.itemsAttrs || {}\r\n\r\n      const ListTag = (props.listTag || 'div') as any\r\n      const ItemsTag = (props.itemsTag || 'ul') as any\r\n\r\n      return (\r\n        <ResizeObserver onResize={refresh}>\r\n          <ListTag ref={list} class={nh.be('list')} style={listStyle.value}>\r\n            <ItemsTag\r\n              {...itemsAttrs}\r\n              class={[nh.be('items'), itemsClass]}\r\n              style={[itemsStyle.value, itemsOtherStyle]}\r\n            >\r\n              {slots.default && props.items.length\r\n                ? items.map(item => {\r\n                  const key = item[keyField]\r\n                  const index = keyIndexMap.get(key)\r\n                  const vnode = renderSlot(slots, 'default', { item, index })\r\n\r\n                  if (itemFixed) {\r\n                    vnode.key = key\r\n\r\n                    return vnode\r\n                  }\r\n\r\n                  const onResize = onItemResize.bind(null, key)\r\n\r\n                  return (\r\n                    <ResizeObserver key={key} onResize={onResize}>\r\n                      {() => vnode}\r\n                    </ResizeObserver>\r\n                  )\r\n                })\r\n                : renderSlot(slots, 'empty')}\r\n            </ItemsTag>\r\n          </ListTag>\r\n        </ResizeObserver>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      let renderingItems = visibleItems.value\r\n\r\n      if (import.meta.env.MODE === 'test') {\r\n        // It is difficult to test ResizeObserver in vitest, so directly rendering all items\r\n        renderingItems = props.items\r\n      }\r\n\r\n      return (\r\n        <NativeScroll\r\n          {...attrs}\r\n          ref={scroll}\r\n          class={className.value}\r\n          inherit={props.inherit}\r\n          use-y-bar={!props.hideBar}\r\n          scroll-y={scrollOffset.value}\r\n          autoplay={props.autoplay}\r\n          onScroll={onScroll}\r\n          onResize={onResize}\r\n        >\r\n          {{\r\n            default: () => {\r\n              if (props.disabled) {\r\n                return slots.default && props.items.length\r\n                  ? props.items.map((item, index) => {\r\n                    const key = item[props.idKey]\r\n                    const vnode = renderSlot(slots, 'default', { item, index })\r\n\r\n                    vnode.key = key\r\n\r\n                    return vnode\r\n                  })\r\n                  : renderSlot(slots, 'empty')\r\n              }\r\n\r\n              return renderList(renderingItems)\r\n            },\r\n            prefixTrap: createSlotRender(slots, ['prefix-trap', 'prefixTrap']),\r\n            suffixTrap: createSlotRender(slots, ['suffix-trap', 'suffixTrap']),\r\n          }}\r\n        </NativeScroll>\r\n      )\r\n    }\r\n  },\r\n})\r\n","import {\r\n  booleanNumberProp,\r\n  booleanProp,\r\n  booleanStringProp,\r\n  buildProps,\r\n  classProp,\r\n  eventProp,\r\n  iconProp,\r\n  localeProp,\r\n  sizeProp,\r\n  stateProp,\r\n  valuesProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\r\nimport type { Placement } from '@vexip-ui/hooks'\r\nimport type { TagType } from '@/components/tag'\r\nimport type {\r\n  ChangeEvent,\r\n  SelectBaseValue,\r\n  SelectEvent,\r\n  SelectFilter,\r\n  SelectFilterPosition,\r\n  SelectKeyConfig,\r\n  SelectRawOption,\r\n  SelectSlots,\r\n} from './symbol'\r\n\r\ntype CustomChangeEvent =\r\n  | ChangeEvent\r\n  | ((value: SelectBaseValue, data: any) => void)\r\n  | ((value: string, data: any) => void)\r\n  | ((value: number, data: any) => void)\r\n  | ((value: boolean, data: any) => void)\r\n  | ((values: SelectBaseValue[], data: any[]) => void)\r\n  | ((values: string[], data: any[]) => void)\r\n  | ((values: number[], data: any[]) => void)\r\n  | ((value: boolean[], data: any) => void)\r\n\r\nexport const selectProps = buildProps({\r\n  size: sizeProp,\r\n  state: stateProp,\r\n  locale: localeProp('select'),\r\n  visible: booleanProp,\r\n  options: Array as PropType<SelectRawOption[]>,\r\n  disabled: booleanProp,\r\n  transitionName: String,\r\n  outsideClose: booleanProp,\r\n  placeholder: String,\r\n  prefix: iconProp,\r\n  prefixColor: String,\r\n  suffix: iconProp,\r\n  suffixColor: String,\r\n  noSuffix: booleanProp,\r\n  value: valuesProp,\r\n  multiple: booleanProp,\r\n  clearable: booleanProp,\r\n  maxListHeight: Number,\r\n  listClass: classProp,\r\n  placement: String as PropType<Placement>,\r\n  transfer: booleanStringProp,\r\n  optionCheck: booleanProp,\r\n  emptyText: String,\r\n  staticSuffix: booleanProp,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingLock: booleanProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  keyConfig: Object as PropType<SelectKeyConfig>,\r\n  filter: {\r\n    type: [Boolean, Function] as PropType<boolean | SelectFilter>,\r\n    default: null,\r\n  },\r\n  ignoreCase: booleanProp,\r\n  creatable: booleanProp,\r\n  transparent: booleanProp,\r\n  maxTagCount: Number,\r\n  noRestTip: booleanProp,\r\n  tagType: String as PropType<TagType>,\r\n  noPreview: booleanProp,\r\n  remote: booleanProp,\r\n  fitPopper: booleanNumberProp,\r\n  name: String,\r\n  popperAlive: booleanProp,\r\n  countLimit: Number,\r\n  filterPosition: String as PropType<SelectFilterPosition>,\r\n  slots: Object as PropType<SelectSlots>,\r\n  shift: booleanProp,\r\n  onFocus: eventProp<(event: FocusEvent) => void>(),\r\n  onBlur: eventProp<(event: FocusEvent) => void>(),\r\n  onToggle: eventProp<(visible: boolean) => void>(),\r\n  onSelect: eventProp<EventListener<SelectEvent>>(),\r\n  onCancel: eventProp<EventListener<SelectEvent>>(),\r\n  onChange: eventProp<CustomChangeEvent>(),\r\n  onClickOutside: eventProp(),\r\n  onOutsideClose: eventProp(),\r\n  onClear: eventProp(),\r\n  onFilterInput: eventProp<(value: string) => void>(),\r\n})\r\n\r\nexport type SelectProps = ExtractPropTypes<typeof selectProps>\r\nexport type SelectCProps = ConfigurableProps<SelectProps>\r\n","import type { OptionKeyConfig, OptionState, RawOption } from '@/components/option'\r\n\r\nexport interface SelectKeyConfig extends OptionKeyConfig {\r\n  group?: string,\r\n  children?: string,\r\n}\r\n\r\nexport type SelectRawOption = RawOption\r\nexport type SelectBaseValue = string | number | boolean\r\nexport type SelectValue = SelectBaseValue | SelectBaseValue[] | null\r\n\r\nexport interface SelectOptionState extends OptionState {\r\n  group: boolean,\r\n  depth: number,\r\n  parent: SelectOptionState | null,\r\n  data: SelectRawOption,\r\n}\r\n\r\nexport type SelectFilter = (value: string, option: SelectOptionState) => boolean\r\n\r\nexport type SelectFilterPosition = 'in-control' | 'in-list'\r\n\r\nexport type SelectEvent = (value: SelectBaseValue, data: any) => void\r\nexport type ChangeEvent = (value: SelectValue, data: any | any[]) => void\r\n\r\nexport interface SelectListSlotParams {\r\n  options: SelectOptionState[],\r\n  isSelected: (option: SelectOptionState) => boolean,\r\n  handleSelect: (option?: SelectOptionState | null) => void,\r\n}\r\n\r\nexport interface SelectSlots {\r\n  selected?: (params: {\r\n    value: SelectBaseValue,\r\n    option: SelectOptionState | null,\r\n    preview?: boolean,\r\n  }) => any,\r\n  prefix?: () => any,\r\n  suffix?: () => any,\r\n  control?: () => any,\r\n  tag?: (params: {\r\n    value: SelectBaseValue,\r\n    option: SelectOptionState | null,\r\n    handleClose: () => void,\r\n  }) => any,\r\n  restTag?: (params: { restCount: number }) => any,\r\n  list?: (params: SelectListSlotParams) => any,\r\n  prepend?: () => any,\r\n  append?: () => any,\r\n  /**\r\n   * Option content slot.\r\n   */\r\n  default?: (params: { option: SelectOptionState, index: number, selected: boolean }) => any,\r\n  group?: (params: { option: SelectOptionState, index: number }) => any,\r\n  empty?: () => any,\r\n}\r\n\r\nexport const defaultKeyConfig: Required<SelectKeyConfig> = Object.freeze({\r\n  value: 'value',\r\n  label: 'label',\r\n  disabled: 'disabled',\r\n  divided: 'divided',\r\n  title: 'title',\r\n  group: 'group',\r\n  children: 'children',\r\n})\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Input } from '@/components/input'\r\nimport { NativeScroll } from '@/components/native-scroll'\r\nimport { Option } from '@/components/option'\r\nimport { Overflow } from '@/components/overflow'\r\nimport { Popper } from '@/components/popper'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { Tag } from '@/components/tag'\r\nimport { Tooltip } from '@/components/tooltip'\r\nimport { VirtualList } from '@/components/virtual-list'\r\nimport { useFieldStore } from '@/components/form'\r\n\r\nimport { computed, nextTick, onMounted, reactive, ref, toRef, watch, watchEffect } from 'vue'\r\n\r\nimport {\r\n  placementWhileList,\r\n  useClickOutside,\r\n  useHover,\r\n  useModifier,\r\n  useMounted,\r\n  usePopper,\r\n} from '@vexip-ui/hooks'\r\nimport {\r\n  createIconProp,\r\n  createSizeProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport {\r\n  decide,\r\n  getLast,\r\n  getRangeWidth,\r\n  isNull,\r\n  removeArrayItem,\r\n  toAttrValue,\r\n} from '@vexip-ui/utils'\r\nimport { selectProps } from './props'\r\nimport { defaultKeyConfig } from './symbol'\r\n\r\nimport type { InputExposed } from '@/components/input'\r\nimport type { PopperExposed } from '@/components/popper'\r\nimport type { TooltipExposed } from '@/components/tooltip'\r\nimport type { VirtualListExposed } from '@/components/virtual-list'\r\nimport type {\r\n  ChangeEvent,\r\n  SelectBaseValue,\r\n  SelectEvent,\r\n  SelectOptionState,\r\n  SelectSlots,\r\n  SelectValue,\r\n} from './symbol'\r\n\r\nfunction isSameValue(newValue: SelectValue, oldValue: SelectValue) {\r\n  const isNewArray = Array.isArray(newValue)\r\n  const isOldArray = Array.isArray(oldValue)\r\n\r\n  if (isNewArray !== isOldArray) return false\r\n\r\n  if (isNewArray && isOldArray) {\r\n    if (newValue.length !== oldValue.length) return false\r\n\r\n    for (let i = 0, len = newValue.length; i < len; ++i) {\r\n      if (newValue[i] !== oldValue[i]) return false\r\n    }\r\n\r\n    return true\r\n  }\r\n\r\n  if (isNull(newValue)) return isNull(oldValue)\r\n\r\n  return newValue === oldValue\r\n}\r\n\r\ndefineOptions({ name: 'Select' })\r\n\r\nconst {\r\n  idFor,\r\n  labelId,\r\n  state,\r\n  disabled,\r\n  loading,\r\n  size,\r\n  validateField,\r\n  clearField,\r\n  getFieldValue,\r\n  setFieldValue,\r\n} = useFieldStore<SelectValue>(focus)\r\n\r\nconst nh = useNameHelper('select')\r\n\r\nconst _props = defineProps(selectProps)\r\nconst props = useProps('select', _props, {\r\n  size: createSizeProp(size),\r\n  state: createStateProp(state),\r\n  locale: null,\r\n  visible: {\r\n    default: false,\r\n    static: true,\r\n  },\r\n  options: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  disabled: () => disabled.value,\r\n  transitionName: () => nh.ns('drop'),\r\n  outsideClose: true,\r\n  placeholder: null,\r\n  prefix: createIconProp(),\r\n  prefixColor: '',\r\n  suffix: createIconProp(),\r\n  suffixColor: '',\r\n  noSuffix: false,\r\n  value: {\r\n    default: () => getFieldValue()!,\r\n    static: true,\r\n  },\r\n  multiple: false,\r\n  clearable: false,\r\n  maxListHeight: 300,\r\n  listClass: null,\r\n  placement: {\r\n    default: 'bottom',\r\n    validator: value => placementWhileList.includes(value),\r\n  },\r\n  transfer: false,\r\n  optionCheck: false,\r\n  emptyText: null,\r\n  staticSuffix: false,\r\n  loading: () => loading.value,\r\n  loadingIcon: createIconProp(),\r\n  loadingLock: false,\r\n  loadingEffect: null,\r\n  keyConfig: () => ({}),\r\n  filter: false,\r\n  ignoreCase: false,\r\n  creatable: false,\r\n  transparent: false,\r\n  maxTagCount: 0,\r\n  noRestTip: false,\r\n  tagType: null,\r\n  noPreview: false,\r\n  remote: false,\r\n  fitPopper: false,\r\n  name: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  popperAlive: null,\r\n  countLimit: 0,\r\n  filterPosition: 'in-control',\r\n  slots: () => ({}),\r\n  shift: true,\r\n})\r\n\r\nconst emit = defineEmits(['update:value', 'update:visible', 'update:label'])\r\n\r\nconst slots = defineSlots<SelectSlots>()\r\n\r\nconst locale = useLocale('select', toRef(props, 'locale'))\r\nconst icons = useIcons()\r\n\r\nconst currentVisible = ref(props.visible)\r\nconst currentLabels = ref<string[]>([])\r\nconst currentValues = ref<SelectBaseValue[]>([])\r\nconst currentIndex = ref(-1)\r\nconst placement = toRef(props, 'placement')\r\nconst transfer = toRef(props, 'transfer')\r\n// const listHeight = ref<string>()\r\nconst baseOptions = ref<SelectOptionState[]>([])\r\nconst currentFilter = ref('')\r\nconst anchorWidth = ref(0)\r\nconst userOptions = ref<SelectOptionState[]>([])\r\nconst restTagCount = ref(0)\r\nconst restTipShow = ref(false)\r\nconst composing = ref(false)\r\n\r\nconst { isMounted } = useMounted()\r\n\r\nconst dynamicOption = reactive<SelectOptionState>({\r\n  disabled: false,\r\n  divided: false,\r\n  title: '',\r\n  value: '',\r\n  label: '',\r\n  group: false,\r\n  depth: 0,\r\n  parent: null,\r\n  hidden: false,\r\n  hitting: true,\r\n  data: '',\r\n})\r\n\r\nconst optionValues = reactive(new Set<string | number>())\r\nconst hittingOption = ref<SelectOptionState>()\r\nconst optionStates = computed(() => userOptions.value.concat(baseOptions.value))\r\nconst visibleOptions = computed(() => optionStates.value.filter(state => !state.hidden))\r\n\r\nconst keyConfig = computed(() => ({ ...defaultKeyConfig, ...props.keyConfig }))\r\n\r\nconst wrapper = useClickOutside(handleClickOutside)\r\nconst nativeInput = ref<HTMLInputElement>()\r\nconst filterInput = ref<InputExposed>()\r\nconst device = ref<HTMLElement>()\r\nconst virtualList = ref<VirtualListExposed>()\r\nconst popper = ref<PopperExposed>()\r\nconst restTip = ref<TooltipExposed>()\r\n\r\nconst input = computed(() => filterInput.value?.input ?? nativeInput.value)\r\n\r\nconst { reference, transferTo, updatePopper } = usePopper({\r\n  placement,\r\n  transfer,\r\n  wrapper,\r\n  popper: computed(() => popper.value?.wrapper),\r\n  isDrop: true,\r\n  shift: toRef(props, 'shift'),\r\n})\r\nconst { isHover } = useHover(reference)\r\n\r\nconst cachedSelected = reactive(new Map<SelectBaseValue, SelectOptionState>())\r\nconst optionValueMap = ref(new Map<SelectBaseValue, SelectOptionState>())\r\n\r\nlet emittedValue: typeof props.value | null = props.value\r\n\r\nconst updateTrigger = ref(0)\r\n\r\nwatchEffect(() => {\r\n  /* eslint-disable @typescript-eslint/no-unused-expressions */\r\n  props.keyConfig.value\r\n  props.keyConfig.label\r\n  props.keyConfig.disabled\r\n  props.keyConfig.divided\r\n  props.keyConfig.title\r\n  props.keyConfig.group\r\n  props.keyConfig.children\r\n\r\n  // If we only read the `props.options`, when user use Array native methods to\r\n  // change options, Vue will not trigger the watch callback\r\n  for (let i = 0, len = props.options.length; i < len; ++i) {\r\n    props.options[i]\r\n  }\r\n  /* eslint-enable */\r\n\r\n  updateTrigger.value++\r\n})\r\n\r\nwatch(updateTrigger, initOptionState, { immediate: true })\r\n\r\nfunction initOptionState() {\r\n  const {\r\n    value: valueKey,\r\n    label: labelKey,\r\n    disabled: disabledKey,\r\n    divided: dividedKey,\r\n    title: titleKey,\r\n    group: groupKey,\r\n    children: childrenKey,\r\n  } = keyConfig.value\r\n  const oldMap = optionValueMap.value\r\n  const map = new Map<string | number, SelectOptionState>()\r\n  const states: SelectOptionState[] = []\r\n  const loop = props.options\r\n    .map(option => ({ option, depth: 0, parent: null as SelectOptionState | null }))\r\n    .reverse()\r\n\r\n  optionValues.clear()\r\n\r\n  for (const option of userOptions.value) {\r\n    map.set(option.value, option)\r\n    optionValues.add(option.value)\r\n  }\r\n\r\n  while (loop.length) {\r\n    const { option, depth, parent } = loop.pop()!\r\n    const rawOption = typeof option === 'string' ? { [valueKey]: option } : option\r\n    const group = !!rawOption[groupKey]\r\n    const value = rawOption[valueKey]\r\n\r\n    if (!group && isNull(value)) continue\r\n\r\n    const label = rawOption[labelKey] || String(value)\r\n    const {\r\n      [disabledKey]: disabled = false,\r\n      [dividedKey]: divided = false,\r\n      [titleKey]: title = '',\r\n      [childrenKey]: children = null,\r\n    } = rawOption\r\n    const oldState = oldMap.get(rawOption.value)\r\n    const optionState = reactive({\r\n      disabled,\r\n      divided,\r\n      title,\r\n      value,\r\n      label,\r\n      group,\r\n      depth,\r\n      parent,\r\n      hidden: oldState?.hidden ?? false,\r\n      hitting: oldState?.hitting ?? false,\r\n      data: option,\r\n    }) as SelectOptionState\r\n\r\n    states.push(optionState)\r\n\r\n    if (!group) {\r\n      map.set(value, optionState)\r\n      optionValues.add(String(value))\r\n    }\r\n\r\n    if (Array.isArray(children) && children.length) {\r\n      loop.push(\r\n        ...children\r\n          .map(child => {\r\n            return { option: child, depth: depth + 1, parent: optionState }\r\n          })\r\n          .reverse(),\r\n      )\r\n    }\r\n  }\r\n\r\n  optionValueMap.value = map\r\n  baseOptions.value = states\r\n\r\n  initValueAndLabel(emittedValue)\r\n}\r\n\r\nuseModifier({\r\n  target: wrapper,\r\n  passive: false,\r\n  onKeyDown: (event, modifier) => {\r\n    if (composing.value) {\r\n      event.stopPropagation()\r\n      return\r\n    }\r\n\r\n    if (!currentVisible.value) {\r\n      if (modifier.space || modifier.enter) {\r\n        event.preventDefault()\r\n        event.stopPropagation()\r\n        toggleVisible()\r\n      }\r\n\r\n      return\r\n    }\r\n\r\n    if (modifier.tab || modifier.escape) {\r\n      setVisible(false)\r\n      modifier.resetAll()\r\n\r\n      return\r\n    }\r\n\r\n    decide(\r\n      [\r\n        [\r\n          () => modifier.up || modifier.down,\r\n          () => {\r\n            const options = visibleOptions.value\r\n            const length = options.length\r\n\r\n            if (!length) return\r\n\r\n            const step = modifier.down ? 1 : -1\r\n\r\n            let index = (Math.max(-1, currentIndex.value + step) + length) % length\r\n            let option = options[index]\r\n\r\n            for (let i = 0; (option.disabled || option.group) && i < length; ++i) {\r\n              index += step\r\n              index = (index + length) % length\r\n              option = options[index]\r\n            }\r\n\r\n            updateHitting(index)\r\n          },\r\n        ],\r\n        [\r\n          () => modifier.enter || (!props.filter && modifier.space),\r\n          () => {\r\n            if (currentIndex.value >= 0) {\r\n              handleSelect(totalOptions.value[currentIndex.value])\r\n            } else if (showDynamic.value) {\r\n              handleSelect(dynamicOption)\r\n            } else {\r\n              setVisible(false)\r\n            }\r\n          },\r\n        ],\r\n      ],\r\n      {\r\n        beforeMatchAny: () => {\r\n          event.preventDefault()\r\n          event.stopPropagation()\r\n        },\r\n        afterMatchAny: modifier.resetAll,\r\n      },\r\n    )\r\n  },\r\n})\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.ns('input-vars')]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm('multiple')]: props.multiple,\r\n    [nh.bm('filter')]: props.filter,\r\n    [nh.bm('responsive')]: props.multiple && props.maxTagCount <= 0,\r\n    [nh.bm('disabled')]: props.disabled,\r\n  }\r\n})\r\nconst readonly = computed(() => props.loading && props.loadingLock)\r\nconst selectorClass = computed(() => {\r\n  const baseCls = nh.be('selector')\r\n\r\n  return {\r\n    [baseCls]: true,\r\n    [`${baseCls}--focused`]: !props.disabled && currentVisible.value,\r\n    [`${baseCls}--disabled`]: props.disabled,\r\n    [`${baseCls}--readonly`]: readonly.value,\r\n    [`${baseCls}--loading`]: props.loading,\r\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\r\n    [`${baseCls}--${props.state}`]: props.state !== 'default',\r\n    [`${baseCls}--has-prefix`]: hasPrefix.value,\r\n    [`${baseCls}--has-suffix`]: !props.noSuffix,\r\n    [`${baseCls}--transparent`]: props.transparent,\r\n  }\r\n})\r\nconst hasValue = computed(\r\n  () => !isNull(currentValues.value[0]) && (props.multiple || currentValues.value[0] !== ''),\r\n)\r\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\r\nconst showDynamic = computed(() => {\r\n  return !!(\r\n    props.filter &&\r\n    props.creatable &&\r\n    dynamicOption.value &&\r\n    !optionValues.has(dynamicOption.value)\r\n  )\r\n})\r\nconst totalOptions = computed(() => {\r\n  return showDynamic.value ? [dynamicOption].concat(visibleOptions.value) : visibleOptions.value\r\n})\r\nconst normalOptions = computed(() => optionStates.value.filter(option => !option.group))\r\nconst optionParentMap = computed(() => {\r\n  const options = normalOptions.value\r\n  const map = new Map<string | number, SelectOptionState>()\r\n\r\n  for (let i = 0, len = options.length; i < len; ++i) {\r\n    const option = options[i]\r\n\r\n    if (option.parent) {\r\n      map.set(option.value, option.parent)\r\n    }\r\n  }\r\n\r\n  return map\r\n})\r\nconst showClear = computed(() => {\r\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && hasValue.value\r\n})\r\nconst previewOption = computed(() => {\r\n  return !props.noPreview && currentVisible.value ? hittingOption.value : undefined\r\n})\r\nconst limited = computed(() => {\r\n  return props.multiple && props.countLimit > 0 && currentValues.value.length >= props.countLimit\r\n})\r\nconst showPlaceholder = computed(() => {\r\n  if (props.filterPosition !== 'in-control') {\r\n    return (\r\n      !hasValue.value && !previewOption.value && !!(props.placeholder ?? locale.value.placeholder)\r\n    )\r\n  }\r\n\r\n  // 采用反推，出现下列情况时不显示：\r\n  // 1. 开始组合（如输入了任意拼音）\r\n  // 2. 有值且 未开预览/多选模式/未打开列表\r\n  // 3. 没有预览选项且没有合法的占位值\r\n  // 4. 打开列表且输入了过滤值\r\n  return (\r\n    !composing.value &&\r\n    !(hasValue.value && (props.noPreview || props.multiple || !currentVisible.value)) &&\r\n    !(!previewOption.value && !(props.placeholder ?? locale.value.placeholder)) &&\r\n    !(currentVisible.value && currentFilter.value)\r\n  )\r\n})\r\n\r\nfunction getOptionFromMap(value?: SelectBaseValue | null) {\r\n  if (isNull(value)) return null\r\n\r\n  return optionValueMap.value.get(value) ?? cachedSelected.get(value) ?? null\r\n}\r\n\r\nfunction fitPopperWidth() {\r\n  requestAnimationFrame(() => {\r\n    updatePopper()\r\n\r\n    if (wrapper.value && popper.value?.wrapper) {\r\n      if (typeof props.fitPopper === 'number') {\r\n        popper.value.wrapper.style.width = `${props.fitPopper}px`\r\n      } else if (props.fitPopper) {\r\n        popper.value.wrapper.style.width = `${wrapper.value.offsetWidth}px`\r\n      } else {\r\n        popper.value.wrapper.style.minWidth = `${wrapper.value.offsetWidth}px`\r\n      }\r\n    }\r\n  })\r\n}\r\n\r\nwatch(\r\n  () => props.visible,\r\n  value => {\r\n    currentVisible.value = value\r\n  },\r\n)\r\nwatch(currentVisible, value => {\r\n  if (value) {\r\n    restTipShow.value = false\r\n    initHittingIndex()\r\n    fitPopperWidth()\r\n  }\r\n\r\n  if (props.filterPosition !== 'in-control') {\r\n    requestAnimationFrame(syncInputValue)\r\n  } else {\r\n    syncInputValue()\r\n  }\r\n})\r\nwatch(\r\n  () => props.value,\r\n  value => {\r\n    if (!emittedValue || !isSameValue(value, emittedValue)) {\r\n      emittedValue = value\r\n      initValueAndLabel(value)\r\n      syncInputValue()\r\n    }\r\n  },\r\n)\r\nwatch(\r\n  () => props.disabled,\r\n  value => {\r\n    if (value) {\r\n      setVisible(false)\r\n    }\r\n  },\r\n)\r\nwatch(readonly, value => {\r\n  if (value) {\r\n    setVisible(false)\r\n  }\r\n})\r\nwatch(currentFilter, value => {\r\n  dynamicOption.value = value\r\n  dynamicOption.label = value\r\n  dynamicOption.data = value\r\n\r\n  filterOptions(value)\r\n})\r\n\r\ndefineExpose({\r\n  idFor,\r\n  labelId,\r\n  currentVisible,\r\n  currentValues,\r\n  currentLabels,\r\n  optionStates,\r\n  isHover,\r\n  currentFilter,\r\n  composing,\r\n  visibleOptions,\r\n  totalOptions,\r\n\r\n  wrapper,\r\n  reference,\r\n  popper,\r\n  input,\r\n  device,\r\n  virtualList,\r\n  restTip,\r\n\r\n  updatePopper,\r\n  isSelected,\r\n  getOptionFromMap,\r\n  updateHitting,\r\n  handleClear,\r\n  focus,\r\n  blur: () => {\r\n    input.value?.blur()\r\n    reference.value?.blur()\r\n  },\r\n})\r\n\r\nonMounted(() => {\r\n  syncInputValue()\r\n\r\n  if (props.visible) {\r\n    restTipShow.value = false\r\n    initHittingIndex()\r\n    fitPopperWidth()\r\n  }\r\n})\r\n\r\nfunction initValueAndLabel(value: SelectValue | null) {\r\n  if (isNull(value)) {\r\n    currentValues.value = []\r\n    currentLabels.value = []\r\n    return\r\n  }\r\n\r\n  const normalizedValue = !Array.isArray(value) ? [value] : value\r\n\r\n  const valueSet = new Set(normalizedValue)\r\n  const selectedValues: SelectBaseValue[] = []\r\n  const selectedLabels: string[] = []\r\n\r\n  valueSet.forEach(value => {\r\n    let option = getOptionFromMap(value)\r\n\r\n    if (option) {\r\n      selectedValues.push(option.value)\r\n      selectedLabels.push(option.label)\r\n\r\n      if (!cachedSelected.has(option.value)) {\r\n        cachedSelected.set(option.value, option)\r\n      }\r\n    } else if (props.remote) {\r\n      option = reactive({\r\n        value,\r\n        disabled: false,\r\n        divided: false,\r\n        title: '',\r\n        label: String(value),\r\n        group: false,\r\n        depth: -1,\r\n        parent: null,\r\n        hidden: true,\r\n        hitting: false,\r\n        data: value,\r\n      }) as SelectOptionState\r\n\r\n      cachedSelected.set(value, option)\r\n      selectedValues.push(value)\r\n      selectedLabels.push(option.label)\r\n    }\r\n  })\r\n\r\n  for (const cachedValue of Array.from(cachedSelected.keys())) {\r\n    if (!valueSet.has(cachedValue)) {\r\n      cachedSelected.delete(cachedValue)\r\n    }\r\n  }\r\n\r\n  currentValues.value = selectedValues\r\n  currentLabels.value = selectedLabels\r\n\r\n  initHittingIndex()\r\n  filterOptions(currentFilter.value)\r\n}\r\n\r\nfunction initHittingIndex() {\r\n  const value = currentValues.value[0]\r\n\r\n  if (isNull(value)) {\r\n    updateHitting(-1)\r\n  } else {\r\n    if (!isMounted.value) return\r\n\r\n    updateHitting(visibleOptions.value.findIndex(option => option.value === value))\r\n  }\r\n}\r\n\r\nfunction setVisible(visible: boolean) {\r\n  if (currentVisible.value === visible) return\r\n\r\n  currentVisible.value = visible\r\n\r\n  emit('update:visible', visible)\r\n  emitEvent(props.onToggle, visible)\r\n}\r\n\r\nfunction updateHitting(hitting: number, ensureInView = true) {\r\n  currentIndex.value = hitting\r\n  hittingOption.value = undefined\r\n\r\n  let index = -1\r\n\r\n  optionStates.value.forEach(option => {\r\n    if (!option.hidden) {\r\n      index += 1\r\n      option.hitting = hitting === index\r\n\r\n      if (option.hitting) {\r\n        hittingOption.value = option\r\n      }\r\n    } else {\r\n      option.hitting = false\r\n    }\r\n  })\r\n\r\n  if (ensureInView && currentVisible.value && virtualList.value) {\r\n    virtualList.value.ensureIndexInView(hitting)\r\n  }\r\n}\r\n\r\nfunction isSelected(option: SelectOptionState) {\r\n  if (props.multiple) {\r\n    return currentValues.value.includes(option.value)\r\n  }\r\n\r\n  return currentValues.value[0] === option.value\r\n}\r\n\r\nfunction filterOptions(inputValue: string) {\r\n  const filter = props.filter\r\n\r\n  if (!filter || props.remote) return\r\n\r\n  if (!inputValue) {\r\n    optionStates.value.forEach(state => {\r\n      state.hidden = false\r\n    })\r\n  } else {\r\n    optionStates.value.forEach(state => {\r\n      state.hidden = true\r\n    })\r\n\r\n    if (typeof filter === 'function') {\r\n      normalOptions.value.forEach(state => {\r\n        state.hidden = !filter(inputValue, state)\r\n      })\r\n    } else {\r\n      if (props.ignoreCase) {\r\n        const ignoreCaseValue = inputValue.toString().toLocaleLowerCase()\r\n\r\n        normalOptions.value.forEach(state => {\r\n          state.hidden = !state.label?.toString().toLocaleLowerCase().includes(ignoreCaseValue)\r\n        })\r\n      } else {\r\n        normalOptions.value.forEach(state => {\r\n          state.hidden = !state.label?.toString().includes(inputValue?.toString())\r\n        })\r\n      }\r\n    }\r\n\r\n    const parentMap = optionParentMap.value\r\n\r\n    normalOptions.value.forEach(option => {\r\n      if (!option.hidden && option.parent) {\r\n        let parent = parentMap.get(option.value) || null\r\n\r\n        while (parent && parent.hidden) {\r\n          parent.hidden = false\r\n          parent = parent.parent\r\n        }\r\n      }\r\n    })\r\n  }\r\n\r\n  updateHitting(currentIndex.value)\r\n}\r\n\r\nfunction handleTagClose(value?: SelectBaseValue | null) {\r\n  if (props.disabled || readonly.value) return\r\n\r\n  !isNull(value) && handleSelect(getOptionFromMap(value))\r\n}\r\n\r\nfunction handleRestTagClose(value?: SelectBaseValue | null) {\r\n  handleTagClose(value)\r\n\r\n  if (restTipShow.value) {\r\n    restTip.value?.updatePopper()\r\n  }\r\n}\r\n\r\nfunction handleSelect(option?: SelectOptionState | null) {\r\n  if (!option) return\r\n\r\n  const selected = isSelected(option)\r\n  const value = option.value\r\n\r\n  if (selected) {\r\n    if (userOptions.value.find(item => item.value === value)) {\r\n      removeArrayItem(userOptions.value, item => item.value === value)\r\n      optionValueMap.value.delete(value)\r\n    }\r\n\r\n    cachedSelected.delete(value)\r\n  } else {\r\n    if (!props.multiple) {\r\n      userOptions.value.length = 0\r\n    }\r\n\r\n    if (limited.value) return\r\n\r\n    if (dynamicOption.value && value === dynamicOption.value) {\r\n      const newOption = { ...dynamicOption }\r\n\r\n      userOptions.value.push(newOption)\r\n      optionValueMap.value.set(value, newOption)\r\n    }\r\n\r\n    cachedSelected.set(option.value, option)\r\n  }\r\n\r\n  emitEvent(\r\n    props[props.multiple && selected ? 'onCancel' : 'onSelect'] as SelectEvent,\r\n    value,\r\n    option.data,\r\n  )\r\n  handleChange(option)\r\n\r\n  if (props.multiple) {\r\n    if (props.filterPosition === 'in-control') {\r\n      currentFilter.value = ''\r\n      syncInputValue()\r\n    }\r\n\r\n    requestAnimationFrame(updatePopper)\r\n  } else {\r\n    setVisible(false)\r\n  }\r\n\r\n  anchorWidth.value = 0\r\n}\r\n\r\nfunction handleChange(option: SelectOptionState) {\r\n  if (props.multiple) {\r\n    if (isSelected(option)) {\r\n      const index = currentValues.value.findIndex(v => v === option.value)\r\n\r\n      if (~index) {\r\n        currentValues.value.splice(index, 1)\r\n        currentLabels.value.splice(index, 1)\r\n      }\r\n    } else {\r\n      currentValues.value.push(option.value)\r\n      currentLabels.value.push(option.label)\r\n    }\r\n\r\n    emittedValue = Array.from(currentValues.value)\r\n\r\n    emit('update:value', emittedValue)\r\n    emit('update:label', currentLabels.value)\r\n    setFieldValue(emittedValue)\r\n    emitEvent(\r\n      props.onChange as ChangeEvent,\r\n      emittedValue,\r\n      emittedValue.map(value => getOptionFromMap(value)?.data ?? value),\r\n    )\r\n    validateField()\r\n  } else {\r\n    const prevValue = currentValues.value[0]\r\n\r\n    currentValues.value.length = 0\r\n    currentLabels.value.length = 0\r\n    currentValues.value.push(option.value)\r\n    currentLabels.value.push(option.label)\r\n\r\n    if (prevValue !== option.value) {\r\n      emittedValue = option.value\r\n\r\n      emit('update:value', emittedValue)\r\n      emit('update:label', currentLabels.value[0])\r\n      setFieldValue(emittedValue)\r\n      emitEvent(props.onChange as ChangeEvent, emittedValue, option.data)\r\n      validateField()\r\n    }\r\n  }\r\n}\r\n\r\nfunction toggleVisible() {\r\n  if (props.disabled || readonly.value) return\r\n\r\n  setVisible(!currentVisible.value)\r\n}\r\n\r\nfunction handleClickOutside() {\r\n  restTipShow.value = false\r\n  emitEvent(props.onClickOutside)\r\n\r\n  if (props.outsideClose && currentVisible.value) {\r\n    setVisible(false)\r\n    emitEvent(props.onOutsideClose)\r\n  }\r\n}\r\n\r\nfunction handleClear() {\r\n  if (props.disabled || readonly.value) return\r\n\r\n  if (props.clearable) {\r\n    for (const option of userOptions.value) {\r\n      optionValueMap.value.delete(option.value)\r\n    }\r\n\r\n    cachedSelected.clear()\r\n\r\n    userOptions.value.length = 0\r\n    currentValues.value.length = 0\r\n    currentLabels.value.length = 0\r\n    restTipShow.value = false\r\n\r\n    emittedValue = props.multiple ? [] : ''\r\n\r\n    syncInputValue()\r\n    emit('update:value', emittedValue)\r\n    emitEvent(props.onChange as ChangeEvent, emittedValue, props.multiple ? [] : '')\r\n    emitEvent(props.onClear)\r\n    clearField(emittedValue!)\r\n    updatePopper()\r\n  }\r\n}\r\n\r\nlet focused = false\r\n\r\nfunction handleFocus(event: FocusEvent) {\r\n  if (!focused) {\r\n    focused = true\r\n    emitEvent(props.onFocus, event)\r\n  }\r\n}\r\n\r\nfunction handleBlur(event: FocusEvent) {\r\n  if (focused) {\r\n    focused = false\r\n\r\n    setTimeout(() => {\r\n      if (!focused) {\r\n        emitEvent(props.onBlur, event)\r\n      }\r\n    }, 120)\r\n  }\r\n}\r\n\r\nfunction syncInputValue() {\r\n  if (!input.value) return\r\n\r\n  const visible = currentVisible.value\r\n\r\n  if (props.multiple) {\r\n    input.value.value = ''\r\n  } else {\r\n    input.value.value = visible ? '' : currentLabels.value[0] || ''\r\n  }\r\n\r\n  visible ? input.value.focus() : input.value.blur()\r\n}\r\n\r\nfunction handleFilterInput() {\r\n  if (!input.value || composing.value) return\r\n\r\n  let hittingIndex: number\r\n\r\n  currentFilter.value = input.value.value\r\n\r\n  if (!currentFilter.value) {\r\n    hittingIndex = -1\r\n  } else if (showDynamic.value || currentIndex.value !== -1) {\r\n    hittingIndex = 0\r\n  } else {\r\n    hittingIndex = visibleOptions.value.findIndex(\r\n      option => String(option.label) === currentFilter.value,\r\n    )\r\n    hittingIndex = hittingIndex === -1 ? 0 : hittingIndex\r\n  }\r\n\r\n  requestAnimationFrame(() => {\r\n    if (!hittingIndex) {\r\n      hittingIndex = visibleOptions.value.findIndex(\r\n        option => !currentValues.value.includes(option.value),\r\n      )\r\n    }\r\n\r\n    if (hittingIndex !== currentIndex.value) {\r\n      updateHitting(hittingIndex)\r\n    }\r\n\r\n    if (props.multiple && device.value) {\r\n      anchorWidth.value = getRangeWidth(device.value)\r\n    }\r\n\r\n    updatePopper()\r\n  })\r\n\r\n  emitEvent(props.onFilterInput, currentFilter.value)\r\n}\r\n\r\nfunction handleCompositionEnd() {\r\n  if (!composing.value) return\r\n\r\n  composing.value = false\r\n\r\n  if (input.value) {\r\n    input.value.dispatchEvent(new Event('input'))\r\n  }\r\n}\r\n\r\nfunction handleFilterKeyDown(event: KeyboardEvent) {\r\n  if (!input.value) return\r\n\r\n  if (\r\n    props.filterPosition !== 'in-list' &&\r\n    event.key === 'Backspace' &&\r\n    !input.value.value &&\r\n    !isNull(getLast(currentValues.value))\r\n  ) {\r\n    event.stopPropagation()\r\n    handleTagClose(getLast(currentValues.value))\r\n  }\r\n}\r\n\r\nfunction toggleShowRestTip() {\r\n  if (!currentVisible.value) {\r\n    restTipShow.value = !restTipShow.value\r\n\r\n    if (restTipShow.value) {\r\n      nextTick(() => {\r\n        restTip.value?.updatePopper()\r\n      })\r\n    }\r\n  } else {\r\n    toggleVisible()\r\n    restTipShow.value = false\r\n  }\r\n}\r\n\r\nfunction focus(options?: FocusOptions) {\r\n  if (currentVisible.value) {\r\n    ;(input.value || reference.value)?.focus(options)\r\n  } else {\r\n    reference.value?.focus(options)\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :id=\"idFor\"\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"group\"\r\n    :aria-disabled=\"toAttrValue(props.disabled)\"\r\n    :aria-expanded=\"toAttrValue(currentVisible)\"\r\n    aria-haspopup=\"listbox\"\r\n    :aria-labelledby=\"labelId\"\r\n    @click=\"toggleVisible\"\r\n  >\r\n    <div\r\n      ref=\"reference\"\r\n      :class=\"selectorClass\"\r\n      tabindex=\"0\"\r\n      @focus=\"handleFocus\"\r\n      @blur=\";(!props.filter || !currentVisible) && handleBlur($event)\"\r\n    >\r\n      <div\r\n        v-if=\"hasPrefix\"\r\n        :class=\"[nh.be('icon'), nh.be('prefix')]\"\r\n        :style=\"{ color: props.prefixColor }\"\r\n      >\r\n        <slot name=\"prefix\">\r\n          <Renderer :renderer=\"props.slots.prefix\">\r\n            <Icon :icon=\"props.prefix\"></Icon>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n      <div :class=\"nh.be('control')\">\r\n        <slot name=\"control\">\r\n          <Renderer :renderer=\"props.slots.control\">\r\n            <template v-if=\"props.multiple\">\r\n              <Overflow\r\n                inherit\r\n                :class=\"[nh.be('tags')]\"\r\n                :items=\"currentValues\"\r\n                :max-count=\"props.maxTagCount\"\r\n                :style=\"{\r\n                  maxWidth: props.maxTagCount <= 0 && `calc(100% - ${anchorWidth}px)`\r\n                }\"\r\n                @rest-change=\"restTagCount = $event\"\r\n                @click.stop=\"toggleVisible\"\r\n              >\r\n                <template #default=\"{ item: value, index }\">\r\n                  <slot\r\n                    name=\"tag\"\r\n                    :value=\"value\"\r\n                    :option=\"getOptionFromMap(value)\"\r\n                    :handle-close=\"handleTagClose.bind(null, value)\"\r\n                  >\r\n                    <Renderer\r\n                      :renderer=\"props.slots.tag\"\r\n                      :data=\"{\r\n                        value,\r\n                        option: getOptionFromMap(value),\r\n                        handleClose: handleTagClose.bind(null, value)\r\n                      }\"\r\n                    >\r\n                      <Tag\r\n                        inherit\r\n                        :class=\"nh.be('tag')\"\r\n                        :type=\"props.tagType\"\r\n                        closable\r\n                        :disabled=\"props.disabled\"\r\n                        @close=\"handleTagClose(value)\"\r\n                      >\r\n                        <span :class=\"nh.be('label')\">\r\n                          <slot name=\"selected\" :value=\"value\" :option=\"getOptionFromMap(value)\">\r\n                            <Renderer\r\n                              :renderer=\"props.slots.selected\"\r\n                              :data=\"{ value, option: getOptionFromMap(value) }\"\r\n                            >\r\n                              {{ currentLabels[index] }}\r\n                            </Renderer>\r\n                          </slot>\r\n                        </span>\r\n                      </Tag>\r\n                    </Renderer>\r\n                  </slot>\r\n                </template>\r\n                <template #counter=\"{ count }\">\r\n                  <slot v-if=\"props.noRestTip\" name=\"restTag\" :rest-count=\"count\">\r\n                    <Renderer :renderer=\"props.slots.restTag\" :data=\"{ restCount: count }\">\r\n                      <Tag\r\n                        inherit\r\n                        :class=\"[nh.be('tag'), nh.be('counter')]\"\r\n                        :type=\"props.tagType\"\r\n                        :disabled=\"props.disabled\"\r\n                      >\r\n                        {{ `+${count}` }}\r\n                      </Tag>\r\n                    </Renderer>\r\n                  </slot>\r\n                  <template v-else>\r\n                    <Tooltip\r\n                      ref=\"restTip\"\r\n                      inherit\r\n                      :transfer=\"false\"\r\n                      :visible=\"restTipShow\"\r\n                      trigger=\"custom\"\r\n                      placement=\"top-end\"\r\n                      :tip-class=\"nh.be('rest-tip')\"\r\n                      @click.stop=\"toggleShowRestTip\"\r\n                    >\r\n                      <template #trigger>\r\n                        <slot name=\"restTag\" :rest-count=\"count\">\r\n                          <Renderer :renderer=\"props.slots.restTag\" :data=\"{ restCount: count }\">\r\n                            <Tag\r\n                              inherit\r\n                              :class=\"[nh.be('tag'), nh.be('counter')]\"\r\n                              :type=\"props.tagType\"\r\n                              :disabled=\"props.disabled\"\r\n                            >\r\n                              {{ `+${count}` }}\r\n                            </Tag>\r\n                          </Renderer>\r\n                        </slot>\r\n                      </template>\r\n                      <NativeScroll inherit use-y-bar>\r\n                        <template v-for=\"(value, index) in currentValues\" :key=\"index\">\r\n                          <slot\r\n                            v-if=\"index >= currentValues.length - restTagCount\"\r\n                            name=\"tag\"\r\n                            :value=\"value\"\r\n                            :option=\"getOptionFromMap(value)\"\r\n                            :handle-close=\"handleRestTagClose.bind(null, value)\"\r\n                          >\r\n                            <Renderer\r\n                              :renderer=\"props.slots.tag\"\r\n                              :data=\"{\r\n                                value,\r\n                                option: getOptionFromMap(value),\r\n                                handleClose: handleRestTagClose.bind(null, value)\r\n                              }\"\r\n                            >\r\n                              <Tag\r\n                                inherit\r\n                                :class=\"nh.be('tag')\"\r\n                                closable\r\n                                :type=\"props.tagType\"\r\n                                :disabled=\"props.disabled\"\r\n                                @close=\"handleRestTagClose(value)\"\r\n                              >\r\n                                <span :class=\"nh.be('label')\">\r\n                                  <slot\r\n                                    name=\"selected\"\r\n                                    :value=\"value\"\r\n                                    :option=\"getOptionFromMap(value)\"\r\n                                  >\r\n                                    <Renderer\r\n                                      :renderer=\"props.slots.selected\"\r\n                                      :data=\"{ value, option: getOptionFromMap(value) }\"\r\n                                    >\r\n                                      {{ currentLabels[index] }}\r\n                                    </Renderer>\r\n                                  </slot>\r\n                                </span>\r\n                              </Tag>\r\n                            </Renderer>\r\n                          </slot>\r\n                        </template>\r\n                      </NativeScroll>\r\n                    </Tooltip>\r\n                  </template>\r\n                </template>\r\n              </Overflow>\r\n              <div\r\n                v-if=\"props.filter && props.filterPosition === 'in-control'\"\r\n                :class=\"nh.be('anchor')\"\r\n                :style=\"{\r\n                  width: `${anchorWidth}px`\r\n                }\"\r\n              >\r\n                <input\r\n                  ref=\"nativeInput\"\r\n                  :class=\"[\r\n                    nh.be('input'),\r\n                    nh.bem('input', 'multiple'),\r\n                    currentVisible && nh.bem('input', 'visible')\r\n                  ]\"\r\n                  :disabled=\"props.disabled\"\r\n                  autocomplete=\"off\"\r\n                  tabindex=\"-1\"\r\n                  role=\"combobox\"\r\n                  aria-autocomplete=\"list\"\r\n                  :name=\"props.name\"\r\n                  @submit.prevent\r\n                  @input=\"handleFilterInput\"\r\n                  @keydown=\"handleFilterKeyDown\"\r\n                  @focus=\"handleFocus($event)\"\r\n                  @blur=\"handleBlur($event)\"\r\n                  @compositionstart=\"composing = true\"\r\n                  @compositionend=\"handleCompositionEnd\"\r\n                  @change=\"handleCompositionEnd\"\r\n                />\r\n                <span ref=\"device\" :class=\"nh.be('device')\" aria-hidden=\"true\">\r\n                  {{ currentFilter }}\r\n                </span>\r\n              </div>\r\n            </template>\r\n            <template v-else>\r\n              <input\r\n                v-if=\"props.filter && props.filterPosition === 'in-control'\"\r\n                ref=\"nativeInput\"\r\n                :class=\"[nh.be('input'), currentVisible && nh.bem('input', 'visible')]\"\r\n                :disabled=\"props.disabled\"\r\n                autocomplete=\"off\"\r\n                tabindex=\"-1\"\r\n                role=\"combobox\"\r\n                aria-autocomplete=\"list\"\r\n                :name=\"props.name\"\r\n                :style=\"{\r\n                  opacity: currentVisible ? undefined : '0%'\r\n                }\"\r\n                @submit.prevent\r\n                @input=\"handleFilterInput\"\r\n                @focus=\"handleFocus($event)\"\r\n                @blur=\"handleBlur($event)\"\r\n                @compositionstart=\"composing = true\"\r\n                @compositionend=\"handleCompositionEnd\"\r\n                @change=\"handleCompositionEnd\"\r\n              />\r\n              <span\r\n                v-if=\"\r\n                  (props.noPreview || !currentVisible) &&\r\n                    hasValue &&\r\n                    (props.filterPosition !== 'in-control' || !currentFilter)\r\n                \"\r\n                :class=\"{\r\n                  [nh.be('selected')]: true,\r\n                  [nh.bem('selected', 'placeholder')]: props.filter && currentVisible && hasValue\r\n                }\"\r\n              >\r\n                <slot\r\n                  v-if=\"getOptionFromMap(currentValues[0])\"\r\n                  name=\"selected\"\r\n                  :value=\"currentValues[0]\"\r\n                  :option=\"getOptionFromMap(currentValues[0])\"\r\n                >\r\n                  <Renderer\r\n                    :renderer=\"props.slots.selected\"\r\n                    :data=\"{ value: currentValues[0], option: getOptionFromMap(currentValues[0]) }\"\r\n                  >\r\n                    {{ currentLabels[0] }}\r\n                  </Renderer>\r\n                </slot>\r\n                <template v-else>\r\n                  {{ currentLabels[0] }}\r\n                </template>\r\n              </span>\r\n            </template>\r\n            <span v-if=\"showPlaceholder\" :class=\"nh.be('placeholder')\">\r\n              <slot\r\n                v-if=\"previewOption\"\r\n                name=\"selected\"\r\n                :preview=\"true\"\r\n                :value=\"previewOption.value\"\r\n                :option=\"previewOption\"\r\n              >\r\n                <Renderer\r\n                  :renderer=\"props.slots.selected\"\r\n                  :data=\"{ value: previewOption.value, preview: true, option: previewOption }\"\r\n                >\r\n                  {{ previewOption.label }}\r\n                </Renderer>\r\n              </slot>\r\n              <template v-else>\r\n                {{ props.placeholder ?? locale.placeholder }}\r\n              </template>\r\n            </span>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n      <div\r\n        v-if=\"!props.noSuffix\"\r\n        :class=\"[nh.be('icon'), nh.be('suffix')]\"\r\n        :style=\"{\r\n          color: props.suffixColor,\r\n          opacity: showClear || props.loading ? '0%' : ''\r\n        }\"\r\n      >\r\n        <slot name=\"suffix\">\r\n          <Renderer :renderer=\"props.slots.suffix\">\r\n            <Icon\r\n              v-if=\"props.suffix\"\r\n              :icon=\"props.suffix\"\r\n              :class=\"{\r\n                [nh.be('arrow')]: !props.staticSuffix\r\n              }\"\r\n            ></Icon>\r\n            <Icon v-else v-bind=\"icons.angleDown\" :class=\"nh.be('arrow')\"></Icon>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n      <div\r\n        v-else-if=\"props.clearable || props.loading\"\r\n        :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\r\n      ></div>\r\n      <Transition :name=\"nh.ns('fade')\" appear>\r\n        <button\r\n          v-if=\"showClear\"\r\n          :class=\"[nh.be('icon'), nh.be('clear')]\"\r\n          type=\"button\"\r\n          tabindex=\"-1\"\r\n          :aria-label=\"locale.ariaLabel.clear\"\r\n          @click.stop=\"handleClear\"\r\n        >\r\n          <Icon v-bind=\"icons.clear\" label=\"clear\"></Icon>\r\n        </button>\r\n        <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\r\n          <Icon\r\n            v-bind=\"icons.loading\"\r\n            :effect=\"props.loadingEffect || icons.loading.effect\"\r\n            :icon=\"props.loadingIcon || icons.loading.icon\"\r\n            label=\"loading\"\r\n          ></Icon>\r\n        </div>\r\n      </Transition>\r\n    </div>\r\n    <Popper\r\n      ref=\"popper\"\r\n      :class=\"[nh.be('popper'), nh.bs('vars')]\"\r\n      :visible=\"currentVisible\"\r\n      :to=\"transferTo\"\r\n      :transition=\"props.transitionName\"\r\n      :alive=\"props.popperAlive ?? !transferTo\"\r\n      @click.stop=\"focus\"\r\n      @after-leave=\"currentFilter = ''\"\r\n    >\r\n      <slot\r\n        name=\"list\"\r\n        :options=\"totalOptions\"\r\n        :is-selected=\"isSelected\"\r\n        :handle-select=\"handleSelect\"\r\n      >\r\n        <Renderer\r\n          :renderer=\"props.slots.list\"\r\n          :data=\"{ options: totalOptions, isSelected, handleSelect }\"\r\n        >\r\n          <div\r\n            :class=\"[\r\n              nh.be('list'),\r\n              (slots.prepend || slots.append) && nh.bem('list', 'with-extra'),\r\n              props.listClass\r\n            ]\"\r\n          >\r\n            <div v-if=\"props.filter && props.filterPosition === 'in-list'\" :class=\"nh.be('filter')\">\r\n              <Input\r\n                ref=\"filterInput\"\r\n                :class=\"nh.be('filter-input')\"\r\n                transparent\r\n                :disabled=\"props.disabled\"\r\n                :placeholder=\"locale.search\"\r\n                :autocomplete=\"false\"\r\n                :tabindex=\"-1\"\r\n                role=\"combobox\"\r\n                aria-autocomplete=\"list\"\r\n                @input=\"handleFilterInput\"\r\n                @keydown=\"handleFilterKeyDown\"\r\n                @focus=\"handleFocus\"\r\n                @blur=\"handleBlur\"\r\n                @compositionstart=\"composing = true\"\r\n                @compositionend=\"handleCompositionEnd\"\r\n                @change=\"handleCompositionEnd\"\r\n              >\r\n                <template #suffix>\r\n                  <Icon v-bind=\"icons.search\"></Icon>\r\n                </template>\r\n              </Input>\r\n            </div>\r\n            <slot v-if=\"slots.prepend || props.slots.prepend\" name=\"prepend\">\r\n              <Renderer :renderer=\"props.slots.prepend\"></Renderer>\r\n            </slot>\r\n            <VirtualList\r\n              ref=\"virtualList\"\r\n              inherit\r\n              :style=\"{\r\n                height: undefined,\r\n                maxHeight: `${props.maxListHeight}px`\r\n              }\"\r\n              :items=\"totalOptions\"\r\n              :item-size=\"32\"\r\n              use-y-bar\r\n              :height=\"'100%'\"\r\n              id-key=\"value\"\r\n              :items-attrs=\"{\r\n                class: [nh.be('options'), props.optionCheck ? nh.bem('options', 'has-check') : ''],\r\n                role: 'listbox',\r\n                ariaLabel: 'options',\r\n                ariaMultiselectable: props.multiple\r\n              }\"\r\n            >\r\n              <template #default=\"{ item: option, index }\">\r\n                <li\r\n                  v-if=\"option.group\"\r\n                  :class=\"[nh.ns('option-vars'), nh.be('group')]\"\r\n                  :title=\"option.label\"\r\n                >\r\n                  <slot name=\"group\" :option=\"option\" :index=\"index\">\r\n                    <Renderer :renderer=\"props.slots.group\" :data=\"{ option, index }\">\r\n                      <div\r\n                        :class=\"[nh.be('label'), nh.bem('label', 'group')]\"\r\n                        :style=\"{ paddingInlineStart: `${option.depth * 6}px` }\"\r\n                      >\r\n                        {{ option.label }}\r\n                      </div>\r\n                    </Renderer>\r\n                  </slot>\r\n                </li>\r\n                <Option\r\n                  v-else\r\n                  :label=\"option.label\"\r\n                  :value=\"option.value\"\r\n                  :disabled=\"option.disabled || (limited && !isSelected(option))\"\r\n                  :divided=\"option.divided\"\r\n                  :no-title=\"option.title\"\r\n                  :hitting=\"option.hitting\"\r\n                  :selected=\"isSelected(option)\"\r\n                  no-hover\r\n                  @select=\"handleSelect(option)\"\r\n                  @mousemove=\"updateHitting(index, false)\"\r\n                >\r\n                  <slot :option=\"option\" :index=\"index\" :selected=\"isSelected(option)\">\r\n                    <Renderer\r\n                      :renderer=\"props.slots.default\"\r\n                      :data=\"{ option, index, selected: isSelected(option) }\"\r\n                    >\r\n                      <span\r\n                        :class=\"nh.be('label')\"\r\n                        :style=\"{ paddingInlineStart: `${option.depth * 6}px` }\"\r\n                      >\r\n                        {{ option.label }}\r\n                      </span>\r\n                      <Transition v-if=\"props.optionCheck\" :name=\"nh.ns('fade')\" appear>\r\n                        <Icon\r\n                          v-if=\"isSelected(option)\"\r\n                          v-bind=\"icons.check\"\r\n                          :class=\"nh.be('check')\"\r\n                        ></Icon>\r\n                      </Transition>\r\n                    </Renderer>\r\n                  </slot>\r\n                </Option>\r\n              </template>\r\n              <template #empty>\r\n                <div :class=\"nh.be('empty')\">\r\n                  <slot name=\"empty\">\r\n                    <Renderer :renderer=\"props.slots.empty\">\r\n                      {{ props.emptyText ?? locale.empty }}\r\n                    </Renderer>\r\n                  </slot>\r\n                </div>\r\n              </template>\r\n            </VirtualList>\r\n            <slot v-if=\"slots.append || props.slots.append\" name=\"append\">\r\n              <Renderer :renderer=\"props.slots.append\"></Renderer>\r\n            </slot>\r\n          </div>\r\n        </Renderer>\r\n      </slot>\r\n    </Popper>\r\n  </div>\r\n</template>\r\n","import {\r\n  booleanProp,\r\n  booleanStringProp,\r\n  buildProps,\r\n  eventProp,\r\n  iconProp,\r\n  localeProp,\r\n  sizeProp,\r\n  stateProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\r\nimport type { Placement } from '@vexip-ui/hooks'\r\nimport type {\r\n  AutoCompleteFilter,\r\n  AutoCompleteKeyConfig,\r\n  AutoCompleteRawOption,\r\n  AutoCompleteSlots,\r\n  ChangeEvent,\r\n  EnterEvent,\r\n} from './symbol'\r\n\r\nexport const autoCompleteProps = buildProps({\r\n  size: sizeProp,\r\n  state: stateProp,\r\n  locale: localeProp('input'),\r\n  transfer: booleanStringProp,\r\n  value: [String, Number],\r\n  options: Array as PropType<AutoCompleteRawOption[]>,\r\n  filter: {\r\n    type: [Boolean, Function] as PropType<boolean | AutoCompleteFilter>,\r\n    default: null,\r\n  },\r\n  prefix: iconProp,\r\n  prefixColor: String,\r\n  suffix: iconProp,\r\n  suffixColor: String,\r\n  placeholder: String,\r\n  disabled: booleanProp,\r\n  transitionName: String,\r\n  dropDisabled: booleanProp,\r\n  placement: String as PropType<Placement>,\r\n  clearable: booleanProp,\r\n  ignoreCase: booleanProp,\r\n  autofocus: booleanProp,\r\n  spellcheck: booleanProp,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingLock: booleanProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  transparent: booleanProp,\r\n  debounce: booleanProp,\r\n  delay: Number,\r\n  keyConfig: Object as PropType<Omit<AutoCompleteKeyConfig, 'label'>>,\r\n  showEmpty: booleanProp,\r\n  name: String,\r\n  popperAlive: booleanProp,\r\n  slots: Object as PropType<AutoCompleteSlots>,\r\n  shift: booleanProp,\r\n  onFocus: eventProp<(event: FocusEvent) => void>(),\r\n  onBlur: eventProp<(event: FocusEvent) => void>(),\r\n  onSelect: eventProp<EventListener<ChangeEvent>>(),\r\n  onInput: eventProp<(value: string) => void>(),\r\n  onChange: eventProp<EventListener<ChangeEvent>>(),\r\n  onToggle: eventProp<(visible: boolean) => void>(),\r\n  onEnter: eventProp<EventListener<EnterEvent>>(),\r\n  onClear: eventProp(),\r\n})\r\n\r\nexport type AutoCompleteProps = ExtractPropTypes<typeof autoCompleteProps>\r\nexport type AutoCompleteCProps = ConfigurableProps<ExtractPropTypes<typeof autoCompleteProps>>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Select } from '@/components/select'\r\nimport { useFieldStore } from '@/components/form'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, nextTick, onMounted, ref, toRef, watch, watchEffect } from 'vue'\r\n\r\nimport {\r\n  createIconProp,\r\n  createSizeProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { placementWhileList, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { debounce, isNull, throttle, toNumber } from '@vexip-ui/utils'\r\nimport { autoCompleteProps } from './props'\r\n\r\nimport type { SelectExposed } from '@/components/select'\r\nimport type {\r\n  AutoCompleteListSlotParams,\r\n  AutoCompleteRawOption,\r\n  AutoCompleteSlots,\r\n  ChangeEvent,\r\n  EnterEvent,\r\n} from './symbol'\r\n\r\ndefineOptions({ name: 'AutoComplete' })\r\n\r\nconst select = ref<SelectExposed>()\r\nconst control = ref<HTMLInputElement>()\r\n\r\nconst {\r\n  idFor,\r\n  labelId,\r\n  state,\r\n  disabled,\r\n  loading,\r\n  size,\r\n  validateField,\r\n  clearField,\r\n  getFieldValue,\r\n  setFieldValue,\r\n} = useFieldStore<string | number>(() => control.value?.focus())\r\n\r\nconst nh = useNameHelper('auto-complete')\r\n\r\nconst _props = defineProps(autoCompleteProps)\r\nconst props = useProps('autoComplete', _props, {\r\n  size: createSizeProp(size),\r\n  state: createStateProp(state),\r\n  locale: null,\r\n  transfer: false,\r\n  value: {\r\n    default: () => getFieldValue(),\r\n    static: true,\r\n  },\r\n  options: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  filter: false,\r\n  prefix: createIconProp(),\r\n  prefixColor: '',\r\n  suffix: createIconProp(),\r\n  suffixColor: '',\r\n  placeholder: null,\r\n  disabled: () => disabled.value,\r\n  transitionName: () => nh.ns('drop'),\r\n  dropDisabled: false,\r\n  placement: {\r\n    default: 'bottom',\r\n    validator: value => placementWhileList.includes(value),\r\n  },\r\n  clearable: false,\r\n  ignoreCase: false,\r\n  autofocus: false,\r\n  spellcheck: false,\r\n  keyConfig: () => ({}),\r\n  loading: () => loading.value,\r\n  loadingIcon: createIconProp(),\r\n  loadingLock: false,\r\n  loadingEffect: null,\r\n  transparent: false,\r\n  debounce: false,\r\n  delay: null,\r\n  showEmpty: false,\r\n  name: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  popperAlive: null,\r\n  slots: () => ({}),\r\n  shift: true,\r\n})\r\n\r\nconst emit = defineEmits(['update:value'])\r\n\r\nconst slots = defineSlots<AutoCompleteSlots>()\r\n\r\nconst locale = useLocale('input', toRef(props, 'locale'))\r\n\r\nconst { timer } = useSetTimeout()\r\n\r\nconst currentValue = ref(props.value)\r\nconst currentIndex = ref(-1)\r\nconst currentVisible = ref(false)\r\nconst composing = ref(false)\r\n\r\nlet changed = false\r\nlet lastValue = props.value\r\nlet lastInput = String(lastValue)\r\n\r\nconst isReadonly = computed(() => props.loading && props.loadingLock)\r\nconst optionStates = computed(() => select.value?.optionStates || [])\r\nconst filteredOptions = computed(() => select.value?.visibleOptions || [])\r\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\r\nconst hasSuffix = computed(() => !!(slots.suffix || props.suffix || props.slots.suffix))\r\n\r\nwatch(\r\n  () => props.value,\r\n  value => {\r\n    currentValue.value = value\r\n    lastValue = value\r\n    lastInput = String(value)\r\n\r\n    if (control.value) {\r\n      control.value.value = String(value)\r\n    }\r\n  },\r\n)\r\nwatch(currentIndex, computeHitting)\r\nwatch(currentVisible, value => {\r\n  if (!value) {\r\n    currentIndex.value = -1\r\n  } else {\r\n    control.value?.focus()\r\n  }\r\n})\r\nwatch(currentValue, value => {\r\n  if (props.filter && select.value) {\r\n    select.value.currentFilter = `${value}`\r\n  }\r\n})\r\nwatchEffect(() => {\r\n  if (!props.filter || !currentVisible.value || !select.value) return\r\n\r\n  select.value.currentFilter = String(currentValue.value)\r\n})\r\n\r\ndefineExpose({\r\n  idFor,\r\n  composing,\r\n  select,\r\n  control,\r\n  focus: (options?: FocusOptions) => control.value?.focus(options),\r\n  blur: () => control.value?.blur(),\r\n})\r\n\r\nonMounted(() => {\r\n  nextTick(() => {\r\n    if (control.value && !isNull(currentValue.value)) {\r\n      control.value.value = String(currentValue.value)\r\n    }\r\n  })\r\n})\r\n\r\nfunction computeHitting() {\r\n  const hitting = currentIndex.value\r\n  let index = -1\r\n\r\n  optionStates.value.forEach(state => {\r\n    if (!state.hidden) {\r\n      index += 1\r\n      state.hitting = hitting === index\r\n\r\n      if (state.hitting) {\r\n        if (control.value) {\r\n          control.value.value = String(state.value)\r\n        }\r\n      }\r\n    } else {\r\n      state.hitting = false\r\n    }\r\n  })\r\n\r\n  if (control.value && hitting < 0) {\r\n    control.value.value = lastInput\r\n  }\r\n}\r\n\r\nlet focused = false\r\n\r\nfunction handleFocus(event: FocusEvent) {\r\n  if (!focused) {\r\n    focused = true\r\n    emitEvent(props.onFocus, event)\r\n  }\r\n}\r\n\r\nfunction handleBlur(event: FocusEvent) {\r\n  if (focused) {\r\n    focused = false\r\n\r\n    timer.focus = setTimeout(() => {\r\n      if (!focused) {\r\n        emitEvent(props.onBlur, event)\r\n        handleChange()\r\n      }\r\n    }, 120)\r\n  }\r\n}\r\n\r\nfunction handleSelect(value: string | number, data: AutoCompleteRawOption) {\r\n  if (composing.value || isNull(value)) {\r\n    return\r\n  }\r\n\r\n  const prevValue = currentValue.value\r\n  currentValue.value = value\r\n\r\n  emitEvent(props.onSelect as ChangeEvent, value, data)\r\n\r\n  if (value !== prevValue) {\r\n    changed = true\r\n    handleChange()\r\n  } else {\r\n    currentVisible.value = false\r\n  }\r\n}\r\n\r\nfunction handleInputInternal(event: string | Event) {\r\n  const value = typeof event === 'string' ? event : (event.target as HTMLInputElement).value\r\n\r\n  currentValue.value = value\r\n  changed = true\r\n  lastInput = value\r\n\r\n  if (currentIndex.value !== -1) {\r\n    currentIndex.value = 0\r\n  }\r\n\r\n  if (props.showEmpty) {\r\n    currentVisible.value = !props.dropDisabled\r\n\r\n    if (select.value) {\r\n      select.value.currentVisible = currentVisible.value\r\n    }\r\n  }\r\n\r\n  emitEvent(props.onInput, value)\r\n  nextTick(testOptionCanDrop)\r\n  select.value?.updatePopper()\r\n}\r\n\r\nconst delay = toNumber(props.delay)\r\nconst handleInput = props.debounce\r\n  ? debounce(handleInputInternal, delay || 100)\r\n  : throttle(handleInputInternal, delay || 16)\r\n\r\nfunction handleChange(valid = true) {\r\n  if (!changed || currentValue.value === lastValue) return\r\n\r\n  changed = false\r\n  lastValue = currentValue.value\r\n  lastInput = String(lastValue)\r\n\r\n  const option = optionStates.value.find(option => option.value === lastValue)\r\n\r\n  if (select.value) {\r\n    select.value.currentValues.length = 0\r\n    ;(currentValue.value || currentValue.value === 0) &&\r\n      select.value.currentValues.push(currentValue.value)\r\n  }\r\n\r\n  emit('update:value', currentValue.value)\r\n  setFieldValue(currentValue.value)\r\n  emitEvent(props.onChange as ChangeEvent, currentValue.value, option?.data || null!)\r\n  valid && validateField()\r\n\r\n  currentVisible.value = false\r\n\r\n  if (control.value) {\r\n    control.value.value = String(lastValue)\r\n  }\r\n}\r\n\r\nlet beforeVisible = false\r\nlet inClickProcess = false\r\n\r\nfunction beforeClick() {\r\n  if (props.disabled || isReadonly.value) return\r\n\r\n  beforeVisible = currentVisible.value\r\n  inClickProcess = true\r\n\r\n  if (select.value) {\r\n    select.value.currentFilter = String(currentValue.value)\r\n  }\r\n}\r\n\r\nfunction handleClick() {\r\n  if (props.disabled || isReadonly.value) return\r\n\r\n  inClickProcess = false\r\n\r\n  if (!select.value) return\r\n\r\n  currentVisible.value = true\r\n\r\n  if (!beforeVisible) {\r\n    testOptionCanDrop()\r\n    beforeVisible = currentVisible.value\r\n    beforeVisible && emitEvent(props.onToggle, beforeVisible)\r\n  } else {\r\n    select.value.currentVisible = true\r\n  }\r\n}\r\n\r\nfunction handleToggle(visible: boolean) {\r\n  if (props.disabled || isReadonly.value || inClickProcess) return\r\n\r\n  currentVisible.value = visible\r\n\r\n  visible && testOptionCanDrop()\r\n  beforeVisible = currentVisible.value\r\n\r\n  if (currentVisible.value !== visible) {\r\n    emitEvent(props.onToggle, currentVisible.value)\r\n  }\r\n\r\n  if (!currentVisible.value) {\r\n    currentIndex.value = -1\r\n  }\r\n}\r\n\r\nfunction testOptionCanDrop() {\r\n  currentVisible.value = !(\r\n    props.dropDisabled ||\r\n    (!props.showEmpty && !filteredOptions.value.length)\r\n  )\r\n\r\n  if (select.value) {\r\n    select.value.currentVisible = currentVisible.value\r\n  }\r\n}\r\n\r\nfunction handleKeyDown(event: KeyboardEvent) {\r\n  if (composing.value) {\r\n    event.stopPropagation()\r\n    return\r\n  }\r\n\r\n  const key = event.code || event.key\r\n\r\n  if (key === 'Enter' || key === 'NumpadEnter') {\r\n    handleEnter(event)\r\n  } else if (key === 'ArrowDown' || key === 'ArrowUp') {\r\n    event.preventDefault()\r\n    event.stopPropagation()\r\n\r\n    const options = filteredOptions.value\r\n    const length = options.length\r\n\r\n    if (!length) return\r\n\r\n    const step = key === 'ArrowDown' ? 1 : -1\r\n\r\n    // 初始状态时 currentIndex 为 -1，往上时会得到 -2 导致行为不按预期，需限制\r\n    let index = (Math.max(currentIndex.value + step, -1) + length) % length\r\n    let option = options[index]\r\n\r\n    for (let i = 0; (option.disabled || option.group) && i < length; ++i) {\r\n      index += step\r\n      index = (index + length) % length\r\n      option = options[index]\r\n    }\r\n\r\n    currentIndex.value = index\r\n  } else {\r\n    if (['Space', ' '].includes(key)) {\r\n      event.stopPropagation()\r\n    }\r\n\r\n    if (!['Enter', 'ArrowLeft', 'ArrowRight'].includes(key)) {\r\n      // 进行了其他按键则重置\r\n      currentIndex.value = -1\r\n    }\r\n  }\r\n}\r\n\r\nfunction handleEnter(event: KeyboardEvent) {\r\n  event.stopPropagation()\r\n\r\n  if (composing.value) return\r\n\r\n  if (currentIndex.value >= 0 && filteredOptions.value.length) {\r\n    const option = filteredOptions.value[currentIndex.value === -1 ? 0 : currentIndex.value]\r\n\r\n    handleSelect(option.value, option.data)\r\n  } else {\r\n    handleChange()\r\n  }\r\n\r\n  emitEvent(props.onEnter as EnterEvent, currentValue.value)\r\n  currentVisible.value = false\r\n}\r\n\r\nfunction handleClear() {\r\n  if (props.clearable) {\r\n    const prevValue = currentValue.value\r\n\r\n    currentValue.value = ''\r\n    currentVisible.value = false\r\n\r\n    if (!isNull(prevValue) && prevValue !== currentValue.value) {\r\n      changed = true\r\n    }\r\n\r\n    handleChange(false)\r\n    emitEvent(props.onClear)\r\n    nextTick(clearField)\r\n    control.value?.focus()\r\n  }\r\n}\r\n\r\nfunction handleCompositionEnd() {\r\n  if (composing.value) {\r\n    composing.value = false\r\n\r\n    if (control.value) {\r\n      control.value.dispatchEvent(new Event('input'))\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <Select\r\n    :id=\"idFor\"\r\n    ref=\"select\"\r\n    v-model:visible=\"currentVisible\"\r\n    :class=\"[nh.b(), props.inherit && nh.bm('inherit')]\"\r\n    :inherit=\"props.inherit\"\r\n    :label-id=\"labelId\"\r\n    :list-class=\"nh.be('list')\"\r\n    :value=\"currentValue\"\r\n    :size=\"props.size\"\r\n    :state=\"props.state\"\r\n    :clearable=\"props.clearable\"\r\n    :transition-name=\"props.transitionName\"\r\n    :disabled=\"props.disabled\"\r\n    :transfer=\"props.transfer\"\r\n    :placement=\"props.placement\"\r\n    :prefix-color=\"props.prefixColor\"\r\n    :suffix-color=\"props.suffixColor\"\r\n    :no-suffix=\"!hasSuffix\"\r\n    :placeholder=\"props.placeholder\"\r\n    :options=\"props.options\"\r\n    :key-config=\"props.keyConfig\"\r\n    :loading=\"props.loading\"\r\n    :loading-icon=\"props.loadingIcon\"\r\n    :loading-lock=\"props.loadingLock\"\r\n    :loading-effect=\"props.loadingEffect\"\r\n    :transparent=\"transparent\"\r\n    :filter=\"props.filter\"\r\n    :ignore-case=\"props.ignoreCase\"\r\n    :popper-alive=\"props.popperAlive\"\r\n    :shift=\"props.shift\"\r\n    @toggle=\"handleToggle\"\r\n    @select=\"handleSelect\"\r\n    @clear=\"handleClear\"\r\n    @focus=\"control?.focus()\"\r\n    @outside-close=\"handleChange\"\r\n    @click=\"handleClick\"\r\n    @click.capture=\"beforeClick\"\r\n  >\r\n    <template v-if=\"hasPrefix\" #prefix>\r\n      <slot name=\"prefix\">\r\n        <Renderer :renderer=\"props.slots.prefix\">\r\n          <Icon :icon=\"props.prefix\"></Icon>\r\n        </Renderer>\r\n      </slot>\r\n    </template>\r\n    <template #control>\r\n      <slot\r\n        name=\"control\"\r\n        :value=\"currentValue\"\r\n        :on-input=\"handleInput\"\r\n        :on-change=\"handleChange\"\r\n        :on-enter=\"handleEnter\"\r\n        :on-clear=\"handleClear\"\r\n      >\r\n        <Renderer\r\n          :renderer=\"props.slots.control\"\r\n          :data=\"{\r\n            value: currentValue,\r\n            onInput: handleInput,\r\n            onChange: handleChange,\r\n            onEnter: handleEnter,\r\n            onClear: handleClear\r\n          }\"\r\n        >\r\n          <input\r\n            ref=\"control\"\r\n            :class=\"nh.be('input')\"\r\n            :autofocus=\"props.autofocus\"\r\n            :spellcheck=\"props.spellcheck\"\r\n            :disabled=\"props.disabled\"\r\n            :placeholder=\"props.placeholder ?? locale.placeholder\"\r\n            :readonly=\"isReadonly\"\r\n            :name=\"props.name\"\r\n            autocomplete=\"off\"\r\n            tabindex=\"-1\"\r\n            role=\"combobox\"\r\n            aria-autocomplete=\"list\"\r\n            @submit.prevent\r\n            @input=\"handleInput\"\r\n            @keydown=\"handleKeyDown\"\r\n            @focus=\"handleFocus($event)\"\r\n            @blur=\"handleBlur($event)\"\r\n            @compositionstart=\"composing = true\"\r\n            @compositionend=\"handleCompositionEnd\"\r\n            @change=\"handleCompositionEnd\"\r\n          />\r\n        </Renderer>\r\n      </slot>\r\n    </template>\r\n    <template v-if=\"hasSuffix\" #suffix>\r\n      <slot name=\"suffix\">\r\n        <Renderer :renderer=\"props.slots.suffix\">\r\n          <Icon :icon=\"props.suffix\"></Icon>\r\n        </Renderer>\r\n      </slot>\r\n    </template>\r\n    <template v-if=\"$slots.default || props.slots.default\" #default=\"{ option, index, selected }\">\r\n      <slot :option=\"option\" :index=\"index\" :selected=\"selected\">\r\n        <Renderer :renderer=\"props.slots.default\" :data=\"{ option, index, selected }\"></Renderer>\r\n      </slot>\r\n    </template>\r\n    <template v-if=\"$slots.group || props.slots.group\" #group=\"{ option, index }\">\r\n      <slot name=\"group\" :option=\"option\" :index=\"index\">\r\n        <Renderer :renderer=\"props.slots.group\" :data=\"{ option, index }\"></Renderer>\r\n      </slot>\r\n    </template>\r\n    <template v-if=\"$slots.prepend || props.slots.prepend\" #prepend>\r\n      <slot name=\"prepend\">\r\n        <Renderer :renderer=\"props.slots.prepend\"></Renderer>\r\n      </slot>\r\n    </template>\r\n    <template v-if=\"$slots.append || props.slots.append\" #append>\r\n      <slot name=\"append\">\r\n        <Renderer :renderer=\"props.slots.append\"></Renderer>\r\n      </slot>\r\n    </template>\r\n    <template\r\n      v-if=\"$slots.list || props.slots.list\"\r\n      #list=\"{ options, isSelected, handleSelect: onSelect }\"\r\n    >\r\n      <slot\r\n        name=\"list\"\r\n        :options=\"options\"\r\n        :is-selected=\"isSelected as AutoCompleteListSlotParams['isSelected']\"\r\n        :handle-select=\"onSelect as AutoCompleteListSlotParams['handleSelect']\"\r\n      >\r\n        <Renderer\r\n          :renderer=\"props.slots.list\"\r\n          :data=\"{\r\n            options,\r\n            isSelected,\r\n            handleSelect: onSelect\r\n          }\"\r\n        ></Renderer>\r\n      </slot>\r\n    </template>\r\n  </Select>\r\n</template>\r\n","import { booleanProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ComponentSize, ConfigurableProps } from '@vexip-ui/config'\r\nimport type { AvatarGroupSlots, AvatarObjectFit, AvatarOption, AvatarSlots } from './symbol'\r\n\r\nexport const avatarProps = buildProps({\r\n  size: [Number, String] as PropType<number | ComponentSize>,\r\n  src: String,\r\n  icon: iconProp,\r\n  circle: booleanProp,\r\n  alt: String,\r\n  fit: String as PropType<AvatarObjectFit>,\r\n  srcSet: String,\r\n  gap: Number,\r\n  iconScale: Number,\r\n  fallbackSrc: String,\r\n  color: String,\r\n  background: String,\r\n  slots: Object as PropType<AvatarSlots>,\r\n  onError: eventProp<(event: Event) => void>(),\r\n  onClick: eventProp<(event: MouseEvent) => void>(),\r\n})\r\n\r\nexport type AvatarProps = ExtractPropTypes<typeof avatarProps>\r\nexport type AvatarCProps = ConfigurableProps<ExtractPropTypes<typeof avatarProps>, 'src'>\r\n\r\nexport const avatarGroupProps = buildProps({\r\n  size: [Number, String] as PropType<number | ComponentSize>,\r\n  options: Object as PropType<AvatarOption[]>,\r\n  circle: booleanProp,\r\n  max: Number,\r\n  showTip: booleanProp,\r\n  tipTrigger: String as PropType<'hover' | 'click'>,\r\n  vertical: booleanProp,\r\n  offset: Number,\r\n  restColor: String,\r\n  restBackground: String,\r\n  slots: Object as PropType<AvatarGroupSlots>,\r\n})\r\n\r\nexport type AvatarGroupProps = ExtractPropTypes<typeof avatarGroupProps>\r\nexport type AvatarGroupCProps = ConfigurableProps<ExtractPropTypes<typeof avatarGroupProps>>\r\n","import type { InjectionKey } from 'vue'\r\nimport type { ComponentSize } from '@vexip-ui/config'\r\n\r\nexport type AvatarObjectFit = 'fill' | 'contain' | 'cover' | 'none' | 'scale-down'\r\nexport type AvatarOption = ({ src: string } | { icon: Record<string, any> } | { text: string }) &\r\n  Record<string, any>\r\n\r\nexport interface AvatarGroupState {\r\n  size: number | ComponentSize,\r\n}\r\n\r\nexport interface AvatarSlots {\r\n  default?: () => any,\r\n  icon?: () => any,\r\n}\r\n\r\nexport interface AvatarGroupSlots {\r\n  default?: (params: { option: AvatarOption, index: number }) => any,\r\n  rest?: (params: { options: AvatarOption[], count: number }) => any,\r\n  tip?: (params: { options: AvatarOption[], count: number }) => any,\r\n}\r\n\r\nexport const GROUP_STATE = '__VXP_AVATAR_GROUP_STATE' as unknown as InjectionKey<AvatarGroupState>\r\n\r\nexport const objectFitValues = Object.freeze<AvatarObjectFit[]>([\r\n  'fill',\r\n  'contain',\r\n  'cover',\r\n  'none',\r\n  'scale-down',\r\n])\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, inject, ref, watch } from 'vue'\r\n\r\nimport { createIconProp, emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useDisplay } from '@vexip-ui/hooks'\r\nimport { avatarProps } from './props'\r\nimport { GROUP_STATE, objectFitValues } from './symbol'\r\n\r\nimport type { ComponentSize, StyleType } from '@vexip-ui/config'\r\n\r\ndefineOptions({ name: 'Avatar' })\r\n\r\nconst _props = defineProps(avatarProps)\r\nconst props = useProps('avatar', _props, {\r\n  size: 'default',\r\n  src: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  icon: createIconProp(),\r\n  circle: false,\r\n  alt: '',\r\n  fit: {\r\n    default: 'cover',\r\n    validator: value => objectFitValues.includes(value),\r\n  },\r\n  srcSet: '',\r\n  gap: 4,\r\n  iconScale: 1.4,\r\n  fallbackSrc: '',\r\n  color: null,\r\n  background: null,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst slots = defineSlots<{\r\n  default?: () => any,\r\n  icon?: () => any,\r\n}>()\r\n\r\nconst groupState = inject(GROUP_STATE, null)\r\n\r\nconst nh = useNameHelper('avatar')\r\n\r\nconst loadFail = ref(false)\r\nconst fallbackFail = ref(false)\r\n\r\nconst wrapper = ref<HTMLElement>()\r\nconst text = useDisplay(() => scaleText(true))\r\n\r\nconst size = computed(() => {\r\n  return groupState?.size ?? props.size\r\n})\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm(size.value as ComponentSize)]:\r\n      typeof size.value !== 'number' && size.value !== 'default',\r\n    [nh.bm('circle')]: props.circle,\r\n  }\r\n})\r\nconst style = computed(() => {\r\n  const style: StyleType = {\r\n    [nh.cv('color')]: props.color,\r\n    [nh.cv('bg-color')]: props.background,\r\n    [nh.cv('image-fit')]: props.fit,\r\n  }\r\n\r\n  if (typeof size.value === 'number') {\r\n    style[nh.cv('size')] = `${size.value}px`\r\n  }\r\n\r\n  return style\r\n})\r\n\r\nwatch(\r\n  () => props.src,\r\n  () => {\r\n    loadFail.value = false\r\n    fallbackFail.value = false\r\n    scaleText()\r\n  },\r\n)\r\nwatch(\r\n  () => props.fallbackSrc,\r\n  () => {\r\n    fallbackFail.value = false\r\n    scaleText()\r\n  },\r\n)\r\nwatch(\r\n  () => props.gap,\r\n  () => scaleText(),\r\n)\r\n\r\ndefineExpose({ loadFail, fallbackFail })\r\n\r\nfunction handleError(event: Event) {\r\n  loadFail.value = true\r\n  emitEvent(props.onError, event)\r\n}\r\n\r\nlet lastText: string | null = null\r\n\r\nfunction scaleText(force = false) {\r\n  const avatarEl = wrapper.value\r\n  const textEl = text.value\r\n\r\n  if (avatarEl && textEl && (force || lastText === null || lastText !== textEl.textContent)) {\r\n    lastText = textEl.textContent\r\n\r\n    const { offsetWidth: avatarWidth, offsetHeight: avatarHeight } = avatarEl\r\n    const { offsetWidth: textWidth, offsetHeight: textHeight } = textEl\r\n    const padding = props.gap * 2\r\n\r\n    const ratio = Math.min(\r\n      (avatarWidth - padding) / (textWidth || 1),\r\n      (avatarHeight - padding) / (textHeight || 1),\r\n      1,\r\n    )\r\n\r\n    textEl.style.transform = `scale(${ratio})`\r\n  }\r\n}\r\n\r\nfunction handleClick(event: MouseEvent) {\r\n  emitEvent(props.onClick, event)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    :style=\"style\"\r\n    @click=\"handleClick\"\r\n  >\r\n    <img\r\n      v-if=\"(props.src || props.srcSet) && !loadFail\"\r\n      :class=\"nh.be('image')\"\r\n      :src=\"props.src\"\r\n      :alt=\"props.alt\"\r\n      :srcset=\"props.srcSet\"\r\n      @error=\"handleError\"\r\n    />\r\n    <img\r\n      v-else-if=\"loadFail && props.fallbackSrc && !fallbackFail\"\r\n      :class=\"nh.be('image')\"\r\n      :src=\"props.fallbackSrc\"\r\n      :alt=\"props.alt\"\r\n      @error=\"fallbackFail = true\"\r\n    />\r\n    <template v-else-if=\"icon || slots.icon\">\r\n      <slot name=\"icon\">\r\n        <Renderer :renderer=\"props.slots.icon\">\r\n          <Icon :class=\"nh.be('icon')\" :icon=\"icon\" :scale=\"props.iconScale\"></Icon>\r\n        </Renderer>\r\n      </slot>\r\n    </template>\r\n    <ResizeObserver v-else :on-resize=\"scaleText\">\r\n      <span ref=\"text\" :class=\"nh.be('text')\">\r\n        <slot>\r\n          <Renderer :renderer=\"props.slots.default\"></Renderer>\r\n        </slot>\r\n      </span>\r\n    </ResizeObserver>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Avatar } from '@/components/avatar'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { Tooltip } from '@/components/tooltip'\r\n\r\nimport { computed, provide, ref, watchEffect } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { avatarGroupProps } from './props'\r\nimport { GROUP_STATE } from './symbol'\r\n\r\nimport type { ComponentSize } from '@vexip-ui/config'\r\nimport type { AvatarGroupSlots, AvatarOption } from './symbol'\r\n\r\ndefineOptions({ name: 'AvatarGroup' })\r\n\r\nconst _props = defineProps(avatarGroupProps)\r\nconst props = useProps('avatarGroup', _props, {\r\n  size: 'default',\r\n  options: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  circle: false,\r\n  max: null,\r\n  showTip: false,\r\n  tipTrigger: 'hover',\r\n  vertical: false,\r\n  offset: null,\r\n  restColor: null,\r\n  restBackground: null,\r\n  slots: () => ({}),\r\n})\r\n\r\ndefineSlots<AvatarGroupSlots>()\r\n\r\nconst nh = useNameHelper('avatar-group')\r\n\r\nconst renderAvatars = ref<AvatarOption[]>([])\r\nconst restAvatars = ref<AvatarOption[]>([])\r\n\r\nwatchEffect(() => {\r\n  const size = props.options.length\r\n\r\n  if (props.max > 0 && size > props.max) {\r\n    renderAvatars.value = props.options.slice(0, props.max - 1)\r\n    restAvatars.value = props.options.slice(props.max - 1)\r\n  } else {\r\n    renderAvatars.value = Array.from(props.options)\r\n    restAvatars.value = []\r\n  }\r\n})\r\n\r\nprovide(GROUP_STATE, props)\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.ns('avatar-vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm(props.size as ComponentSize)]:\r\n      typeof props.size !== 'number' && props.size !== 'default',\r\n    [nh.bm('circle')]: props.circle,\r\n    [nh.bm('vertical')]: props.vertical,\r\n  }\r\n})\r\nconst style = computed(() => {\r\n  const style: Record<string, string> = {}\r\n\r\n  if (typeof props.offset === 'number') {\r\n    style[nh.cv('offset')] = `${props.offset}px`\r\n  }\r\n\r\n  return style\r\n})\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"className\" role=\"group\" :style=\"style\">\r\n    <div v-for=\"(option, index) in renderAvatars\" :key=\"index\" :class=\"nh.be('item')\">\r\n      <slot :option=\"option\" :index=\"index\">\r\n        <Renderer :renderer=\"props.slots.default\" :data=\"{ option, index }\">\r\n          <Avatar\r\n            inherit\r\n            :src=\"option.src\"\r\n            :icon=\"option.icon\"\r\n            :alt=\"option.alt\"\r\n            :fit=\"option.fit\"\r\n            :src-set=\"option.srcSet\"\r\n            :gap=\"option.gap\"\r\n            :icon-scale=\"option.iconScale\"\r\n            :fallback-src=\"option.fallbackSrc\"\r\n          >\r\n            {{ option.text }}\r\n          </Avatar>\r\n        </Renderer>\r\n      </slot>\r\n    </div>\r\n    <div v-if=\"restAvatars.length\" :class=\"[nh.be('item'), nh.bem('item', 'rest')]\">\r\n      <Tooltip\r\n        v-if=\"props.showTip\"\r\n        inherit\r\n        :trigger=\"props.tipTrigger\"\r\n        :tip-class=\"nh.be('rest')\"\r\n      >\r\n        <template #trigger>\r\n          <slot name=\"rest\" :options=\"restAvatars\" :count=\"restAvatars.length\">\r\n            <Renderer\r\n              :renderer=\"props.slots.rest\"\r\n              :data=\"{ options: restAvatars, count: restAvatars.length }\"\r\n            >\r\n              <Avatar inherit :color=\"props.restColor\" :background=\"props.restBackground\">\r\n                {{ `+${restAvatars.length}` }}\r\n              </Avatar>\r\n            </Renderer>>\r\n          </slot>\r\n        </template>\r\n        <slot name=\"tip\" :options=\"restAvatars\" :count=\"restAvatars.length\">\r\n          <Renderer\r\n            :renderer=\"props.slots.tip\"\r\n            :data=\"{ options: restAvatars, count: restAvatars.length }\"\r\n          >\r\n            <Avatar\r\n              v-for=\"(option, index) in restAvatars\"\r\n              :key=\"index\"\r\n              inherit\r\n              :src=\"option.src\"\r\n              :icon=\"option.icon\"\r\n              :alt=\"option.alt\"\r\n              :fit=\"option.fit\"\r\n              :src-set=\"option.srcSet\"\r\n              :gap=\"option.gap\"\r\n              :icon-scale=\"option.iconScale\"\r\n              :fallback-src=\"option.fallbackSrc\"\r\n            >\r\n              {{ option.text }}\r\n            </Avatar>\r\n          </Renderer>\r\n        </slot>\r\n      </Tooltip>\r\n      <slot\r\n        v-else\r\n        name=\"rest\"\r\n        :options=\"restAvatars\"\r\n        :count=\"restAvatars.length\"\r\n      >\r\n        <Renderer\r\n          :renderer=\"props.slots.rest\"\r\n          :data=\"{ options: restAvatars, count: restAvatars.length }\"\r\n        >\r\n          <Avatar inherit :color=\"props.restColor\" :background=\"props.restBackground\">\r\n            {{ `+${restAvatars.length}` }}\r\n          </Avatar>\r\n        </Renderer>\r\n      </slot>\r\n    </div>\r\n  </div>\r\n</template>\r\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { BadgeSlots, BadgeType } from './symbol'\r\n\r\nexport const badgeProps = buildProps({\r\n  content: [Number, String],\r\n  max: Number,\r\n  disabled: booleanProp,\r\n  isDot: booleanProp,\r\n  type: String as PropType<BadgeType>,\r\n  color: String,\r\n  slots: Object as PropType<BadgeSlots>,\r\n  onBadgeClick: eventProp<(event: MouseEvent) => void>(),\r\n})\r\n\r\nexport type BadgeProps = ExtractPropTypes<typeof badgeProps>\r\nexport type BadgeCProps = ConfigurableProps<BadgeProps, 'content'>\r\n","export type BadgeType = 'error' | 'primary' | 'success' | 'warning' | 'info' | 'disabled'\r\n\r\nexport interface BadgeSlots {\r\n  default?: () => any,\r\n  content?: (params: { content: number | string }) => any,\r\n}\r\n\r\nexport const badgeTypes = Object.freeze<BadgeType[]>([\r\n  'error',\r\n  'primary',\r\n  'success',\r\n  'warning',\r\n  'info',\r\n  'disabled',\r\n])\r\n","<script setup lang=\"ts\">\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { badgeProps } from './props'\r\nimport { badgeTypes } from './symbol'\r\n\r\nimport type { BadgeSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'Badge' })\r\n\r\nconst _props = defineProps(badgeProps)\r\nconst props = useProps('badge', _props, {\r\n  content: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  max: 0,\r\n  disabled: false,\r\n  isDot: false,\r\n  type: {\r\n    default: 'error',\r\n    validator: value => badgeTypes.includes(value),\r\n  },\r\n  color: null,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst slots = defineSlots<BadgeSlots>()\r\n\r\nconst nh = useNameHelper('badge')\r\n\r\nconst hasSlot = computed(() => {\r\n  return !!slots.default\r\n})\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm('not-wrapper')]: !hasSlot.value,\r\n    [nh.bm('is-dot')]: props.isDot,\r\n  }\r\n})\r\nconst renderContent = computed(() => {\r\n  if (props.isDot) return ''\r\n\r\n  if (typeof props.content === 'number' && props.max > 0) {\r\n    return props.content > props.max ? `${props.max}+` : props.content\r\n  }\r\n\r\n  return props.content\r\n})\r\nconst transitionName = computed(() => {\r\n  return hasSlot.value ? nh.bs('badge-zoom') : nh.bs('zoom')\r\n})\r\nconst title = computed(() => {\r\n  return props.content || props.content === 0 ? props.content.toString() : undefined\r\n})\r\nconst showSub = computed(() => {\r\n  return !props.disabled && (props.content || props.content === 0 || props.isDot)\r\n})\r\n\r\nfunction handleBadgeClick(event: MouseEvent) {\r\n  emitEvent(props.onBadgeClick, event)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"className\">\r\n    <slot>\r\n      <Renderer :renderer=\"props.slots.default\"></Renderer>\r\n    </slot>\r\n    <Transition :name=\"transitionName\">\r\n      <sup\r\n        v-show=\"showSub\"\r\n        :class=\"{\r\n          [nh.be('content')]: true,\r\n          [nh.bem('content', 'fixed')]: hasSlot,\r\n          [nh.bem('content', props.type)]: props.type !== 'error'\r\n        }\"\r\n        :style=\"{ backgroundColor: props.color }\"\r\n        :title=\"title\"\r\n        @click=\"handleBadgeClick\"\r\n      >\r\n        <slot name=\"content\" :content=\"renderContent\">\r\n          <Renderer :renderer=\"props.slots.content\" :data=\"{ content: renderContent }\">\r\n            {{ renderContent }}\r\n          </Renderer>\r\n        </slot>\r\n      </sup>\r\n    </Transition>\r\n  </div>\r\n</template>\r\n","import { booleanProp, buildProps, eventProp, wrapProps } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { Router } from 'vue-router'\r\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\r\nimport type { BreadcrumbOptions, BreadcrumbSlots, SelectEvent } from './symbol'\r\n\r\nexport const breadcrumbProps = buildProps({\r\n  separator: String,\r\n  border: booleanProp,\r\n  options: Array as PropType<(string | BreadcrumbOptions)[]>,\r\n  router: Object as PropType<Router>,\r\n  slots: Object as PropType<BreadcrumbSlots>,\r\n  onSelect: eventProp<EventListener<SelectEvent>>(),\r\n  onSeparatorClick: eventProp<EventListener<SelectEvent>>(),\r\n})\r\n\r\nexport type BreadcrumbProps = ExtractPropTypes<typeof breadcrumbProps>\r\nexport type BreadcrumbCProps = ConfigurableProps<BreadcrumbProps>\r\n\r\nexport const breadcrumbItemProps = wrapProps({\r\n  label: {\r\n    type: [String, Number],\r\n    default: null,\r\n  },\r\n  onSelect: eventProp<EventListener<SelectEvent>>(),\r\n  onSeparatorClick: eventProp<EventListener<SelectEvent>>(),\r\n})\r\n\r\nexport type BreadcrumbItemProps = ExtractPropTypes<typeof breadcrumbItemProps>\r\n","import type { InjectionKey } from 'vue'\r\n\r\nexport interface BreadcrumbOptions {\r\n  label: string,\r\n  name?: string | (() => string),\r\n}\r\n\r\nexport type SeparatorRenderFn = (data: { label: string | number }) => any\r\n\r\nexport interface BreadcrumbItemState {\r\n  label: string | number,\r\n}\r\n\r\nexport interface BreadcrumbState {\r\n  separator: string,\r\n  separatorRenderer: null | SeparatorRenderFn,\r\n  increaseItem: (item: BreadcrumbItemState) => void,\r\n  decreaseItem: (item: BreadcrumbItemState) => void,\r\n  handleSelect: (label: string | number) => void,\r\n  refreshLabels: () => void,\r\n  handleSeparatorClick: (label: string | number) => void,\r\n}\r\n\r\nexport type SelectEvent = (label: string | number) => void\r\n\r\nexport interface BreadcrumbSlots {\r\n  default?: () => any,\r\n  item?: (params: { option: BreadcrumbOptions, index: number }) => any,\r\n  separator?: (params: { label: string | number }) => any,\r\n}\r\n\r\nexport const BREADCRUMB_STATE = '__VXP_BREADCRUMB_STATE' as unknown as InjectionKey<BreadcrumbState>\r\n","<script setup lang=\"ts\">\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { inject, onBeforeUnmount, reactive, ref, watch } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper } from '@vexip-ui/config'\r\nimport { isFunction } from '@vexip-ui/utils'\r\nimport { breadcrumbItemProps } from './props'\r\nimport { BREADCRUMB_STATE } from './symbol'\r\n\r\nimport type { BreadcrumbItemState, SelectEvent, SeparatorRenderFn } from './symbol'\r\n\r\ndefineOptions({ name: 'BreadcrumbItem' })\r\n\r\nconst props = defineProps(breadcrumbItemProps)\r\n\r\ndefineSlots<{\r\n  default: () => any,\r\n  separator: () => any,\r\n}>()\r\n\r\nconst nh = useNameHelper('breadcrumb')\r\n\r\nconst breadcrumbState = inject(BREADCRUMB_STATE, null)\r\n\r\nconst currentLabel = ref(props.label)\r\nconst separator = ref('/')\r\nconst separatorRenderer = ref<SeparatorRenderFn | null>(null)\r\n\r\nwatch(\r\n  () => props.label,\r\n  value => {\r\n    currentLabel.value = value\r\n    breadcrumbState?.refreshLabels()\r\n  },\r\n)\r\n\r\nif (breadcrumbState) {\r\n  const state: BreadcrumbItemState = reactive({\r\n    label: currentLabel,\r\n  })\r\n\r\n  watch(\r\n    () => breadcrumbState.separator,\r\n    value => {\r\n      separator.value = value\r\n    },\r\n    { immediate: true },\r\n  )\r\n  watch(\r\n    () => breadcrumbState.separatorRenderer,\r\n    value => {\r\n      separatorRenderer.value = value\r\n    },\r\n    { immediate: true },\r\n  )\r\n\r\n  breadcrumbState.increaseItem(state)\r\n\r\n  onBeforeUnmount(() => {\r\n    breadcrumbState.decreaseItem(state)\r\n  })\r\n}\r\n\r\nfunction handleClick() {\r\n  emitEvent(props.onSelect! as SelectEvent, currentLabel.value)\r\n  breadcrumbState?.handleSelect(currentLabel.value)\r\n}\r\n\r\nfunction handleSeparatorClick() {\r\n  emitEvent(props.onSeparatorClick! as SelectEvent, currentLabel.value)\r\n  breadcrumbState?.handleSeparatorClick(currentLabel.value)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <li :class=\"nh.be('item')\">\r\n    <a\r\n      :class=\"nh.be('label')\"\r\n      tabindex=\"0\"\r\n      @click=\"handleClick\"\r\n      @keydown.enter=\"handleClick\"\r\n    >\r\n      <slot>{{ label }}</slot>\r\n    </a>\r\n    <span :class=\"nh.be('separator')\" role=\"separator\" @click=\"handleSeparatorClick\">\r\n      <slot name=\"separator\">\r\n        <Renderer\r\n          v-if=\"isFunction(separatorRenderer)\"\r\n          :renderer=\"separatorRenderer\"\r\n          :data=\"{ label: currentLabel }\"\r\n        ></Renderer>\r\n        <template v-else>\r\n          {{ separator }}\r\n        </template>\r\n      </slot>\r\n    </span>\r\n  </li>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { BreadcrumbItem } from '@/components/breadcrumb-item'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, provide, reactive, toRef, watch } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { callIfFunc, debounceMinor, isNull } from '@vexip-ui/utils'\r\nimport { breadcrumbProps } from './props'\r\nimport { BREADCRUMB_STATE } from './symbol'\r\n\r\nimport type {\r\n  BreadcrumbItemState,\r\n  BreadcrumbOptions,\r\n  BreadcrumbSlots,\r\n  BreadcrumbState,\r\n  SelectEvent,\r\n} from './symbol'\r\n\r\ndefineOptions({ name: 'Breadcrumb' })\r\n\r\nconst _props = defineProps(breadcrumbProps)\r\nconst props = useProps('breadcrumb', _props, {\r\n  separator: '/',\r\n  border: false,\r\n  options: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  router: null,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst slots = defineSlots<BreadcrumbSlots>()\r\n\r\nconst nh = useNameHelper('breadcrumb')\r\nconst itemStates = new Set<BreadcrumbItemState>()\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm('border')]: props.border,\r\n  }\r\n})\r\nconst normalizedOptions = computed(() => {\r\n  if (props.router && !props.options?.length) {\r\n    const matched = props.router.currentRoute.value.matched\r\n    const options: BreadcrumbOptions[] = []\r\n\r\n    for (const route of matched) {\r\n      const meta = (route.meta || {}) as any\r\n\r\n      if (meta.menu === false) {\r\n        continue\r\n      }\r\n\r\n      options.push({\r\n        label: meta.label || route.path,\r\n        name: meta.name || route.name,\r\n      })\r\n    }\r\n\r\n    return options\r\n  }\r\n\r\n  return props.options.map(option => {\r\n    if (typeof option === 'string') {\r\n      return { label: option }\r\n    }\r\n\r\n    return option\r\n  })\r\n})\r\n\r\nconst refreshLabels = debounceMinor(() => {\r\n  Array.from(itemStates).forEach((item, index) => {\r\n    if (isNull(item.label)) {\r\n      item.label = index + 1\r\n    }\r\n  })\r\n})\r\n\r\nconst state: BreadcrumbState = reactive({\r\n  separator: toRef(props, 'separator'),\r\n  separatorRenderer: null,\r\n  increaseItem,\r\n  decreaseItem,\r\n  handleSelect,\r\n  refreshLabels,\r\n  handleSeparatorClick,\r\n})\r\n\r\nprovide(BREADCRUMB_STATE, state)\r\n\r\nwatch(\r\n  [() => slots.separator, () => props.slots.separator],\r\n  ([slotValue, propValue]) => {\r\n    state.separatorRenderer = slotValue\r\n      ? data => slotValue(data)\r\n      : propValue\r\n        ? data => propValue(data)\r\n        : null\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\nfunction increaseItem(item: BreadcrumbItemState) {\r\n  itemStates.add(item)\r\n  refreshLabels()\r\n}\r\n\r\nfunction decreaseItem(item: BreadcrumbItemState) {\r\n  itemStates.delete(item)\r\n  refreshLabels()\r\n}\r\n\r\nfunction handleSelect(label: string | number) {\r\n  emitEvent(props.onSelect as SelectEvent, label)\r\n}\r\n\r\nfunction handleSeparatorClick(label: string | number) {\r\n  emitEvent(props.onSeparatorClick as SelectEvent, label)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <ol :class=\"className\">\r\n    <slot>\r\n      <Renderer :renderer=\"props.slots.default\">\r\n        <BreadcrumbItem\r\n          v-for=\"(option, index) in normalizedOptions\"\r\n          :key=\"option.label\"\r\n          :label=\"option.label\"\r\n        >\r\n          <slot name=\"item\" :option=\"option\" :index=\"index\">\r\n            <Renderer :renderer=\"props.slots.item\" :data=\"{ option, index }\">\r\n              {{ option.name ? callIfFunc(option.name) : option.label }}\r\n            </Renderer>\r\n          </slot>\r\n        </BreadcrumbItem>\r\n      </Renderer>\r\n    </slot>\r\n  </ol>\r\n</template>\r\n","import { booleanStringProp, buildProps, classProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { Placement } from '@vexip-ui/hooks'\r\nimport type { BubbleType } from './symbol'\r\n\r\nexport const bubbleProps = buildProps({\r\n  placement: String as PropType<Placement>,\r\n  type: String as PropType<BubbleType>,\r\n  background: String,\r\n  shadow: booleanStringProp,\r\n  contentClass: classProp,\r\n})\r\n\r\nexport type BubbleProps = ExtractPropTypes<typeof bubbleProps>\r\nexport type BubbleCProps = ConfigurableProps<BubbleProps>\r\n","export type BubbleType = 'default' | 'primary' | 'info' | 'success' | 'warning' | 'error'\r\n\r\nexport const bubbleTypes = Object.freeze<BubbleType[]>([\r\n  'default',\r\n  'primary',\r\n  'info',\r\n  'success',\r\n  'warning',\r\n  'error',\r\n])\r\n","<script setup lang=\"ts\">\r\nimport { computed, ref } from 'vue'\r\n\r\nimport { placementWhileList } from '@vexip-ui/hooks'\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { bubbleProps } from './props'\r\nimport { bubbleTypes } from './symbol'\r\n\r\ndefineOptions({ name: 'Bubble' })\r\n\r\nconst _props = defineProps(bubbleProps)\r\nconst props = useProps('bubble', _props, {\r\n  placement: {\r\n    default: 'right',\r\n    validator: value => placementWhileList.includes(value),\r\n  },\r\n  type: {\r\n    default: null,\r\n    validator: value => bubbleTypes.includes(value),\r\n  },\r\n  background: '',\r\n  shadow: false,\r\n  contentClass: null,\r\n})\r\n\r\nconst nh = useNameHelper('bubble')\r\n\r\nconst wrapper = ref<HTMLElement>()\r\nconst arrow = ref<HTMLElement>()\r\n\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    nh.bm(props.placement),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('background')]: props.background,\r\n      [nh.bm('shadow')]: props.shadow,\r\n      [nh.bm(props.type)]: props.type !== 'default',\r\n    },\r\n  ]\r\n})\r\nconst style = computed(() => {\r\n  if (props.background) {\r\n    return {\r\n      [nh.cv('color')]: nh.gnv('color-white'),\r\n      [nh.cv('bg-color')]: props.background,\r\n    }\r\n  }\r\n\r\n  return undefined\r\n})\r\n\r\ndefineExpose({ wrapper, arrow })\r\n</script>\r\n\r\n<template>\r\n  <div ref=\"wrapper\" :class=\"className\" :style=\"style\">\r\n    <div\r\n      :class=\"[nh.be('content'), props.contentClass]\"\r\n      :style=\"{\r\n        boxShadow: props.shadow ? `0 0 4px ${props.shadow}` : undefined\r\n      }\"\r\n    >\r\n      <slot></slot>\r\n    </div>\r\n    <div ref=\"arrow\" :class=\"nh.be('arrow')\"></div>\r\n  </div>\r\n</template>\r\n","import { booleanProp, buildProps, eventProp, iconProp, sizeProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { ButtonAttrType, ButtonSlots, ButtonType } from './symbol'\r\n\r\nexport const buttonProps = buildProps({\r\n  size: sizeProp,\r\n  type: String as PropType<ButtonType>,\r\n  dashed: booleanProp,\r\n  text: booleanProp,\r\n  simple: booleanProp,\r\n  ghost: booleanProp,\r\n  disabled: booleanProp,\r\n  loading: booleanProp,\r\n  circle: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  icon: iconProp,\r\n  color: String,\r\n  buttonType: String as PropType<ButtonAttrType>,\r\n  block: booleanProp,\r\n  tag: String,\r\n  noPulse: booleanProp,\r\n  badge: [String, Number],\r\n  slots: Object as PropType<ButtonSlots>,\r\n  onClick: eventProp<(event: MouseEvent) => void>(),\r\n})\r\n\r\nexport type ButtonProps = ExtractPropTypes<typeof buttonProps>\r\nexport type ButtonCProps = ConfigurableProps<ButtonProps>\r\n\r\nexport const buttonGroupProps = buildProps({\r\n  size: sizeProp,\r\n  type: String as PropType<ButtonType>,\r\n  circle: booleanProp,\r\n})\r\n\r\nexport type ButtonGroupProps = ExtractPropTypes<typeof buttonGroupProps>\r\nexport type ButtonGroupCProps = ConfigurableProps<ButtonGroupProps>\r\n","import type { InjectionKey } from 'vue'\r\nimport type { ComponentSize } from '@vexip-ui/config'\r\n\r\nexport type ButtonType = 'default' | 'primary' | 'info' | 'success' | 'warning' | 'error'\r\nexport type ButtonAttrType = 'button' | 'submit' | 'reset'\r\n\r\nexport interface ButtonState {\r\n  index: number,\r\n  isLast: boolean,\r\n}\r\n\r\nexport interface ButtonGroupState {\r\n  type: ButtonType,\r\n  size: ComponentSize,\r\n  increaseItem: (item: ButtonState) => void,\r\n  decreaseItem: (item: ButtonState) => void,\r\n  refreshIndexes: () => void,\r\n}\r\n\r\nexport interface ButtonSlots {\r\n  default?: () => any,\r\n  icon?: () => any,\r\n  loading?: () => any,\r\n}\r\n\r\nexport const GROUP_STATE = '__VXP_BUTTON_GROUP_STATE' as unknown as InjectionKey<ButtonGroupState>\r\n\r\nexport const buttonTypes = Object.freeze<ButtonType[]>([\r\n  'default',\r\n  'primary',\r\n  'info',\r\n  'success',\r\n  'warning',\r\n  'error',\r\n])\r\n","import { Badge } from '@/components/badge'\r\nimport { CollapseTransition } from '@/components/collapse-transition'\r\nimport { Icon } from '@/components/icon'\r\nimport { FIELD_OPTIONS } from '@/components/form/symbol'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, defineComponent, inject, onBeforeUnmount, reactive, ref, renderSlot } from 'vue'\r\n\r\nimport {\r\n  createIconProp,\r\n  createSizeProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { adjustAlpha, isClient, mixColor, parseColorToRgba } from '@vexip-ui/utils'\r\nimport { buttonProps } from './props'\r\nimport { GROUP_STATE, buttonTypes } from './symbol'\r\n\r\nexport default defineComponent({\r\n  name: 'Button',\r\n  props: buttonProps,\r\n  emits: [],\r\n  setup(_props, { slots }) {\r\n    const fieldActions = inject(FIELD_OPTIONS, null)\r\n\r\n    const props = useProps('button', _props, {\r\n      size: createSizeProp(fieldActions ? fieldActions.size : undefined),\r\n      type: {\r\n        default: null,\r\n        validator: value => buttonTypes.includes(value),\r\n      },\r\n      dashed: false,\r\n      text: false,\r\n      simple: false,\r\n      ghost: false,\r\n      disabled: () => (fieldActions ? fieldActions.disabled.value : false),\r\n      loading: () => (fieldActions ? fieldActions.loading.value : false),\r\n      circle: false,\r\n      loadingIcon: createIconProp(),\r\n      loadingEffect: null,\r\n      icon: createIconProp(),\r\n      color: null,\r\n      buttonType: {\r\n        default: 'button',\r\n        validator: value => ['button', 'submit', 'reset'].includes(value),\r\n      },\r\n      block: false,\r\n      tag: 'button',\r\n      noPulse: false,\r\n      badge: null,\r\n      slots: () => ({}),\r\n    })\r\n\r\n    const groupState = inject(GROUP_STATE, null)\r\n\r\n    const nh = useNameHelper('button')\r\n    const icons = useIcons()\r\n    const pulsing = ref(false)\r\n    const index = ref(0)\r\n    const isLast = ref(false)\r\n\r\n    const isIconOnly = computed(() => {\r\n      return !slots.default && !props.slots.default\r\n    })\r\n    const type = computed(() => {\r\n      return props.type ?? groupState?.type ?? 'default'\r\n    })\r\n    const size = computed(() => {\r\n      return groupState?.size ?? props.size\r\n    })\r\n    const className = computed(() => {\r\n      return {\r\n        [nh.b()]: true,\r\n        [nh.bs('vars')]: true,\r\n        [nh.bm('inherit')]: props.inherit,\r\n        [nh.bm(type.value)]: type.value !== 'default',\r\n        [nh.bm('simple')]: !props.ghost && props.simple,\r\n        [nh.bm('ghost')]: props.ghost,\r\n        [nh.bm('text')]: props.text,\r\n        [nh.bm('dashed')]: props.dashed,\r\n        [nh.bm('disabled')]: props.disabled,\r\n        [nh.bm('loading')]: props.loading,\r\n        [nh.bm('circle')]: props.circle,\r\n        [nh.bm('icon-only')]: isIconOnly.value,\r\n        [nh.bm(size.value)]: size.value !== 'default',\r\n        [nh.bm('pulsing')]: pulsing.value,\r\n        [nh.bm('first')]: index.value === 1,\r\n        [nh.bm('last')]: isLast.value,\r\n        [nh.bm('block')]: props.block,\r\n      }\r\n    })\r\n    const colorMap = computed(() => {\r\n      if (!props.color) return null\r\n\r\n      const rootStyle = isClient ? getComputedStyle(document.documentElement) : null\r\n      const black = parseColorToRgba(rootStyle?.getPropertyValue(nh.nv('color-black')) || '#000')\r\n      const white = parseColorToRgba(rootStyle?.getPropertyValue(nh.nv('color-white')) || '#fff')\r\n      const baseColor = parseColorToRgba(props.color)\r\n\r\n      return {\r\n        base: baseColor.toString(),\r\n        light2: mixColor(white, baseColor, 0.2).toString(),\r\n        dark1: mixColor(black, baseColor, 0.1).toString(),\r\n        opacity1: adjustAlpha(baseColor, 0.9).toString(),\r\n        opacity3: adjustAlpha(baseColor, 0.7).toString(),\r\n        opacity4: adjustAlpha(baseColor, 0.6).toString(),\r\n        opacity7: adjustAlpha(baseColor, 0.3).toString(),\r\n        opacity8: adjustAlpha(baseColor, 0.2).toString(),\r\n        white8: adjustAlpha(white, 0.2).toString(),\r\n        white9: adjustAlpha(white, 0.1).toString(),\r\n      }\r\n    })\r\n    const style = computed<Record<string, string>>(() => {\r\n      if (!colorMap.value) return {}\r\n\r\n      const {\r\n        base,\r\n        light2,\r\n        dark1,\r\n        opacity1,\r\n        opacity3,\r\n        opacity4,\r\n        opacity7,\r\n        opacity8,\r\n        white8,\r\n        white9,\r\n      } = colorMap.value\r\n      const { cvm, gnv } = nh\r\n\r\n      if (props.ghost) {\r\n        return cvm({\r\n          color: base,\r\n          'color-hover': base,\r\n          'color-focus': base,\r\n          'color-active': base,\r\n          'color-disabled': base,\r\n          'bg-color': 'transparent',\r\n          'bg-color-hover': white9,\r\n          'bg-color-focus': white9,\r\n          'bg-color-active': white8,\r\n          'bg-color-disabled': 'transparent',\r\n          'b-color': base,\r\n          'b-color-hover': light2,\r\n          'b-color-focus': light2,\r\n          'b-color-active': dark1,\r\n          'b-color-disabled': gnv('content-color-disabled'),\r\n          'pulse-s-color': dark1,\r\n        })\r\n      }\r\n\r\n      if (props.simple) {\r\n        return cvm({\r\n          color: base,\r\n          'color-hover': base,\r\n          'color-focus': gnv('color-white'),\r\n          'color-active': gnv('color-white'),\r\n          'color-disabled': gnv('content-color-disabled'),\r\n          'bg-color': opacity8,\r\n          'bg-color-hover': opacity7,\r\n          'bg-color-focus': opacity1,\r\n          'bg-color-active': opacity1,\r\n          'bg-color-disabled': gnv('fill-color-background'),\r\n          'b-color': opacity4,\r\n          'b-color-hover': opacity4,\r\n          'b-color-focus': opacity3,\r\n          'b-color-active': opacity3,\r\n          'b-color-disabled': gnv('border-color-light-1'),\r\n          'pulse-s-color': dark1,\r\n        })\r\n      }\r\n\r\n      if (props.text || props.dashed) {\r\n        return cvm({\r\n          ...(props.dashed\r\n            ? {\r\n              'b-color': base,\r\n              'b-color-hover': light2,\r\n              'b-color-focus': light2,\r\n              'b-color-active': dark1,\r\n              'pulse-s-color': dark1,\r\n            }\r\n            : {}),\r\n          color: base,\r\n          'color-hover': light2,\r\n          'color-focus': light2,\r\n          'color-active': dark1,\r\n          'color-disabled': opacity4,\r\n        })\r\n      }\r\n\r\n      return cvm({\r\n        color: gnv('color-white'),\r\n        'color-hover': gnv('color-white'),\r\n        'color-focus': gnv('color-white'),\r\n        'color-active': gnv('color-white'),\r\n        'color-disabled': gnv('content-color-disabled'),\r\n        'bg-color': base,\r\n        'bg-color-hover': light2,\r\n        'bg-color-focus': light2,\r\n        'bg-color-active': dark1,\r\n        'bg-color-disabled': gnv('fill-color-background'),\r\n        'b-color': base,\r\n        'b-color-hover': light2,\r\n        'b-color-focus': light2,\r\n        'b-color-active': dark1,\r\n        'b-color-disabled': gnv('border-color-light-1'),\r\n        'pulse-s-color': dark1,\r\n      })\r\n    })\r\n\r\n    if (groupState) {\r\n      const state = reactive({ index, isLast })\r\n\r\n      groupState.increaseItem(state)\r\n\r\n      onBeforeUnmount(() => {\r\n        groupState.decreaseItem(state)\r\n      })\r\n    }\r\n\r\n    function handleClick(event: MouseEvent) {\r\n      if (props.disabled || props.loading || event.button) return\r\n\r\n      if (!props.noPulse) {\r\n        pulsing.value = false\r\n        requestAnimationFrame(() => {\r\n          pulsing.value = true\r\n        })\r\n      }\r\n\r\n      emitEvent(props.onClick, event)\r\n    }\r\n\r\n    function handleAnimationEnd() {\r\n      pulsing.value = false\r\n    }\r\n\r\n    function renderLoadingIcon() {\r\n      return (\r\n        <div class={[nh.be('icon'), nh.bem('icon', 'loading')]}>\r\n          {renderSlot(slots, 'loading', undefined, () => [\r\n            <Renderer renderer={props.slots.loading}>\r\n              <Icon\r\n                {...icons.value.loading}\r\n                effect={props.loadingEffect || icons.value.loading.effect}\r\n                icon={props.loadingIcon || icons.value.loading.icon}\r\n                label={'loading'}\r\n              ></Icon>\r\n            </Renderer>,\r\n          ])}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderSingleIcon() {\r\n      return props.loading ? (\r\n        renderLoadingIcon()\r\n      ) : (\r\n        <div class={nh.be('icon')}>\r\n          {renderSlot(slots, 'icon', undefined, () => [\r\n            <Renderer renderer={props.slots.icon}>\r\n              {props.icon ? <Icon icon={props.icon}></Icon> : null}\r\n            </Renderer>,\r\n          ])}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderCollapseIcon() {\r\n      if (props.icon || slots.icon || props.slots.icon) {\r\n        return props.loading ? (\r\n          renderLoadingIcon()\r\n        ) : (\r\n          <div class={nh.be('icon')}>\r\n            {renderSlot(slots, 'icon', undefined, () => [\r\n              <Renderer renderer={props.slots.icon}>\r\n                <Icon icon={props.icon}></Icon>\r\n              </Renderer>,\r\n            ])}\r\n          </div>\r\n        )\r\n      }\r\n\r\n      return (\r\n        <CollapseTransition appear horizontal fade-effect>\r\n          {props.loading && renderLoadingIcon()}\r\n        </CollapseTransition>\r\n      )\r\n    }\r\n\r\n    function renderBadge() {\r\n      const badgeType = props.disabled\r\n        ? 'disabled'\r\n        : props.type === 'default'\r\n          ? 'error'\r\n          : props.type\r\n\r\n      return (\r\n        <Badge\r\n          inherit\r\n          class={[nh.be('badge'), nh.bem('badge', badgeType)]}\r\n          content={props.badge}\r\n          type={badgeType}\r\n        ></Badge>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      const Button = (props.tag || 'button') as any\r\n\r\n      return (\r\n        <Button\r\n          type={props.buttonType}\r\n          class={className.value}\r\n          role={'button'}\r\n          style={style.value}\r\n          disabled={props.disabled}\r\n          onClick={handleClick}\r\n          onAnimationend={handleAnimationEnd}\r\n        >\r\n          {isIconOnly.value ? renderSingleIcon() : renderCollapseIcon()}\r\n          {!isIconOnly.value &&\r\n            renderSlot(slots, 'default', undefined, () => [\r\n              <Renderer renderer={props.slots.default}></Renderer>,\r\n            ])}\r\n          {!isIconOnly.value && (props.badge || props.badge === 0) ? renderBadge() : null}\r\n        </Button>\r\n      )\r\n    }\r\n  },\r\n})\r\n","<script setup lang=\"ts\">\r\nimport { computed, provide, reactive, toRef } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { debounceMinor } from '@vexip-ui/utils'\r\nimport { buttonGroupProps } from './props'\r\nimport { GROUP_STATE, buttonTypes } from './symbol'\r\n\r\nimport type { ButtonState, ButtonType } from './symbol'\r\n\r\ndefineOptions({ name: 'ButtonGroup' })\r\n\r\nconst _props = defineProps(buttonGroupProps)\r\nconst props = useProps('buttonGroup', _props, {\r\n  size: null,\r\n  type: {\r\n    default: 'default' as ButtonType,\r\n    validator: (value: ButtonType) => buttonTypes.includes(value),\r\n  },\r\n  circle: false,\r\n})\r\n\r\ndefineSlots<{ default: () => any }>()\r\n\r\nconst nh = useNameHelper('button-group')\r\n\r\nconst itemStates = reactive(new Set<ButtonState>())\r\nconst size = toRef(props, 'size')\r\nconst type = toRef(props, 'type')\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm('circle')]: props.circle,\r\n  }\r\n})\r\nconst itemList = computed(() => Array.from(itemStates))\r\n\r\nconst refreshIndexes = debounceMinor(() => {\r\n  for (let i = 0, len = itemList.value.length; i < len; ++i) {\r\n    const item = itemList.value[i]\r\n\r\n    item.index = i + 1\r\n    item.isLast = i === len - 1\r\n  }\r\n})\r\n\r\nprovide(\r\n  GROUP_STATE,\r\n  reactive({\r\n    size,\r\n    type,\r\n    increaseItem,\r\n    decreaseItem,\r\n    refreshIndexes,\r\n  }),\r\n)\r\n\r\nfunction increaseItem(item: ButtonState) {\r\n  itemStates.add(item)\r\n  refreshIndexes()\r\n}\r\n\r\nfunction decreaseItem(item: ButtonState) {\r\n  itemStates.delete(item)\r\n  refreshIndexes()\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"className\" role=\"group\">\r\n    <slot></slot>\r\n  </div>\r\n</template>\r\n","import { computed, defineComponent, h, inject, provide } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { columnProps } from './props'\r\nimport { ROW_STATE, breakPoints } from './symbol'\r\n\r\nimport type { CSSProperties } from 'vue'\r\nimport type { ClassType } from '@vexip-ui/config'\r\n\r\ntype LayerProp = 'span' | 'offset' | 'pull' | 'push' | 'order'\r\n\r\nconst colProps: LayerProp[] = ['span', 'offset', 'pull', 'push', 'order']\r\n\r\nexport default defineComponent({\r\n  name: 'Column',\r\n  props: columnProps,\r\n  setup(_props, { slots }) {\r\n    const props = useProps('column', _props, {\r\n      tag: 'div',\r\n      span: 24,\r\n      offset: null,\r\n      push: null,\r\n      pull: null,\r\n      order: null,\r\n      xs: null,\r\n      sm: null,\r\n      md: null,\r\n      lg: null,\r\n      xl: null,\r\n      xxl: null,\r\n      flex: null,\r\n      useFlex: null,\r\n    })\r\n\r\n    const rowState = inject(ROW_STATE, null)\r\n    const nh = useNameHelper('column')\r\n\r\n    provide(ROW_STATE, null!)\r\n\r\n    const className = computed(() => {\r\n      const columnFlex = (props.useFlex || rowState?.columnFlex) && {\r\n        ...(rowState?.columnFlex || {}),\r\n        ...(props.useFlex\r\n          ? props.useFlex === true\r\n            ? { justify: 'start', align: 'top' }\r\n            : props.useFlex\r\n          : {}),\r\n      }\r\n      const className: ClassType = [\r\n        nh.b(),\r\n        nh.bs('vars'),\r\n        {\r\n          [nh.bm('flex')]: columnFlex,\r\n          [nh.bm('inherit')]: rowState || props.inherit,\r\n        },\r\n      ]\r\n\r\n      if (columnFlex) {\r\n        columnFlex.justify && className.push(nh.bm(columnFlex.justify))\r\n        columnFlex.align && className.push(nh.bm(columnFlex.align))\r\n      }\r\n\r\n      colProps.forEach(prop => {\r\n        if (typeof props[prop] === 'number') {\r\n          className.push(\r\n            prop === 'span' ? nh.bm(`${props[prop]}`) : nh.bm(`${prop}-${props[prop]}`),\r\n          )\r\n        }\r\n      })\r\n\r\n      breakPoints.forEach(size => {\r\n        const sizeProp = props[size]\r\n\r\n        if (!sizeProp && sizeProp !== 0) return\r\n\r\n        if (typeof sizeProp === 'number') {\r\n          className.push(nh.bm(`${size}-${sizeProp}`))\r\n        } else if (typeof sizeProp === 'object') {\r\n          colProps.forEach(prop => {\r\n            const value = sizeProp[prop]\r\n\r\n            if (!value && value !== 0) return\r\n\r\n            className.push(prop === 'span' ? nh.bm(`${value}`) : nh.bm(`${prop}-${value}`))\r\n          })\r\n        }\r\n      })\r\n\r\n      return className\r\n    })\r\n    const style = computed(() => {\r\n      const flex = props.flex\r\n      const style: CSSProperties = {}\r\n\r\n      if (rowState) {\r\n        if (typeof rowState.gap === 'number') {\r\n          style.paddingInlineStart = style.paddingInlineEnd = `${rowState.gap / 2}px`\r\n        } else if (Array.isArray(rowState.gap)) {\r\n          style.paddingInlineStart = style.paddingInlineEnd = `${rowState.gap[0] / 2}px`\r\n        }\r\n      }\r\n\r\n      if (flex) {\r\n        if (typeof flex === 'number') {\r\n          style.flex = `${flex} ${flex} auto`\r\n        } else if (typeof flex === 'string') {\r\n          if (/^\\d+\\s\\d+\\s\\d+(\\w+)?$/.test(flex)) {\r\n            style.flex = flex\r\n          } else {\r\n            style.flex = flex === 'auto' ? '1 1 auto' : `0 0 ${flex}`\r\n          }\r\n        }\r\n      }\r\n\r\n      return style\r\n    })\r\n\r\n    return () =>\r\n      h(\r\n        props.tag || 'div',\r\n        {\r\n          class: className.value,\r\n          style: style.value,\r\n        },\r\n        {\r\n          default: () => slots.default && slots.default(),\r\n        },\r\n      )\r\n  },\r\n})\r\n","import {\r\n  booleanProp,\r\n  booleanStringProp,\r\n  buildProps,\r\n  classProp,\r\n  eventProp,\r\n  iconProp,\r\n  localeProp,\r\n  sizeProp,\r\n  stateProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { NumberInputControlType, NumberInputEmptyType, NumberInputSlots } from './symbol'\r\n\r\nexport const numberInputProps = buildProps({\r\n  size: sizeProp,\r\n  state: stateProp,\r\n  locale: localeProp('numberInput'),\r\n  prefix: iconProp,\r\n  prefixColor: String,\r\n  suffix: iconProp,\r\n  suffixColor: String,\r\n  /**\r\n   * 格式化后显示\r\n   */\r\n  formatter: Function as PropType<(value: number) => number | string>,\r\n  value: Number,\r\n  min: Number,\r\n  max: Number,\r\n  placeholder: String,\r\n  autofocus: booleanProp,\r\n  spellcheck: booleanProp,\r\n  autocomplete: booleanStringProp,\r\n  precision: Number,\r\n  readonly: booleanProp,\r\n  step: Number,\r\n  ctrlStep: Number,\r\n  shiftStep: Number,\r\n  altStep: Number,\r\n  disabled: booleanProp,\r\n  controlClass: classProp,\r\n  debounce: booleanProp,\r\n  delay: Number,\r\n  clearable: booleanProp,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingLock: booleanProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  sync: booleanProp,\r\n  syncStep: booleanProp,\r\n  controlType: String as PropType<NumberInputControlType>,\r\n  emptyType: String as PropType<NumberInputEmptyType>,\r\n  controlAttrs: Object as PropType<Record<string, any>>,\r\n  name: String,\r\n  slots: Object as PropType<NumberInputSlots>,\r\n  onFocus: eventProp<(event: FocusEvent) => void>(),\r\n  onBlur: eventProp<(event: FocusEvent) => void>(),\r\n  onInput: eventProp<(value: number) => void>(),\r\n  onChange: eventProp<(value: number) => void>(),\r\n  onEnter: eventProp(),\r\n  onClear: eventProp(),\r\n  onPrefixClick: eventProp<(event: MouseEvent) => void>(),\r\n  onSuffixClick: eventProp<(event: MouseEvent) => void>(),\r\n  onKeyDown: eventProp<(event: KeyboardEvent) => void>(),\r\n  onKeyPress: eventProp<(event: KeyboardEvent) => void>(),\r\n  onKeyUp: eventProp<(event: KeyboardEvent) => void>(),\r\n})\r\n\r\nexport type NumberInputProps = ExtractPropTypes<typeof numberInputProps>\r\nexport type NumberInputCProps = ConfigurableProps<NumberInputProps>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { useFieldStore } from '@/components/form'\r\n\r\nimport { computed, onMounted, ref, toRef, watch } from 'vue'\r\n\r\nimport { useHover, useModifier, useTimerRecord } from '@vexip-ui/hooks'\r\nimport {\r\n  createIconProp,\r\n  createSizeProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useId,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport {\r\n  boundRange,\r\n  debounce,\r\n  isNull,\r\n  isValidNumber,\r\n  minus,\r\n  plus,\r\n  throttle,\r\n  toFixed,\r\n  toNumber,\r\n} from '@vexip-ui/utils'\r\nimport { numberInputProps } from './props'\r\n\r\nimport type { NumberInputSlots } from './symbol'\r\n\r\ntype InputEventType = 'input' | 'change'\r\n\r\nconst isEmpty = (value: unknown) => !value && value !== 0\r\nconst isNullOrNaN = (value: unknown) => isNull(value) || Number.isNaN(value)\r\n\r\ndefineOptions({ name: 'NumberInput' })\r\n\r\nconst {\r\n  idFor,\r\n  labelId,\r\n  state,\r\n  disabled,\r\n  loading,\r\n  size,\r\n  validateField,\r\n  clearField,\r\n  getFieldValue,\r\n  setFieldValue,\r\n} = useFieldStore<number>(focus)\r\n\r\nconst _props = defineProps(numberInputProps)\r\nconst props = useProps('numberInput', _props, {\r\n  size: createSizeProp(size),\r\n  state: createStateProp(state),\r\n  locale: null,\r\n  prefix: createIconProp(),\r\n  prefixColor: '',\r\n  suffix: createIconProp(),\r\n  suffixColor: '',\r\n  // 格式化后显示\r\n  formatter: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  value: {\r\n    default: () => getFieldValue(),\r\n    static: true,\r\n  },\r\n  min: -Infinity,\r\n  max: Infinity,\r\n  placeholder: null,\r\n  autofocus: false,\r\n  spellcheck: false,\r\n  autocomplete: false,\r\n  precision: -1,\r\n  readonly: false,\r\n  step: 1,\r\n  ctrlStep: 100,\r\n  shiftStep: 10,\r\n  altStep: 0.1,\r\n  disabled: () => disabled.value,\r\n  controlClass: null,\r\n  debounce: false,\r\n  delay: null,\r\n  clearable: false,\r\n  loading: () => loading.value,\r\n  loadingIcon: createIconProp(),\r\n  loadingLock: false,\r\n  loadingEffect: null,\r\n  sync: false,\r\n  syncStep: false,\r\n  controlType: 'right',\r\n  emptyType: 'NaN',\r\n  controlAttrs: null,\r\n  name: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:value'])\r\n\r\nconst slots = defineSlots<NumberInputSlots>()\r\n\r\nconst nh = useNameHelper('number-input')\r\nconst locale = useLocale('numberInput', toRef(props, 'locale'))\r\nconst icons = useIcons()\r\n\r\nconst { timeout, interval } = useTimerRecord()\r\n\r\nconst focused = ref(false)\r\nconst currentValue = ref<string | number>(isEmpty(props.value) ? getEmptyValue() : props.value)\r\nconst inputting = ref(false)\r\nconst plusHolding = ref(false)\r\nconst minusHolding = ref(false)\r\n\r\nconst control = ref<HTMLInputElement>()\r\nconst { wrapper, isHover } = useHover()\r\n\r\nuseModifier({\r\n  target: control,\r\n  passive: false,\r\n  onKeyDown: (event, modifier) => {\r\n    emitEvent(props.onKeyDown, event)\r\n\r\n    if (modifier.up || modifier.down) {\r\n      event.preventDefault()\r\n      event.stopPropagation()\r\n\r\n      if ((modifier.up && plusDisabled.value) || (modifier.down && minusDisabled.value)) {\r\n        return\r\n      }\r\n\r\n      changeStep(\r\n        modifier.up ? 'plus' : 'minus',\r\n        event.ctrlKey ? 'ctrl' : event.shiftKey ? 'shift' : event.altKey ? 'alt' : undefined,\r\n      )\r\n      modifier.resetAll()\r\n    } else if (modifier.enter) {\r\n      event.preventDefault()\r\n      event.stopPropagation()\r\n      emitChangeEvent('change')\r\n      modifier.resetAll()\r\n    }\r\n  },\r\n  onKeyUp: event => {\r\n    emitEvent(props.onKeyUp, event)\r\n\r\n    if (event.key === 'Enter') {\r\n      handleEnter()\r\n    }\r\n  },\r\n})\r\n\r\nlet lastValue: number\r\n\r\nconst controlId = useId()\r\nconst outOfRange = computed(() => {\r\n  return (\r\n    !isNullOrNaN(currentValue.value) &&\r\n    (toNumber(currentValue.value) > props.max || toNumber(currentValue.value) < props.min)\r\n  )\r\n})\r\nconst isReadonly = computed(() => (props.loading && props.loadingLock) || props.readonly)\r\nconst plusDisabled = computed(() => {\r\n  return (\r\n    props.disabled ||\r\n    isReadonly.value ||\r\n    (!isNullOrNaN(currentValue.value) && toNumber(currentValue.value) >= props.max)\r\n  )\r\n})\r\nconst minusDisabled = computed(() => {\r\n  return (\r\n    props.disabled ||\r\n    isReadonly.value ||\r\n    (!isNullOrNaN(currentValue.value) && toNumber(currentValue.value) <= props.min)\r\n  )\r\n})\r\nconst className = computed(() => {\r\n  const [display, fade] = (props.controlType || 'right').split('-')\r\n\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    nh.ns('input-vars'),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('focused')]: inputting.value,\r\n      [nh.bm('disabled')]: props.disabled,\r\n      [nh.bm('readonly')]: isReadonly.value,\r\n      [nh.bm('loading')]: props.loading,\r\n      [nh.bm(props.size)]: props.size !== 'default',\r\n      [nh.bm(props.state)]: props.state !== 'default',\r\n      [nh.bm(`control-${display}`)]: display !== 'right',\r\n      [nh.bm('control-fade')]: fade,\r\n      [nh.bm('out-of-range')]: outOfRange.value,\r\n    },\r\n  ]\r\n})\r\nconst hasPrefix = computed(() => {\r\n  return !!(slots.prefix || props.prefix || props.slots.prefix)\r\n})\r\nconst hasSuffix = computed(() => {\r\n  return !!(slots.suffix || props.suffix || props.slots.suffix)\r\n})\r\nconst preciseNumber = computed(() => {\r\n  return !inputting.value &&\r\n    typeof currentValue.value === 'number' &&\r\n    !Number.isNaN(currentValue.value) &&\r\n    props.precision >= 0\r\n    ? toFixed(currentValue.value, props.precision)\r\n    : currentValue.value\r\n})\r\nconst formattedValue = computed(() => {\r\n  if (isNullOrNaN(preciseNumber.value) || typeof preciseNumber.value !== 'number')\r\n    return preciseNumber.value ?? ''\r\n\r\n  return !inputting.value && typeof props.formatter === 'function'\r\n    ? props.formatter(preciseNumber.value as number)\r\n    : preciseNumber.value.toString()\r\n})\r\nconst hasValue = computed(() => !!(currentValue.value || currentValue.value === 0))\r\nconst showClear = computed(() => {\r\n  return !props.disabled && !isReadonly.value && props.clearable && isHover.value && hasValue.value\r\n})\r\nconst autoComplete = computed(() => {\r\n  return typeof props.autocomplete === 'boolean'\r\n    ? props.autocomplete\r\n      ? 'on'\r\n      : 'off'\r\n    : props.autocomplete\r\n})\r\n\r\nconst delay = toNumber(props.delay)\r\nconst handleInput = props.debounce\r\n  ? debounce(handleChange, delay || 100)\r\n  : throttle(handleChange, delay || 16)\r\n\r\nwatch(\r\n  () => props.value,\r\n  value => {\r\n    if (value !== lastValue) {\r\n      parseValue()\r\n    }\r\n  },\r\n  { immediate: true },\r\n)\r\nwatch(inputting, value => {\r\n  if (!value) {\r\n    setInputValue(inputting.value ? currentValue.value : formattedValue.value)\r\n  }\r\n})\r\n\r\nonMounted(() => {\r\n  setInputValue(inputting.value ? currentValue.value : formattedValue.value)\r\n})\r\n\r\ndefineExpose({\r\n  idFor,\r\n  focused,\r\n  isHover,\r\n  outOfRange,\r\n  preciseNumber,\r\n  formattedValue,\r\n  isReadonly,\r\n  wrapper,\r\n  input: control,\r\n  focus,\r\n  blur: () => control.value?.blur(),\r\n})\r\n\r\nfunction setInputValue(value?: number | string | null) {\r\n  if (control.value) {\r\n    control.value.value = isNullOrNaN(value) ? '' : value!.toString()\r\n  }\r\n}\r\n\r\nfunction boundValueRange(value: number) {\r\n  return boundRange(value, props.min, props.max)\r\n}\r\n\r\nfunction parseValue() {\r\n  let value = props.value\r\n  value = inputting.value ? value : isValidNumber(value, true) ? toNumber(value) : getEmptyValue()\r\n\r\n  if (props.precision >= 0 && !isNullOrNaN(value)) {\r\n    value = toFixed(boundValueRange(value), props.precision)\r\n  }\r\n\r\n  currentValue.value = value\r\n  lastValue = value\r\n\r\n  setInputValue(inputting.value ? value : formattedValue.value)\r\n}\r\n\r\nfunction focus(options?: FocusOptions) {\r\n  control.value?.focus(options)\r\n}\r\n\r\nfunction handleFocus(event: FocusEvent) {\r\n  focused.value = true\r\n  inputting.value = true\r\n  emitEvent(props.onFocus, event)\r\n}\r\n\r\nfunction handleBlur(event: FocusEvent) {\r\n  focused.value = false\r\n\r\n  setTimeout(() => {\r\n    if (!focused.value) {\r\n      inputting.value = false\r\n      emitEvent(props.onBlur, event)\r\n      emitChangeEvent('change')\r\n    }\r\n  }, 120)\r\n}\r\n\r\nfunction handleHold(type: 'plus' | 'minus', event: PointerEvent) {\r\n  const disabled = type === 'plus' ? plusDisabled : minusDisabled\r\n  const change = type === 'plus' ? plusNumber : minusNumber\r\n\r\n  if (event.button !== 0 || disabled.value) return\r\n\r\n  change(event)\r\n  document.addEventListener('pointerup', cancelStep)\r\n  document.addEventListener('touchend', cancelStep)\r\n  clearTimeout(timeout.step)\r\n  clearInterval(interval.step)\r\n  ;(type === 'plus' ? plusHolding : minusHolding).value = true\r\n\r\n  timeout.step = setTimeout(() => {\r\n    interval.step = setInterval(() => {\r\n      disabled.value ? cancelStep() : change(event)\r\n    }, 32)\r\n  }, 500)\r\n}\r\n\r\nfunction cancelStep() {\r\n  document.removeEventListener('pointerup', cancelStep)\r\n  document.removeEventListener('touchend', cancelStep)\r\n  clearTimeout(timeout.step)\r\n  clearInterval(interval.step)\r\n\r\n  plusHolding.value = false\r\n  minusHolding.value = false\r\n}\r\n\r\nfunction plusNumber(event: PointerEvent) {\r\n  !focused.value && focus()\r\n  changeStep(\r\n    'plus',\r\n    event.ctrlKey ? 'ctrl' : event.shiftKey ? 'shift' : event.altKey ? 'alt' : undefined,\r\n  )\r\n}\r\n\r\nfunction minusNumber(event: PointerEvent) {\r\n  !focused.value && focus()\r\n  changeStep(\r\n    'minus',\r\n    event.ctrlKey ? 'ctrl' : event.shiftKey ? 'shift' : event.altKey ? 'alt' : undefined,\r\n  )\r\n}\r\n\r\nfunction changeStep(type: 'plus' | 'minus', modifier?: 'ctrl' | 'shift' | 'alt') {\r\n  if (props.disabled || isReadonly.value) return\r\n\r\n  let value = currentValue.value || 0\r\n  let step!: number\r\n\r\n  switch (modifier) {\r\n    case 'ctrl':\r\n      step = props.ctrlStep\r\n      break\r\n    case 'shift':\r\n      step = props.shiftStep\r\n      break\r\n    case 'alt':\r\n      step = props.altStep\r\n      break\r\n    default:\r\n      step = props.step\r\n  }\r\n\r\n  const stringValue = value.toString().trim()\r\n\r\n  if (stringValue.endsWith('.')) {\r\n    value = toNumber(stringValue.slice(0, -1))\r\n  }\r\n\r\n  if (type === 'plus') {\r\n    value = plus(value, step)\r\n  } else {\r\n    value = minus(value, step)\r\n  }\r\n\r\n  setValue(value, props.syncStep && !props.sync ? 'change' : 'input')\r\n}\r\n\r\nfunction handleChange(event: Event) {\r\n  const type = event.type as InputEventType\r\n  const stringValue = (event.target as HTMLInputElement).value\r\n\r\n  let value = stringValue.trim()\r\n\r\n  // to rollback invalid value to empty in `<input>` when change\r\n  if (type === 'change' && stringValue && !isValidNumber(stringValue, true)) {\r\n    const floatValue = parseFloat(stringValue)\r\n\r\n    if (Number.isNaN(floatValue)) {\r\n      value = ''\r\n    } else {\r\n      value = floatValue.toString()\r\n    }\r\n  }\r\n\r\n  inputting.value = type === 'input'\r\n\r\n  setValue(value, type)\r\n}\r\n\r\nfunction setValue(value: string | number, type: InputEventType, sync = props.sync) {\r\n  if (type !== 'input') {\r\n    currentValue.value = isEmpty(value) ? getEmptyValue() : toNumber(value)\r\n  } else {\r\n    currentValue.value = value\r\n  }\r\n\r\n  setInputValue(currentValue.value)\r\n  emitChangeEvent(type, sync)\r\n}\r\n\r\nfunction getEmptyValue() {\r\n  switch (props.emptyType) {\r\n    case 'undefined':\r\n      return undefined! as number\r\n    case 'null':\r\n      return null! as number\r\n    default:\r\n      return NaN\r\n  }\r\n}\r\n\r\nfunction emitChangeEvent(type: InputEventType, sync = props.sync) {\r\n  type = type === 'input' ? 'input' : 'change'\r\n\r\n  if (type === 'change') {\r\n    const empty = isEmpty(currentValue.value)\r\n    const value = empty ? getEmptyValue() : toNumber(currentValue.value)\r\n\r\n    let boundValue = empty ? value : boundValueRange(toNumber(value))\r\n\r\n    if (!empty && props.precision >= 0) {\r\n      boundValue = toFixed(boundValue, props.precision)\r\n    }\r\n\r\n    const changed = !Object.is(boundValue, value)\r\n\r\n    if (!empty) {\r\n      currentValue.value = boundValue\r\n    }\r\n\r\n    if (!sync && Object.is(lastValue, boundValue)) {\r\n      !Object.is(props.value, value) && emit('update:value', boundValue)\r\n      return\r\n    }\r\n\r\n    lastValue = boundValue\r\n\r\n    if (!sync || changed) {\r\n      emit('update:value', boundValue)\r\n      setFieldValue(boundValue)\r\n    }\r\n\r\n    emitEvent(props.onChange, boundValue)\r\n\r\n    if (!sync || changed) {\r\n      validateField()\r\n    }\r\n  } else {\r\n    const value = parseFloat(currentValue.value as string)\r\n    const empty = Number.isNaN(value)\r\n\r\n    let boundValue = empty ? getEmptyValue() : boundValueRange(toNumber(value))\r\n\r\n    if (!empty && props.precision >= 0) {\r\n      boundValue = toFixed(boundValue, props.precision)\r\n    }\r\n\r\n    const emitUpdate = sync && !Object.is(lastValue, boundValue)\r\n\r\n    if (emitUpdate) {\r\n      lastValue = boundValue\r\n\r\n      emit('update:value', boundValue)\r\n      setFieldValue(boundValue)\r\n    }\r\n\r\n    emitEvent(props.onInput, value)\r\n\r\n    if (emitUpdate) {\r\n      validateField()\r\n    }\r\n  }\r\n}\r\n\r\nfunction handleClear() {\r\n  if (props.disabled || isReadonly.value) return\r\n\r\n  setValue(NaN, 'change', false)\r\n  emitEvent(props.onClear)\r\n  clearField(NaN)\r\n  focus()\r\n}\r\n\r\nfunction handleEnter() {\r\n  emitEvent(props.onEnter)\r\n}\r\n\r\nfunction handlePrefixClick(event: MouseEvent) {\r\n  emitEvent(props.onPrefixClick, event)\r\n}\r\n\r\nfunction handleSuffixClick(event: MouseEvent) {\r\n  emitEvent(props.onSuffixClick, event)\r\n}\r\n\r\nfunction handleKeyPress(event: KeyboardEvent) {\r\n  emitEvent(props.onKeyPress, event)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :id=\"idFor\"\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"group\"\r\n    @click=\"control?.focus()\"\r\n  >\r\n    <div\r\n      v-if=\"hasPrefix\"\r\n      :class=\"[nh.be('icon'), nh.be('prefix')]\"\r\n      :style=\"{ color: props.prefixColor }\"\r\n      @click=\"handlePrefixClick\"\r\n    >\r\n      <slot name=\"prefix\">\r\n        <Renderer :renderer=\"props.slots.prefix\">\r\n          <Icon :icon=\"props.prefix\"></Icon>\r\n        </Renderer>\r\n      </slot>\r\n    </div>\r\n    <input\r\n      v-bind=\"props.controlAttrs\"\r\n      :id=\"controlId\"\r\n      ref=\"control\"\r\n      :class=\"[nh.be('control'), props.controlAttrs?.class, props.controlClass]\"\r\n      type=\"text\"\r\n      :autofocus=\"props.autofocus\"\r\n      :autocomplete=\"autoComplete\"\r\n      :spellcheck=\"props.spellcheck\"\r\n      :disabled=\"props.disabled\"\r\n      :readonly=\"isReadonly\"\r\n      :placeholder=\"props.placeholder ?? locale.placeholder\"\r\n      :name=\"props.name || props.controlAttrs?.name\"\r\n      role=\"spinbutton\"\r\n      :title=\"outOfRange ? locale.outOfRange : undefined\"\r\n      :aria-valuenow=\"preciseNumber\"\r\n      :aria-valuemin=\"props.min !== -Infinity ? props.min : undefined\"\r\n      :aria-valuemax=\"props.max !== Infinity ? props.max : undefined\"\r\n      :aria-labelledby=\"labelId\"\r\n      @submit.prevent\r\n      @blur=\"handleBlur\"\r\n      @focus=\"handleFocus\"\r\n      @keypress=\"handleKeyPress\"\r\n      @input=\"handleInput\"\r\n      @change=\"handleChange\"\r\n    />\r\n    <div\r\n      v-if=\"hasSuffix\"\r\n      :class=\"[nh.be('icon'), nh.be('suffix')]\"\r\n      :style=\"{\r\n        color: props.suffixColor,\r\n        opacity: showClear || props.loading ? '0%' : ''\r\n      }\"\r\n      @click=\"handleSuffixClick\"\r\n    >\r\n      <slot name=\"suffix\">\r\n        <Renderer :renderer=\"props.slots.suffix\">\r\n          <Icon :icon=\"props.suffix\"></Icon>\r\n        </Renderer>\r\n      </slot>\r\n    </div>\r\n    <div\r\n      v-else-if=\"props.clearable || props.loading\"\r\n      :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\r\n    ></div>\r\n    <Transition :name=\"nh.ns('fade')\" appear>\r\n      <button\r\n        v-if=\"showClear\"\r\n        :class=\"[nh.be('icon'), nh.be('clear')]\"\r\n        type=\"button\"\r\n        tabindex=\"-1\"\r\n        :aria-label=\"locale.ariaLabel.clear\"\r\n        @click.stop=\"handleClear\"\r\n      >\r\n        <Icon v-bind=\"icons.clear\" label=\"clear\"></Icon>\r\n      </button>\r\n      <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\r\n        <Icon\r\n          v-bind=\"icons.loading\"\r\n          :effect=\"props.loadingEffect || icons.loading.effect\"\r\n          :icon=\"props.loadingIcon || icons.loading.icon\"\r\n          label=\"loading\"\r\n        ></Icon>\r\n      </div>\r\n    </Transition>\r\n    <template v-if=\"props.controlType !== 'none'\">\r\n      <div\r\n        :class=\"{\r\n          [nh.be('plus')]: true,\r\n          [nh.bem('plus', 'disabled')]: plusDisabled,\r\n          [nh.bem('plus', 'holding')]: plusHolding\r\n        }\"\r\n        role=\"button\"\r\n        :aria-label=\"locale.ariaLabel.increase\"\r\n        :aria-labelledby=\"labelId\"\r\n        :aria-controls=\"controlId\"\r\n        @pointerdown.prevent=\"handleHold('plus', $event)\"\r\n        @mousedown.prevent\r\n        @touchstart.prevent\r\n      >\r\n        <Icon v-bind=\"icons.angleUp\" :scale=\"+(icons.angleUp.scale || 1) * 0.8\"></Icon>\r\n      </div>\r\n      <div\r\n        :class=\"{\r\n          [nh.be('minus')]: true,\r\n          [nh.bem('minus', 'disabled')]: minusDisabled,\r\n          [nh.bem('minus', 'holding')]: minusHolding\r\n        }\"\r\n        :aria-label=\"locale.ariaLabel.decrease\"\r\n        :aria-labelledby=\"labelId\"\r\n        :aria-controls=\"controlId\"\r\n        @pointerdown.prevent=\"handleHold('minus', $event)\"\r\n        @mousedown.prevent\r\n        @touchstart.prevent\r\n      >\r\n        <Icon v-bind=\"icons.angleDown\" :scale=\"+(icons.angleDown.scale || 1) * 0.8\"></Icon>\r\n      </div>\r\n    </template>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { toAttrValue } from '@vexip-ui/utils'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { LocaleConfig } from '@vexip-ui/config'\r\nimport type { MonthIndex, WeekIndex } from './symbol'\r\n\r\nconst props = defineProps({\r\n  date: {\r\n    type: Date,\r\n    required: true,\r\n  },\r\n  locale: {\r\n    type: Object as PropType<LocaleConfig['calendar']>,\r\n    required: true,\r\n  },\r\n  selected: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  hovered: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  isPrev: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  isNext: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  isToday: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  disabled: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  inRange: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n})\r\n\r\nconst emit = defineEmits(['select', 'hover'])\r\n\r\ndefineSlots<{\r\n  item: (params: {\r\n    date: Date,\r\n    label: string,\r\n    selected: boolean,\r\n    hovered: boolean,\r\n    isPrev: boolean,\r\n    isNext: boolean,\r\n    isToday: boolean,\r\n    disabled: boolean,\r\n    inRange: boolean,\r\n  }) => any,\r\n  default: (params: {\r\n    date: Date,\r\n    label: string,\r\n    selected: boolean,\r\n    hovered: boolean,\r\n    isPrev: boolean,\r\n    isNext: boolean,\r\n    isToday: boolean,\r\n    disabled: boolean,\r\n    inRange: boolean,\r\n  }) => any,\r\n}>()\r\n\r\nconst nh = useNameHelper('calendar')\r\n\r\nconst label = computed(() => {\r\n  const label = props.locale.ariaLabel\r\n  const year = props.date.getFullYear()\r\n  const month = (props.date.getMonth() + 1) as MonthIndex\r\n  const day = props.date.getDate()\r\n  const weekDay = (props.date.getDay() || 7) as WeekIndex\r\n\r\n  return `${label[`week${weekDay}`]}, ${label[`month${month}`]} ${day}, ${year}`\r\n})\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :class=\"nh.be('cell')\"\r\n    role=\"gridcell\"\r\n    :aria-selected=\"toAttrValue(selected)\"\r\n    :aria-disabled=\"toAttrValue(disabled)\"\r\n    @mouseenter=\"emit('hover', date)\"\r\n  >\r\n    <slot\r\n      name=\"item\"\r\n      :date=\"date\"\r\n      :label=\"label\"\r\n      :selected=\"selected\"\r\n      :hovered=\"hovered\"\r\n      :is-prev=\"isPrev\"\r\n      :is-next=\"isNext\"\r\n      :is-today=\"isToday\"\r\n      :disabled=\"disabled\"\r\n      :in-range=\"inRange\"\r\n    >\r\n      <div\r\n        :class=\"{\r\n          [nh.be('index')]: true,\r\n          [nh.bem('index', 'selected')]: selected,\r\n          [nh.bem('index', 'hovered')]: hovered,\r\n          [nh.bem('index', 'prev')]: isPrev,\r\n          [nh.bem('index', 'next')]: isNext,\r\n          [nh.bem('index', 'today')]: isToday,\r\n          [nh.bem('index', 'disabled')]: disabled,\r\n          [nh.bem('index', 'in-range')]: inRange,\r\n        }\"\r\n        tabindex=\"0\"\r\n        role=\"button\"\r\n        :aria-label=\"label\"\r\n        :aria-disabled=\"toAttrValue(disabled)\"\r\n        @click=\"emit('select', date)\"\r\n        @keydown.enter.prevent=\"emit('select', date)\"\r\n        @keydown.space.prevent=\"emit('select', date)\"\r\n      >\r\n        <slot\r\n          :date=\"date\"\r\n          :label=\"label\"\r\n          :selected=\"selected\"\r\n          :hovered=\"hovered\"\r\n          :is-prev=\"isPrev\"\r\n          :is-next=\"isNext\"\r\n          :is-today=\"isToday\"\r\n          :disabled=\"disabled\"\r\n          :in-range=\"inRange\"\r\n        >\r\n          <div :class=\"nh.be('index-inner')\">\r\n            {{ date.getDate() }}\r\n          </div>\r\n        </slot>\r\n      </div>\r\n    </slot>\r\n  </div>\r\n</template>\r\n","import { booleanProp, buildProps, eventProp, localeProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { Dateable } from '@vexip-ui/utils'\r\nimport type { CalendarPanelSlots, CalendarSlots } from './symbol'\r\n\r\nexport const calendarPanelProps = buildProps({\r\n  locale: localeProp('calendar'),\r\n  /**\r\n   * 选中的日期\r\n   */\r\n  value: [Number, String, Date, Array] as PropType<Dateable | Dateable[]>,\r\n  /**\r\n   * 当前日历显示的年份\r\n   */\r\n  year: Number,\r\n  /**\r\n   * 当前日历显示的月份 (1 ~ 12)\r\n   */\r\n  month: Number,\r\n  /**\r\n   * 头部星期显示的内容，数量须为 7 个\r\n   */\r\n  weekDays: Array as PropType<string[]>,\r\n  weekStart: Number,\r\n  today: [Number, String, Date] as PropType<Dateable>,\r\n  disabledDate: Function as PropType<(data: Date) => boolean>,\r\n  valueType: String as PropType<'start' | 'end'>,\r\n  min: [Number, String, Date] as PropType<Dateable>,\r\n  max: [Number, String, Date] as PropType<Dateable>,\r\n  range: booleanProp,\r\n  selectRow: booleanProp,\r\n  slots: Object as PropType<CalendarPanelSlots>,\r\n  onSelect: eventProp<(date: Date) => void>(),\r\n  onHover: eventProp<(date: Date | null) => void>(),\r\n})\r\n\r\nexport type CalendarPanelProps = ExtractPropTypes<typeof calendarPanelProps>\r\nexport type CalendarPanelCProps = ConfigurableProps<CalendarPanelProps>\r\n\r\nexport const calendarProps = buildProps({\r\n  locale: localeProp('calendar'),\r\n  value: [Number, String, Date] as PropType<Dateable | Dateable[]>,\r\n  year: Number,\r\n  /**\r\n   * 当前日历显示的月份 (1 ~ 12)\r\n   */\r\n  month: Number,\r\n  /**\r\n   * 头部星期显示的内容，数量须为 7 个\r\n   */\r\n  weekDays: Array as PropType<string[]>,\r\n  weekStart: Number,\r\n  today: [Number, String, Date] as PropType<Dateable>,\r\n  disabledDate: Function as PropType<(data: Date) => boolean>,\r\n  slots: Object as PropType<CalendarSlots>,\r\n  onSelect: eventProp<(date: Date) => void>(),\r\n  onYearChange: eventProp<(year: number, month: number) => void>(),\r\n  onMonthChange: eventProp<(year: number, month: number) => void>(),\r\n})\r\n\r\nexport type CalendarProps = ExtractPropTypes<typeof calendarProps>\r\nexport type CalendarCProps = ConfigurableProps<CalendarProps>\r\n","<script setup lang=\"ts\">\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, ref, toRef, watch } from 'vue'\r\n\r\nimport CalendarCell from './calendar-cell.vue'\r\nimport { emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useHover } from '@vexip-ui/hooks'\r\nimport {\r\n  debounceMinor,\r\n  differenceDays,\r\n  differenceWeeks,\r\n  endOfDay,\r\n  rangeDate,\r\n  startOfDay,\r\n  startOfWeek,\r\n  toFalse,\r\n} from '@vexip-ui/utils'\r\nimport { calendarPanelProps } from './props'\r\n\r\nimport type { Dateable } from '@vexip-ui/utils'\r\nimport type { CalendarPanelSlots, WeekIndex } from './symbol'\r\n\r\ndefineOptions({ name: 'CalendarPanel' })\r\n\r\nconst _props = defineProps(calendarPanelProps)\r\nconst props = useProps('calendarBase', _props, {\r\n  locale: null,\r\n  value: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  year: () => new Date().getFullYear(),\r\n  month: {\r\n    default: () => new Date().getMonth() + 1,\r\n    validator: value => value > 0 && value <= 12,\r\n  },\r\n  weekDays: {\r\n    default: null,\r\n    validator: value => !value || value.length === 0 || value.length === 7,\r\n  },\r\n  weekStart: {\r\n    default: 0,\r\n    validator: value => value >= 0 && value < 7,\r\n  },\r\n  today: {\r\n    default: () => new Date(),\r\n    validator: value => !Number.isNaN(+new Date(value)),\r\n  },\r\n  disabledDate: {\r\n    default: toFalse,\r\n    isFunc: true,\r\n  },\r\n  valueType: {\r\n    default: 'start',\r\n    validator: value => value === 'start' || value === 'end',\r\n  },\r\n  min: null,\r\n  max: null,\r\n  range: null,\r\n  selectRow: false,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:value'])\r\n\r\ndefineSlots<CalendarPanelSlots>()\r\n\r\nconst nh = useNameHelper('calendar')\r\n\r\nconst startValue = ref<Date | null>(null)\r\nconst endValue = ref<Date | null>(null)\r\nconst dateRange = ref<Date[]>([])\r\nconst hoveredDate = ref<Date | null>(null)\r\n\r\nconst { wrapper: body, isHover } = useHover()\r\nconst locale = useLocale('calendar', toRef(props, 'locale'))\r\n\r\nconst min = computed(() => (props.min ? +startOfDay(props.min) : -Infinity))\r\nconst max = computed(() => (props.max ? +endOfDay(props.max) : Infinity))\r\nconst reversed = computed(() => {\r\n  if (Number.isNaN(min.value) || Number.isNaN(max.value)) {\r\n    return false\r\n  }\r\n\r\n  return min.value > max.value\r\n})\r\n\r\nconst updateDateRange = debounceMinor(setDateRange)\r\n\r\nparseValue(props.value)\r\nsetDateRange()\r\n\r\nwatch(() => props.value, parseValue)\r\nwatch([() => props.year, () => props.month, () => props.weekStart], updateDateRange)\r\nwatch(isHover, value => {\r\n  if (!value) {\r\n    hoveredDate.value = null\r\n  }\r\n})\r\nwatch(hoveredDate, value => {\r\n  emitEvent(props.onHover, value)\r\n})\r\n\r\ndefineExpose({\r\n  startValue,\r\n  endValue,\r\n  body,\r\n  isSelected,\r\n  isHovered,\r\n  isPrevMonth,\r\n  isNextMonth,\r\n  isDisabled,\r\n  isToday,\r\n  isInRange,\r\n})\r\n\r\nfunction getWeekLabel(index: number) {\r\n  return props.weekDays?.[index] || locale.value[`week${(index || 7) as WeekIndex}`]\r\n}\r\n\r\nfunction setDateRange() {\r\n  dateRange.value = rangeDate(\r\n    startOfWeek(new Date(props.year, props.month - 1, 1), props.weekStart),\r\n    42,\r\n  )\r\n}\r\n\r\nfunction parseValue(value: Dateable | Dateable[]) {\r\n  if (!Array.isArray(value)) {\r\n    value = [value, value]\r\n  }\r\n\r\n  for (let i = 0; i < 2; ++i) {\r\n    const date = new Date(value[i] ?? '')\r\n\r\n    if (i === 0) {\r\n      startValue.value = Number.isNaN(+date) ? null : date\r\n    } else {\r\n      endValue.value = Number.isNaN(+date) ? null : date\r\n    }\r\n\r\n    if (!props.range) break\r\n  }\r\n}\r\n\r\nfunction isSameRow(current: Date, target: Date) {\r\n  return props.selectRow && differenceWeeks(current, target) === 0\r\n}\r\n\r\nfunction isSelected(date: Date) {\r\n  if (!date || (!startValue.value && !endValue.value)) {\r\n    return false\r\n  }\r\n\r\n  return !!(\r\n    (startValue.value &&\r\n      (!differenceDays(date, startValue.value) || isSameRow(date, startValue.value))) ||\r\n    (endValue.value && (!differenceDays(date, endValue.value) || isSameRow(date, endValue.value)))\r\n  )\r\n}\r\n\r\nfunction isDisabled(date: Date) {\r\n  if (typeof props.disabledDate === 'function') {\r\n    if (props.disabledDate(date)) {\r\n      return true\r\n    }\r\n  }\r\n\r\n  const time = date.getTime()\r\n\r\n  if (reversed.value) {\r\n    if (time > max.value && time < min.value) {\r\n      return true\r\n    }\r\n  } else {\r\n    if (time < min.value || time > max.value) {\r\n      return true\r\n    }\r\n  }\r\n\r\n  return false\r\n}\r\n\r\nfunction isHovered(date: Date) {\r\n  if (!date || !hoveredDate.value) {\r\n    return false\r\n  }\r\n\r\n  return !differenceDays(date, hoveredDate.value) || isSameRow(date, hoveredDate.value)\r\n}\r\n\r\nfunction isPrevMonth(date: Date) {\r\n  const { year, month } = props\r\n  const dateYear = date.getFullYear()\r\n  const dateMonth = date.getMonth()\r\n\r\n  return dateYear < year || (dateYear === year && dateMonth < month - 1)\r\n}\r\n\r\nfunction isNextMonth(date: Date) {\r\n  const { year, month } = props\r\n  const dateYear = date.getFullYear()\r\n  const dateMonth = date.getMonth()\r\n\r\n  return dateYear > year || (dateYear === year && dateMonth > month - 1)\r\n}\r\n\r\nfunction isToday(date: Date) {\r\n  return differenceDays(date, props.today) === 0\r\n}\r\n\r\nfunction handleSelect(date: Date) {\r\n  if (isDisabled(date)) {\r\n    return\r\n  }\r\n\r\n  if (props.valueType === 'start') {\r\n    startValue.value = date\r\n  } else {\r\n    endValue.value = date\r\n  }\r\n\r\n  emitEvent(props.onSelect, date)\r\n  emit('update:value', date)\r\n}\r\n\r\nfunction handleHover(date: Date) {\r\n  hoveredDate.value = isDisabled(date) ? null : date\r\n}\r\n\r\nfunction isInRange(date: Date) {\r\n  if (!hoveredDate.value && !startValue.value && !endValue.value) {\r\n    return false\r\n  }\r\n\r\n  let min: number\r\n  let max: number\r\n\r\n  if (startValue.value && endValue.value) {\r\n    const startTime = startValue.value.getTime()\r\n    const endTime = endValue.value.getTime()\r\n\r\n    min = Math.min(startTime, endTime)\r\n    max = Math.max(startTime, endTime)\r\n  } else if (hoveredDate.value) {\r\n    if (!startValue.value && !endValue.value) return false\r\n\r\n    const hoveredTime = hoveredDate.value.getTime()\r\n\r\n    if (!startValue.value || !endValue.value) {\r\n      const selectedTime = (startValue.value ?? endValue.value)!.getTime()\r\n\r\n      min = Math.min(hoveredTime, selectedTime)\r\n      max = Math.max(hoveredTime, selectedTime)\r\n    } else {\r\n      const startTime = startValue.value.getTime()\r\n      const endTime = endValue.value.getTime()\r\n      const minTime = Math.min(startTime, endTime)\r\n      const maxTime = Math.max(startTime, endTime)\r\n\r\n      min = Math.min(hoveredTime, minTime)\r\n      max = Math.max(hoveredTime, maxTime)\r\n    }\r\n  } else {\r\n    return false\r\n  }\r\n\r\n  return date.getTime() >= min && date.getTime() <= max\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :class=\"[\r\n      nh.be('panel'),\r\n      nh.bs('vars'),\r\n      props.selectRow && nh.bem('panel', 'select-row'),\r\n      props.inherit && nh.bem('panel', 'inherit')\r\n    ]\"\r\n    role=\"grid\"\r\n  >\r\n    <slot name=\"header\">\r\n      <Renderer :renderer=\"props.slots.header\"></Renderer>\r\n    </slot>\r\n    <div :class=\"[nh.be('row'), nh.bem('row', 'week')]\" aria-hidden>\r\n      <div v-for=\"week in 7\" :key=\"week\" :class=\"[nh.be('cell'), nh.be('cell-week')]\">\r\n        <slot\r\n          name=\"week\"\r\n          :label=\"getWeekLabel((week - 1 + props.weekStart) % 7)\"\r\n          :index=\"week - 1\"\r\n          :week=\"(week - 1 + props.weekStart) % 7\"\r\n        >\r\n          <Renderer\r\n            :renderer=\"props.slots.week\"\r\n            :data=\"{\r\n              label: getWeekLabel((week - 1 + props.weekStart) % 7),\r\n              index: week - 1,\r\n              week: (week - 1 + props.weekStart) % 7\r\n            }\"\r\n          >\r\n            <div :class=\"nh.be('index')\">\r\n              {{ getWeekLabel((week - 1 + props.weekStart) % 7) }}\r\n            </div>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n    </div>\r\n    <div ref=\"body\" :class=\"nh.be('body')\">\r\n      <div v-for=\"row in 6\" :key=\"row\" :class=\"nh.be('row')\">\r\n        <CalendarCell\r\n          v-for=\"cell in 7\"\r\n          :key=\"(row - 1) * 7 + cell\"\r\n          :date=\"dateRange[(row - 1) * 7 + cell - 1]\"\r\n          :locale=\"locale\"\r\n          :selected=\"isSelected(dateRange[(row - 1) * 7 + cell - 1])\"\r\n          :hovered=\"isHovered(dateRange[(row - 1) * 7 + cell - 1])\"\r\n          :is-prev=\"isPrevMonth(dateRange[(row - 1) * 7 + cell - 1])\"\r\n          :is-next=\"isNextMonth(dateRange[(row - 1) * 7 + cell - 1])\"\r\n          :is-today=\"isToday(dateRange[(row - 1) * 7 + cell - 1])\"\r\n          :disabled=\"isDisabled(dateRange[(row - 1) * 7 + cell - 1])\"\r\n          :in-range=\"props.range && isInRange(dateRange[(row - 1) * 7 + cell - 1])\"\r\n          @hover=\"handleHover\"\r\n          @select=\"handleSelect\"\r\n        >\r\n          <template\r\n            v-if=\"$slots.item || props.slots.item\"\r\n            #item=\"{\r\n              date,\r\n              label,\r\n              selected,\r\n              hovered,\r\n              isPrev,\r\n              isNext,\r\n              isToday: matchedToday,\r\n              disabled,\r\n              inRange\r\n            }\"\r\n          >\r\n            <slot\r\n              name=\"item\"\r\n              :date=\"date\"\r\n              :label=\"label\"\r\n              :selected=\"selected\"\r\n              :hovered=\"hovered\"\r\n              :is-prev=\"isPrev\"\r\n              :is-next=\"isNext\"\r\n              :is-today=\"matchedToday\"\r\n              :disabled=\"disabled\"\r\n              :in-range=\"inRange\"\r\n            >\r\n              <Renderer\r\n                :renderer=\"props.slots.item\"\r\n                :data=\"{\r\n                  date,\r\n                  label,\r\n                  selected,\r\n                  hovered,\r\n                  isPrev,\r\n                  isNext,\r\n                  isToday: matchedToday,\r\n                  disabled,\r\n                  inRange\r\n                }\"\r\n              ></Renderer>\r\n            </slot>\r\n          </template>\r\n          <template v-if=\"$slots.itemContent || props.slots.itemContent\" #default=\"cellParams\">\r\n            <slot name=\"itemContent\" v-bind=\"cellParams\">\r\n              <Renderer :renderer=\"props.slots.itemContent\" :data=\"cellParams\"></Renderer>\r\n            </slot>\r\n          </template>\r\n        </CalendarCell>\r\n      </div>\r\n    </div>\r\n    <slot name=\"footer\">\r\n      <Renderer :renderer=\"props.slots.footer\"></Renderer>\r\n    </slot>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Column } from '@/components/column'\r\nimport { NumberInput } from '@/components/number-input'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { Row } from '@/components/row'\r\n\r\nimport { ref, toRef, watch } from 'vue'\r\n\r\nimport CalendarPanel from './calendar-panel.vue'\r\nimport { emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { calendarProps } from './props'\r\n\r\nimport type { CalendarSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'Calendar' })\r\n\r\nconst _props = defineProps(calendarProps)\r\nconst props = useProps('calendar', _props, {\r\n  locale: null,\r\n  value: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  year: () => new Date().getFullYear(),\r\n  month: {\r\n    default: () => new Date().getMonth() + 1,\r\n    validator: value => value > 0 && value <= 12,\r\n  },\r\n  weekDays: {\r\n    default: null,\r\n    validator: value => !value || value.length === 0 || value.length === 7,\r\n  },\r\n  weekStart: {\r\n    default: 0,\r\n    validator: value => value >= 0 && value < 7,\r\n  },\r\n  today: {\r\n    default: () => new Date(),\r\n    validator: value => !Number.isNaN(+new Date(value)),\r\n  },\r\n  disabledDate: {\r\n    default: () => false,\r\n    isFunc: true,\r\n  },\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:value', 'update:year', 'update:month'])\r\n\r\ndefineSlots<CalendarSlots>()\r\n\r\nconst nh = useNameHelper('calendar')\r\nconst locale = useLocale('calendar', toRef(props, 'locale'))\r\n\r\nconst calendarValue = ref(props.value)\r\nconst calendarYear = ref(props.year)\r\nconst calendarMonth = ref(props.month)\r\n\r\nwatch(\r\n  () => props.value,\r\n  value => {\r\n    calendarValue.value = value\r\n  },\r\n)\r\nwatch(\r\n  () => props.year,\r\n  value => {\r\n    calendarYear.value = value\r\n  },\r\n)\r\nwatch(\r\n  () => props.month,\r\n  value => {\r\n    calendarMonth.value = value\r\n  },\r\n)\r\n\r\ndefineExpose({ calendarValue, calendarYear, calendarMonth })\r\n\r\nfunction formatYearInput(value: number) {\r\n  return `${value}${locale.value.year}`\r\n}\r\n\r\nfunction formatMonthInput(value: number) {\r\n  return `${value}${locale.value.month}`\r\n}\r\n\r\nfunction isDisabled(date: Date) {\r\n  if (typeof props.disabledDate !== 'function') {\r\n    return true\r\n  }\r\n\r\n  return props.disabledDate(date)\r\n}\r\n\r\nfunction handleClick(date: Date) {\r\n  if (!isDisabled(date)) {\r\n    calendarValue.value = date\r\n  }\r\n\r\n  emitEvent(props.onSelect, date)\r\n  emit('update:value', date)\r\n}\r\n\r\nfunction handleYearChange(value: number) {\r\n  calendarYear.value = value\r\n\r\n  emitEvent(props.onYearChange, value, calendarMonth.value)\r\n  emit('update:year', value)\r\n}\r\n\r\nfunction handleMonthChange(value: number) {\r\n  calendarMonth.value = value\r\n\r\n  emitEvent(props.onMonthChange, calendarYear.value, value)\r\n  emit('update:month', value)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <CalendarPanel\r\n    v-model:value=\"calendarValue\"\r\n    :inherit=\"props.inherit\"\r\n    :class=\"[nh.b()]\"\r\n    :year=\"calendarYear\"\r\n    :month=\"calendarMonth\"\r\n    :week-start=\"props.weekStart\"\r\n    :today=\"props.today\"\r\n    :disabled-date=\"props.disabledDate\"\r\n  >\r\n    <template #header>\r\n      <slot name=\"header\">\r\n        <Renderer :renderer=\"props.slots.header\">\r\n          <Row inherit :class=\"nh.be('header')\" align=\"middle\">\r\n            <Column flex=\"auto\">\r\n              <slot name=\"title\">\r\n                <Renderer :renderer=\"props.slots.title\"></Renderer>\r\n              </slot>\r\n            </Column>\r\n            <Column :class=\"nh.be('actions')\" flex=\"0\">\r\n              <NumberInput\r\n                :value=\"calendarYear\"\r\n                inherit\r\n                :class=\"nh.be('year-input')\"\r\n                :min=\"1970\"\r\n                :max=\"2300\"\r\n                :formatter=\"formatYearInput\"\r\n                @change=\"handleYearChange\"\r\n              ></NumberInput>\r\n              <NumberInput\r\n                :value=\"calendarMonth\"\r\n                inherit\r\n                :class=\"nh.be('month-input')\"\r\n                :min=\"1\"\r\n                :max=\"12\"\r\n                :formatter=\"formatMonthInput\"\r\n                @change=\"handleMonthChange\"\r\n              ></NumberInput>\r\n            </Column>\r\n          </Row>\r\n        </Renderer>\r\n      </slot>\r\n    </template>\r\n    <template #week=\"{ label, index, week }\">\r\n      <div :class=\"nh.be('week')\">\r\n        <slot\r\n          name=\"week\"\r\n          :label=\"label\"\r\n          :index=\"index\"\r\n          :week=\"week\"\r\n        >\r\n          <Renderer :renderer=\"props.slots.week\" :data=\"{ label, index, week }\">\r\n            <div :class=\"nh.be('week-value')\">\r\n              {{ label }}\r\n            </div>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n    </template>\r\n    <template #item=\"{ date, label, selected, hovered, isPrev, isNext, isToday, disabled }\">\r\n      <div\r\n        :class=\"{\r\n          [nh.be('date')]: true,\r\n          [nh.bem('date', 'selected')]: selected,\r\n          [nh.bem('date', 'prev')]: isPrev,\r\n          [nh.bem('date', 'next')]: isNext,\r\n          [nh.bem('date', 'today')]: isToday,\r\n          [nh.bem('date', 'disabled')]: disabled\r\n        }\"\r\n        tabindex=\"0\"\r\n        @click=\"handleClick(date)\"\r\n        @keydown.enter.prevent=\"handleClick(date)\"\r\n        @keydown.space.prevent=\"handleClick(date)\"\r\n      >\r\n        <div :class=\"nh.be('date-header')\">\r\n          <slot\r\n            name=\"date\"\r\n            :selected=\"selected\"\r\n            :hovered=\"hovered\"\r\n            :date=\"date\"\r\n            :is-prev=\"isPrev\"\r\n            :is-next=\"isNext\"\r\n            :is-today=\"isToday\"\r\n            :disabled=\"disabled\"\r\n          >\r\n            <Renderer\r\n              :renderer=\"props.slots.date\"\r\n              :data=\"{ selected, hovered, date, isPrev, isNext, isToday, disabled }\"\r\n            >\r\n              <div :class=\"nh.be('date-value')\" :aria-label=\"label\">\r\n                {{ date.getDate() }}\r\n              </div>\r\n            </Renderer>\r\n          </slot>\r\n        </div>\r\n        <div :class=\"nh.be('date-content')\">\r\n          <slot\r\n            name=\"content\"\r\n            :selected=\"selected\"\r\n            :hovered=\"hovered\"\r\n            :date=\"date\"\r\n            :is-prev=\"isPrev\"\r\n            :is-next=\"isNext\"\r\n            :is-today=\"isToday\"\r\n            :disabled=\"disabled\"\r\n          >\r\n            <Renderer\r\n              :renderer=\"props.slots.content\"\r\n              :data=\"{ selected, hovered, date, isPrev, isNext, isToday, disabled }\"\r\n            ></Renderer>\r\n          </slot>\r\n        </div>\r\n      </div>\r\n    </template>\r\n  </CalendarPanel>\r\n</template>\r\n","import {\r\n  booleanProp,\r\n  booleanStringProp,\r\n  buildProps,\r\n  eventProp,\r\n  iconProp,\r\n  sizeProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\r\nimport type { CaptchaHollowProcess, CaptchaHollowType } from './hollow-paths'\r\nimport type {\r\n  CaptchaBeforeTest,\r\n  CaptchaSliderSlots,\r\n  CaptchaSlots,\r\n  CaptchaType,\r\n  SuccessEvent,\r\n} from './symbol'\r\n\r\nexport const captchaProps = buildProps({\r\n  type: String as PropType<CaptchaType>,\r\n  slideTarget: [Number, Array] as PropType<number | number[]>,\r\n  title: String,\r\n  tip: String,\r\n  successTip: String,\r\n  failTip: String,\r\n  image: [String, Function] as PropType<string | (() => Promise<string>)>,\r\n  tolerance: Number,\r\n  canvasSize: Array as PropType<number[]>,\r\n  refreshIcon: iconProp,\r\n  disabled: booleanProp,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  onBeforeTest: Function as PropType<CaptchaBeforeTest>,\r\n  texts: Array as PropType<string[]>,\r\n  failLimit: Number,\r\n  remotePoint: booleanProp,\r\n  useTrigger: booleanProp,\r\n  triggerSize: sizeProp,\r\n  triggerText: String,\r\n  transfer: booleanStringProp,\r\n  hideDelay: Number,\r\n  hollowShape: [String, Function] as PropType<CaptchaHollowType | CaptchaHollowProcess>,\r\n  slots: Object as PropType<CaptchaSlots>,\r\n  onSuccess: eventProp<EventListener<SuccessEvent>>(),\r\n  onFail: eventProp(),\r\n  onDragStart: eventProp<(percent: number) => void>(),\r\n  onDrag: eventProp<(percent: number) => void>(),\r\n  onDragEnd: eventProp<(percent: number) => void>(),\r\n  onRefresh: eventProp(),\r\n})\r\n\r\nexport type CaptchaProps = ExtractPropTypes<typeof captchaProps>\r\nexport type CaptchaCProps = ConfigurableProps<ExtractPropTypes<typeof captchaProps>>\r\n\r\nexport const captchaSliderProps = buildProps({\r\n  size: sizeProp,\r\n  target: Number,\r\n  tip: String,\r\n  successTip: String,\r\n  tolerance: Number,\r\n  disabled: booleanProp,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingLock: booleanProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  onBeforeTest: Function as PropType<(percent: number, matched: boolean) => unknown>,\r\n  slots: Object as PropType<CaptchaSliderSlots>,\r\n  onSuccess: eventProp<(percent: number) => void>(),\r\n  onFail: eventProp(),\r\n  onDragStart: eventProp<(percent: number) => void>(),\r\n  onDrag: eventProp<(percent: number) => void>(),\r\n  onDragEnd: eventProp<(percent: number) => void>(),\r\n})\r\n\r\nexport type CaptchaSliderProps = ExtractPropTypes<typeof captchaSliderProps>\r\nexport type CaptchaSliderCProps = ConfigurableProps<ExtractPropTypes<typeof captchaSliderProps>>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { useFieldStore } from '@/components/form'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, nextTick, ref, watch } from 'vue'\r\n\r\nimport {\r\n  createIconProp,\r\n  createSizeProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { useMoving, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { boundRange, toFixed } from '@vexip-ui/utils'\r\nimport { captchaSliderProps } from './props'\r\n\r\nimport type { CaptchaSliderSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'CaptchaSlider' })\r\n\r\nconst { idFor, labelId, disabled, loading, size, validateField, getFieldValue, setFieldValue } =\r\n  useFieldStore<boolean>(focus)\r\n\r\nconst _props = defineProps(captchaSliderProps)\r\nconst props = useProps('captcha', _props, {\r\n  size: createSizeProp(size),\r\n  target: {\r\n    default: 100,\r\n    validator: value => value >= 0 && value <= 100,\r\n  },\r\n  tip: null,\r\n  successTip: null,\r\n  tolerance: {\r\n    default: 1,\r\n    validator: value => value >= 0,\r\n  },\r\n  disabled: () => disabled.value,\r\n  loading: () => loading.value,\r\n  loadingIcon: createIconProp(),\r\n  loadingLock: false,\r\n  loadingEffect: null,\r\n  onBeforeTest: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  slots: () => ({}),\r\n})\r\n\r\ndefineSlots<CaptchaSliderSlots>()\r\n\r\nconst nh = useNameHelper('captcha')\r\nconst locale = useLocale('captcha')\r\nconst icons = useIcons()\r\n\r\nconst { timer } = useSetTimeout()\r\n\r\nconst currentLeft = ref(0)\r\nconst testing = ref(false)\r\nconst resetting = ref(false)\r\nconst isSuccess = ref(false)\r\nconst testLoading = ref(false)\r\n\r\nconst track = ref<HTMLElement>()\r\n\r\nconst readonly = computed(() => props.disabled || (props.loading && props.loadingLock))\r\n\r\nlet widthLimit: number\r\n\r\nconst { target: trigger, moving: dragging } = useMoving({\r\n  onStart: (_, event) => {\r\n    if (\r\n      testing.value ||\r\n      readonly.value ||\r\n      !track.value ||\r\n      !trigger.value ||\r\n      isSuccess.value ||\r\n      resetting.value ||\r\n      event.button > 0\r\n    ) {\r\n      return false\r\n    }\r\n\r\n    widthLimit = track.value.getBoundingClientRect().width\r\n    currentLeft.value = 0\r\n    verifyPosition()\r\n    trigger.value.focus()\r\n    emitEvent(props.onDragStart, currentLeft.value)\r\n  },\r\n  onMove: state => {\r\n    if (testing.value || readonly.value || isSuccess.value || resetting.value) {\r\n      return false\r\n    }\r\n\r\n    currentLeft.value = (state.deltaX / widthLimit) * 100\r\n    verifyPosition()\r\n    emitEvent(props.onDrag, currentLeft.value)\r\n  },\r\n  onEnd: async () => {\r\n    if (testing.value || readonly.value) return\r\n\r\n    testing.value = true\r\n\r\n    const matched = matchTarget(currentLeft.value)\r\n    let customResult: unknown\r\n\r\n    if (typeof props.onBeforeTest === 'function') {\r\n      nextTick(() => {\r\n        testLoading.value = true\r\n      })\r\n      customResult = await props.onBeforeTest(currentLeft.value, matched)\r\n      nextTick(() => {\r\n        testLoading.value = false\r\n      })\r\n    }\r\n\r\n    if (currentLeft.value && (customResult === false || (!matched && customResult !== true))) {\r\n      resetting.value = true\r\n      currentLeft.value = 0\r\n      isSuccess.value = false\r\n\r\n      setFieldValue(false)\r\n      emitEvent(props.onFail)\r\n    } else if (matched || customResult === true) {\r\n      isSuccess.value = true\r\n\r\n      if (customResult && !matched) {\r\n        resetting.value = true\r\n        currentLeft.value = props.target\r\n      }\r\n\r\n      setFieldValue(true)\r\n      emitEvent(props.onSuccess, currentLeft.value)\r\n    }\r\n\r\n    validateField()\r\n    trigger.value?.blur()\r\n    emitEvent(props.onDragEnd, currentLeft.value)\r\n\r\n    clearTimeout(timer.testing)\r\n    testing.value = false\r\n  },\r\n})\r\n\r\nconst isLoading = computed(() => props.loading || testLoading.value)\r\nconst className = computed(() => {\r\n  const baseCls = nh.be('slider')\r\n\r\n  return {\r\n    [baseCls]: true,\r\n    [nh.bs('vars')]: true,\r\n    [`${baseCls}--success`]: isSuccess.value,\r\n    [`${baseCls}--disabled`]: props.disabled,\r\n    [`${baseCls}--loading`]: isLoading.value,\r\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\r\n  }\r\n})\r\nconst fillerStyle = computed(() => {\r\n  return {\r\n    [nh.cv('filler-transition')]: resetting.value ? 'transform 250ms ease' : undefined,\r\n    transform: `scaleX(${currentLeft.value / 100})`,\r\n  }\r\n})\r\nconst tipStyle = computed(() => {\r\n  return {\r\n    [nh.cv('tip-transition')]: resetting.value ? 'background-position 250ms ease' : undefined,\r\n    backgroundPosition: `-${currentLeft.value}%`,\r\n  }\r\n})\r\nconst triggerStyle = computed(() => {\r\n  return {\r\n    left: `${currentLeft.value}%`,\r\n    [nh.cv('trigger-transition')]: resetting.value ? 'left 250ms ease' : undefined,\r\n  }\r\n})\r\n\r\nwatch(\r\n  () => getFieldValue(),\r\n  value => {\r\n    if (!value) {\r\n      reset()\r\n    } else {\r\n      if (!matchTarget(currentLeft.value)) {\r\n        resetting.value = true\r\n        currentLeft.value = props.target\r\n      }\r\n\r\n      isSuccess.value = true\r\n    }\r\n  },\r\n)\r\nwatch(readonly, value => value && reset())\r\n\r\ndefineExpose({\r\n  idFor,\r\n  currentLeft,\r\n  resetting,\r\n  isSuccess,\r\n  dragging,\r\n  isLoading,\r\n  track,\r\n  trigger,\r\n  focus,\r\n  reset,\r\n})\r\n\r\nfunction verifyPosition() {\r\n  currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\r\n}\r\n\r\nfunction reset() {\r\n  resetting.value = true\r\n  currentLeft.value = 0\r\n  isSuccess.value = false\r\n}\r\n\r\nfunction afterReset() {\r\n  resetting.value = false\r\n}\r\n\r\nfunction matchTarget(value: number) {\r\n  return Math.abs(props.target - value) <= props.tolerance\r\n}\r\n\r\nfunction focus(options?: FocusOptions) {\r\n  trigger.value?.focus(options)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :id=\"idFor\"\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    tabindex=\"-1\"\r\n    role=\"group\"\r\n    :aria-labelledby=\"labelId\"\r\n  >\r\n    <div\r\n      :class=\"{\r\n        [nh.be('filler')]: true,\r\n        [nh.bem('filler', 'loading')]: isLoading,\r\n        [nh.bem('filler', 'success')]: isSuccess\r\n      }\"\r\n      :style=\"fillerStyle\"\r\n    ></div>\r\n    <div\r\n      :class=\"{\r\n        [nh.be('tip')]: true,\r\n        [nh.bem('tip', 'focused')]: dragging,\r\n        [nh.bem('tip', 'loading')]: isLoading,\r\n        [nh.bem('tip', 'success')]: isSuccess\r\n      }\"\r\n      :style=\"tipStyle\"\r\n    >\r\n      <slot name=\"tip\" :success=\"isSuccess\">\r\n        <Renderer :renderer=\"props.slots.tip\" :data=\"{ success: isSuccess }\">\r\n          {{ isSuccess ? (props.successTip ?? locale.success) : (props.tip ?? locale.slideEnd) }}\r\n        </Renderer>\r\n      </slot>\r\n    </div>\r\n    <div ref=\"track\" :class=\"nh.be('track')\">\r\n      <div\r\n        ref=\"trigger\"\r\n        :class=\"{\r\n          [nh.be('trigger')]: true,\r\n          [nh.bem('trigger', 'focused')]: dragging,\r\n          [nh.bem('trigger', 'loading')]: isLoading,\r\n          [nh.bem('trigger', 'success')]: isSuccess\r\n        }\"\r\n        tabindex=\"0\"\r\n        :style=\"triggerStyle\"\r\n        @transitionend=\"afterReset\"\r\n      >\r\n        <slot name=\"trigger\" :success=\"isSuccess\">\r\n          <Renderer :renderer=\"props.slots.trigger\" :data=\"{ success: isSuccess }\">\r\n            <Icon v-if=\"isSuccess\" v-bind=\"icons.check\"></Icon>\r\n            <Icon\r\n              v-else-if=\"isLoading\"\r\n              v-bind=\"icons.loading\"\r\n              :effect=\"props.loadingEffect || icons.loading.effect\"\r\n              :icon=\"props.loadingIcon || icons.loading.icon\"\r\n            ></Icon>\r\n            <Icon v-else v-bind=\"icons.anglesRight\"></Icon>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n","export interface CaptchaHollowOptions {\r\n  ctx: CanvasRenderingContext2D,\r\n  /**\r\n   * The x coordinate of slide target center\r\n   */\r\n  x: number,\r\n  /**\r\n   * The y coordinate of slide target center\r\n   */\r\n  y: number,\r\n  /**\r\n   * Current canvas width\r\n   */\r\n  width: number,\r\n  /**\r\n   * Current canvas height\r\n   */\r\n  height: number,\r\n}\r\n\r\n/**\r\n * Specify the react of the hollow's shape\r\n */\r\nexport type CaptchaHollowResult = [x: number, y: number, width: number, height: number]\r\nexport type CaptchaHollowProcess = (options: CaptchaHollowOptions) => CaptchaHollowResult\r\n\r\nexport type CaptchaHollowType = 'square' | 'puzzle' | 'shield' | 'heart'\r\n\r\nexport const squarePath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\r\n  const side = Math.min(width, height) * 0.25\r\n  const halfSide = side * 0.5\r\n\r\n  ctx.moveTo(x - halfSide, y - halfSide)\r\n  ctx.lineTo(x + halfSide, y - halfSide)\r\n  ctx.lineTo(x + halfSide, y + halfSide)\r\n  ctx.lineTo(x - halfSide, y + halfSide)\r\n  ctx.closePath()\r\n\r\n  return [x - halfSide - 2, y - halfSide - 2, side + 4, side + 4]\r\n}\r\n\r\nexport const puzzlePath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\r\n  const side = Math.min(width, height) * 0.2\r\n  const halfSide = side * 0.5\r\n  const left = x - halfSide\r\n  const top = y - halfSide\r\n  const radius = side * 0.2\r\n\r\n  ctx.moveTo(left, top)\r\n  ctx.arc(left + halfSide, top - radius + 2, radius, 0.72 * Math.PI, 2.26 * Math.PI)\r\n  ctx.lineTo(left + side, top)\r\n  ctx.arc(left + side + radius - 2, top + halfSide, radius, 1.21 * Math.PI, 2.78 * Math.PI)\r\n  ctx.lineTo(left + side, top + side)\r\n  ctx.lineTo(left, top + side)\r\n  ctx.arc(left + radius - 2, top + halfSide, radius + 0.4, 2.76 * Math.PI, 1.24 * Math.PI, true)\r\n  ctx.lineTo(left, top)\r\n\r\n  return [x - halfSide - 2, y - side * 0.9 - 2, side * 1.4 + 4, side * 1.4 + 4]\r\n}\r\n\r\nexport const shieldPath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\r\n  const side = Math.min(width, height) * 0.25\r\n  const halfSide = side * 0.5\r\n\r\n  ctx.moveTo(x, y - halfSide)\r\n  ctx.bezierCurveTo(\r\n    x,\r\n    y - halfSide + side * 0.05,\r\n    x - halfSide + side * 0.3,\r\n    y - halfSide * 0.5 + side * 0.1,\r\n    x - halfSide,\r\n    y - halfSide * 0.7,\r\n  )\r\n  ctx.bezierCurveTo(x - halfSide, y + side * 0.3, x - side * 0.1, y + halfSide, x, y + halfSide)\r\n  ctx.bezierCurveTo(\r\n    x + side * 0.1,\r\n    y + halfSide,\r\n    x + halfSide,\r\n    y + side * 0.3,\r\n    x + halfSide,\r\n    y - halfSide * 0.7,\r\n  )\r\n  ctx.bezierCurveTo(\r\n    x + halfSide - side * 0.3,\r\n    y - halfSide * 0.5 + side * 0.1,\r\n    x,\r\n    y - halfSide + side * 0.05,\r\n    x,\r\n    y - halfSide,\r\n  )\r\n\r\n  return [x - halfSide - 2, y - halfSide - 2, side + 4, side + 4]\r\n}\r\n\r\nexport const heartPath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\r\n  const side = Math.min(width, height) * 0.25\r\n  const halfSide = side * 0.5\r\n\r\n  ctx.moveTo(x, y - side * 0.25)\r\n  ctx.bezierCurveTo(\r\n    x,\r\n    y - side * 0.4,\r\n    x - side * 0.1,\r\n    y - halfSide,\r\n    x - halfSide * 0.5,\r\n    y - halfSide,\r\n  )\r\n  ctx.bezierCurveTo(\r\n    x - halfSide * 0.5 - side * 0.1,\r\n    y - halfSide,\r\n    x - halfSide,\r\n    y - side * 0.4,\r\n    x - halfSide,\r\n    y - side * 0.2,\r\n  )\r\n  ctx.bezierCurveTo(\r\n    x - halfSide,\r\n    y + side * 0.2,\r\n    x - side * 0.05,\r\n    y + halfSide * 0.8,\r\n    x,\r\n    y + halfSide * 0.8,\r\n  )\r\n  ctx.bezierCurveTo(\r\n    x + side * 0.05,\r\n    y + halfSide * 0.8,\r\n    x + halfSide,\r\n    y + side * 0.2,\r\n    x + halfSide,\r\n    y - side * 0.2,\r\n  )\r\n  ctx.bezierCurveTo(\r\n    x + halfSide,\r\n    y - side * 0.4,\r\n    x + halfSide * 0.5 + side * 0.1,\r\n    y - halfSide,\r\n    x + halfSide * 0.5,\r\n    y - halfSide,\r\n  )\r\n  ctx.bezierCurveTo(x + side * 0.1, y - halfSide, x, y - side * 0.4, x, y - side * 0.25)\r\n\r\n  return [x - halfSide - 2, y - halfSide - 2, side + 4, side * 0.9 + 4]\r\n}\r\n","import { Button } from '@/components/button'\r\nimport { Icon } from '@/components/icon'\r\nimport { Spin } from '@/components/spin'\r\nimport { Tooltip } from '@/components/tooltip'\r\nimport { useFieldStore } from '@/components/form'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport {\r\n  Transition,\r\n  TransitionGroup,\r\n  computed,\r\n  defineComponent,\r\n  nextTick,\r\n  onMounted,\r\n  reactive,\r\n  ref,\r\n  renderSlot,\r\n  shallowRef,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport CaptchaSlider from './captcha-slider.vue'\r\nimport {\r\n  createIconProp,\r\n  createSizeProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { createSlotRender, useSetTimeout } from '@vexip-ui/hooks'\r\nimport {\r\n  ensureArray,\r\n  isClient,\r\n  isNull,\r\n  nextFrameOnce,\r\n  random,\r\n  randomHardColor,\r\n} from '@vexip-ui/utils'\r\nimport { captchaProps } from './props'\r\nimport { heartPath, puzzlePath, shieldPath, squarePath } from './hollow-paths'\r\n\r\nimport type { CaptchaSliderExposed } from '@/components/captcha-slider'\r\nimport type { SuccessEvent } from './symbol'\r\n\r\nexport default defineComponent({\r\n  name: 'Captcha',\r\n  props: captchaProps,\r\n  emits: ['update:visible'],\r\n  setup(_props, { slots, expose }) {\r\n    const { idFor, labelId, disabled, loading, validateField, setFieldValue } = useFieldStore<\r\n      number | number[]\r\n    >(focus)\r\n\r\n    const props = useProps('captcha', _props, {\r\n      type: 'slide',\r\n      slideTarget: {\r\n        default: null,\r\n        validator: value => {\r\n          if (isNull(value)) return true\r\n\r\n          if (Array.isArray(value)) {\r\n            return value[0] >= 0 && value[0] <= 100 && value[1] >= 0 && value[1] <= 100\r\n          } else {\r\n            return value >= 0 && value <= 100\r\n          }\r\n        },\r\n      },\r\n      title: null,\r\n      tip: null,\r\n      successTip: null,\r\n      failTip: null,\r\n      image: null,\r\n      tolerance: {\r\n        default: 1,\r\n        validator: value => value >= 0,\r\n      },\r\n      canvasSize: () => [1000, 600],\r\n      refreshIcon: createIconProp(),\r\n      disabled: () => disabled.value,\r\n      loading: () => loading.value,\r\n      loadingIcon: createIconProp(),\r\n      loadingEffect: null,\r\n      onBeforeTest: {\r\n        default: null,\r\n        isFunc: true,\r\n      },\r\n      texts: {\r\n        default: () => [],\r\n        validator: value => !value.find(text => text.length > 1),\r\n      },\r\n      failLimit: 0,\r\n      remotePoint: false,\r\n      useTrigger: false,\r\n      triggerSize: createSizeProp(),\r\n      triggerText: null,\r\n      transfer: false,\r\n      hideDelay: {\r\n        default: 3000,\r\n        validator: value => value >= 0,\r\n      },\r\n      hollowShape: {\r\n        default: squarePath,\r\n        isFunc: true,\r\n      },\r\n      slots: () => ({}),\r\n    })\r\n\r\n    const nh = useNameHelper('captcha')\r\n    const locale = useLocale('captcha')\r\n    const icons = useIcons()\r\n\r\n    const { timer } = useSetTimeout()\r\n\r\n    const currentTarget = ref(parseTarget(props.slideTarget))\r\n    const dragging = ref(false)\r\n    const pointers = reactive<number[][]>([])\r\n    const testLoading = ref(false)\r\n    const success = ref(false)\r\n    const failed = ref(false)\r\n    const failedCount = ref(0)\r\n    const visible = ref(false)\r\n\r\n    const wrapper = ref<HTMLElement>()\r\n    const canvas = ref<HTMLCanvasElement>()\r\n    const subCanvas = ref<HTMLCanvasElement>()\r\n    const slider = ref<CaptchaSliderExposed>()\r\n\r\n    const track = computed(() => slider.value?.track)\r\n\r\n    const isSuccess = computed(() => !!slider.value?.isSuccess || success.value)\r\n    const currentLeft = computed(() => slider.value?.currentLeft || 0)\r\n    const resetting = computed(() => slider.value?.resetting)\r\n\r\n    const usedTarget = computed(() => currentTarget.value[0])\r\n\r\n    const imageLoading = ref(false)\r\n    const imagePromise = shallowRef(Promise.resolve())\r\n\r\n    const pointerTargets: number[][] = []\r\n\r\n    const fontRate = 0.108\r\n\r\n    let imageLoaded = false\r\n    let image: HTMLImageElement | undefined\r\n    let memoryCanvas: HTMLCanvasElement | undefined\r\n\r\n    const isLoading = computed(() => props.loading || imageLoading.value || testLoading.value)\r\n    const failLocked = computed(() => props.failLimit > 0 && failedCount.value >= props.failLimit)\r\n    const className = computed(() => {\r\n      return [\r\n        nh.b(),\r\n        nh.bs('vars'),\r\n        nh.bm(props.type),\r\n        {\r\n          [nh.bm('success')]: isSuccess.value,\r\n          [nh.bm('fail')]: !isSuccess.value && failed.value,\r\n          [nh.bm('dragging')]: dragging.value,\r\n          [nh.bm('disabled')]: props.disabled,\r\n          [nh.bm('loading')]: isLoading.value,\r\n          [nh.bm('fail-locked')]: failLocked.value,\r\n        },\r\n      ]\r\n    })\r\n    const subCanvasStyle = computed(() => {\r\n      return {\r\n        left: `${currentLeft.value}%`,\r\n        [nh.cv('trigger-transition')]: resetting.value ? 'left 250ms ease' : undefined,\r\n      }\r\n    })\r\n    const canvasSize = computed(() => {\r\n      return [props.canvasSize[0] || 1000, props.canvasSize[1] || 600]\r\n    })\r\n    const actionLocked = computed(() => props.disabled || isSuccess.value || isLoading.value)\r\n\r\n    watch(\r\n      () => props.slideTarget,\r\n      value => {\r\n        currentTarget.value = parseTarget(value)\r\n      },\r\n    )\r\n    watch([() => props.image, wrapper], async () => {\r\n      image = undefined\r\n      await (imagePromise.value = loadImage())\r\n      drawImageNextFrame()\r\n    })\r\n    watch(\r\n      [\r\n        currentTarget,\r\n        () => props.canvasSize[0],\r\n        () => props.canvasSize[1],\r\n        () => props.hollowShape,\r\n      ],\r\n      drawImageNextFrame,\r\n    )\r\n    watch(\r\n      [() => props.type, () => props.remotePoint],\r\n      () => {\r\n        if (\r\n          props.type !== 'slide' &&\r\n          props.remotePoint &&\r\n          typeof props.onBeforeTest !== 'function'\r\n        ) {\r\n          console.warn(\r\n            \"[vexip-ui:Captcha] You should specify 'on-before-test' prop to valid the captcha \" +\r\n              \"if you are using the 'point' type in remote\",\r\n          )\r\n        }\r\n      },\r\n      { immediate: true },\r\n    )\r\n    watch(\r\n      [() => props.type, () => props.texts, () => props.texts.length, () => props.remotePoint],\r\n      () => {\r\n        if (props.type === 'point' && props.texts.length && !props.remotePoint && image) {\r\n          drawImageNextFrame()\r\n        }\r\n      },\r\n    )\r\n    watch(visible, async value => {\r\n      if (value) {\r\n        await (imagePromise.value = loadImage())\r\n        drawImageNextFrame()\r\n      }\r\n    })\r\n    watch(isSuccess, value => {\r\n      if (value && props.useTrigger && visible.value) {\r\n        clearTimeout(timer.hideTrigger)\r\n\r\n        timer.hideTrigger = setTimeout(() => {\r\n          visible.value = false\r\n        }, props.hideDelay)\r\n      }\r\n    })\r\n\r\n    onMounted(async () => {\r\n      await (imagePromise.value = loadImage())\r\n      drawImage()\r\n    })\r\n\r\n    expose({\r\n      dragging,\r\n      resetting,\r\n      isSuccess,\r\n      imageLoading,\r\n      imagePromise,\r\n      wrapper,\r\n      canvas,\r\n      subCanvas,\r\n      slider,\r\n      reset,\r\n    })\r\n\r\n    // 避免多次触发时发生竞态问题\r\n    let loadFlag: string\r\n\r\n    async function loadImage() {\r\n      if (image) return\r\n\r\n      imageLoading.value = true\r\n      loadFlag = `${Date.now()}${Math.round(Math.random() * 10e6)}`\r\n\r\n      const flag = loadFlag\r\n      const src = typeof props.image === 'function' ? await props.image() : props.image\r\n\r\n      await new Promise<void>(resolve => {\r\n        if (!isClient || flag !== loadFlag || !src) {\r\n          resolve()\r\n          return\r\n        }\r\n\r\n        image = new Image()\r\n        imageLoaded = false\r\n        image.src = src\r\n\r\n        if (src.trim().startsWith('data:image')) {\r\n          imageLoaded = true\r\n          resolve()\r\n        } else {\r\n          image.onload = () => {\r\n            imageLoaded = true\r\n            resolve()\r\n          }\r\n        }\r\n      }).finally(() => {\r\n        imageLoading.value = false\r\n      })\r\n    }\r\n\r\n    function drawImageWithTexts() {\r\n      const canvasEl = canvas.value\r\n      const ctx = canvasEl?.getContext?.('2d')\r\n\r\n      if (!image || !canvasEl || !ctx) return\r\n\r\n      const { width, height } = canvasEl\r\n\r\n      ctx.drawImage(image, 0, 0, width, height)\r\n\r\n      if (!props.texts.length || props.remotePoint) return\r\n\r\n      pointerTargets.length = 0\r\n\r\n      const fontSize = Math.max(width, height) * fontRate\r\n\r\n      ctx.textBaseline = 'middle'\r\n      ctx.textAlign = 'center'\r\n      ctx.font = `bold ${fontSize}px sans-serif`\r\n      ctx.lineWidth = 2\r\n      ctx.strokeStyle = '#fff'\r\n\r\n      const drawText = (\r\n        text: string,\r\n        x: number,\r\n        y: number,\r\n        radian = 0,\r\n        color = randomHardColor(),\r\n      ) => {\r\n        ctx.save()\r\n        ctx.translate(x, y)\r\n        radian && ctx.rotate(radian * Math.PI)\r\n        ctx.fillStyle = color\r\n        ctx.fillText(text, 0, 0)\r\n        ctx.strokeText(text, 0, 0)\r\n        ctx.restore()\r\n      }\r\n\r\n      const metrics = ctx.measureText(props.texts[0])\r\n      const xLimit = Math.max(fontSize, metrics.width) * 1.2\r\n      const yLimit =\r\n        Math.max(fontSize, metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent) * 1.2\r\n\r\n      let prevX = -2 * fontSize\r\n      let prevY = -2 * fontSize\r\n\r\n      for (const text of props.texts) {\r\n        let x = prevX\r\n        let y = prevY\r\n\r\n        while (Math.abs(x - prevX) < xLimit && Math.abs(y - prevY) < yLimit) {\r\n          x = width * 0.1 + Math.random() * width * 0.8\r\n          y = height * 0.1 + Math.random() * height * 0.8\r\n        }\r\n\r\n        prevX = x\r\n        prevY = y\r\n\r\n        pointerTargets.push([(x / width) * 100, (y / height) * 100])\r\n        drawText(text, x, y, Math.random() * 2)\r\n      }\r\n    }\r\n\r\n    function getHollowProcess() {\r\n      if (typeof props.hollowShape === 'function') return props.hollowShape\r\n\r\n      switch (props.hollowShape) {\r\n        case 'puzzle':\r\n          return puzzlePath\r\n        case 'shield':\r\n          return shieldPath\r\n        case 'heart':\r\n          return heartPath\r\n        default:\r\n          return squarePath\r\n      }\r\n    }\r\n\r\n    function drawImage() {\r\n      const canvasEl = canvas.value\r\n      const ctx = canvasEl?.getContext?.('2d')\r\n      const subCanvasEl = subCanvas.value\r\n      const subCtx = subCanvasEl?.getContext?.('2d')\r\n\r\n      if (!image || !imageLoaded || !canvasEl || !ctx || !props.image) return\r\n\r\n      if (props.type === 'point') {\r\n        drawImageWithTexts()\r\n        return\r\n      }\r\n\r\n      if (!subCanvasEl || !subCtx || !track.value) return\r\n\r\n      if (!memoryCanvas) {\r\n        if (!isClient) return\r\n\r\n        memoryCanvas = document.createElement('canvas')\r\n      }\r\n\r\n      memoryCanvas.width = canvasEl.width\r\n      memoryCanvas.height = canvasEl.height\r\n\r\n      const pathCtx = memoryCanvas.getContext('2d')\r\n\r\n      if (!pathCtx) return\r\n\r\n      ctx.clearRect(0, 0, canvasEl.width, canvasEl.height)\r\n      subCtx.clearRect(0, 0, subCanvasEl.width, subCanvasEl.height)\r\n      pathCtx.clearRect(0, 0, memoryCanvas.width, memoryCanvas.height)\r\n\r\n      const canvasRect = canvasEl.getBoundingClientRect()\r\n      const trackRect = track.value.getBoundingClientRect()\r\n      // 滑动时以轨道为准，所以需要补正 canvas 宽度和 track 宽度的差值\r\n      const widthFix = ((canvasRect.width - trackRect.width) / canvasRect.width) * canvasEl.width\r\n\r\n      const targetX = widthFix / 2 + currentTarget.value[0] * (canvasEl.width - widthFix) * 0.01\r\n      const targetY = currentTarget.value[1] * canvasEl.height * 0.01\r\n\r\n      const hollowProcess = getHollowProcess()\r\n\r\n      pathCtx.beginPath()\r\n      pathCtx.strokeStyle = 'rgba(255, 255, 255, 0.5)'\r\n      pathCtx.lineWidth = 4\r\n\r\n      const [clipX, clipY, clipWidth, clipHeight] = hollowProcess({\r\n        ctx: pathCtx,\r\n        x: targetX,\r\n        y: targetY,\r\n        width: props.canvasSize[0],\r\n        height: props.canvasSize[1],\r\n      })\r\n\r\n      pathCtx.stroke()\r\n      pathCtx.clip()\r\n      pathCtx.drawImage(image, 0, 0, canvasEl.width, canvasEl.height)\r\n\r\n      // 中心点偏移修正\r\n      const xLeftWidth = targetX - clipX\r\n      const translateFix = ((clipWidth * 0.5 - xLeftWidth) / clipWidth) * 100\r\n\r\n      subCanvasEl.style.transform = `translate3d(${translateFix - 50}%, 0, 0)`\r\n      subCanvasEl.width = clipWidth\r\n\r\n      subCtx.drawImage(\r\n        memoryCanvas,\r\n        clipX,\r\n        clipY,\r\n        clipWidth,\r\n        clipHeight,\r\n        0,\r\n        clipY,\r\n        clipWidth,\r\n        clipHeight,\r\n      )\r\n\r\n      ctx.save()\r\n      ctx.beginPath()\r\n      ctx.fillStyle = 'rgba(255, 255, 255, 0.75)'\r\n      ctx.strokeStyle = 'rgba(255, 255, 255, 0.5)'\r\n      ctx.lineWidth = 10\r\n\r\n      hollowProcess({\r\n        ctx,\r\n        x: targetX,\r\n        y: targetY,\r\n        width: props.canvasSize[0],\r\n        height: props.canvasSize[1],\r\n      })\r\n\r\n      ctx.stroke()\r\n      ctx.fill()\r\n      ctx.restore()\r\n      ctx.globalCompositeOperation = 'destination-over'\r\n      ctx.drawImage(image, 0, 0, canvasEl.width, canvasEl.height)\r\n    }\r\n\r\n    function drawImageNextFrame() {\r\n      nextFrameOnce(drawImage)\r\n    }\r\n\r\n    async function reset(newImage?: string | (() => Promise<string>)) {\r\n      if (newImage) {\r\n        image = undefined\r\n        await (imagePromise.value = loadImage())\r\n        drawImage()\r\n      }\r\n\r\n      success.value = false\r\n      failed.value = false\r\n      failedCount.value = 0\r\n      currentTarget.value = parseTarget()\r\n      pointers.length = 0\r\n\r\n      slider.value?.reset()\r\n      props.type === 'point' && drawImageWithTexts()\r\n    }\r\n\r\n    function parseTarget(target = props.slideTarget) {\r\n      if (isNull(target)) return [random(75, 25), random(75, 25)]\r\n\r\n      const [targetX = random(75, 25), targetY = random(75, 25)] = ensureArray(target)\r\n\r\n      return [targetX, targetY]\r\n    }\r\n\r\n    function focus(options?: FocusOptions) {\r\n      slider.value?.focus(options)\r\n    }\r\n\r\n    function handleDragStart(percent: number) {\r\n      dragging.value = true\r\n      emitEvent(props.onDragStart, percent)\r\n    }\r\n\r\n    function handleDrag(percent: number) {\r\n      emitEvent(props.onDrag, percent)\r\n    }\r\n\r\n    function handleDragEnd(percent: number) {\r\n      dragging.value = false\r\n      emitEvent(props.onDragEnd, percent)\r\n    }\r\n\r\n    function handleSlideSuccess(percent: number) {\r\n      success.value = true\r\n      failed.value = false\r\n\r\n      emitEvent(props.onSuccess as SuccessEvent, percent)\r\n      setFieldValue(percent)\r\n      validateField()\r\n    }\r\n\r\n    function handleSlideFail() {\r\n      failed.value = true\r\n      ++failedCount.value\r\n\r\n      emitEvent(props.onFail)\r\n    }\r\n\r\n    function handleRefresh() {\r\n      !actionLocked.value && emitEvent(props.onRefresh)\r\n    }\r\n\r\n    function stopPropagation(event: Event) {\r\n      event.stopPropagation()\r\n    }\r\n\r\n    async function verifyPointers() {\r\n      if (isLoading.value) return\r\n\r\n      pointers.length = props.texts.length\r\n\r\n      let result = props.remotePoint\r\n      let customResult: unknown\r\n\r\n      if (!props.remotePoint && canvas.value) {\r\n        const { width, height } = canvas.value\r\n        const fontSize = Math.max(width, height) * fontRate\r\n        const xTolerance = (fontSize / width) * 50 + props.tolerance\r\n        const yTolerance = (fontSize / height) * 50 + props.tolerance\r\n\r\n        result = true\r\n\r\n        for (let i = 0, len = pointers.length; i < len; ++i) {\r\n          const [x, y] = pointers[i]\r\n          const [targetX, targetY] = pointerTargets[i]\r\n\r\n          if (Math.abs(x - targetX) > xTolerance || Math.abs(y - targetY) > yTolerance) {\r\n            result = false\r\n            break\r\n          }\r\n        }\r\n      }\r\n\r\n      if (typeof props.onBeforeTest === 'function') {\r\n        nextTick(() => {\r\n          testLoading.value = true\r\n        })\r\n        customResult = await (props.onBeforeTest as any)(pointers.flat())\r\n        nextTick(() => {\r\n          testLoading.value = false\r\n        })\r\n      }\r\n\r\n      if (!result || customResult === false) {\r\n        success.value = false\r\n        pointers.length = 0\r\n        failed.value = true\r\n        ++failedCount.value\r\n\r\n        emitEvent(props.onFail)\r\n      } else {\r\n        success.value = true\r\n        failed.value = false\r\n\r\n        emitEvent(props.onSuccess as SuccessEvent, pointers.flat())\r\n      }\r\n    }\r\n\r\n    function handleImageClick(event: MouseEvent) {\r\n      if (props.type !== 'point' || actionLocked.value || !canvas.value) return\r\n\r\n      const { clientWidth: canvasWidth, clientHeight: canvasHeight } = canvas.value\r\n      const { offsetX, offsetY } = event\r\n\r\n      pointers.push([(offsetX / canvasWidth) * 100, (offsetY / canvasHeight) * 100])\r\n\r\n      if (pointers.length >= props.texts.length) {\r\n        nextTick(verifyPointers)\r\n      }\r\n    }\r\n\r\n    function cancelPointer(index: number, event: Event) {\r\n      event.stopPropagation()\r\n\r\n      if (actionLocked.value || index !== pointers.length - 1) return\r\n\r\n      pointers.pop()\r\n    }\r\n\r\n    function handleTrigger() {\r\n      if (!isSuccess.value) {\r\n        visible.value = true\r\n      }\r\n    }\r\n\r\n    function renderImage() {\r\n      return (\r\n        <div\r\n          class={[nh.be('image'), actionLocked.value && nh.bem('image', 'locked')]}\r\n          onClick={handleImageClick}\r\n        >\r\n          {props.image && (\r\n            <div class={nh.be('image-inner')}>\r\n              <canvas\r\n                ref={canvas}\r\n                class={nh.be('canvas')}\r\n                width={canvasSize.value[0]}\r\n                height={canvasSize.value[1]}\r\n              ></canvas>\r\n              {props.type === 'slide' && (\r\n                <div class={nh.be('sub-image')}>\r\n                  <canvas\r\n                    ref={subCanvas}\r\n                    class={nh.be('sub-canvas')}\r\n                    height={canvasSize.value[1]}\r\n                    style={subCanvasStyle.value}\r\n                  ></canvas>\r\n                </div>\r\n              )}\r\n            </div>\r\n          )}\r\n          {props.type === 'point' && (\r\n            <TransitionGroup name={nh.ns('fade')} appear>\r\n              {pointers.map(([x, y], index) => (\r\n                <span\r\n                  key={index}\r\n                  class={nh.be('pointer')}\r\n                  style={{ top: `${y}%`, left: `${x}%` }}\r\n                  onClick={cancelPointer.bind(null, index)}\r\n                >\r\n                  {index + 1}\r\n                </span>\r\n              ))}\r\n            </TransitionGroup>\r\n          )}\r\n          <Transition name={nh.ns('fade')}>\r\n            {(isSuccess.value || failed.value) && (\r\n              <div\r\n                class={[\r\n                  nh.be('image-tip'),\r\n                  nh.bem('image-tip', isSuccess.value ? 'success' : 'fail'),\r\n                ]}\r\n                onClick={stopPropagation}\r\n              >\r\n                {isSuccess.value\r\n                  ? (props.successTip ?? locale.value.success)\r\n                  : (props.failTip ?? locale.value.fail)}\r\n              </div>\r\n            )}\r\n          </Transition>\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderSlider() {\r\n      return (\r\n        <CaptchaSlider\r\n          ref={slider}\r\n          class={nh.bem('slider', 'inner')}\r\n          target={usedTarget.value}\r\n          tolerance={props.tolerance}\r\n          loading={isLoading.value}\r\n          loading-icon={props.loadingIcon}\r\n          loading-lock\r\n          loading-effect={props.loadingEffect}\r\n          disabled={props.disabled || failLocked.value}\r\n          onBeforeTest={props.onBeforeTest}\r\n          onSuccess={handleSlideSuccess}\r\n          onFail={handleSlideFail}\r\n          onDragStart={handleDragStart}\r\n          onDrag={handleDrag}\r\n          onDragEnd={handleDragEnd}\r\n        >\r\n          {{\r\n            tip: () =>\r\n              renderSlot(slots, 'tip', { success: isSuccess.value }, () => [\r\n                <Renderer renderer={props.slots.tip} data={{ success: isSuccess.value }}>\r\n                  {props.tip ?? locale.value.slide}\r\n                </Renderer>,\r\n              ]),\r\n          }}\r\n        </CaptchaSlider>\r\n      )\r\n    }\r\n\r\n    function renderTextList() {\r\n      return (\r\n        <div class={nh.be('text-list')}>\r\n          <div class={nh.be('tip')}>\r\n            {renderSlot(slots, 'tip', { success: isSuccess.value }, () => [\r\n              <Renderer renderer={props.slots.tip} data={{ success: isSuccess.value }}>\r\n                {props.tip ?? locale.value.pointInOrder}\r\n              </Renderer>,\r\n            ])}\r\n          </div>\r\n          <span>{':'}</span>\r\n          {renderSlot(slots, 'texts', { texts: toRef(props, 'texts') }, () => [\r\n            <Renderer renderer={props.slots.texts} data={{ texts: toRef(props, 'texts') }}>\r\n              {props.texts.map((text, index) => (\r\n                <span key={index} class={nh.be('text')}>\r\n                  {text}\r\n                </span>\r\n              ))}\r\n            </Renderer>,\r\n          ])}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderFooter() {\r\n      if (props.type === 'slide') return renderSlider()\r\n      if (props.type === 'point') return renderTextList()\r\n\r\n      return null\r\n    }\r\n\r\n    function renderPanel() {\r\n      return (\r\n        <div\r\n          ref={wrapper}\r\n          id={idFor.value}\r\n          class={className.value}\r\n          tabindex={-1}\r\n          role={'application'}\r\n          aria-labelledby={labelId.value}\r\n        >\r\n          <div class={nh.be('header')}>\r\n            <div class={nh.be('title')}>\r\n              {renderSlot(slots, 'title', { success: isSuccess.value }, () => [\r\n                <Renderer renderer={props.slots.title} data={{ success: isSuccess.value }}>\r\n                  {props.title ?? locale.value.doCaptcha}\r\n                </Renderer>,\r\n              ])}\r\n            </div>\r\n            <span role={'none'} style={'flex: auto'}></span>\r\n            <button\r\n              class={[\r\n                nh.be('action'),\r\n                nh.be('refresh'),\r\n                actionLocked.value && nh.bem('action', 'disabled'),\r\n              ]}\r\n              type={'button'}\r\n              onClick={handleRefresh}\r\n            >\r\n              {renderSlot(slots, 'refresh', undefined, () => [\r\n                <Renderer renderer={props.slots.refresh}>\r\n                  <Icon\r\n                    {...icons.value.refresh}\r\n                    icon={props.refreshIcon || icons.value.refresh.icon}\r\n                  ></Icon>\r\n                </Renderer>,\r\n              ])}\r\n            </button>\r\n          </div>\r\n          <Spin active={isLoading.value || slider.value?.isLoading} delay={false}>\r\n            {{\r\n              default: renderImage,\r\n              icon: createSlotRender(slots, ['loading-icon', 'loadingIcon'], () => (\r\n                <Renderer renderer={props.slots.loadingIcon}></Renderer>\r\n              )),\r\n            }}\r\n          </Spin>\r\n          {renderFooter()}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderTrigger() {\r\n      return renderSlot(\r\n        slots,\r\n        'trigger',\r\n        { visible: visible.value, success: isSuccess.value },\r\n        () => [\r\n          <Renderer\r\n            renderer={props.slots.trigger}\r\n            data={{ visible: visible.value, success: isSuccess.value }}\r\n          >\r\n            <Button\r\n              class={[nh.be('button'), isSuccess.value && nh.bem('button', 'success')]}\r\n              type={isSuccess.value ? 'success' : 'primary'}\r\n              size={props.triggerSize}\r\n              block\r\n              loading={visible.value && !isSuccess.value}\r\n              icon={isSuccess.value ? icons.value.success.icon : null}\r\n              onClick={handleTrigger}\r\n            >\r\n              {props.triggerText ??\r\n                (isSuccess.value ? locale.value.completed : locale.value.trigger)}\r\n            </Button>\r\n          </Renderer>,\r\n        ],\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      if (props.useTrigger) {\r\n        return (\r\n          <Tooltip\r\n            class={nh.bs('wrapper')}\r\n            visible={visible.value}\r\n            trigger={'custom'}\r\n            raw\r\n            wrapper\r\n            transfer={props.transfer}\r\n          >\r\n            {{\r\n              trigger: renderTrigger,\r\n              default: renderPanel,\r\n            }}\r\n          </Tooltip>\r\n        )\r\n      }\r\n\r\n      return renderPanel()\r\n    }\r\n  },\r\n})\r\n","import { buildProps, styleProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { CardShadowType, CardSlots } from './symbol'\r\n\r\nexport const cardProps = buildProps({\r\n  title: String,\r\n  shadow: String as PropType<CardShadowType>,\r\n  contentStyle: styleProp,\r\n  slots: Object as PropType<CardSlots>,\r\n})\r\n\r\nexport type CardProps = ExtractPropTypes<typeof cardProps>\r\nexport type CardCProps = ConfigurableProps<CardProps>\r\n","<script setup lang=\"ts\">\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { cardProps } from './props'\r\n\r\nimport type { CardShadowType, CardSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'Card' })\r\n\r\nconst _props = defineProps(cardProps)\r\nconst props = useProps('card', _props, {\r\n  title: '',\r\n  shadow: {\r\n    default: 'always' as CardShadowType,\r\n    validator: (value: CardShadowType) => ['always', 'hover', 'never'].includes(value),\r\n  },\r\n  contentStyle: () => ({}),\r\n  slots: () => ({}),\r\n})\r\n\r\nconst slots = defineSlots<CardSlots>()\r\n\r\nconst nh = useNameHelper('card')\r\n\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    nh.bm(`shadow-${props.shadow}`),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n    },\r\n  ]\r\n})\r\nconst hasTitle = computed(() => !!(slots.title || props.title || props.slots.title))\r\nconst hasExtra = computed(() => !!(slots.extra || props.slots.extra))\r\nconst hasHeader = computed(() => !!slots.header || hasTitle.value || hasExtra.value)\r\n</script>\r\n\r\n<template>\r\n  <article :class=\"className\">\r\n    <div v-if=\"hasHeader\" :class=\"nh.be('header')\">\r\n      <slot name=\"header\">\r\n        <Renderer :renderer=\"props.slots.header\">\r\n          <div v-if=\"hasTitle\" :class=\"nh.be('title')\">\r\n            <slot name=\"title\">\r\n              <Renderer :renderer=\"props.slots.title\">\r\n                {{ props.title }}\r\n              </Renderer>\r\n            </slot>\r\n          </div>\r\n          <div v-if=\"hasExtra\" :class=\"nh.be('extra')\">\r\n            <slot name=\"extra\">\r\n              <Renderer :renderer=\"props.slots.extra\"></Renderer>\r\n            </slot>\r\n          </div>\r\n        </Renderer>\r\n      </slot>\r\n    </div>\r\n    <div :class=\"nh.be('content')\" :style=\"props.contentStyle\">\r\n      <slot>\r\n        <Renderer :renderer=\"props.slots.default\"></Renderer>\r\n      </slot>\r\n    </div>\r\n  </article>\r\n</template>\r\n","import { booleanNumberProp, booleanProp, buildProps, eventProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type {\r\n  CarouselArrowTrigger,\r\n  CarouselArrowType,\r\n  CarouselPointerType,\r\n  CarouselSlots,\r\n} from './symbol'\r\n\r\nexport const carouselProps = buildProps({\r\n  active: Number,\r\n  viewSize: Number,\r\n  vertical: booleanProp,\r\n  disabled: booleanProp,\r\n  loop: booleanProp,\r\n  arrow: String as PropType<CarouselArrowType>,\r\n  arrowTrigger: String as PropType<CarouselArrowTrigger>,\r\n  autoplay: booleanNumberProp,\r\n  pointer: String as PropType<CarouselPointerType>,\r\n  speed: Number,\r\n  activeOffset: Number,\r\n  height: [Number, String],\r\n  ignoreHover: booleanProp,\r\n  slots: Object as PropType<CarouselSlots>,\r\n  onChange: eventProp<(active: number) => void>(),\r\n  onPrev: eventProp<(active: number) => void>(),\r\n  onNext: eventProp<(active: number) => void>(),\r\n  onSelect: eventProp<(active: number) => void>(),\r\n})\r\n\r\nexport type CarouselProps = ExtractPropTypes<typeof carouselProps>\r\nexport type CarouselCProps = ConfigurableProps<CarouselProps>\r\n","import type { InjectionKey } from 'vue'\r\n\r\nexport type CarouselArrowType = 'outside' | 'inside' | 'none'\r\nexport type CarouselArrowTrigger = 'hover' | 'always'\r\nexport type CarouselPointerType = 'outside' | 'inside' | 'none'\r\n\r\nexport interface ItemState {\r\n  label: number,\r\n  width: number,\r\n  height: number,\r\n  offset: number,\r\n}\r\n\r\nexport interface CarouselState {\r\n  vertical: boolean,\r\n  increaseItem: (item: ItemState) => void,\r\n  decreaseItem: (item: ItemState) => void,\r\n  isItemActive: (label: number) => boolean,\r\n  handleSelect: (label: number) => void,\r\n}\r\n\r\nexport interface CarouselSlots {\r\n  default?: () => any,\r\n  prevArrow?: (params: { disabled: boolean }) => any,\r\n  nextArrow?: (params: { disabled: boolean }) => any,\r\n  pointer?: (params: { active: boolean }) => any,\r\n}\r\n\r\nexport const CAROUSEL_STATE = '__VXP_CAROUSEL_STATE' as unknown as InjectionKey<CarouselState>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport { computed, onMounted, provide, reactive, ref, toRef, watch } from 'vue'\r\n\r\nimport { emitEvent, useHoverDelay, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useHover, useRtl, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { debounceMinor } from '@vexip-ui/utils'\r\nimport { carouselProps } from './props'\r\nimport { CAROUSEL_STATE } from './symbol'\r\n\r\nimport type { CarouselSlots, CarouselState, ItemState } from './symbol'\r\n\r\ndefineOptions({ name: 'Carousel' })\r\n\r\nconst _props = defineProps(carouselProps)\r\nconst props = useProps('carousel', _props, {\r\n  active: {\r\n    default: 0,\r\n    static: true,\r\n  },\r\n  viewSize: {\r\n    default: 3,\r\n    validator: value => value > 0,\r\n  },\r\n  vertical: false,\r\n  disabled: false,\r\n  loop: false,\r\n  arrow: {\r\n    default: 'outside',\r\n    validator: value => ['outside', 'inside', 'none'].includes(value),\r\n  },\r\n  arrowTrigger: {\r\n    default: 'hover',\r\n    validator: value => ['hover', 'always'].includes(value),\r\n  },\r\n  autoplay: {\r\n    default: false,\r\n    validator: value => (typeof value === 'number' ? value > 500 : true),\r\n  },\r\n  pointer: {\r\n    default: 'none',\r\n    validator: value => ['outside', 'inside', 'none'].includes(value),\r\n  },\r\n  speed: 300,\r\n  activeOffset: 0,\r\n  height: null,\r\n  ignoreHover: false,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:active'])\r\n\r\ndefineSlots<CarouselSlots>()\r\n\r\nconst nh = useNameHelper('carousel')\r\nconst icons = useIcons()\r\nconst hoverDelay = useHoverDelay()\r\nconst { isRtl } = useRtl()\r\nconst itemStates = ref(new Set<ItemState>())\r\nconst currentActive = ref(0)\r\nconst isLocked = ref(false) // 用于控制阻断快速连点\r\nconst arrowActive = ref(props.arrowTrigger === 'always')\r\n\r\nconst listRect = reactive({\r\n  width: 0,\r\n  height: 0,\r\n})\r\nconst trackRect = reactive({\r\n  width: 0,\r\n  height: 0,\r\n  offset: 0,\r\n})\r\nconst itemRect = reactive({\r\n  width: 0,\r\n  height: 0,\r\n})\r\n\r\nconst { wrapper, isHover } = useHover()\r\n\r\nconst prev = ref<HTMLElement>()\r\nconst next = ref<HTMLElement>()\r\n\r\nconst isDisabled = computed(() => {\r\n  return props.disabled || itemStates.value.size <= props.viewSize\r\n})\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm('vertical')]: props.vertical,\r\n    [nh.bm('disabled')]: isDisabled.value,\r\n  }\r\n})\r\nconst style = computed(() => {\r\n  return {\r\n    height:\r\n      props.vertical && props.height\r\n        ? `${props.height}${typeof props.height === 'number' ? 'px' : ''}`\r\n        : undefined,\r\n  }\r\n})\r\nconst listStyle = computed(() => {\r\n  return {\r\n    width: listRect.width ? `${listRect.width}px` : undefined,\r\n    height: listRect.height ? `${listRect.height}px` : undefined,\r\n  }\r\n})\r\nconst trackStyle = computed(() => {\r\n  return {\r\n    width: trackRect.width ? `${trackRect.width}px` : undefined,\r\n    height: trackRect.height ? `${trackRect.height}px` : undefined,\r\n    transform: trackRect.offset\r\n      ? `translate${props.vertical ? 'Y' : 'X'}(${\r\n        isRtl.value && !props.vertical ? `${-trackRect.offset}` : trackRect.offset\r\n      }px) translateZ(0)`\r\n      : undefined,\r\n    transitionDuration: isLocked.value ? '0ms' : `${props.speed}ms`,\r\n  }\r\n})\r\nconst disabledPrev = computed(() => {\r\n  return isDisabled.value || (!props.loop && currentActive.value <= 0)\r\n})\r\nconst disabledNext = computed(() => {\r\n  return (\r\n    isDisabled.value ||\r\n    (!props.loop && currentActive.value >= itemStates.value.size - props.viewSize)\r\n  )\r\n})\r\nconst arrowIcons = computed(() => {\r\n  return props.vertical\r\n    ? [icons.value.angleUp, icons.value.angleDown]\r\n    : isRtl.value\r\n      ? [icons.value.angleRight, icons.value.angleLeft]\r\n      : [icons.value.angleLeft, icons.value.angleRight]\r\n})\r\n\r\nwatch(\r\n  () => props.active,\r\n  value => {\r\n    handleWheel(value - props.activeOffset)\r\n  },\r\n)\r\nwatch(isHover, value => {\r\n  if (props.ignoreHover) return\r\n\r\n  if (value) {\r\n    handleMouseEnter()\r\n  } else {\r\n    handleMouseLeave()\r\n  }\r\n})\r\nwatch(() => props.viewSize, refresh)\r\nwatch(() => props.autoplay, setAutoplay)\r\n\r\nconst refreshLabels = debounceMinor(() => {\r\n  Array.from(itemStates.value).forEach((item, index) => {\r\n    item.label = index\r\n  })\r\n})\r\nconst updateItemRect = debounceMinor(() => {\r\n  itemStates.value.forEach(state => {\r\n    state.width = itemRect.width\r\n    state.height = itemRect.height\r\n  })\r\n})\r\nconst updateListRect = debounceMinor(() => {\r\n  trackRect.width = itemRect.width * itemStates.value.size\r\n  trackRect.height = itemRect.height * itemStates.value.size\r\n})\r\n\r\nprovide<CarouselState>(\r\n  CAROUSEL_STATE,\r\n  reactive({\r\n    vertical: toRef(props, 'vertical'),\r\n    increaseItem,\r\n    decreaseItem,\r\n    isItemActive,\r\n    handleSelect,\r\n  }),\r\n)\r\n\r\n// 初始化时不使用过渡效果\r\nlet inTransition = false\r\nlet shouldReset = false\r\n\r\nisLocked.value = true\r\n\r\nonMounted(() => {\r\n  computeItemRect()\r\n  handleWheel(props.active - props.activeOffset)\r\n  handleAfterMove()\r\n\r\n  setTimeout(() => {\r\n    isLocked.value = false\r\n    inTransition = false\r\n\r\n    setAutoplay()\r\n  }, 0)\r\n})\r\n\r\ndefineExpose({\r\n  itemStates,\r\n  currentActive,\r\n  arrowActive,\r\n  wrapper,\r\n  prev,\r\n  next,\r\n  refresh,\r\n})\r\n\r\nfunction increaseItem(item: ItemState) {\r\n  itemStates.value.add(item)\r\n  refreshLabels()\r\n  updateItemRect()\r\n  updateListRect()\r\n}\r\n\r\nfunction decreaseItem(item: ItemState) {\r\n  itemStates.value.delete(item)\r\n  refreshLabels()\r\n  updateListRect()\r\n}\r\n\r\nfunction isItemActive(label: number) {\r\n  return (currentActive.value + props.activeOffset) % itemStates.value.size === label\r\n}\r\n\r\nfunction computeItemRect() {\r\n  if (!wrapper.value) return\r\n\r\n  let prevFix = 0\r\n  let nextFix = 0\r\n\r\n  if (props.arrow === 'outside') {\r\n    if (props.vertical) {\r\n      prevFix = prev.value ? prev.value.offsetHeight : 0\r\n      nextFix = next.value ? next.value.offsetHeight : 0\r\n    } else {\r\n      prevFix = prev.value ? prev.value.offsetWidth : 0\r\n      nextFix = next.value ? next.value.offsetWidth : 0\r\n    }\r\n  }\r\n\r\n  if (props.vertical) {\r\n    listRect.width = 0\r\n    listRect.height = wrapper.value.offsetHeight - prevFix - nextFix\r\n\r\n    itemRect.width = 0\r\n    itemRect.height = listRect.height / props.viewSize\r\n  } else {\r\n    listRect.width = wrapper.value.offsetWidth - prevFix - nextFix\r\n    listRect.height = 0\r\n\r\n    itemRect.width = listRect.width / props.viewSize\r\n    itemRect.height = 0\r\n  }\r\n}\r\n\r\nfunction refresh() {\r\n  computeItemRect()\r\n  updateItemRect()\r\n  updateListRect()\r\n\r\n  if (trackRect.offset > 0) {\r\n    handlePrev(0)\r\n  } else {\r\n    handleNext(0)\r\n  }\r\n\r\n  setTimeout(() => {\r\n    isLocked.value = false\r\n    inTransition = false\r\n  }, 0)\r\n}\r\n\r\nfunction emitChangeEvent() {\r\n  const active = (currentActive.value + props.activeOffset) % itemStates.value.size\r\n\r\n  emit('update:active', active)\r\n  emitEvent(props.onChange, active)\r\n}\r\n\r\nfunction handlePrev(amount = 1) {\r\n  if (isDisabled.value || inTransition) return\r\n\r\n  const itemLength = props.vertical ? itemRect.height : itemRect.width\r\n  const itemList = Array.from(itemStates.value)\r\n  const itemCount = itemList.length\r\n  const targetIndex = (currentActive.value - amount + itemCount) % itemCount\r\n  const prevActive = currentActive.value\r\n\r\n  if (targetIndex >= itemCount - props.viewSize) {\r\n    if (!props.loop) return\r\n\r\n    if (trackRect.offset < 0) {\r\n      if (amount < currentActive.value) {\r\n        trackRect.offset = -targetIndex * itemLength\r\n      } else {\r\n        trackRect.offset = itemLength * (itemCount - targetIndex)\r\n\r\n        for (let i = targetIndex; i < itemCount; ++i) {\r\n          itemList[i].offset = -itemCount * itemLength\r\n        }\r\n      }\r\n    } else {\r\n      for (let i = 0; i < itemCount; ++i) {\r\n        itemList[i].offset =\r\n          i < targetIndex\r\n            ? 0\r\n            : (isRtl.value && !props.vertical ? itemCount : -itemCount) * itemLength\r\n      }\r\n\r\n      trackRect.offset = itemLength * (itemCount - targetIndex)\r\n    }\r\n\r\n    currentActive.value = targetIndex\r\n  } else {\r\n    currentActive.value = targetIndex\r\n    trackRect.offset = -currentActive.value * itemLength\r\n  }\r\n\r\n  shouldReset = currentActive.value <= itemCount - props.viewSize\r\n  inTransition = true\r\n\r\n  currentActive.value !== prevActive && emitChangeEvent()\r\n}\r\n\r\nfunction handleNext(amount = 1) {\r\n  if (isDisabled.value || inTransition) return\r\n\r\n  const itemLength = props.vertical ? itemRect.height : itemRect.width\r\n  const itemList = Array.from(itemStates.value)\r\n  const itemCount = itemList.length\r\n  const targetIndex = currentActive.value + amount\r\n  const prevActive = currentActive.value\r\n\r\n  if (targetIndex > itemStates.value.size - props.viewSize) {\r\n    if (!props.loop) return\r\n\r\n    if (trackRect.offset > 0) {\r\n      trackRect.offset = itemLength * (itemCount - targetIndex)\r\n    } else {\r\n      const anchorIndex = targetIndex + props.viewSize - itemCount\r\n\r\n      for (let i = 0, len = itemList.length; i < len; ++i) {\r\n        itemList[i].offset =\r\n          i < anchorIndex\r\n            ? (isRtl.value && !props.vertical ? -itemCount : itemCount) * itemLength\r\n            : 0\r\n      }\r\n\r\n      trackRect.offset = -targetIndex * itemLength\r\n    }\r\n\r\n    currentActive.value = targetIndex % itemCount\r\n  } else {\r\n    currentActive.value = targetIndex\r\n    trackRect.offset = -currentActive.value * itemLength\r\n  }\r\n\r\n  shouldReset = currentActive.value <= itemCount - props.viewSize\r\n  inTransition = true\r\n\r\n  currentActive.value !== prevActive && emitChangeEvent()\r\n}\r\n\r\nfunction handleWheel(active: number) {\r\n  if (isDisabled.value || inTransition || active === currentActive.value) return\r\n\r\n  const itemCount = itemStates.value.size\r\n\r\n  active = (active % itemCount) + (active < 0 ? itemCount : 0)\r\n\r\n  if (props.loop) {\r\n    let forward: number\r\n    let back: number\r\n\r\n    if (active > currentActive.value) {\r\n      forward = active - currentActive.value\r\n      back = itemCount - active + currentActive.value\r\n    } else {\r\n      forward = itemCount - currentActive.value + active\r\n      back = currentActive.value - active\r\n    }\r\n\r\n    if (forward < back) {\r\n      handleNext(forward)\r\n    } else if (forward > back) {\r\n      handlePrev(back)\r\n    } else {\r\n      if (trackRect.offset > 0) {\r\n        handlePrev(forward)\r\n      } else {\r\n        handleNext(forward)\r\n      }\r\n    }\r\n  } else {\r\n    if (active < currentActive.value) {\r\n      handlePrev(currentActive.value - active)\r\n    } else {\r\n      handleNext(active - currentActive.value)\r\n    }\r\n  }\r\n}\r\n\r\nfunction handleAfterMove() {\r\n  if (!shouldReset) {\r\n    inTransition = false\r\n  } else {\r\n    itemStates.value.forEach(state => {\r\n      state.offset = 0\r\n    })\r\n\r\n    shouldReset = false\r\n    isLocked.value = true\r\n\r\n    requestAnimationFrame(() => {\r\n      trackRect.offset = -currentActive.value * (props.vertical ? itemRect.height : itemRect.width)\r\n\r\n      requestAnimationFrame(() => {\r\n        isLocked.value = false\r\n        inTransition = false\r\n      })\r\n    })\r\n  }\r\n}\r\n\r\nfunction handlePrevClick() {\r\n  handlePrev(1)\r\n  emitEvent(props.onPrev, (currentActive.value + props.activeOffset) % itemStates.value.size)\r\n}\r\n\r\nfunction handleNextClick() {\r\n  handleNext(1)\r\n  emitEvent(props.onNext, (currentActive.value + props.activeOffset) % itemStates.value.size)\r\n}\r\n\r\nfunction handleSelect(label: number) {\r\n  emitEvent(props.onSelect, label)\r\n}\r\n\r\nconst { timer } = useSetTimeout()\r\n\r\nfunction setAutoplay() {\r\n  clearInterval(timer.play)\r\n\r\n  if (!props.autoplay) return\r\n\r\n  let waiting = 4000\r\n\r\n  if (typeof props.autoplay === 'number') {\r\n    waiting = props.autoplay\r\n  }\r\n\r\n  timer.play = window.setInterval(() => {\r\n    if (!props.loop && disabledNext.value) {\r\n      handleWheel(0)\r\n    } else {\r\n      handleNext()\r\n    }\r\n  }, waiting)\r\n}\r\n\r\nfunction handleMouseEnter() {\r\n  if (props.autoplay) {\r\n    clearTimeout(timer.hover)\r\n\r\n    timer.hover = setTimeout(() => {\r\n      clearInterval(timer.play)\r\n    }, hoverDelay.value)\r\n  }\r\n\r\n  if (props.arrowTrigger === 'hover' && props.arrow === 'inside') {\r\n    arrowActive.value = true\r\n  }\r\n}\r\n\r\nfunction handleMouseLeave() {\r\n  if (props.autoplay) {\r\n    clearTimeout(timer.hover)\r\n\r\n    timer.hover = setTimeout(() => {\r\n      setAutoplay()\r\n    }, hoverDelay.value)\r\n  }\r\n\r\n  if (props.arrowTrigger === 'hover') {\r\n    arrowActive.value = false\r\n  }\r\n}\r\n\r\nfunction isPointerDisabled(index: number) {\r\n  if (props.loop) return false\r\n\r\n  return !(\r\n    index >= props.activeOffset - 1 && index < itemStates.value.size - props.activeOffset - 1\r\n  )\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"list\"\r\n    :style=\"style\"\r\n  >\r\n    <ResizeObserver @resize=\"refresh\">\r\n      <div\r\n        :style=\"{\r\n          position: 'relative',\r\n          display: 'flex',\r\n          flexDirection: props.vertical ? 'column' : 'row',\r\n          width: '100%'\r\n        }\"\r\n      >\r\n        <div\r\n          v-if=\"props.arrow !== 'none'\"\r\n          ref=\"prev\"\r\n          :class=\"[\r\n            nh.bem('arrow', props.arrow),\r\n            nh.bem('arrow', 'prev'),\r\n            arrowActive ? nh.bem('arrow', 'show') : ''\r\n          ]\"\r\n        >\r\n          <div\r\n            :class=\"{\r\n              [nh.be('handler')]: true,\r\n              [nh.bem('handler', 'disabled')]: disabledPrev\r\n            }\"\r\n            @click=\"handlePrevClick\"\r\n          >\r\n            <slot name=\"prevArrow\" :disabled=\"disabledPrev\">\r\n              <Renderer :renderer=\"props.slots.prevArrow\" :data=\"{ disabled: disabledPrev }\">\r\n                <Icon v-bind=\"arrowIcons[0]\" :scale=\"+(arrowIcons[0].scale || 1) * 1.5\"></Icon>\r\n              </Renderer>\r\n            </slot>\r\n          </div>\r\n        </div>\r\n        <div :class=\"nh.be('list')\" :style=\"listStyle\">\r\n          <div :class=\"nh.be('track')\" :style=\"trackStyle\" @transitionend.self=\"handleAfterMove\">\r\n            <slot> <Renderer :renderer=\"props.slots.default\"></Renderer>> </slot>\r\n          </div>\r\n        </div>\r\n        <div\r\n          v-if=\"props.arrow !== 'none'\"\r\n          ref=\"next\"\r\n          :class=\"[\r\n            nh.bem('arrow', props.arrow),\r\n            nh.bem('arrow', 'next'),\r\n            arrowActive ? nh.bem('arrow', 'show') : ''\r\n          ]\"\r\n        >\r\n          <div\r\n            :class=\"{\r\n              [nh.be('handler')]: true,\r\n              [nh.bem('handler', 'disabled')]: disabledNext\r\n            }\"\r\n            @click=\"handleNextClick\"\r\n          >\r\n            <slot name=\"nextArrow\" :disabled=\"disabledNext\">\r\n              <Renderer :renderer=\"props.slots.nextArrow\" :data=\"{ disabled: disabledNext }\">\r\n                <Icon v-bind=\"arrowIcons[1]\" :scale=\"+(arrowIcons[1].scale || 1) * 1.5\"></Icon>\r\n              </Renderer>\r\n            </slot>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </ResizeObserver>\r\n    <div v-if=\"props.pointer !== 'none'\" :class=\"nh.bem('pointers', props.pointer)\">\r\n      <div\r\n        v-for=\"index in itemStates.size\"\r\n        :key=\"index\"\r\n        :class=\"{\r\n          [nh.be('pointer')]: true,\r\n          [nh.bem('pointer', 'active')]:\r\n            index - 1 === (currentActive + props.activeOffset) % itemStates.size,\r\n          [nh.bem('pointer', 'disabled')]: isPointerDisabled(index - props.activeOffset - 1)\r\n        }\"\r\n        @click=\"handleWheel(index - props.activeOffset - 1)\"\r\n      >\r\n        <slot\r\n          name=\"pointer\"\r\n          :active=\"index - 1 === (currentActive + props.activeOffset) % itemStates.size\"\r\n        >\r\n          <Renderer\r\n            :renderer=\"props.slots.pointer\"\r\n            :data=\"{ active: index - 1 === (currentActive + props.activeOffset) % itemStates.size }\"\r\n          >\r\n            <span :class=\"nh.be('pointer-inner')\"></span>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed, inject, onBeforeUnmount, reactive } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { CAROUSEL_STATE } from './symbol'\r\n\r\nimport type { ItemState } from './symbol'\r\n\r\ndefineOptions({ name: 'CarouselItem' })\r\n\r\ndefineSlots<{\r\n  default: (params: { active: boolean }) => any,\r\n}>()\r\n\r\nconst carouselState = inject(CAROUSEL_STATE, null)\r\n\r\nconst nh = useNameHelper('carousel')\r\nconst state: ItemState = reactive({\r\n  label: -1,\r\n  width: 0,\r\n  height: 0,\r\n  offset: 0,\r\n})\r\n\r\nconst active = computed(() => {\r\n  return carouselState?.isItemActive(state.label) ?? false\r\n})\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.be('item')]: true,\r\n    [nh.bem('item', 'active')]: active.value,\r\n  }\r\n})\r\nconst style = computed(() => {\r\n  const { width, height, offset } = state\r\n\r\n  return {\r\n    width: width ? `${width}px` : undefined,\r\n    height: height ? `${height}px` : undefined,\r\n    transform: offset ? `translate${carouselState?.vertical ? 'Y' : 'X'}(${offset}px)` : undefined,\r\n  }\r\n})\r\n\r\nif (carouselState) {\r\n  carouselState.increaseItem(state)\r\n\r\n  onBeforeUnmount(() => {\r\n    carouselState.decreaseItem(state)\r\n  })\r\n}\r\n\r\nfunction handleClick() {\r\n  carouselState?.handleSelect(state.label)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :class=\"className\"\r\n    role=\"listitem\"\r\n    :style=\"style\"\r\n    @click=\"handleClick\"\r\n  >\r\n    <slot :active=\"active\"></slot>\r\n  </div>\r\n</template>\r\n","import {\r\n  booleanProp,\r\n  booleanStringProp,\r\n  buildProps,\r\n  classProp,\r\n  eventProp,\r\n  localeProp,\r\n  sizeProp,\r\n  stateProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\n\r\nexport const checkboxProps = buildProps({\r\n  size: sizeProp,\r\n  state: stateProp,\r\n  checked: booleanProp,\r\n  label: String,\r\n  value: [String, Number],\r\n  labelClass: classProp,\r\n  disabled: booleanProp,\r\n  border: booleanProp,\r\n  control: booleanProp,\r\n  partial: booleanProp,\r\n  tabIndex: [String, Number],\r\n  loading: booleanProp,\r\n  loadingLock: booleanProp,\r\n  name: String,\r\n  color: String,\r\n  stateColor: booleanProp,\r\n  onChange: eventProp<(checked: boolean) => void>(),\r\n  onClick: eventProp<(event: MouseEvent) => void>(),\r\n})\r\n\r\nexport type CheckboxProps = ExtractPropTypes<typeof checkboxProps>\r\nexport type CheckboxCProps = ConfigurableProps<CheckboxProps>\r\n\r\nexport type RawOption =\r\n  | string\r\n  | {\r\n    value: string | number,\r\n    label?: string,\r\n    control?: boolean,\r\n    disabled?: boolean,\r\n  }\r\n\r\nexport const checkboxGroupProps = buildProps({\r\n  size: sizeProp,\r\n  state: stateProp,\r\n  locale: localeProp('checkbox'),\r\n  value: Array as PropType<(string | number)[]>,\r\n  vertical: booleanProp,\r\n  disabled: booleanProp,\r\n  border: booleanProp,\r\n  options: Array as PropType<RawOption[]>,\r\n  loading: booleanProp,\r\n  loadingLock: booleanProp,\r\n  control: booleanStringProp,\r\n  color: String,\r\n  stateColor: booleanProp,\r\n  onChange: eventProp<(value: (string | number)[]) => void>(),\r\n})\r\n\r\nexport type CheckboxGroupProps = ExtractPropTypes<typeof checkboxGroupProps>\r\nexport type CheckboxGroupCProps = ConfigurableProps<CheckboxGroupProps>\r\n","import type { InjectionKey, Ref } from 'vue'\r\nimport type { ComponentSize, ComponentState } from '@vexip-ui/config'\r\n\r\nexport interface ControlState {\r\n  checked: boolean,\r\n  partial: boolean,\r\n}\r\n\r\nexport interface GroupState {\r\n  currentValues: (string | number)[],\r\n  size: ComponentSize,\r\n  state: ComponentState,\r\n  disabled: boolean,\r\n  loading: boolean,\r\n  loadingLock: boolean,\r\n  colorMap: Record<string, string> | null,\r\n  stateColor: boolean,\r\n  increaseItem(\r\n    value: string | number,\r\n    checked: boolean,\r\n    input: Ref<HTMLElement | null | undefined>,\r\n  ): void,\r\n  decreaseItem(value: string | number, input: Ref<HTMLElement | null | undefined>): void,\r\n  increaseControl(state: ControlState): void,\r\n  decreaseControl(state: ControlState): void,\r\n  handleControlChange(): void,\r\n  setItemChecked(value: string | number, checked: boolean): void,\r\n  replaceValue(prevValue: string | number, newValue: string | number): void,\r\n}\r\n\r\nexport const GROUP_STATE = '__VXP_CHECKBOX_GROUP_STATE' as unknown as InjectionKey<GroupState>\r\n","<script setup lang=\"ts\">\r\nimport { useFieldStore } from '@/components/form'\r\n\r\nimport { computed, inject, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue'\r\n\r\nimport {\r\n  createSizeProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { adjustAlpha, isDefined, isFunction, parseColorToRgba } from '@vexip-ui/utils'\r\nimport { checkboxProps } from './props'\r\nimport { GROUP_STATE } from './symbol'\r\n\r\ndefineOptions({ name: 'Checkbox' })\r\n\r\nconst {\r\n  idFor,\r\n  labelId,\r\n  state,\r\n  disabled,\r\n  loading,\r\n  size,\r\n  validateField,\r\n  getFieldValue,\r\n  setFieldValue,\r\n} = useFieldStore<boolean>(() => input.value?.focus())\r\n\r\nconst _props = defineProps(checkboxProps)\r\nconst props = useProps('checkbox', _props, {\r\n  size: createSizeProp(size),\r\n  state: createStateProp(state),\r\n  checked: {\r\n    default: () => getFieldValue(),\r\n    static: true,\r\n  },\r\n  label: null,\r\n  value: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  labelClass: null,\r\n  disabled: () => disabled.value,\r\n  border: false,\r\n  control: false,\r\n  partial: false,\r\n  tabIndex: 0,\r\n  loading: () => loading.value,\r\n  loadingLock: false,\r\n  name: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  color: null,\r\n  stateColor: false,\r\n})\r\n\r\nconst emit = defineEmits(['update:checked'])\r\n\r\nconst slots = defineSlots<{\r\n  default?: () => any,\r\n}>()\r\n\r\nconst groupState = inject(GROUP_STATE, null)\r\n\r\nconst nh = useNameHelper('checkbox')\r\nconst currentChecked = ref(props.checked ?? false)\r\nconst currentPartial = ref(props.partial)\r\n\r\nconst input = ref<HTMLInputElement>()\r\n\r\nconst controlState = reactive({\r\n  checked: currentChecked,\r\n  partial: currentPartial,\r\n})\r\n\r\nconst computedSize = computed(() => groupState?.size || props.size)\r\nconst computedState = computed(() => groupState?.state || props.state)\r\nconst isDisabled = computed(() => groupState?.disabled || props.disabled)\r\nconst isLoading = computed(() => groupState?.loading || props.loading)\r\nconst isLoadingLock = computed(() => groupState?.loadingLock || props.loadingLock)\r\nconst stateColor = computed(() => groupState?.stateColor || props.stateColor)\r\nconst readonly = computed(() => isLoading.value && isLoadingLock.value)\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('checked')]: currentChecked.value,\r\n      [nh.bm('disabled')]: isDisabled.value,\r\n      [nh.bm('readonly')]: readonly.value,\r\n      [nh.bm('loading')]: isLoading.value,\r\n      [nh.bm(computedSize.value)]: computedSize.value !== 'default',\r\n      [nh.bm('border')]: props.border,\r\n      [nh.bm('partial')]: props.control && currentPartial.value,\r\n      [nh.bm(computedState.value)]: computedState.value !== 'default',\r\n    },\r\n  ]\r\n})\r\nconst colorMap = computed(() => {\r\n  if (!props.color) return groupState?.colorMap\r\n\r\n  const baseColor = parseColorToRgba(props.color)\r\n\r\n  return {\r\n    base: baseColor.toString(),\r\n    opacity6: adjustAlpha(baseColor, 0.4).toString(),\r\n  }\r\n})\r\nconst style = computed<Record<string, string>>(() => {\r\n  if (!colorMap.value) return {}\r\n\r\n  const { base, opacity6 } = colorMap.value\r\n\r\n  return nh.cvm({\r\n    'label-color-checked': base,\r\n    'b-color': stateColor.value ? base : undefined,\r\n    'b-color-hover': base,\r\n    'b-color-checked': base,\r\n    'signal-bg-color-checked': base,\r\n    's-color-focus': opacity6,\r\n  })\r\n})\r\nconst hasLabel = computed(() => {\r\n  return isDefined(props.label) && props.label !== ''\r\n})\r\nconst currentValue = computed(() => {\r\n  return props.value ?? props.label\r\n})\r\n\r\nwatch(\r\n  () => props.checked,\r\n  value => {\r\n    setCurrentChecked(value)\r\n  },\r\n)\r\nwatch(\r\n  () => props.partial,\r\n  value => {\r\n    currentPartial.value = value\r\n  },\r\n)\r\n\r\nif (groupState) {\r\n  let increased = false\r\n\r\n  watch(currentValue, (value, prevValue) => {\r\n    if (isFunction(groupState.replaceValue)) {\r\n      groupState.replaceValue(prevValue, value)\r\n    }\r\n  })\r\n  watch(\r\n    () => props.control,\r\n    value => {\r\n      if (value) {\r\n        if (increased) {\r\n          groupState.decreaseItem(currentValue.value, input)\r\n          increased = false\r\n        }\r\n\r\n        groupState.increaseControl(controlState)\r\n      } else {\r\n        groupState.decreaseControl(controlState)\r\n      }\r\n    },\r\n    { immediate: true },\r\n  )\r\n  watch(\r\n    () => groupState.currentValues,\r\n    value => {\r\n      if (!props.control) {\r\n        setCurrentChecked(value.includes(currentValue.value))\r\n      }\r\n    },\r\n    { immediate: true },\r\n  )\r\n\r\n  onMounted(() => {\r\n    if (!props.control) {\r\n      groupState.increaseItem(currentValue.value, currentChecked.value, input)\r\n      increased = true\r\n    }\r\n  })\r\n\r\n  onBeforeUnmount(() => {\r\n    if (!props.control) {\r\n      groupState.decreaseItem(currentValue.value, input)\r\n    } else {\r\n      groupState.decreaseControl(controlState)\r\n    }\r\n  })\r\n}\r\n\r\ndefineExpose({\r\n  idFor,\r\n  labelId,\r\n  currentChecked,\r\n  input,\r\n  focus: (options?: FocusOptions) => input.value?.focus(options),\r\n  blur: () => input.value?.blur(),\r\n})\r\n\r\nfunction emitCheckEvent() {\r\n  const checked = currentChecked.value\r\n\r\n  emit('update:checked', checked)\r\n  setFieldValue(checked)\r\n  emitEvent(props.onChange, checked)\r\n}\r\n\r\nfunction setCurrentChecked(checked: boolean) {\r\n  if (props.control && isFunction(groupState?.handleControlChange)) {\r\n    groupState!.handleControlChange()\r\n  } else if (currentChecked.value !== checked) {\r\n    currentChecked.value = checked\r\n    emitCheckEvent()\r\n  }\r\n}\r\n\r\nfunction handleChange(checked: boolean) {\r\n  if (isDisabled.value || readonly.value) {\r\n    return\r\n  }\r\n\r\n  setCurrentChecked(checked)\r\n\r\n  if (!props.control && groupState) {\r\n    isFunction(groupState.setItemChecked) && groupState.setItemChecked(currentValue.value, checked)\r\n  }\r\n\r\n  if (!groupState) {\r\n    validateField()\r\n  }\r\n}\r\n\r\nfunction handleClick(event: MouseEvent) {\r\n  emitEvent(props.onClick, event)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <label\r\n    :id=\"idFor\"\r\n    :class=\"className\"\r\n    :style=\"style\"\r\n    :aria-disabled=\"isDisabled\"\r\n    :aria-labelledby=\"labelId\"\r\n    @click=\"handleClick\"\r\n  >\r\n    <input\r\n      ref=\"input\"\r\n      type=\"checkbox\"\r\n      :class=\"nh.be('input')\"\r\n      :checked=\"currentChecked\"\r\n      :disabled=\"isDisabled || readonly\"\r\n      :tabindex=\"props.tabIndex\"\r\n      :name=\"props.name\"\r\n      @submit.prevent\r\n      @change=\"handleChange(!currentChecked)\"\r\n      @click.stop\r\n    />\r\n    <span :class=\"[nh.be('signal'), isLoading && nh.bem('signal', 'active')]\"></span>\r\n    <span v-if=\"hasLabel || slots.default\" :class=\"[nh.be('label'), props.labelClass]\">\r\n      <slot>{{ props.label }}</slot>\r\n    </span>\r\n  </label>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Checkbox } from '@/components/checkbox'\r\nimport { Icon } from '@/components/icon'\r\nimport { Option } from '@/components/option'\r\nimport { VirtualList } from '@/components/virtual-list'\r\n\r\nimport { onBeforeUnmount, onMounted, ref, watch } from 'vue'\r\n\r\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\r\nimport { useModifier, useRtl } from '@vexip-ui/hooks'\r\nimport { boundRange, decide } from '@vexip-ui/utils'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { VirtualListExposed } from '@/components/virtual-list'\r\nimport type { CascaderOptionState, CascaderPanelSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'CascaderPanel' })\r\n\r\nconst props = defineProps({\r\n  options: {\r\n    type: Array as PropType<CascaderOptionState[]>,\r\n    default: () => [],\r\n  },\r\n  openedId: {\r\n    type: Number,\r\n    default: null,\r\n  },\r\n  values: {\r\n    type: Array as PropType<string[]>,\r\n    default: () => [],\r\n  },\r\n  ready: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  multiple: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  checkIcon: {\r\n    type: Object,\r\n    default: null,\r\n  },\r\n  isAsync: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  merged: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  noCascaded: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  visible: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  labeledBy: {\r\n    type: String,\r\n    default: undefined,\r\n  },\r\n})\r\n\r\nconst emit = defineEmits(['select', 'check', 'hover', 'open', 'back', 'close'])\r\n\r\ndefineSlots<CascaderPanelSlots>()\r\n\r\nconst nh = useNameHelper('cascader')\r\nconst icons = useIcons()\r\nconst { isRtl } = useRtl()\r\nconst currentHitting = ref(-1)\r\n\r\nconst list = ref<VirtualListExposed>()\r\n\r\nconst { target: wrapper } = useModifier({\r\n  passive: false,\r\n  onKeyDown: (event, modifier) => {\r\n    if (modifier.escape) {\r\n      emit('close')\r\n      return\r\n    }\r\n\r\n    decide(\r\n      [\r\n        [\r\n          () => modifier.up || modifier.down,\r\n          () => {\r\n            if (currentHitting.value < 0) {\r\n              currentHitting.value = props.options.findIndex(isSelected)\r\n\r\n              if (currentHitting.value < 0) {\r\n                currentHitting.value = 0\r\n              }\r\n\r\n              return\r\n            }\r\n\r\n            currentHitting.value = boundRange(\r\n              findEnabledIndex(currentHitting.value + (modifier.up ? -1 : 1), modifier.up ? -1 : 1),\r\n              0,\r\n              props.options.length - 1,\r\n            )\r\n            ensureOptionInView(currentHitting.value, modifier.up ? 'top' : 'bottom')\r\n          },\r\n        ],\r\n        [\r\n          () => modifier.left || modifier.right,\r\n          () => {\r\n            if (modifier.right) {\r\n              const option = props.options[currentHitting.value]\r\n\r\n              if (option && hasChildren(option)) {\r\n                emit('open', option)\r\n              }\r\n            } else {\r\n              emit('back')\r\n            }\r\n          },\r\n        ],\r\n        [\r\n          () => modifier.enter || modifier.space,\r\n          () => {\r\n            event.stopPropagation()\r\n\r\n            const option = props.options[currentHitting.value]\r\n\r\n            if (option) {\r\n              if (props.multiple) {\r\n                handleToggleCheck(option)\r\n              } else {\r\n                handleSelect(option, currentHitting.value)\r\n              }\r\n            }\r\n          },\r\n        ],\r\n      ],\r\n      {\r\n        beforeMatchAny: () => event.preventDefault(),\r\n        afterMatchAny: modifier.resetAll,\r\n      },\r\n    )\r\n  },\r\n})\r\n\r\nlet listHeight = 0\r\nlet hoverTimer: ReturnType<typeof setTimeout>\r\n\r\nwatch([() => props.ready, () => props.options], () => {\r\n  requestAnimationFrame(computeListHeight)\r\n\r\n  if (props.ready) {\r\n    list.value?.refresh()\r\n    currentHitting.value = props.options.findIndex(isSelected)\r\n  } else {\r\n    currentHitting.value = -1\r\n  }\r\n})\r\n\r\nonMounted(() => {\r\n  requestAnimationFrame(computeListHeight)\r\n})\r\n\r\nonBeforeUnmount(handleMouseLeave)\r\n\r\ndefineExpose({ currentHitting })\r\n\r\nfunction hasChildren(option: CascaderOptionState) {\r\n  return !!(option.hasChild || option.children?.length)\r\n}\r\n\r\nfunction isSelected(option: CascaderOptionState) {\r\n  return (\r\n    (hasChildren(option) && option.id === props.openedId) || props.values.includes(option.fullValue)\r\n  )\r\n}\r\n\r\nfunction isCheckboxDisabled(option: CascaderOptionState) {\r\n  return (\r\n    option.disabled ||\r\n    (!props.merged &&\r\n      props.multiple &&\r\n      props.isAsync &&\r\n      hasChildren(option) &&\r\n      !option.childrenLoaded)\r\n  )\r\n}\r\n\r\nfunction handleSelect(option: CascaderOptionState, index: number) {\r\n  if (option.disabled) return\r\n\r\n  currentHitting.value = index\r\n\r\n  if (props.multiple || props.noCascaded) {\r\n    hasChildren(option) ? emit('select', option) : handleToggleCheck(option)\r\n  } else {\r\n    emit('select', option)\r\n  }\r\n}\r\n\r\nfunction handleToggleCheck(option: CascaderOptionState) {\r\n  !isCheckboxDisabled(option) && emit('check', option)\r\n}\r\n\r\nfunction handleMouseEnter(option: CascaderOptionState) {\r\n  clearTimeout(hoverTimer)\r\n\r\n  hoverTimer = setTimeout(() => {\r\n    !option.disabled && emit('hover', option)\r\n  }, 100)\r\n}\r\n\r\nfunction handleMouseLeave() {\r\n  clearTimeout(hoverTimer)\r\n}\r\n\r\nfunction computeListHeight() {\r\n  const el = list.value?.wrapper\r\n\r\n  if (el) {\r\n    const style = getComputedStyle(el)\r\n    const paddingTop = parseInt(style.paddingTop)\r\n    const paddingBottom = parseInt(style.paddingBottom)\r\n\r\n    listHeight = el.offsetHeight - paddingTop - paddingBottom\r\n  }\r\n}\r\n\r\nfunction queryEnabledIndex(index: number, step: number) {\r\n  const options = props.options\r\n  step = step / Math.abs(step)\r\n\r\n  while (options[index]?.disabled) {\r\n    index += step\r\n\r\n    if (index < 0 || index >= options.length) break\r\n  }\r\n\r\n  return index\r\n}\r\n\r\nfunction findEnabledIndex(index: number, sign: 1 | -1 = 1) {\r\n  const options = props.options\r\n\r\n  if (options[index]?.disabled) {\r\n    index = queryEnabledIndex(index, sign)\r\n\r\n    if (sign > 0 ? index >= options.length : index < 0) {\r\n      index = queryEnabledIndex(index, -sign)\r\n\r\n      // 全禁用\r\n      if (sign > 0 ? index < 0 : index >= options.length) index = -1\r\n    }\r\n  }\r\n\r\n  return index\r\n}\r\n\r\nfunction ensureOptionInView(index: number, direction: 'top' | 'bottom') {\r\n  const option = props.options[index]\r\n  const optionHeight = 32\r\n\r\n  if (!option || !list.value) return\r\n\r\n  if (direction === 'bottom') {\r\n    const target = (index + 1) * optionHeight\r\n\r\n    if (list.value.scrollOffset + listHeight < target) {\r\n      list.value.scrollTo(target - listHeight)\r\n    }\r\n  } else {\r\n    const target = index * optionHeight\r\n\r\n    if (list.value.scrollOffset > target) {\r\n      list.value.scrollTo(target)\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"nh.be('panel')\"\r\n    tabindex=\"-1\"\r\n    :aria-labelledby=\"labeledBy\"\r\n    @mouseleave=\"handleMouseLeave\"\r\n  >\r\n    <VirtualList\r\n      ref=\"list\"\r\n      inherit\r\n      :items=\"options\"\r\n      :item-size=\"32\"\r\n      height=\"100%\"\r\n      id-key=\"id\"\r\n      :items-attrs=\"{\r\n        class: [\r\n          nh.be('options'),\r\n          multiple ? nh.bem('options', 'multiple') : null,\r\n          noCascaded ? nh.bem('options', 'no-cascaded') : null\r\n        ],\r\n        role: 'listbox',\r\n        ariaMultiselectable: multiple\r\n      }\"\r\n      @resize=\"computeListHeight\"\r\n    >\r\n      <template #default=\"{ item, index }\">\r\n        <Option\r\n          :class=\"{\r\n            [nh.ns('option--error')]: item.error\r\n          }\"\r\n          :value=\"item.value\"\r\n          :label=\"item.label\"\r\n          :disabled=\"item.disabled\"\r\n          :selected=\"isSelected(item)\"\r\n          :hitting=\"index === currentHitting\"\r\n          @select=\"handleSelect(item, index)\"\r\n          @mouseenter=\"handleMouseEnter(item)\"\r\n        >\r\n          <slot\r\n            :option=\"item\"\r\n            :index=\"index\"\r\n            :selected=\"isSelected(item)\"\r\n            :can-check=\"isCheckboxDisabled(item)\"\r\n            :has-child=\"hasChildren(item)\"\r\n          >\r\n            <Checkbox\r\n              v-if=\"multiple || noCascaded\"\r\n              inherit\r\n              :class=\"nh.be('checkbox')\"\r\n              :checked=\"item.checked\"\r\n              :control=\"hasChildren(item)\"\r\n              :partial=\"item.partial\"\r\n              :disabled=\"isCheckboxDisabled(item)\"\r\n              size=\"small\"\r\n              @click.prevent.stop=\"handleToggleCheck(item)\"\r\n            ></Checkbox>\r\n            <span :class=\"nh.be('label')\">\r\n              <slot\r\n                name=\"label\"\r\n                :option=\"item\"\r\n                :index=\"index\"\r\n                :selected=\"isSelected(item)\"\r\n                :can-check=\"isCheckboxDisabled(item)\"\r\n                :has-child=\"hasChildren(item)\"\r\n                :handle-select=\"() => handleSelect(item, index)\"\r\n              >\r\n                {{ item.label }}\r\n              </slot>\r\n            </span>\r\n            <div :class=\"nh.be('icon')\">\r\n              <Icon v-if=\"item.loading\" v-bind=\"icons.loading\"></Icon>\r\n              <Icon v-else-if=\"item.error\" v-bind=\"icons.refresh\"></Icon>\r\n              <template v-else-if=\"hasChildren(item)\">\r\n                <Icon v-if=\"isRtl\" v-bind=\"icons.angleLeft\"></Icon>\r\n                <Icon v-else v-bind=\"icons.angleRight\"></Icon>\r\n              </template>\r\n              <Icon\r\n                v-else-if=\"!multiple && !noCascaded && checkIcon && values.includes(item.fullValue)\"\r\n                v-bind=\"icons.check\"\r\n                :icon=\"checkIcon || icons.check.icon\"\r\n              ></Icon>\r\n            </div>\r\n          </slot>\r\n        </Option>\r\n      </template>\r\n    </VirtualList>\r\n  </div>\r\n</template>\r\n","import {\r\n  booleanProp,\r\n  booleanStringProp,\r\n  buildProps,\r\n  eventProp,\r\n  iconProp,\r\n  localeProp,\r\n  sizeProp,\r\n  stateProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { Placement } from '@vexip-ui/hooks'\r\nimport type { TagType } from '@/components/tag'\r\nimport type { CascaderKeyConfig, CascaderSlots, CascaderValue, Data } from './symbol'\r\n\r\ntype ChangeEvent =\r\n  | ((value: CascaderValue, data: Data[] | Data[][]) => void)\r\n  | ((value: (string | number)[], data: Data[]) => void)\r\n  | ((value: string[], data: Data[]) => void)\r\n  | ((value: number[], data: Data[]) => void)\r\n  | ((value: (string | number)[][], data: Data[][]) => void)\r\n  | ((value: string[][], data: Data[][]) => void)\r\n  | ((value: number[][], data: Data[][]) => void)\r\n\r\nexport const cascaderProps = buildProps({\r\n  size: sizeProp,\r\n  state: stateProp,\r\n  locale: localeProp('select'),\r\n  value: Array as PropType<CascaderValue>,\r\n  visible: booleanProp,\r\n  options: Array as PropType<Data[]>,\r\n  placeholder: String,\r\n  prefix: iconProp,\r\n  prefixColor: String,\r\n  suffix: iconProp,\r\n  suffixColor: String,\r\n  noCascaded: booleanProp,\r\n  multiple: booleanProp,\r\n  disabled: booleanProp,\r\n  clearable: booleanProp,\r\n  placement: String as PropType<Placement>,\r\n  transfer: booleanStringProp,\r\n  staticSuffix: booleanProp,\r\n  noSuffix: booleanProp,\r\n  transitionName: String,\r\n  outsideClose: booleanProp,\r\n  keyConfig: Object as PropType<CascaderKeyConfig>,\r\n  separator: String,\r\n  hoverTrigger: booleanProp,\r\n  maxTagCount: Number,\r\n  briefLabel: booleanProp,\r\n  noRestTip: booleanProp,\r\n  onAsyncLoad: Function as PropType<(data: Data) => any[] | Promise<any[]>>,\r\n  mergeTags: booleanProp,\r\n  tagType: String as PropType<TagType>,\r\n  emptyText: String,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingLock: booleanProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  transparent: booleanProp,\r\n  popperAlive: booleanProp,\r\n  slots: Object as PropType<CascaderSlots>,\r\n  onToggle: eventProp<(visible: boolean) => void>(),\r\n  onSelect: eventProp<(fullValue: string, data: Data) => void>(),\r\n  onCancel: eventProp<(fullValue: string, data: Data) => void>(),\r\n  onChange: eventProp<ChangeEvent>(),\r\n  onClickOutside: eventProp(),\r\n  onOutsideClose: eventProp(),\r\n  onClear: eventProp(),\r\n})\r\n\r\nexport type CascaderProps = ExtractPropTypes<typeof cascaderProps>\r\nexport type CascaderCProps = ConfigurableProps<CascaderProps, never, 'onAsyncLoad'>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { NativeScroll } from '@/components/native-scroll'\r\nimport { Overflow } from '@/components/overflow'\r\nimport { Popper } from '@/components/popper'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { Tag } from '@/components/tag'\r\nimport { Tooltip } from '@/components/tooltip'\r\nimport { useFieldStore } from '@/components/form'\r\n\r\nimport { computed, nextTick, onBeforeUpdate, reactive, ref, toRef, watch, watchEffect } from 'vue'\r\n\r\nimport CascaderPanel from './cascader-panel.vue'\r\nimport {\r\n  createIconProp,\r\n  createSizeProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { placementWhileList, useClickOutside, useHover, usePopper } from '@vexip-ui/hooks'\r\nimport { flatTree, getLast, isNull, isPromise, toAttrValue, transformTree } from '@vexip-ui/utils'\r\nimport { cascaderProps } from './props'\r\n\r\nimport type { PopperExposed } from '@/components/popper'\r\nimport type {\r\n  CascaderKeyConfig,\r\n  CascaderOptionState,\r\n  CascaderSlots,\r\n  CascaderValue,\r\n  Data,\r\n} from './symbol'\r\n\r\ntype ChangeListener = (value: CascaderValue, data: Data[] | Data[][]) => void\r\n\r\nconst ID_KEY = Symbol('ID_KEY')\r\nconst PARENT_KEY = Symbol('PARENT_KEY')\r\n\r\nconst defaultKeyConfig: Required<CascaderKeyConfig> = {\r\n  value: 'value',\r\n  label: 'label',\r\n  children: 'children',\r\n  disabled: 'disabled',\r\n  hasChild: 'hasChild',\r\n}\r\n\r\ndefineOptions({ name: 'Cascader' })\r\n\r\nconst {\r\n  idFor,\r\n  labelId,\r\n  state,\r\n  disabled,\r\n  loading,\r\n  size,\r\n  validateField,\r\n  clearField,\r\n  getFieldValue,\r\n  setFieldValue,\r\n} = useFieldStore<CascaderValue>(() => reference.value?.focus())\r\n\r\nconst _props = defineProps(cascaderProps)\r\nconst nh = useNameHelper('cascader')\r\nconst props = useProps('cascader', _props, {\r\n  size: createSizeProp(size),\r\n  state: createStateProp(state),\r\n  locale: null,\r\n  value: {\r\n    default: () => getFieldValue(),\r\n    static: true,\r\n  },\r\n  visible: {\r\n    default: false,\r\n    static: true,\r\n  },\r\n  options: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  placeholder: null,\r\n  prefix: createIconProp(),\r\n  prefixColor: '',\r\n  suffix: createIconProp(),\r\n  suffixColor: '',\r\n  noCascaded: false,\r\n  multiple: false,\r\n  disabled: () => disabled.value,\r\n  clearable: false,\r\n  placement: {\r\n    default: 'bottom-start',\r\n    validator: value => placementWhileList.includes(value),\r\n  },\r\n  transfer: false,\r\n  staticSuffix: false,\r\n  noSuffix: false,\r\n  transitionName: () => nh.ns('drop'),\r\n  outsideClose: true,\r\n  keyConfig: () => ({}),\r\n  separator: {\r\n    default: '/',\r\n    validator: value => value.length === 1,\r\n  },\r\n  hoverTrigger: false,\r\n  maxTagCount: 0,\r\n  briefLabel: false,\r\n  noRestTip: false,\r\n  onAsyncLoad: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  mergeTags: false,\r\n  tagType: null,\r\n  emptyText: null,\r\n  loading: () => loading.value,\r\n  loadingIcon: createIconProp(),\r\n  loadingLock: false,\r\n  loadingEffect: null,\r\n  transparent: false,\r\n  popperAlive: null,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:visible', 'update:value'])\r\n\r\nconst slots = defineSlots<CascaderSlots>()\r\n\r\nconst icons = useIcons()\r\nconst locale = useLocale('select', toRef(props, 'locale'))\r\n\r\nconst currentVisible = ref(props.visible)\r\nconst currentValues = ref<string[]>([])\r\nconst currentLabels = ref<string[]>([])\r\nconst mergedValues = ref<string[]>([])\r\nconst mergedLabels = ref<string[]>([])\r\nconst isPopperShow = ref(false)\r\nconst placement = toRef(props, 'placement')\r\nconst transfer = toRef(props, 'transfer')\r\n\r\nconst emittedValue = ref<CascaderValue | null>(null)\r\nconst optionTree = ref<CascaderOptionState[]>(null!)\r\nconst isAsyncLoad = computed(() => typeof props.onAsyncLoad === 'function')\r\nconst usingMerged = computed(() => props.mergeTags && !props.noCascaded)\r\nconst templateValues = computed(() =>\r\n  usingMerged.value ? mergedValues.value : currentValues.value,\r\n)\r\nconst templateLabels = computed(() =>\r\n  usingMerged.value ? mergedLabels.value : currentLabels.value,\r\n)\r\n\r\nlet optionList: CascaderOptionState[] = null!\r\nlet optionIdMap: Map<number, CascaderOptionState> = null!\r\nlet optionValueMap: Map<string, CascaderOptionState> = null!\r\nlet outsideClosed = false\r\nlet prevClosedId = -1\r\nlet flattedOptions: Record<any, any>[]\r\n\r\nconst updateTrigger = ref(0)\r\n\r\nwatchEffect(() => {\r\n  /* eslint-disable @typescript-eslint/no-unused-expressions */\r\n  props.keyConfig.value\r\n  props.keyConfig.label\r\n  props.keyConfig.disabled\r\n  props.keyConfig.hasChild\r\n  props.separator\r\n  isAsyncLoad.value\r\n  /* eslint-enable */\r\n\r\n  flattedOptions = flatTree(props.options as Record<any, any>[], {\r\n    keyField: ID_KEY,\r\n    parentField: PARENT_KEY,\r\n    childField: props.keyConfig.children ?? defaultKeyConfig.children,\r\n    forceInject: true,\r\n  })\r\n\r\n  updateTrigger.value++\r\n})\r\n\r\nwatch(updateTrigger, initOptionStates, { immediate: true })\r\n\r\nfunction initOptionStates() {\r\n  const separator = props.separator\r\n  const isAsync = isAsyncLoad.value\r\n\r\n  optionList = createOptionStates(flattedOptions)\r\n  optionIdMap = new Map()\r\n  optionValueMap = new Map()\r\n\r\n  for (let i = 0, len = optionList.length; i < len; ++i) {\r\n    const option = optionList[i]\r\n\r\n    initOptionFull(option, separator)\r\n    optionIdMap.set(option.id, option)\r\n    optionValueMap.set(option.fullValue, option)\r\n\r\n    if (isAsync) {\r\n      option.childrenLoaded = queryChildrenLoaded(option)\r\n    }\r\n  }\r\n\r\n  optionTree.value = transformTree(optionList)\r\n  initValueAndLabel(emittedValue.value)\r\n}\r\n\r\nconst openedIds = ref<number[]>([])\r\nconst optionsList = computed(() => {\r\n  return [\r\n    optionTree.value,\r\n    ...openedIds.value.map(id => optionIdMap.get(id)?.children).filter(Boolean),\r\n  ]\r\n})\r\n\r\nconst wrapper = useClickOutside(handleClickOutside)\r\nconst popper = ref<PopperExposed>()\r\nconst { reference, transferTo, updatePopper } = usePopper({\r\n  placement,\r\n  transfer,\r\n  wrapper,\r\n  popper: computed(() => popper.value?.wrapper),\r\n  isDrop: true,\r\n})\r\nconst { isHover } = useHover(reference)\r\n\r\nconst panelElList = ref<InstanceType<typeof CascaderPanel>[]>([])\r\nconst restTagCount = ref(0)\r\nconst restTipShow = ref(false)\r\nconst selectorWidth = ref(0)\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.ns('input-vars')]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm('multiple')]: props.multiple,\r\n    [nh.bm('responsive')]: props.multiple && props.maxTagCount <= 0,\r\n  }\r\n})\r\nconst readonly = computed(() => props.loading && props.loadingLock)\r\nconst selectorClass = computed(() => {\r\n  const baseCls = nh.be('selector')\r\n\r\n  return {\r\n    [baseCls]: true,\r\n    [`${baseCls}--focused`]: !props.disabled && currentVisible.value,\r\n    [`${baseCls}--disabled`]: props.disabled,\r\n    [`${baseCls}--readonly`]: readonly.value,\r\n    [`${baseCls}--loading`]: props.loading,\r\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\r\n    [`${baseCls}--${props.state}`]: props.state !== 'default',\r\n    [`${baseCls}--has-prefix`]: hasPrefix.value,\r\n    [`${baseCls}--has-suffix`]: !props.noSuffix,\r\n    [`${baseCls}--transparent`]: props.transparent,\r\n  }\r\n})\r\nconst hasPrefix = computed(() => {\r\n  return !!(slots.prefix || props.slots.prefix || props.prefix)\r\n})\r\nconst hasValue = computed(() => !!templateValues.value[0])\r\nconst usingHover = computed(() => props.hoverTrigger && !isAsyncLoad.value)\r\nconst showClear = computed(() => {\r\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && hasValue.value\r\n})\r\n\r\nwatch(\r\n  () => props.visible,\r\n  value => {\r\n    currentVisible.value = value\r\n  },\r\n)\r\nwatch(currentVisible, async value => {\r\n  if (value) {\r\n    restTipShow.value = false\r\n    selectorWidth.value = wrapper.value?.offsetWidth || 0\r\n\r\n    await updatePopper()\r\n    nextTick(() => {\r\n      getLast(panelElList.value)?.$el?.focus()\r\n    })\r\n  } else {\r\n    isPopperShow.value = false\r\n\r\n    if (reference.value && !outsideClosed) {\r\n      reference.value.focus()\r\n    }\r\n  }\r\n\r\n  outsideClosed = false\r\n})\r\n\r\nlet outsideChanged = false\r\n\r\nwatch(emittedValue, () => {\r\n  outsideChanged = true\r\n})\r\nwatch(\r\n  () => props.value,\r\n  value => {\r\n    if (value !== emittedValue.value || outsideChanged) {\r\n      emittedValue.value = value\r\n      initValueAndLabel(value)\r\n      nextTick(() => {\r\n        outsideChanged = false\r\n      })\r\n    }\r\n  },\r\n  { immediate: true },\r\n)\r\nwatch(\r\n  () => props.briefLabel,\r\n  brief => {\r\n    currentLabels.value = currentValues.value\r\n      .map(value => optionValueMap.get(value)?.[brief ? 'label' : 'fullLabel'] as string)\r\n      .filter(Boolean)\r\n\r\n    // nextTick(computeTagsOverflow)\r\n  },\r\n)\r\nwatch(isAsyncLoad, value => {\r\n  if (value) {\r\n    for (const option of optionIdMap.values()) {\r\n      option.childrenLoaded = queryChildrenLoaded(option)\r\n    }\r\n  }\r\n})\r\nwatch(usingMerged, value => {\r\n  if (value) {\r\n    mergedValues.value.length = 0\r\n    mergedLabels.value.length = 0\r\n\r\n    updateMergedProps()\r\n  }\r\n\r\n  if (isAsyncLoad.value) {\r\n    const originalOptions: CascaderOptionState[] = []\r\n\r\n    for (const option of optionIdMap.values()) {\r\n      if (option.checked) {\r\n        originalOptions.push(option)\r\n      }\r\n\r\n      if (option.hasChild && !option.children.length && !option.loaded) {\r\n        option.checked = false\r\n      }\r\n    }\r\n\r\n    for (let i = 0, len = originalOptions.length; i < len; ++i) {\r\n      const option = originalOptions[i]\r\n\r\n      updateCheckedUpward(option)\r\n      updateCheckedDown(option)\r\n    }\r\n  }\r\n\r\n  emitMultipleChange()\r\n})\r\nwatch(\r\n  () => optionsList.value.length,\r\n  () => {\r\n    updatePopper()\r\n    nextTick(() => {\r\n      getLast(panelElList.value)?.$el?.focus()\r\n      prevClosedId = -1\r\n    })\r\n  },\r\n)\r\nwatch(\r\n  () => props.disabled,\r\n  value => {\r\n    if (value) {\r\n      setVisible(false)\r\n    }\r\n  },\r\n)\r\nwatch(readonly, value => {\r\n  if (value) {\r\n    setVisible(false)\r\n  }\r\n})\r\n\r\nonBeforeUpdate(() => {\r\n  panelElList.value.length = 0\r\n})\r\n\r\ndefineExpose({\r\n  idFor,\r\n  labelId,\r\n  currentVisible,\r\n  currentValues,\r\n  currentLabels,\r\n  isHover,\r\n  openedIds,\r\n  restTagCount,\r\n  restTipShow,\r\n  optionsList,\r\n  hasValue,\r\n  templateValues,\r\n  templateLabels,\r\n  showClear,\r\n  wrapper,\r\n  reference,\r\n  popper,\r\n  panelElList,\r\n  handlePanelOpen,\r\n  handleOptionSelect,\r\n  handleOptionCheck,\r\n  toggleVisible,\r\n  handleClear,\r\n  handlePanelBack,\r\n  focus: (options?: FocusOptions) => reference.value?.focus(options),\r\n  blur: () => reference.value?.blur(),\r\n})\r\n\r\nfunction createOptionStates(rawOptions: Record<string | symbol, any>[]) {\r\n  const {\r\n    value: valueKey,\r\n    label: labelKey,\r\n    disabled: disabledKey,\r\n    hasChild: hasChildKey,\r\n  } = { ...defaultKeyConfig, ...props.keyConfig }\r\n\r\n  return rawOptions.map(rawOption => {\r\n    const {\r\n      [ID_KEY]: id,\r\n      [PARENT_KEY]: parent,\r\n      [valueKey]: value,\r\n      [labelKey]: label,\r\n      [disabledKey]: disabled,\r\n      [hasChildKey]: hasChild,\r\n    } = rawOption\r\n\r\n    return reactive<CascaderOptionState>({\r\n      id,\r\n      parent,\r\n      value,\r\n      disabled,\r\n      hasChild,\r\n      label: label || String(value),\r\n      fullValue: '',\r\n      fullLabel: '',\r\n      children: [],\r\n      checked: false,\r\n      partial: false,\r\n      loading: false,\r\n      loaded: false,\r\n      error: false,\r\n      childrenLoaded: false,\r\n      data: rawOption,\r\n    })\r\n  })\r\n}\r\n\r\nfunction initOptionFull(option: CascaderOptionState, separator: string) {\r\n  let value = option.value as string\r\n  let label = option.label\r\n  let parent = optionIdMap.get(option.parent)\r\n\r\n  while (parent) {\r\n    value = `${parent.value}${separator}${value}`\r\n    label = `${parent.label}${separator}${label}`\r\n    parent = optionIdMap.get(parent.parent)\r\n  }\r\n\r\n  option.fullValue = value\r\n  option.fullLabel = label\r\n}\r\n\r\nfunction queryChildrenLoaded(option: CascaderOptionState) {\r\n  if (option.hasChild && !option.children?.length) {\r\n    return option.loaded\r\n  }\r\n\r\n  const loop: CascaderOptionState[] = [...option.children]\r\n\r\n  while (loop.length) {\r\n    const child = loop.shift()!\r\n\r\n    if (child.childrenLoaded) continue\r\n\r\n    if (child.hasChild && !child.children?.length) {\r\n      child.childrenLoaded = child.loaded\r\n\r\n      if (!child.loaded) return false\r\n    }\r\n\r\n    loop.push(...child.children)\r\n  }\r\n\r\n  return true\r\n}\r\n\r\nfunction updateMergedProps() {\r\n  const baseValues = isAsyncLoad.value\r\n    ? currentValues.value.concat(mergedValues.value)\r\n    : currentValues.value\r\n  const values = new Set(baseValues)\r\n  const loop = [...baseValues]\r\n\r\n  while (loop.length) {\r\n    const value = loop.shift()!\r\n\r\n    const option = optionValueMap.get(value)\r\n\r\n    if (option) {\r\n      const parent = optionIdMap.get(option.parent)\r\n\r\n      if (parent?.checked) {\r\n        values.delete(value)\r\n        values.add(parent.fullValue)\r\n        loop.push(parent.fullValue)\r\n      }\r\n    }\r\n  }\r\n\r\n  const briefLabel = props.briefLabel\r\n\r\n  mergedValues.value = Array.from(values).filter(value => optionValueMap.has(value))\r\n  mergedLabels.value = mergedValues.value\r\n    .map(value => {\r\n      const option = optionValueMap.get(value)!\r\n\r\n      return briefLabel ? option.label : option.fullLabel\r\n    })\r\n    .filter(Boolean)\r\n}\r\n\r\nfunction isFlatArray<T extends string | number>(value: T[] | T[][]): value is T[] {\r\n  return !!value.length && !Array.isArray(value[0])\r\n}\r\n\r\nfunction isComplexArray<T extends string | number>(value: T[] | T[][]): value is T[][] {\r\n  return !!value.length && Array.isArray(value[0])\r\n}\r\n\r\nfunction initValueAndLabel(value: CascaderValue | null) {\r\n  const processMerged = () => {\r\n    if (usingMerged.value) {\r\n      if (isAsyncLoad.value) {\r\n        mergedValues.value = Array.from(optionIdMap.values())\r\n          .filter(option => option.checked)\r\n          .map(option => option.fullValue)\r\n      }\r\n\r\n      updateMergedProps()\r\n    }\r\n  }\r\n\r\n  for (const option of optionList) {\r\n    option.checked = false\r\n    option.partial = false\r\n  }\r\n\r\n  if (!value?.length) {\r\n    currentValues.value = []\r\n    currentLabels.value = []\r\n    processMerged()\r\n    return\r\n  }\r\n\r\n  const briefLabel = props.briefLabel\r\n\r\n  if (props.multiple) {\r\n    const normalizedValue = isFlatArray(value) ? [value] : value\r\n    const valueSet = new Set<string>(normalizedValue.map(v => v.join(props.separator)))\r\n    const selectedValues: string[] = []\r\n    const selectedLabels: string[] = []\r\n    const selectedOptions: CascaderOptionState[] = []\r\n\r\n    valueSet.forEach(value => {\r\n      const option = optionValueMap.get(value)\r\n\r\n      if (option) {\r\n        option.checked = true\r\n        option.partial = false\r\n\r\n        selectedValues.push(value)\r\n        selectedLabels.push(briefLabel ? option.label : option.fullLabel)\r\n        selectedOptions.push(option)\r\n      }\r\n    })\r\n\r\n    if (!props.noCascaded) {\r\n      const originalOptions = selectedOptions.concat(\r\n        Array.from(optionIdMap.values()).filter(option => option.disabled && option.checked),\r\n      )\r\n\r\n      for (let i = 0, len = originalOptions.length; i < len; ++i) {\r\n        const option = originalOptions[i]\r\n\r\n        updateCheckedUpward(option)\r\n        updateCheckedDown(option)\r\n      }\r\n    }\r\n\r\n    currentValues.value = selectedValues\r\n    currentLabels.value = selectedLabels\r\n  } else {\r\n    const normalizedValue = isComplexArray(value) ? value[0] : value\r\n    const stringValue = normalizedValue.join(props.separator)\r\n    const option = optionValueMap.get(stringValue)\r\n\r\n    if (option) {\r\n      currentValues.value = [stringValue]\r\n      currentLabels.value = [briefLabel ? option.label : option.fullLabel]\r\n\r\n      if (props.noCascaded) {\r\n        option.checked = true\r\n        option.partial = false\r\n      }\r\n    } else {\r\n      currentValues.value = []\r\n      currentLabels.value = []\r\n    }\r\n  }\r\n\r\n  processMerged()\r\n\r\n  if (openedIds.value.length) return\r\n\r\n  const firstValue = currentValues.value[0]\r\n\r\n  if (firstValue) {\r\n    const option = optionValueMap.get(firstValue)!\r\n    const ids = [option.id]\r\n\r\n    let parent = optionIdMap.get(option.parent)\r\n\r\n    while (parent) {\r\n      ids.push(parent.id)\r\n      parent = optionIdMap.get(parent.parent)\r\n    }\r\n\r\n    openedIds.value = ids.reverse().slice(0, -1)\r\n  }\r\n}\r\n\r\nfunction setVisible(visible: boolean) {\r\n  if (currentVisible.value === visible) return\r\n\r\n  currentVisible.value = visible\r\n\r\n  emit('update:visible', visible)\r\n  emitEvent(props.onToggle, visible)\r\n}\r\n\r\nasync function handlePanelOpen(option: CascaderOptionState, depth: number) {\r\n  if (!option.hasChild && !option.children?.length) return\r\n\r\n  if (isAsyncLoad.value && !option.children?.length && !option.loaded) {\r\n    option.loading = true\r\n\r\n    let result: ReturnType<typeof props.onAsyncLoad>\r\n\r\n    try {\r\n      result = props.onAsyncLoad(option.data)\r\n      result = isPromise(result) ? await result : result\r\n    } catch (e) {\r\n      option.error = true\r\n      option.loading = false\r\n      return\r\n    }\r\n\r\n    const rawOptions = result as any[]\r\n\r\n    if (!Array.isArray(rawOptions) || !rawOptions.length) {\r\n      option.hasChild = false\r\n    } else {\r\n      const options = createOptionStates(rawOptions)\r\n      const parentId = option.id\r\n      const separator = props.separator\r\n\r\n      option.children.push(...options)\r\n\r\n      let idCount = Math.max(...Array.from(optionIdMap.keys()).map(Number)) + 1\r\n\r\n      options.forEach(option => {\r\n        option.id = idCount++\r\n        option.parent = parentId\r\n\r\n        initOptionFull(option, separator)\r\n\r\n        optionIdMap.set(option.id, option)\r\n        optionValueMap.set(option.fullValue, option)\r\n      })\r\n\r\n      optionList.push(...options)\r\n    }\r\n\r\n    option.loaded = true\r\n    option.loading = false\r\n\r\n    const upstream = queryUpstreamOptions(option)\r\n    upstream.forEach(option => {\r\n      option.childrenLoaded = queryChildrenLoaded(option)\r\n    })\r\n  }\r\n\r\n  if (depth < openedIds.value.length) {\r\n    openedIds.value = openedIds.value.slice(0, depth)\r\n  }\r\n\r\n  openedIds.value.push(option.id)\r\n  requestAnimationFrame(() => {\r\n    getLast(panelElList.value)?.$el?.focus()\r\n  })\r\n}\r\n\r\nfunction handleOptionSelect(option: CascaderOptionState, depth: number) {\r\n  if (!option) return\r\n\r\n  if (option.hasChild || option.children?.length) {\r\n    handlePanelOpen(option, depth)\r\n  } else {\r\n    handleSingleSelect(option.fullValue)\r\n  }\r\n}\r\n\r\nfunction queryUpstreamOptions(option: CascaderOptionState) {\r\n  const options = [option]\r\n  let parent = optionIdMap.get(option.parent)\r\n\r\n  while (parent) {\r\n    options.push(parent)\r\n    parent = optionIdMap.get(parent.parent)\r\n  }\r\n\r\n  return options\r\n}\r\n\r\nfunction updateCheckedUpward(originalOption: CascaderOptionState) {\r\n  let option = originalOption\r\n\r\n  while (!isNull(option.parent)) {\r\n    const parent = optionIdMap.get(option.parent)\r\n\r\n    if (!parent) break\r\n\r\n    if (option.checked === parent.checked && option.partial === parent.partial) {\r\n      break\r\n    }\r\n\r\n    if (option.checked) {\r\n      parent.checked = parent.children.every(item => item.disabled || item.checked)\r\n      parent.partial = !parent.checked\r\n    } else {\r\n      parent.checked = false\r\n      parent.partial = parent.children.some(item => item.checked || item.partial)\r\n    }\r\n\r\n    option = parent\r\n  }\r\n}\r\n\r\nfunction updateCheckedDown(originalOption: CascaderOptionState) {\r\n  const checked = originalOption.checked\r\n  const partial = originalOption.partial\r\n\r\n  const loop = [...originalOption.children]\r\n\r\n  let option\r\n\r\n  while (loop.length) {\r\n    option = loop.shift()!\r\n\r\n    if (option.disabled) continue\r\n\r\n    option.checked = checked\r\n    option.partial = partial\r\n\r\n    if (option.children?.length) {\r\n      loop.push(...option.children)\r\n    }\r\n  }\r\n}\r\n\r\nfunction handleOptionCheck(option: CascaderOptionState) {\r\n  if (!option) return\r\n\r\n  const options = Array.from(optionIdMap.values())\r\n  const checked = !option.checked\r\n\r\n  if (!props.multiple) {\r\n    for (let i = 0, len = options.length; i < len; ++i) {\r\n      options[i].checked = false\r\n    }\r\n\r\n    option.checked = checked\r\n    option.partial = false\r\n\r\n    return handleSingleSelect(option.fullValue)\r\n  }\r\n\r\n  option.checked = checked\r\n  option.partial = false\r\n\r\n  if (!props.noCascaded) {\r\n    const originalOptions = [option].concat(\r\n      options.filter(option => option.disabled && option.checked),\r\n    )\r\n\r\n    for (let i = 0, len = originalOptions.length; i < len; ++i) {\r\n      const option = originalOptions[i]\r\n\r\n      updateCheckedUpward(option)\r\n      updateCheckedDown(option)\r\n    }\r\n  }\r\n\r\n  emitEvent(props[checked ? 'onSelect' : 'onCancel'], option.fullValue, option.data)\r\n  emitMultipleChange()\r\n}\r\n\r\nfunction emitMultipleChange() {\r\n  const options = Array.from(optionIdMap.values())\r\n  const selectedOptions = props.noCascaded\r\n    ? options.filter(option => option.checked)\r\n    : options.filter(option => option.checked && !(option.hasChild || option.children?.length))\r\n\r\n  const selectedValues: string[] = []\r\n  const selectedLabels: string[] = []\r\n\r\n  const values: (string | number)[][] = []\r\n  const dataList: Data[][] = []\r\n  const briefLabel = props.briefLabel\r\n\r\n  selectedOptions.forEach(option => {\r\n    selectedValues.push(option.fullValue)\r\n    selectedLabels.push(briefLabel ? option.label : option.fullLabel)\r\n\r\n    const { value, data } = queryArrayMeta(option.fullValue)\r\n\r\n    values.push(value)\r\n    dataList.push(data)\r\n  })\r\n\r\n  currentValues.value = selectedValues\r\n  currentLabels.value = selectedLabels\r\n\r\n  if (usingMerged.value) {\r\n    if (isAsyncLoad.value) {\r\n      mergedValues.value = options.filter(option => option.checked).map(option => option.fullValue)\r\n    }\r\n\r\n    updateMergedProps()\r\n  }\r\n\r\n  if (usingMerged.value && isAsyncLoad.value) {\r\n    values.length = 0\r\n    dataList.length = 0\r\n\r\n    mergedValues.value.forEach(fullValue => {\r\n      const option = optionValueMap.get(fullValue)\r\n\r\n      if (option) {\r\n        const { value, data } = queryArrayMeta(option.fullValue)\r\n\r\n        values.push(value)\r\n        dataList.push(data)\r\n      }\r\n    })\r\n  }\r\n\r\n  emitChangeEvent(values, dataList)\r\n  nextTick(updatePopper)\r\n}\r\n\r\nfunction handleSingleSelect(fullValue: string) {\r\n  const option = optionValueMap.get(fullValue)\r\n\r\n  if (!option) return\r\n\r\n  emitEvent(props.onSelect, fullValue, option.data)\r\n\r\n  if (fullValue) {\r\n    currentValues.value[0] = fullValue\r\n    currentLabels.value[0] = props.briefLabel ? option.label : option.fullLabel\r\n  } else {\r\n    currentValues.value.length = 0\r\n    currentLabels.value.length = 0\r\n  }\r\n\r\n  const { value, data } = queryArrayMeta(fullValue)\r\n\r\n  emitChangeEvent(value, data)\r\n  setVisible(false)\r\n}\r\n\r\nfunction emitChangeEvent(value: CascaderValue, data: Data[] | Data[][]) {\r\n  emittedValue.value = value\r\n\r\n  nextTick(() => {\r\n    outsideChanged = false\r\n\r\n    emit('update:value', value)\r\n    setFieldValue(value)\r\n    emitEvent(props.onChange as ChangeListener, value, data)\r\n    validateField()\r\n  })\r\n}\r\n\r\nfunction queryArrayMeta(fullValue: string) {\r\n  let option = optionValueMap.get(fullValue)!\r\n\r\n  if (!option) return { value: [], data: [] }\r\n\r\n  const value = [option.value]\r\n  const data = [option.data]\r\n\r\n  while (option.parent) {\r\n    const parent = optionIdMap.get(option.parent)\r\n\r\n    if (!parent) break\r\n\r\n    value.push(parent.value)\r\n    data.push(parent.data)\r\n    option = parent\r\n  }\r\n\r\n  return {\r\n    value: value.reverse(),\r\n    data: data.reverse(),\r\n  }\r\n}\r\n\r\nfunction toggleVisible(visible = !currentVisible.value) {\r\n  if (props.disabled || readonly.value) return\r\n\r\n  setVisible(visible)\r\n}\r\n\r\nfunction handleClickOutside() {\r\n  restTipShow.value = false\r\n  emitEvent(props.onClickOutside)\r\n\r\n  if (props.outsideClose && currentVisible.value) {\r\n    setVisible(false)\r\n    outsideClosed = true\r\n    emitEvent(props.onOutsideClose)\r\n  }\r\n}\r\n\r\nfunction handleClear() {\r\n  if (props.disabled || readonly.value) return\r\n\r\n  if (props.clearable) {\r\n    const prev = emittedValue.value\r\n\r\n    currentValues.value.length = 0\r\n    currentLabels.value.length = 0\r\n    mergedValues.value.length = 0\r\n    mergedLabels.value.length = 0\r\n    openedIds.value.length = 0\r\n    emittedValue.value = prev?.length === 0 ? prev : []\r\n    restTipShow.value = false\r\n\r\n    for (const option of optionIdMap.values()) {\r\n      option.checked = false\r\n      option.partial = false\r\n    }\r\n\r\n    if (prev?.length !== 0) {\r\n      emit('update:value', emittedValue.value)\r\n      emitEvent(props.onChange as ChangeListener, emittedValue.value, [])\r\n    }\r\n\r\n    emitEvent(props.onClear)\r\n    clearField(emittedValue.value)\r\n  }\r\n}\r\n\r\nfunction toggleShowRestTip() {\r\n  if (!currentVisible.value) {\r\n    restTipShow.value = !restTipShow.value\r\n  } else {\r\n    restTipShow.value = false\r\n  }\r\n}\r\n\r\nfunction handleTipClose(fullValue: string) {\r\n  if (props.disabled || readonly.value) return\r\n\r\n  if (props.multiple) {\r\n    handleOptionCheck(optionValueMap.get(fullValue)!)\r\n  } else {\r\n    handleSingleSelect(fullValue)\r\n  }\r\n}\r\n\r\nfunction handlePanelKeyOpen(option: CascaderOptionState, depth: number) {\r\n  handlePanelOpen(option, depth)\r\n\r\n  requestAnimationFrame(() => {\r\n    const panel = getLast(panelElList.value)\r\n\r\n    if (panel && panel.currentHitting < 0) {\r\n      panel.currentHitting = panel.options.findIndex(option => option.id === prevClosedId)\r\n\r\n      if (panel.currentHitting < 0) {\r\n        panel.currentHitting = 0\r\n      }\r\n    }\r\n  })\r\n}\r\n\r\nfunction handlePanelBack() {\r\n  prevClosedId = openedIds.value.pop()!\r\n}\r\n\r\nfunction handlePanelsEnter() {\r\n  requestAnimationFrame(() => {\r\n    isPopperShow.value = true\r\n  })\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :id=\"idFor\"\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"group\"\r\n    :aria-disabled=\"toAttrValue(props.disabled)\"\r\n    :aria-expanded=\"toAttrValue(currentVisible)\"\r\n    aria-haspopup=\"dialog\"\r\n    :aria-labelledby=\"labelId\"\r\n    @click=\"toggleVisible()\"\r\n  >\r\n    <div\r\n      ref=\"reference\"\r\n      :class=\"selectorClass\"\r\n      tabindex=\"0\"\r\n      @keydown.space.prevent=\"toggleVisible()\"\r\n      @keydown.tab=\"toggleVisible(false)\"\r\n    >\r\n      <div\r\n        v-if=\"hasPrefix\"\r\n        :class=\"[nh.be('icon'), nh.be('prefix')]\"\r\n        :style=\"{ color: props.prefixColor }\"\r\n      >\r\n        <slot name=\"prefix\">\r\n          <Renderer :renderer=\"props.slots.prefix\">\r\n            <Icon :icon=\"props.prefix\"></Icon>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n      <div :class=\"nh.be('control')\">\r\n        <slot name=\"control\">\r\n          <Renderer :renderer=\"props.slots.control\">\r\n            <Overflow\r\n              v-if=\"props.multiple\"\r\n              inherit\r\n              :class=\"[nh.be('tags')]\"\r\n              :items=\"templateValues\"\r\n              :max-count=\"props.maxTagCount\"\r\n              @rest-change=\"restTagCount = $event\"\r\n            >\r\n              <template #default=\"{ item, index }\">\r\n                <Tag\r\n                  inherit\r\n                  :class=\"nh.be('tag')\"\r\n                  :type=\"props.tagType\"\r\n                  closable\r\n                  :disabled=\"props.disabled\"\r\n                  @click.stop=\"toggleVisible()\"\r\n                  @close=\"handleTipClose(item)\"\r\n                >\r\n                  {{ templateLabels[index] }}\r\n                </Tag>\r\n              </template>\r\n              <template #counter=\"{ count }\">\r\n                <Tag\r\n                  v-if=\"props.noRestTip\"\r\n                  inherit\r\n                  :class=\"[nh.be('tag'), nh.be('counter')]\"\r\n                  :type=\"props.tagType\"\r\n                  :disabled=\"props.disabled\"\r\n                >\r\n                  {{ `+${count}` }}\r\n                </Tag>\r\n                <span v-else>\r\n                  <Tooltip\r\n                    inherit\r\n                    :transfer=\"false\"\r\n                    :visible=\"restTipShow\"\r\n                    trigger=\"custom\"\r\n                    placement=\"top-end\"\r\n                    :tip-class=\"nh.be('rest-tip')\"\r\n                    @click.stop=\"toggleShowRestTip\"\r\n                  >\r\n                    <template #trigger>\r\n                      <Tag\r\n                        inherit\r\n                        :class=\"[nh.be('tag'), nh.be('counter')]\"\r\n                        :type=\"props.tagType\"\r\n                        :disabled=\"props.disabled\"\r\n                      >\r\n                        {{ `+${count}` }}\r\n                      </Tag>\r\n                    </template>\r\n                    <NativeScroll inherit use-y-bar>\r\n                      <template v-for=\"(item, index) in templateValues\" :key=\"index\">\r\n                        <Tag\r\n                          v-if=\"index >= templateValues.length - restTagCount\"\r\n                          inherit\r\n                          :class=\"nh.be('tag')\"\r\n                          closable\r\n                          :type=\"props.tagType\"\r\n                          :disabled=\"props.disabled\"\r\n                          @close=\"handleTipClose(item)\"\r\n                        >\r\n                          {{ templateLabels[index] }}\r\n                        </Tag>\r\n                      </template>\r\n                    </NativeScroll>\r\n                  </Tooltip>\r\n                </span>\r\n              </template>\r\n            </Overflow>\r\n            <template v-else>\r\n              {{ currentLabels[0] }}\r\n            </template>\r\n            <span\r\n              v-if=\"(props.placeholder ?? locale.placeholder) && !hasValue\"\r\n              :class=\"nh.be('placeholder')\"\r\n            >\r\n              {{ props.placeholder ?? locale.placeholder }}\r\n            </span>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n      <div\r\n        v-if=\"!props.noSuffix\"\r\n        :class=\"[nh.be('icon'), nh.be('suffix')]\"\r\n        :style=\"{\r\n          color: props.suffixColor,\r\n          opacity: showClear || props.loading ? '0%' : ''\r\n        }\"\r\n      >\r\n        <slot name=\"suffix\">\r\n          <Renderer :renderer=\"props.slots.suffix\">\r\n            <Icon\r\n              v-if=\"props.suffix\"\r\n              :icon=\"props.suffix\"\r\n              :class=\"{\r\n                [nh.be('arrow')]: !props.staticSuffix\r\n              }\"\r\n            ></Icon>\r\n            <Icon v-else v-bind=\"icons.angleDown\" :class=\"nh.be('arrow')\"></Icon>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n      <div\r\n        v-else-if=\"props.clearable || props.loading\"\r\n        :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\r\n      ></div>\r\n      <Transition :name=\"nh.ns('fade')\" appear>\r\n        <button\r\n          v-if=\"showClear\"\r\n          :class=\"[nh.be('icon'), nh.be('clear')]\"\r\n          type=\"button\"\r\n          tabindex=\"-1\"\r\n          :aria-label=\"locale.ariaLabel.clear\"\r\n          @click.stop=\"handleClear\"\r\n        >\r\n          <Icon v-bind=\"icons.clear\"></Icon>\r\n        </button>\r\n        <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\r\n          <Icon\r\n            v-bind=\"icons.loading\"\r\n            :effect=\"props.loadingEffect || icons.loading.effect\"\r\n            :icon=\"props.loadingIcon || icons.loading.icon\"\r\n          ></Icon>\r\n        </div>\r\n      </Transition>\r\n    </div>\r\n    <Popper\r\n      ref=\"popper\"\r\n      :class=\"[nh.be('popper'), nh.ns('input-vars'), nh.bs('vars')]\"\r\n      :visible=\"currentVisible\"\r\n      :to=\"transferTo\"\r\n      :transition=\"props.transitionName\"\r\n      :alive=\"props.popperAlive ?? !transferTo\"\r\n      @click.stop\r\n      @enter=\"handlePanelsEnter\"\r\n    >\r\n      <div\r\n        :class=\"{\r\n          [nh.be('panels')]: true,\r\n          [nh.bem('panels', 'empty')]: !optionsList[0] || !optionsList[0].length\r\n        }\"\r\n      >\r\n        <template v-if=\"optionsList[0] && optionsList[0].length\">\r\n          <CascaderPanel\r\n            v-for=\"(items, index) in optionsList\"\r\n            :key=\"index\"\r\n            :ref=\"(panel: any) => panel && panelElList.push(panel)\"\r\n            :options=\"items\"\r\n            :opened-id=\"openedIds[index]\"\r\n            :values=\"currentValues\"\r\n            :ready=\"isPopperShow\"\r\n            :multiple=\"props.multiple\"\r\n            :is-async=\"isAsyncLoad\"\r\n            :merged=\"usingMerged\"\r\n            :no-cascaded=\"props.noCascaded\"\r\n            :labeled-by=\"labelId\"\r\n            @select=\"handleOptionSelect($event, index)\"\r\n            @hover=\"usingHover && handlePanelOpen($event, index)\"\r\n            @check=\"handleOptionCheck($event)\"\r\n            @open=\"handlePanelKeyOpen($event, index)\"\r\n            @back=\"handlePanelBack\"\r\n            @close=\"currentVisible = false\"\r\n          >\r\n            <template v-if=\"slots.default || props.slots.default\" #default=\"payload\">\r\n              <slot v-bind=\"payload\">\r\n                <Renderer :renderer=\"props.slots.default\" :data=\"payload\"></Renderer>\r\n              </slot>\r\n            </template>\r\n            <template v-if=\"slots.label || props.slots.label\" #label=\"payload\">\r\n              <slot name=\"label\" v-bind=\"payload\">\r\n                <Renderer :renderer=\"props.slots.label\" :data=\"payload\"></Renderer>\r\n              </slot>\r\n            </template>\r\n          </CascaderPanel>\r\n        </template>\r\n        <div v-else :class=\"nh.be('empty')\" :style=\"{ width: `${selectorWidth}px` }\">\r\n          <slot name=\"empty\">\r\n            <Renderer :renderer=\"props.slots.empty\">\r\n              {{ props.emptyText ?? locale.empty }}\r\n            </Renderer>\r\n          </slot>\r\n        </div>\r\n      </div>\r\n    </Popper>\r\n  </div>\r\n</template>\r\n","import { booleanProp, buildProps } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { CellFlex, CellOptions, GridAlign, GridJustify, LayoutProp } from './symbol'\r\n\r\nconst layoutProp = [Number, String, Array] as PropType<LayoutProp>\r\n\r\nexport const gridProps = buildProps({\r\n  tag: String,\r\n  gap: [Number, Array] as PropType<number | number[]>,\r\n  rows: layoutProp,\r\n  columns: layoutProp,\r\n  autoRows: layoutProp,\r\n  autoColumns: layoutProp,\r\n  dense: booleanProp,\r\n  justify: String as PropType<GridJustify>,\r\n  align: String as PropType<GridAlign>,\r\n  cellFlex: {\r\n    type: [Boolean, Object] as PropType<boolean | Partial<CellFlex>>,\r\n    default: null,\r\n  },\r\n})\r\n\r\nexport type GridProps = ExtractPropTypes<typeof gridProps>\r\nexport type GridCProps = ConfigurableProps<GridProps>\r\n\r\nconst mediaProp = [Number, Object] as PropType<CellOptions>\r\n\r\nexport const cellProps = buildProps({\r\n  tag: String,\r\n  top: [Number, String],\r\n  left: [Number, String],\r\n  width: Number,\r\n  height: Number,\r\n  right: [Number, String],\r\n  bottom: [Number, String],\r\n  xs: mediaProp,\r\n  sm: mediaProp,\r\n  md: mediaProp,\r\n  lg: mediaProp,\r\n  xl: mediaProp,\r\n  xxl: mediaProp,\r\n  useFlex: {\r\n    type: [Boolean, Object] as PropType<boolean | Partial<CellFlex>>,\r\n    default: null,\r\n  },\r\n})\r\n\r\nexport type CellProps = ExtractPropTypes<typeof cellProps>\r\nexport type CellCProps = ConfigurableProps<CellProps>\r\n","import { ref } from 'vue'\r\n\r\nimport { isClient } from '@vexip-ui/utils'\r\n\r\nexport type BreakPoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'\r\n\r\nexport const breakPoints = Object.freeze<BreakPoint[]>(['xs', 'sm', 'md', 'lg', 'xl', 'xxl'])\r\nexport const currentBreakPoint = ref<BreakPoint>('xs')\r\n\r\nif (isClient) {\r\n  const computedStyle = getComputedStyle(document.documentElement)\r\n  const queryMap = {} as Record<BreakPoint, MediaQueryList>\r\n\r\n  breakPoints.forEach(point => {\r\n    const media = computedStyle.getPropertyValue(`--vxp-break-point-${point}`).trim()\r\n    const query = matchMedia(`only screen and ${media}`)\r\n\r\n    query.addEventListener('change', handleBreakPointChange)\r\n    queryMap[point] = query\r\n  })\r\n\r\n  const queryEntries = Object.entries(queryMap).reverse() as [BreakPoint, MediaQueryList][]\r\n\r\n  function handleBreakPointChange() {\r\n    for (const [point, query] of queryEntries) {\r\n      if (query.matches) {\r\n        currentBreakPoint.value = point\r\n        break\r\n      }\r\n    }\r\n  }\r\n\r\n  handleBreakPointChange()\r\n}\r\n","import type { InjectionKey } from 'vue'\r\n\r\nexport type LayoutProp = number | string | (number | string)[]\r\n\r\nexport type GridJustify =\r\n  | 'start'\r\n  | 'end'\r\n  | 'center'\r\n  | 'space-around'\r\n  | 'space-between'\r\n  | 'space-evenly'\r\nexport type GridAlign = 'top' | 'middle' | 'bottom' | 'stretch'\r\n\r\nexport interface CellFlex {\r\n  justify: 'start' | 'end' | 'center' | 'space-around' | 'space-between' | 'space-evenly',\r\n  align: 'top' | 'middle' | 'bottom' | 'stretch',\r\n}\r\n\r\nexport interface GridState {\r\n  cellFlex: CellFlex | false,\r\n  columns: LayoutProp,\r\n}\r\n\r\nexport interface CellOptions {\r\n  top?: number | string,\r\n  left?: number | string,\r\n  width?: number,\r\n  height?: number,\r\n  right?: number | string,\r\n  bottom?: number | string,\r\n}\r\n\r\nexport const GRID_STATE = '__VXP_GRID_STATE' as unknown as InjectionKey<GridState>\r\n","import { computed, defineComponent, h, inject, provide, reactive, watch } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { has, isDefined } from '@vexip-ui/utils'\r\nimport { cellProps } from './props'\r\nimport { breakPoints, currentBreakPoint } from './helper'\r\nimport { GRID_STATE } from './symbol'\r\n\r\nimport type { CSSProperties } from 'vue'\r\nimport type { ClassType } from '@vexip-ui/config'\r\nimport type { BreakPoint } from './helper'\r\n\r\nexport default defineComponent({\r\n  name: 'Cell',\r\n  props: cellProps,\r\n  setup(_props, { slots }) {\r\n    const props = useProps('cell', _props, {\r\n      tag: 'div',\r\n      top: 'auto',\r\n      left: 'auto',\r\n      width: null,\r\n      height: 1,\r\n      right: '',\r\n      bottom: '',\r\n      xs: null,\r\n      sm: null,\r\n      md: null,\r\n      lg: null,\r\n      xl: null,\r\n      xxl: null,\r\n      useFlex: null,\r\n    })\r\n\r\n    const gridState = inject(GRID_STATE, null)\r\n    const nh = useNameHelper('cell')\r\n\r\n    provide(GRID_STATE, null!)\r\n\r\n    const layoutState = reactive({\r\n      top: props.top,\r\n      right: props.right,\r\n      bottom: props.bottom,\r\n      left: props.left,\r\n      width: props.width,\r\n      height: props.height,\r\n    })\r\n    const layoutKeys = Object.keys(layoutState) as (\r\n      | 'top'\r\n      | 'right'\r\n      | 'bottom'\r\n      | 'left'\r\n      | 'width'\r\n      | 'height'\r\n    )[]\r\n\r\n    const defaultWidth = computed(() => {\r\n      if (isDefined(props.width)) {\r\n        return props.width\r\n      }\r\n\r\n      return gridState?.columns && typeof gridState.columns === 'number' ? gridState.columns : 1\r\n    })\r\n\r\n    watch(\r\n      currentBreakPoint,\r\n      value => {\r\n        const matchSize = queryBreakPointOptions(value)\r\n\r\n        if (matchSize) {\r\n          if (typeof matchSize === 'number') {\r\n            layoutKeys.forEach(key => {\r\n              layoutState[key] = props[key] as any\r\n            })\r\n\r\n            layoutState.width = matchSize\r\n          } else {\r\n            layoutKeys.forEach(key => {\r\n              layoutState[key] = has(matchSize, key) ? matchSize[key] : (props[key] as any)\r\n            })\r\n\r\n            layoutState.width = layoutState.width ?? defaultWidth.value\r\n          }\r\n        } else {\r\n          layoutKeys.forEach(key => {\r\n            layoutState[key] = props[key] as any\r\n          })\r\n\r\n          layoutState.width = defaultWidth.value\r\n        }\r\n      },\r\n      { immediate: true },\r\n    )\r\n\r\n    const className = computed(() => {\r\n      const cellFlex = props.useFlex !== false &&\r\n        (props.useFlex || gridState?.cellFlex) && {\r\n        ...(gridState?.cellFlex || {}),\r\n        ...(props.useFlex\r\n          ? props.useFlex === true\r\n            ? { justify: 'start', align: 'top' }\r\n            : props.useFlex\r\n          : {}),\r\n      }\r\n      const className: ClassType = {\r\n        [nh.b()]: true,\r\n        [nh.bm('inherit')]: gridState || props.inherit,\r\n        [nh.bm('flex')]: cellFlex,\r\n      }\r\n\r\n      if (cellFlex) {\r\n        if (cellFlex.justify) className[nh.bm(cellFlex.justify)] = true\r\n        if (cellFlex.align) className[nh.bm(cellFlex.align)] = true\r\n      }\r\n\r\n      return className\r\n    })\r\n    const style = computed(() => {\r\n      const style: CSSProperties = {}\r\n\r\n      const topSet = isPositionSet(layoutState.top)\r\n      const rightSet = isPositionSet(layoutState.right)\r\n      const bottomSet = isPositionSet(layoutState.bottom)\r\n      const leftSet = isPositionSet(layoutState.left)\r\n\r\n      if (topSet && bottomSet) {\r\n        style.gridRowStart = parsePosition(layoutState.top)\r\n        style.gridRowEnd = parsePosition(layoutState.bottom)\r\n      } else if (topSet) {\r\n        style.gridRowStart = parsePosition(layoutState.top)\r\n        style.gridRowEnd = `span ${layoutState.height}`\r\n      } else if (bottomSet) {\r\n        style.gridRowStart = `span ${layoutState.height}`\r\n        style.gridRowEnd = parsePosition(layoutState.bottom)\r\n      } else {\r\n        style.gridRowEnd = `span ${layoutState.height}`\r\n      }\r\n\r\n      if (leftSet && rightSet) {\r\n        style.gridColumnStart = parsePosition(layoutState.left)\r\n        style.gridColumnEnd = parsePosition(layoutState.right)\r\n      } else if (leftSet) {\r\n        style.gridColumnStart = parsePosition(layoutState.left)\r\n        style.gridColumnEnd = `span ${layoutState.width}`\r\n      } else if (rightSet) {\r\n        style.gridColumnStart = `span ${layoutState.width}`\r\n        style.gridColumnEnd = parsePosition(layoutState.right)\r\n      } else {\r\n        style.gridColumnStart = `span ${layoutState.width}`\r\n      }\r\n\r\n      return style\r\n    })\r\n\r\n    function isPositionSet(value: number | string) {\r\n      return value === 0 || (value && value !== 'auto')\r\n    }\r\n\r\n    function parsePosition(value: number | string) {\r\n      return typeof value === 'number' ? value + 1 : value\r\n    }\r\n\r\n    function queryBreakPointOptions(breakPoint: BreakPoint) {\r\n      const index = breakPoints.findIndex(v => v === breakPoint)\r\n\r\n      if (~index) {\r\n        for (let i = index; i >= 0; --i) {\r\n          if (isDefined(props[breakPoints[i]])) {\r\n            return props[breakPoints[i]]\r\n          }\r\n        }\r\n      }\r\n\r\n      return null\r\n    }\r\n\r\n    return () =>\r\n      h(\r\n        props.tag || 'div',\r\n        {\r\n          class: className.value,\r\n          style: style.value,\r\n        },\r\n        {\r\n          default: () => slots.default?.(),\r\n        },\r\n      )\r\n  },\r\n})\r\n","<script setup lang=\"ts\">\r\nimport { useFieldStore } from '@/components/form'\r\nimport { Checkbox } from '@/components/checkbox'\r\n\r\nimport { computed, provide, reactive, ref, toRef, watch } from 'vue'\r\n\r\nimport {\r\n  createSizeProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport {\r\n  adjustAlpha,\r\n  debounceMinor,\r\n  isClient,\r\n  isDefined,\r\n  isObject,\r\n  parseColorToRgba,\r\n} from '@vexip-ui/utils'\r\nimport { checkboxGroupProps } from './props'\r\nimport { GROUP_STATE } from './symbol'\r\n\r\nimport type { Ref } from 'vue'\r\nimport type { ControlState } from './symbol'\r\n\r\ndefineOptions({ name: 'CheckboxGroup' })\r\n\r\nconst {\r\n  idFor,\r\n  labelId,\r\n  state,\r\n  disabled,\r\n  loading,\r\n  size,\r\n  validateField,\r\n  getFieldValue,\r\n  setFieldValue,\r\n} = useFieldStore<(string | number)[]>(focus)\r\n\r\nconst _props = defineProps(checkboxGroupProps)\r\nconst props = useProps('checkboxGroup', _props, {\r\n  size: createSizeProp(size),\r\n  state: createStateProp(state),\r\n  locale: null,\r\n  value: {\r\n    default: () => getFieldValue(),\r\n    static: true,\r\n  },\r\n  vertical: false,\r\n  disabled: () => disabled.value,\r\n  border: false,\r\n  options: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  loading: () => loading.value,\r\n  control: null,\r\n  loadingLock: false,\r\n  color: null,\r\n  stateColor: false,\r\n})\r\n\r\nconst emit = defineEmits(['update:value'])\r\n\r\nconst nh = useNameHelper('checkbox-group')\r\nconst locale = useLocale('checkbox', toRef(props, 'locale'))\r\nconst valueMap = new Map<string | number, boolean>()\r\nconst inputSet = new Set<Ref<HTMLElement | null | undefined>>()\r\nconst controlSet = new Set<ControlState>()\r\nconst currentValues = ref<(string | number)[]>(props.value || [])\r\n\r\nconst readonly = computed(() => props.loading && props.loadingLock)\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.ns('checkbox-vars'),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('vertical')]: props.vertical,\r\n      [nh.bm('disabled')]: props.disabled,\r\n      [nh.bm('readonly')]: readonly.value,\r\n      [nh.bm('loading')]: props.loading,\r\n      [nh.bm(props.size)]: props.size !== 'default',\r\n      [nh.bm('border')]: props.border,\r\n      [nh.bm(props.state)]: props.state !== 'default',\r\n    },\r\n  ]\r\n})\r\nconst controlLabel = computed(() => {\r\n  return typeof props.control === 'string' ? props.control : locale.value.all\r\n})\r\nconst colorMap = computed(() => {\r\n  if (!props.color) return null\r\n\r\n  const baseColor = parseColorToRgba(props.color)\r\n\r\n  return {\r\n    base: baseColor.toString(),\r\n    opacity6: adjustAlpha(baseColor, 0.4).toString(),\r\n  }\r\n})\r\n\r\nconst updateValue = debounceMinor(() => {\r\n  currentValues.value = []\r\n\r\n  valueMap.forEach((checked, value) => {\r\n    if (checked) {\r\n      currentValues.value.push(value)\r\n    }\r\n  })\r\n\r\n  handleChange(currentValues.value)\r\n})\r\n\r\nconst updateControl = debounceMinor(() => {\r\n  const valueLength = currentValues.value.length\r\n  const checked = valueLength === valueMap.size\r\n  const partial = valueLength > 0 && !checked\r\n\r\n  controlSet.forEach(state => {\r\n    state.checked = checked\r\n    state.partial = partial\r\n  })\r\n})\r\n\r\nprovide(\r\n  GROUP_STATE,\r\n  reactive({\r\n    currentValues,\r\n    size: toRef(props, 'size'),\r\n    state: toRef(props, 'state'),\r\n    disabled: toRef(props, 'disabled'),\r\n    loading: toRef(props, 'loading'),\r\n    loadingLock: toRef(props, 'loadingLock'),\r\n    colorMap,\r\n    stateColor: toRef(props, 'stateColor'),\r\n    increaseItem,\r\n    decreaseItem,\r\n    increaseControl,\r\n    decreaseControl,\r\n    handleControlChange,\r\n    setItemChecked,\r\n    replaceValue,\r\n  }),\r\n)\r\n\r\nwatch(\r\n  () => props.value,\r\n  value => {\r\n    const checkedValues = new Set(value)\r\n    const allValues = Array.from(valueMap.keys())\r\n\r\n    currentValues.value = []\r\n\r\n    allValues.forEach(value => {\r\n      const checked = checkedValues.has(value)\r\n\r\n      valueMap.set(value, checkedValues.has(value))\r\n      checked && currentValues.value.push(value)\r\n    })\r\n  },\r\n)\r\nwatch(currentValues, () => {\r\n  updateControl()\r\n})\r\n\r\nfunction increaseItem(\r\n  value: string | number,\r\n  checked: boolean,\r\n  input: Ref<HTMLElement | null | undefined>,\r\n) {\r\n  valueMap.set(value, checked)\r\n  inputSet.add(input)\r\n}\r\n\r\nfunction decreaseItem(value: string | number, input: Ref<HTMLElement | null | undefined>) {\r\n  valueMap.delete(value)\r\n  inputSet.delete(input)\r\n}\r\n\r\nfunction increaseControl(state: ControlState) {\r\n  controlSet.add(state)\r\n  updateControl()\r\n}\r\n\r\nfunction decreaseControl(state: ControlState) {\r\n  controlSet.delete(state)\r\n}\r\n\r\nfunction setItemChecked(value: string | number, checked: boolean) {\r\n  if (!isDefined(value) || !valueMap.has(value)) return\r\n\r\n  valueMap.set(value, checked)\r\n  updateValue()\r\n  updateControl()\r\n}\r\n\r\nfunction handleControlChange() {\r\n  // 在 group 层进行更新, 未选满则全选, 反之全不选\r\n  const allValues = Array.from(valueMap.keys())\r\n  const checked = currentValues.value.length !== allValues.length\r\n\r\n  allValues.forEach(value => {\r\n    valueMap.set(value, checked)\r\n  })\r\n\r\n  updateValue()\r\n  updateControl()\r\n}\r\n\r\nfunction handleChange(value: (string | number)[]) {\r\n  emit('update:value', value)\r\n  setFieldValue(value)\r\n  emitEvent(props.onChange, value)\r\n  validateField()\r\n}\r\n\r\nfunction replaceValue(prevValue: string | number, newValue: string | number) {\r\n  if (\r\n    isDefined(prevValue) &&\r\n    isDefined(newValue) &&\r\n    prevValue !== newValue &&\r\n    valueMap.has(prevValue)\r\n  ) {\r\n    valueMap.set(newValue, valueMap.get(prevValue)!)\r\n    valueMap.delete(prevValue)\r\n  }\r\n}\r\n\r\nfunction focus(options?: FocusOptions) {\r\n  const input = Array.from(inputSet)[0]?.value\r\n\r\n  if (isClient && input && document.activeElement !== input) {\r\n    input.focus(options)\r\n  }\r\n}\r\n\r\ndefineExpose({\r\n  idFor,\r\n  labelId,\r\n  increaseControl,\r\n  decreaseControl,\r\n  focus,\r\n  blur: () => {\r\n    for (const input of inputSet) {\r\n      input.value?.blur()\r\n    }\r\n  },\r\n})\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :id=\"idFor\"\r\n    :class=\"className\"\r\n    role=\"group\"\r\n    :aria-labelledby=\"labelId\"\r\n  >\r\n    <slot>\r\n      <Checkbox v-if=\"props.control\" inherit control>\r\n        {{ controlLabel }}\r\n      </Checkbox>\r\n      <template v-for=\"(item, index) in props.options\" :key=\"index\">\r\n        <Checkbox\r\n          v-if=\"isObject(item)\"\r\n          inherit\r\n          :value=\"item.value\"\r\n          :control=\"item.control\"\r\n          :disabled=\"item.disabled\"\r\n        >\r\n          {{ item.label || item.value }}\r\n        </Checkbox>\r\n        <Checkbox v-else inherit :value=\"item\">\r\n          {{ item }}\r\n        </Checkbox>\r\n      </template>\r\n    </slot>\r\n  </div>\r\n</template>\r\n","import type { InjectionKey } from 'vue'\r\n\r\nexport type CollapseArrowType = 'right' | 'left' | 'none'\r\n\r\nexport interface PanelState {\r\n  tab?: HTMLElement | null,\r\n  label: string | number,\r\n  expanded: boolean,\r\n  setExpanded: (expanded: boolean) => void,\r\n}\r\n\r\nexport interface CollapseState {\r\n  arrowType: CollapseArrowType,\r\n  registerPanel(panel: PanelState): void,\r\n  unregisterPanel(panel: PanelState): void,\r\n  expandPanel(label: string | number, expanded: boolean): void,\r\n  refreshLabels: () => void,\r\n}\r\n\r\nexport interface CollapsePanelSlots {\r\n  /**\r\n   * @internal\r\n   */\r\n  default?: () => any,\r\n  /**\r\n   * @internal\r\n   */\r\n  title?: () => any,\r\n  arrow?: (params: { expanded: boolean }) => any,\r\n}\r\n\r\nexport const COLLAPSE_STATE = '__VXP_COLLAPSE_STATE' as unknown as InjectionKey<CollapseState>\r\n\r\nlet idCount = 0\r\n\r\nexport function getIndexId() {\r\n  return idCount++\r\n}\r\n","<script setup lang=\"ts\">\r\nimport {\r\n  computed,\r\n  nextTick,\r\n  onMounted,\r\n  provide,\r\n  reactive,\r\n  ref,\r\n  toRef,\r\n  watch,\r\n  watchEffect,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useModifier } from '@vexip-ui/hooks'\r\nimport { debounceMinor, isNull, removeArrayItem } from '@vexip-ui/utils'\r\nimport { collapseProps } from './props'\r\nimport { COLLAPSE_STATE } from './symbol'\r\n\r\nimport type { CollapseArrowType, PanelState } from './symbol'\r\n\r\ndefineOptions({ name: 'Collapse' })\r\n\r\nconst _props = defineProps(collapseProps)\r\nconst props = useProps('collapse', _props, {\r\n  expanded: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  card: false,\r\n  accordion: false,\r\n  arrowType: {\r\n    default: 'right' as CollapseArrowType,\r\n    validator: (value: CollapseArrowType) => ['right', 'left', 'none'].includes(value),\r\n  },\r\n  ghost: false,\r\n})\r\n\r\nconst emit = defineEmits(['update:expanded'])\r\n\r\nconst nh = useNameHelper('collapse')\r\nconst panelStates = reactive(new Set<PanelState>())\r\nconst currentExpanded = ref<(string | number)[]>([])\r\n\r\nconst { target: wrapper } = useModifier({\r\n  passive: false,\r\n  onKeyDown: (event, modifier) => {\r\n    if (modifier.left || modifier.right) {\r\n      if (!wrapper.value || ![...panelStates].find(({ tab }) => tab === event.target)) return\r\n\r\n      const tabs = Array.from(wrapper.value.querySelectorAll(nh.cbe('header'))) as HTMLElement[]\r\n\r\n      if (tabs.length < 1) return\r\n\r\n      event.preventDefault()\r\n      event.stopPropagation()\r\n\r\n      const index = document.activeElement\r\n        ? tabs.findIndex(panel => panel === document.activeElement)\r\n        : -1\r\n\r\n      if (~index) {\r\n        const target = tabs[(index + (modifier.left ? -1 : 1) + tabs.length) % tabs.length]\r\n\r\n        target?.focus()\r\n      }\r\n    } else if (modifier.escape) {\r\n      event.preventDefault()\r\n      event.stopPropagation()\r\n\r\n      clearExpanded()\r\n    }\r\n  },\r\n})\r\n\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    nh.bm(`arrow-${props.arrowType}`),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('card')]: props.card,\r\n      [nh.bm('ghost')]: !props.card && props.ghost,\r\n    },\r\n  ]\r\n})\r\n\r\nconst refreshLabels = debounceMinor(() => {\r\n  Array.from(panelStates.values()).forEach((item, index) => {\r\n    if (isNull(item.label)) {\r\n      item.label = index + 1\r\n    }\r\n  })\r\n\r\n  if (panelStates.size) {\r\n    for (const panel of panelStates) {\r\n      if (currentExpanded.value.includes(panel.label)) {\r\n        panel.expanded = true\r\n      } else if (panel.expanded) {\r\n        expandPanel(panel.label, true)\r\n      }\r\n    }\r\n  }\r\n})\r\n\r\nprovide(\r\n  COLLAPSE_STATE,\r\n  reactive({\r\n    arrowType: toRef(props, 'arrowType'),\r\n    registerPanel,\r\n    unregisterPanel,\r\n    expandPanel,\r\n    refreshLabels,\r\n  }),\r\n)\r\n\r\nwatchEffect(() => {\r\n  const rawExpanded = props.expanded\r\n  const expanded =\r\n    props.accordion && Array.isArray(rawExpanded)\r\n      ? rawExpanded[0]\r\n      : rawExpanded || rawExpanded === 0\r\n        ? rawExpanded\r\n        : []\r\n\r\n  currentExpanded.value = Array.isArray(expanded) ? Array.from(expanded) : [expanded]\r\n})\r\n\r\nonMounted(() => {\r\n  nextTick(updateItemExpanded)\r\n\r\n  watch(currentExpanded, (prev, next) => {\r\n    if (!isSameExpanded(prev, next)) {\r\n      updateItemExpanded()\r\n    }\r\n  })\r\n})\r\n\r\ndefineExpose({ currentExpanded, wrapper })\r\n\r\nfunction registerPanel(panel: PanelState) {\r\n  panelStates.add(panel)\r\n\r\n  refreshLabels()\r\n}\r\n\r\nfunction unregisterPanel(panel: PanelState) {\r\n  panelStates.delete(panel)\r\n  expandPanel(panel.label, false)\r\n  refreshLabels()\r\n}\r\n\r\nfunction isSameExpanded(prev: (string | number)[], next: (string | number)[]) {\r\n  const prevSet = new Set(prev)\r\n\r\n  if (prevSet.size !== new Set(next).size) return false\r\n\r\n  return next.every(item => prevSet.has(item))\r\n}\r\n\r\nfunction expandPanel(label: string | number, expanded: boolean) {\r\n  if (!label && label !== 0) return\r\n\r\n  if (props.accordion) {\r\n    currentExpanded.value = expanded ? [label] : []\r\n  } else {\r\n    if (expanded) {\r\n      currentExpanded.value.push(label)\r\n    } else {\r\n      removeArrayItem(currentExpanded.value, label)\r\n    }\r\n  }\r\n\r\n  emitChangeEvent()\r\n  updateItemExpanded()\r\n}\r\n\r\nfunction clearExpanded() {\r\n  if (!currentExpanded.value.length) return\r\n\r\n  currentExpanded.value = []\r\n\r\n  emitChangeEvent()\r\n  updateItemExpanded()\r\n}\r\n\r\nfunction emitChangeEvent() {\r\n  emit('update:expanded', currentExpanded.value)\r\n  emitEvent(props.onChange, currentExpanded.value)\r\n}\r\n\r\nfunction updateItemExpanded() {\r\n  panelStates.forEach(panel => {\r\n    panel.setExpanded(currentExpanded.value.includes(panel.label))\r\n  })\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"tablist\"\r\n    tabindex=\"-1\"\r\n  >\r\n    <slot></slot>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { CollapseTransition } from '@/components/collapse-transition'\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, inject, onBeforeUnmount, reactive, ref, watch } from 'vue'\r\n\r\nimport { createIconProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { collapsePanelProps } from './props'\r\nimport { COLLAPSE_STATE, getIndexId } from './symbol'\r\n\r\nimport type { CollapseArrowType, CollapsePanelSlots, PanelState } from './symbol'\r\n\r\ndefineOptions({ name: 'CollapsePanel' })\r\n\r\nconst _props = defineProps(collapsePanelProps)\r\nconst props = useProps('collapsePanel', _props, {\r\n  label: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  title: '',\r\n  disabled: false,\r\n  contentStyle: null,\r\n  expanded: false,\r\n  card: false,\r\n  arrowType: {\r\n    default: 'right' as CollapseArrowType,\r\n    validator: (value: CollapseArrowType) => ['right', 'left', 'none'].includes(value),\r\n  },\r\n  icon: createIconProp(),\r\n  ghost: false,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:expanded'])\r\n\r\ndefineSlots<CollapsePanelSlots>()\r\n\r\nconst collapseState = inject(COLLAPSE_STATE, null)\r\n\r\nconst nh = useNameHelper('collapse')\r\nconst icons = useIcons()\r\nconst currentExpanded = ref(props.expanded)\r\nconst currentLabel = ref(props.label)\r\n\r\nconst tab = ref<HTMLElement>()\r\n\r\nconst id = getIndexId()\r\n\r\nconst tabId = computed(() => `${nh.be('tab')}-${id}`)\r\nconst bodyId = computed(() => `${nh.be('body')}-${id}`)\r\nconst useCard = computed(() => {\r\n  if (!collapseState) {\r\n    return props.card\r\n  }\r\n\r\n  return false\r\n})\r\nconst useGhost = computed(() => {\r\n  if (!collapseState) {\r\n    return props.ghost\r\n  }\r\n\r\n  return false\r\n})\r\nconst useArrowType = computed(() => {\r\n  if (collapseState) {\r\n    return collapseState.arrowType\r\n  }\r\n\r\n  return props.arrowType\r\n})\r\nconst className = computed(() => {\r\n  return [\r\n    nh.be('panel'),\r\n    nh.bs('vars'),\r\n    nh.bem('panel', `arrow-${useArrowType.value}`),\r\n    {\r\n      [nh.bem('panel', 'inherit')]: collapseState || props.inherit,\r\n      [nh.bem('panel', 'card')]: useCard.value,\r\n      [nh.bem('panel', 'ghost')]: !useCard.value && useGhost.value,\r\n      [nh.bem('panel', 'expanded')]: currentExpanded.value,\r\n      [nh.bem('panel', 'disabled')]: props.disabled,\r\n    },\r\n  ]\r\n})\r\n\r\nif (collapseState) {\r\n  const state: PanelState = reactive({\r\n    tab,\r\n    label: currentLabel,\r\n    expanded: currentExpanded,\r\n    setExpanded,\r\n  })\r\n\r\n  watch(\r\n    () => props.label,\r\n    value => {\r\n      const prevValue = currentLabel.value\r\n      currentLabel.value = value || value === 0 ? value : prevValue\r\n    },\r\n  )\r\n\r\n  collapseState.registerPanel(state)\r\n\r\n  onBeforeUnmount(() => {\r\n    collapseState.unregisterPanel(state)\r\n  })\r\n} else {\r\n  watch(\r\n    () => props.expanded,\r\n    value => {\r\n      currentExpanded.value = value\r\n    },\r\n  )\r\n}\r\n\r\nfunction setExpanded(expanded: boolean) {\r\n  currentExpanded.value = expanded\r\n\r\n  emit('update:expanded', expanded)\r\n  emitEvent(props.onToggle, expanded)\r\n}\r\n\r\nfunction handleToggle(expanded = !currentExpanded.value) {\r\n  if (props.disabled) return\r\n\r\n  if (collapseState) {\r\n    // 由父级进行管理\r\n    collapseState.expandPanel(currentLabel.value, expanded)\r\n  } else {\r\n    setExpanded(expanded)\r\n  }\r\n}\r\n\r\ndefineExpose({\r\n  currentExpanded,\r\n  tab,\r\n  tabId,\r\n  bodyId,\r\n  handleToggle,\r\n})\r\n</script>\r\n\r\n<template>\r\n  <section :class=\"className\">\r\n    <button\r\n      :id=\"tabId\"\r\n      ref=\"tab\"\r\n      :class=\"nh.be('header')\"\r\n      type=\"button\"\r\n      role=\"tab\"\r\n      :aria-expanded=\"currentExpanded\"\r\n      :aria-controls=\"bodyId\"\r\n      :aria-describedby=\"bodyId\"\r\n      @click=\"handleToggle()\"\r\n    >\r\n      <div :class=\"nh.be('arrow')\">\r\n        <slot name=\"arrow\" :expanded=\"currentExpanded\">\r\n          <Renderer :renderer=\"props.slots.arrow\" :data=\"{ expanded: currentExpanded }\">\r\n            <Icon v-bind=\"icons.angleRight\"></Icon>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n      <slot name=\"title\">\r\n        <div v-if=\"props.icon\" :class=\"nh.be('icon')\">\r\n          <Icon :icon=\"props.icon\"></Icon>\r\n        </div>\r\n        {{ props.title }}\r\n      </slot>\r\n    </button>\r\n    <CollapseTransition>\r\n      <div\r\n        v-if=\"currentExpanded\"\r\n        :id=\"bodyId\"\r\n        :class=\"nh.be('body')\"\r\n        role=\"tabpanel\"\r\n        tabindex=\"0\"\r\n        :aria-labelledby=\"tabId\"\r\n      >\r\n        <div :class=\"nh.be('content')\" :style=\"props.contentStyle\">\r\n          <slot></slot>\r\n        </div>\r\n      </div>\r\n    </CollapseTransition>\r\n  </section>\r\n</template>\r\n","<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"nh.be('palette')\"\r\n    tabindex=\"-1\"\r\n    role=\"group\"\r\n    :style=\"{\r\n      backgroundColor: `hsl(${hue}, 100%, 50%)`\r\n    }\"\r\n  >\r\n    <div :class=\"nh.be('saturation')\" role=\"none\"></div>\r\n    <div :class=\"nh.be('value')\" role=\"none\"></div>\r\n    <div\r\n      :class=\"nh.be('palette-handler')\"\r\n      :style=\"{\r\n        top: `${currentTop}%`,\r\n        left: `${currentLeft}%`\r\n      }\"\r\n    >\r\n      <div :class=\"nh.be('palette-pointer')\"></div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, watch } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\r\nimport { boundRange, toFixed } from '@vexip-ui/utils'\r\n\r\nexport default defineComponent({\r\n  name: 'ColorPalette',\r\n  props: {\r\n    hue: {\r\n      type: Number,\r\n      default: 0,\r\n      validator: (value: number) => {\r\n        return value >= 0 && value <= 360\r\n      },\r\n    },\r\n    value: {\r\n      type: Number,\r\n      default: 1,\r\n      validator: (value: number) => {\r\n        return value >= 0 && value <= 1\r\n      },\r\n    },\r\n    saturation: {\r\n      type: Number,\r\n      default: 0,\r\n      validator: (value: number) => {\r\n        return value >= 0 && value <= 1\r\n      },\r\n    },\r\n  },\r\n  emits: ['edit-start', 'edit-end', 'change'],\r\n  setup(props, { emit }) {\r\n    const currentTop = ref((1 - props.value) * 100)\r\n    const currentLeft = ref(props.saturation * 100)\r\n\r\n    let prevTop = currentTop.value\r\n    let prevLeft = currentLeft.value\r\n    let widthLimit: number\r\n    let heightLimit: number\r\n    let topStartAt: number\r\n    let leftStartAt: number\r\n\r\n    const { target: wrapper } = useModifier({\r\n      passive: false,\r\n      onKeyDown: (event, modifier) => {\r\n        if (modifier.up || modifier.down || modifier.left || modifier.right) {\r\n          event.preventDefault()\r\n\r\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\r\n          const sign = modifier.up || modifier.left ? -1 : 1\r\n          const delta = step * sign\r\n\r\n          if (modifier.up || modifier.down) {\r\n            currentTop.value += delta\r\n          } else {\r\n            currentLeft.value += delta\r\n          }\r\n\r\n          verifyPosition()\r\n          prevTop = currentTop.value\r\n          prevLeft = currentLeft.value\r\n          handleChange()\r\n        }\r\n      },\r\n    })\r\n\r\n    const { moving: editing } = useMoving({\r\n      target: wrapper,\r\n      onStart: (state, event) => {\r\n        if (!wrapper.value || event.button > 0) {\r\n          return false\r\n        }\r\n\r\n        const rect = wrapper.value.getBoundingClientRect()\r\n        const { top, left, width, height } = rect\r\n\r\n        widthLimit = width\r\n        heightLimit = height\r\n\r\n        currentTop.value = ((topStartAt = state.clientY - top) / height) * 100\r\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\r\n\r\n        verifyPosition()\r\n        emit('edit-start')\r\n\r\n        let changed = false\r\n\r\n        if (Math.abs(currentTop.value - prevTop) >= 0.01) {\r\n          prevTop = currentTop.value\r\n          changed = true\r\n        }\r\n\r\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\r\n          prevLeft = currentLeft.value\r\n          changed = true\r\n        }\r\n\r\n        changed && handleChange()\r\n      },\r\n      onMove: state => {\r\n        currentTop.value = ((topStartAt + state.deltaY) / heightLimit) * 100\r\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\r\n\r\n        verifyPosition()\r\n        handleChange()\r\n      },\r\n      onEnd: () => {\r\n        emit('edit-end')\r\n      },\r\n    })\r\n\r\n    watch(\r\n      () => props.value,\r\n      value => {\r\n        currentTop.value = (1 - value) * 100\r\n        verifyPosition()\r\n      },\r\n      { immediate: true },\r\n    )\r\n    watch(\r\n      () => props.saturation,\r\n      value => {\r\n        currentLeft.value = value * 100\r\n        verifyPosition()\r\n      },\r\n      { immediate: true },\r\n    )\r\n\r\n    function verifyPosition() {\r\n      currentTop.value = toFixed(boundRange(currentTop.value, 0, 100), 3)\r\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\r\n    }\r\n\r\n    function handleChange() {\r\n      emit('change', {\r\n        h: props.hue,\r\n        s: currentLeft.value / 100,\r\n        v: toFixed(1 - currentTop.value / 100, 3),\r\n      })\r\n    }\r\n\r\n    return {\r\n      nh: useNameHelper('color-picker'),\r\n      currentTop,\r\n      currentLeft,\r\n      editing,\r\n\r\n      wrapper,\r\n\r\n      // handleMouseDown\r\n    }\r\n  },\r\n})\r\n</script>\r\n","<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"nh.be('palette')\"\r\n    tabindex=\"-1\"\r\n    role=\"group\"\r\n    :style=\"{\r\n      backgroundColor: `hsl(${hue}, 100%, 50%)`\r\n    }\"\r\n  >\r\n    <div :class=\"nh.be('saturation')\" role=\"none\"></div>\r\n    <div :class=\"nh.be('value')\" role=\"none\"></div>\r\n    <div\r\n      :class=\"nh.be('palette-handler')\"\r\n      :style=\"{\r\n        top: `${currentTop}%`,\r\n        left: `${currentLeft}%`\r\n      }\"\r\n    >\r\n      <div :class=\"nh.be('palette-pointer')\"></div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, watch } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\r\nimport { boundRange, toFixed } from '@vexip-ui/utils'\r\n\r\nexport default defineComponent({\r\n  name: 'ColorPalette',\r\n  props: {\r\n    hue: {\r\n      type: Number,\r\n      default: 0,\r\n      validator: (value: number) => {\r\n        return value >= 0 && value <= 360\r\n      },\r\n    },\r\n    value: {\r\n      type: Number,\r\n      default: 1,\r\n      validator: (value: number) => {\r\n        return value >= 0 && value <= 1\r\n      },\r\n    },\r\n    saturation: {\r\n      type: Number,\r\n      default: 0,\r\n      validator: (value: number) => {\r\n        return value >= 0 && value <= 1\r\n      },\r\n    },\r\n  },\r\n  emits: ['edit-start', 'edit-end', 'change'],\r\n  setup(props, { emit }) {\r\n    const currentTop = ref((1 - props.value) * 100)\r\n    const currentLeft = ref(props.saturation * 100)\r\n\r\n    let prevTop = currentTop.value\r\n    let prevLeft = currentLeft.value\r\n    let widthLimit: number\r\n    let heightLimit: number\r\n    let topStartAt: number\r\n    let leftStartAt: number\r\n\r\n    const { target: wrapper } = useModifier({\r\n      passive: false,\r\n      onKeyDown: (event, modifier) => {\r\n        if (modifier.up || modifier.down || modifier.left || modifier.right) {\r\n          event.preventDefault()\r\n\r\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\r\n          const sign = modifier.up || modifier.left ? -1 : 1\r\n          const delta = step * sign\r\n\r\n          if (modifier.up || modifier.down) {\r\n            currentTop.value += delta\r\n          } else {\r\n            currentLeft.value += delta\r\n          }\r\n\r\n          verifyPosition()\r\n          prevTop = currentTop.value\r\n          prevLeft = currentLeft.value\r\n          handleChange()\r\n        }\r\n      },\r\n    })\r\n\r\n    const { moving: editing } = useMoving({\r\n      target: wrapper,\r\n      onStart: (state, event) => {\r\n        if (!wrapper.value || event.button > 0) {\r\n          return false\r\n        }\r\n\r\n        const rect = wrapper.value.getBoundingClientRect()\r\n        const { top, left, width, height } = rect\r\n\r\n        widthLimit = width\r\n        heightLimit = height\r\n\r\n        currentTop.value = ((topStartAt = state.clientY - top) / height) * 100\r\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\r\n\r\n        verifyPosition()\r\n        emit('edit-start')\r\n\r\n        let changed = false\r\n\r\n        if (Math.abs(currentTop.value - prevTop) >= 0.01) {\r\n          prevTop = currentTop.value\r\n          changed = true\r\n        }\r\n\r\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\r\n          prevLeft = currentLeft.value\r\n          changed = true\r\n        }\r\n\r\n        changed && handleChange()\r\n      },\r\n      onMove: state => {\r\n        currentTop.value = ((topStartAt + state.deltaY) / heightLimit) * 100\r\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\r\n\r\n        verifyPosition()\r\n        handleChange()\r\n      },\r\n      onEnd: () => {\r\n        emit('edit-end')\r\n      },\r\n    })\r\n\r\n    watch(\r\n      () => props.value,\r\n      value => {\r\n        currentTop.value = (1 - value) * 100\r\n        verifyPosition()\r\n      },\r\n      { immediate: true },\r\n    )\r\n    watch(\r\n      () => props.saturation,\r\n      value => {\r\n        currentLeft.value = value * 100\r\n        verifyPosition()\r\n      },\r\n      { immediate: true },\r\n    )\r\n\r\n    function verifyPosition() {\r\n      currentTop.value = toFixed(boundRange(currentTop.value, 0, 100), 3)\r\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\r\n    }\r\n\r\n    function handleChange() {\r\n      emit('change', {\r\n        h: props.hue,\r\n        s: currentLeft.value / 100,\r\n        v: toFixed(1 - currentTop.value / 100, 3),\r\n      })\r\n    }\r\n\r\n    return {\r\n      nh: useNameHelper('color-picker'),\r\n      currentTop,\r\n      currentLeft,\r\n      editing,\r\n\r\n      wrapper,\r\n\r\n      // handleMouseDown\r\n    }\r\n  },\r\n})\r\n</script>\r\n","<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"nh.be('hue')\"\r\n    tabindex=\"-1\"\r\n    role=\"group\"\r\n  >\r\n    <div :class=\"nh.be('hue-handler')\" :style=\"{ left: `${currentLeft}%` }\"></div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, watch } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\r\nimport { boundRange, toFixed } from '@vexip-ui/utils'\r\n\r\nexport default defineComponent({\r\n  name: 'ColorHue',\r\n  props: {\r\n    hue: {\r\n      type: Number,\r\n      default: 0,\r\n      validator: (value: number) => {\r\n        return value >= 0 && value <= 360\r\n      },\r\n    },\r\n  },\r\n  emits: ['edit-start', 'edit-end', 'change'],\r\n  setup(props, { emit }) {\r\n    const currentLeft = ref(props.hue * 100)\r\n\r\n    let prevLeft = currentLeft.value\r\n    let widthLimit: number\r\n    let leftStartAt: number\r\n\r\n    const { target: wrapper } = useModifier({\r\n      passive: false,\r\n      onKeyDown: (event, modifier) => {\r\n        if (modifier.left || modifier.right) {\r\n          event.preventDefault()\r\n\r\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\r\n          const delta = step * (modifier.left ? -1 : 1)\r\n\r\n          currentLeft.value += delta\r\n\r\n          verifyPosition()\r\n          prevLeft = currentLeft.value\r\n          handleChange()\r\n        }\r\n      },\r\n    })\r\n\r\n    const { moving: editing } = useMoving({\r\n      target: wrapper,\r\n      onStart: (state, event) => {\r\n        if (!wrapper.value || event.button > 0) {\r\n          return false\r\n        }\r\n\r\n        const rect = wrapper.value.getBoundingClientRect()\r\n        const { left, width } = rect\r\n\r\n        widthLimit = width\r\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\r\n\r\n        verifyPosition()\r\n        emit('edit-start')\r\n\r\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\r\n          prevLeft = currentLeft.value\r\n          handleChange()\r\n        }\r\n      },\r\n      onMove: state => {\r\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\r\n\r\n        verifyPosition()\r\n        handleChange()\r\n      },\r\n      onEnd: () => {\r\n        emit('edit-end')\r\n      },\r\n    })\r\n\r\n    watch(\r\n      () => props.hue,\r\n      value => {\r\n        currentLeft.value = (value / 360) * 100\r\n        verifyPosition()\r\n      },\r\n      { immediate: true },\r\n    )\r\n\r\n    function verifyPosition() {\r\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\r\n    }\r\n\r\n    function handleChange() {\r\n      emit('change', (currentLeft.value / 100) * 360)\r\n    }\r\n\r\n    return {\r\n      nh: useNameHelper('color-picker'),\r\n      currentLeft,\r\n      editing,\r\n\r\n      wrapper,\r\n    }\r\n  },\r\n})\r\n</script>\r\n","<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"nh.be('hue')\"\r\n    tabindex=\"-1\"\r\n    role=\"group\"\r\n  >\r\n    <div :class=\"nh.be('hue-handler')\" :style=\"{ left: `${currentLeft}%` }\"></div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, watch } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\r\nimport { boundRange, toFixed } from '@vexip-ui/utils'\r\n\r\nexport default defineComponent({\r\n  name: 'ColorHue',\r\n  props: {\r\n    hue: {\r\n      type: Number,\r\n      default: 0,\r\n      validator: (value: number) => {\r\n        return value >= 0 && value <= 360\r\n      },\r\n    },\r\n  },\r\n  emits: ['edit-start', 'edit-end', 'change'],\r\n  setup(props, { emit }) {\r\n    const currentLeft = ref(props.hue * 100)\r\n\r\n    let prevLeft = currentLeft.value\r\n    let widthLimit: number\r\n    let leftStartAt: number\r\n\r\n    const { target: wrapper } = useModifier({\r\n      passive: false,\r\n      onKeyDown: (event, modifier) => {\r\n        if (modifier.left || modifier.right) {\r\n          event.preventDefault()\r\n\r\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\r\n          const delta = step * (modifier.left ? -1 : 1)\r\n\r\n          currentLeft.value += delta\r\n\r\n          verifyPosition()\r\n          prevLeft = currentLeft.value\r\n          handleChange()\r\n        }\r\n      },\r\n    })\r\n\r\n    const { moving: editing } = useMoving({\r\n      target: wrapper,\r\n      onStart: (state, event) => {\r\n        if (!wrapper.value || event.button > 0) {\r\n          return false\r\n        }\r\n\r\n        const rect = wrapper.value.getBoundingClientRect()\r\n        const { left, width } = rect\r\n\r\n        widthLimit = width\r\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\r\n\r\n        verifyPosition()\r\n        emit('edit-start')\r\n\r\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\r\n          prevLeft = currentLeft.value\r\n          handleChange()\r\n        }\r\n      },\r\n      onMove: state => {\r\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\r\n\r\n        verifyPosition()\r\n        handleChange()\r\n      },\r\n      onEnd: () => {\r\n        emit('edit-end')\r\n      },\r\n    })\r\n\r\n    watch(\r\n      () => props.hue,\r\n      value => {\r\n        currentLeft.value = (value / 360) * 100\r\n        verifyPosition()\r\n      },\r\n      { immediate: true },\r\n    )\r\n\r\n    function verifyPosition() {\r\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\r\n    }\r\n\r\n    function handleChange() {\r\n      emit('change', (currentLeft.value / 100) * 360)\r\n    }\r\n\r\n    return {\r\n      nh: useNameHelper('color-picker'),\r\n      currentLeft,\r\n      editing,\r\n\r\n      wrapper,\r\n    }\r\n  },\r\n})\r\n</script>\r\n","<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"nh.be('alpha')\"\r\n    tabindex=\"-1\"\r\n    role=\"group\"\r\n  >\r\n    <div\r\n      :class=\"nh.be('opacity')\"\r\n      :style=\"{\r\n        backgroundImage: `linear-gradient(to right, rgba(${rgbString}, 0) 0%, rgb(${rgbString}) 100%)`\r\n      }\"\r\n    ></div>\r\n    <div :class=\"nh.be('alpha-handler')\" :style=\"{ left: `${currentLeft}%` }\"></div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, ref, watch } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\r\nimport { boundRange, toFixed } from '@vexip-ui/utils'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { RGBColor } from '@vexip-ui/utils'\r\n\r\nexport default defineComponent({\r\n  name: 'ColorAlpha',\r\n  props: {\r\n    rgb: {\r\n      type: Object as PropType<RGBColor>,\r\n      default: () => {\r\n        return { r: 0, g: 0, b: 0 }\r\n      },\r\n      validator: (value: RGBColor) => {\r\n        return 'r' in value && 'g' in value && 'b' in value\r\n      },\r\n    },\r\n    alpha: {\r\n      type: Number,\r\n      default: 1,\r\n      validator: (value: number) => {\r\n        return value >= 0 && value <= 1\r\n      },\r\n    },\r\n  },\r\n  emits: ['edit-start', 'edit-end', 'change'],\r\n  setup(props, { emit }) {\r\n    const currentLeft = ref(props.alpha * 100)\r\n\r\n    let prevLeft = currentLeft.value\r\n    let widthLimit: number\r\n    let leftStartAt: number\r\n\r\n    const { target: wrapper } = useModifier({\r\n      passive: false,\r\n      onKeyDown: (event, modifier) => {\r\n        if (modifier.left || modifier.right) {\r\n          event.preventDefault()\r\n\r\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\r\n          const delta = step * (modifier.left ? -1 : 1)\r\n\r\n          currentLeft.value += delta\r\n\r\n          verifyPosition()\r\n          prevLeft = currentLeft.value\r\n          handleChange()\r\n        }\r\n      },\r\n    })\r\n\r\n    const { moving: editing } = useMoving({\r\n      target: wrapper,\r\n      onStart: (state, event) => {\r\n        if (!wrapper.value || event.button > 0) {\r\n          return false\r\n        }\r\n\r\n        const rect = wrapper.value.getBoundingClientRect()\r\n        const { left, width } = rect\r\n\r\n        widthLimit = width\r\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\r\n\r\n        verifyPosition()\r\n        emit('edit-start')\r\n\r\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\r\n          prevLeft = currentLeft.value\r\n          handleChange()\r\n        }\r\n      },\r\n      onMove: state => {\r\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\r\n\r\n        verifyPosition()\r\n        handleChange()\r\n      },\r\n      onEnd: () => {\r\n        emit('edit-end')\r\n      },\r\n    })\r\n\r\n    const rgbString = computed(() => {\r\n      const { r, g, b } = props.rgb\r\n\r\n      return `${r}, ${g}, ${b}`\r\n    })\r\n\r\n    verifyPosition()\r\n\r\n    watch(\r\n      () => props.alpha,\r\n      value => {\r\n        currentLeft.value = value * 100\r\n        verifyPosition()\r\n      },\r\n      { immediate: true },\r\n    )\r\n\r\n    function verifyPosition() {\r\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\r\n    }\r\n\r\n    function handleChange() {\r\n      emit('change', currentLeft.value / 100)\r\n    }\r\n\r\n    return {\r\n      nh: useNameHelper('color-picker'),\r\n      currentLeft,\r\n      editing,\r\n\r\n      rgbString,\r\n\r\n      wrapper,\r\n    }\r\n  },\r\n})\r\n</script>\r\n","<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"nh.be('alpha')\"\r\n    tabindex=\"-1\"\r\n    role=\"group\"\r\n  >\r\n    <div\r\n      :class=\"nh.be('opacity')\"\r\n      :style=\"{\r\n        backgroundImage: `linear-gradient(to right, rgba(${rgbString}, 0) 0%, rgb(${rgbString}) 100%)`\r\n      }\"\r\n    ></div>\r\n    <div :class=\"nh.be('alpha-handler')\" :style=\"{ left: `${currentLeft}%` }\"></div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, ref, watch } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\r\nimport { boundRange, toFixed } from '@vexip-ui/utils'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { RGBColor } from '@vexip-ui/utils'\r\n\r\nexport default defineComponent({\r\n  name: 'ColorAlpha',\r\n  props: {\r\n    rgb: {\r\n      type: Object as PropType<RGBColor>,\r\n      default: () => {\r\n        return { r: 0, g: 0, b: 0 }\r\n      },\r\n      validator: (value: RGBColor) => {\r\n        return 'r' in value && 'g' in value && 'b' in value\r\n      },\r\n    },\r\n    alpha: {\r\n      type: Number,\r\n      default: 1,\r\n      validator: (value: number) => {\r\n        return value >= 0 && value <= 1\r\n      },\r\n    },\r\n  },\r\n  emits: ['edit-start', 'edit-end', 'change'],\r\n  setup(props, { emit }) {\r\n    const currentLeft = ref(props.alpha * 100)\r\n\r\n    let prevLeft = currentLeft.value\r\n    let widthLimit: number\r\n    let leftStartAt: number\r\n\r\n    const { target: wrapper } = useModifier({\r\n      passive: false,\r\n      onKeyDown: (event, modifier) => {\r\n        if (modifier.left || modifier.right) {\r\n          event.preventDefault()\r\n\r\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\r\n          const delta = step * (modifier.left ? -1 : 1)\r\n\r\n          currentLeft.value += delta\r\n\r\n          verifyPosition()\r\n          prevLeft = currentLeft.value\r\n          handleChange()\r\n        }\r\n      },\r\n    })\r\n\r\n    const { moving: editing } = useMoving({\r\n      target: wrapper,\r\n      onStart: (state, event) => {\r\n        if (!wrapper.value || event.button > 0) {\r\n          return false\r\n        }\r\n\r\n        const rect = wrapper.value.getBoundingClientRect()\r\n        const { left, width } = rect\r\n\r\n        widthLimit = width\r\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\r\n\r\n        verifyPosition()\r\n        emit('edit-start')\r\n\r\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\r\n          prevLeft = currentLeft.value\r\n          handleChange()\r\n        }\r\n      },\r\n      onMove: state => {\r\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\r\n\r\n        verifyPosition()\r\n        handleChange()\r\n      },\r\n      onEnd: () => {\r\n        emit('edit-end')\r\n      },\r\n    })\r\n\r\n    const rgbString = computed(() => {\r\n      const { r, g, b } = props.rgb\r\n\r\n      return `${r}, ${g}, ${b}`\r\n    })\r\n\r\n    verifyPosition()\r\n\r\n    watch(\r\n      () => props.alpha,\r\n      value => {\r\n        currentLeft.value = value * 100\r\n        verifyPosition()\r\n      },\r\n      { immediate: true },\r\n    )\r\n\r\n    function verifyPosition() {\r\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\r\n    }\r\n\r\n    function handleChange() {\r\n      emit('change', currentLeft.value / 100)\r\n    }\r\n\r\n    return {\r\n      nh: useNameHelper('color-picker'),\r\n      currentLeft,\r\n      editing,\r\n\r\n      rgbString,\r\n\r\n      wrapper,\r\n    }\r\n  },\r\n})\r\n</script>\r\n","import {\r\n  booleanProp,\r\n  booleanStringProp,\r\n  buildProps,\r\n  eventProp,\r\n  iconProp,\r\n  localeProp,\r\n  sizeProp,\r\n  stateProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { Placement } from '@vexip-ui/hooks'\r\nimport type { Color, HSLAColor, HSVAColor, RGBAColor } from '@vexip-ui/utils'\r\nimport type { ColorFormat, ColorPrickerSlots } from './symbol'\r\n\r\ntype FormattedColor = string | RGBAColor | HSLAColor | HSVAColor\r\n\r\nexport const colorPickerProps = buildProps({\r\n  size: sizeProp,\r\n  state: stateProp,\r\n  locale: localeProp('colorPicker'),\r\n  value: [String, Object] as PropType<Color | null>,\r\n  visible: booleanProp,\r\n  format: String as PropType<ColorFormat>,\r\n  alpha: booleanProp,\r\n  disabled: booleanProp,\r\n  transitionName: String,\r\n  noInput: booleanProp,\r\n  shortcut: {\r\n    type: [Boolean, Array] as PropType<boolean | string[]>,\r\n    default: null,\r\n  },\r\n  placement: String as PropType<Placement>,\r\n  transfer: booleanStringProp,\r\n  outsideClose: booleanProp,\r\n  clearable: booleanProp,\r\n  cancelText: String,\r\n  confirmText: String,\r\n  prefix: iconProp,\r\n  prefixColor: String,\r\n  suffix: iconProp,\r\n  suffixColor: String,\r\n  noSuffix: booleanProp,\r\n  staticSuffix: booleanProp,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingLock: booleanProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  popperAlive: booleanProp,\r\n  showLabel: booleanProp,\r\n  labelFormat: String as PropType<ColorFormat>,\r\n  slots: Object as PropType<ColorPrickerSlots>,\r\n  onToggle: eventProp<(visible: boolean) => void>(),\r\n  onClickOutside: eventProp(),\r\n  onOutsideClose: eventProp(),\r\n  onClear: eventProp(),\r\n  onChange: eventProp<(color: FormattedColor) => void>(),\r\n  onShortcut: eventProp<(color: FormattedColor) => void>(),\r\n})\r\n\r\nexport type ColorPickerProps = ExtractPropTypes<typeof colorPickerProps>\r\nexport type ColorPickerCProps = ConfigurableProps<ColorPickerProps>\r\n","import { rgbToHsv } from '@vexip-ui/utils'\r\n\r\nimport type { RGBColor } from '@vexip-ui/utils'\r\n\r\nexport type ColorFormat = 'rgb' | 'hsl' | 'hsv' | 'hex'\r\n\r\nexport interface ColorPrickerSlots {\r\n  control?: (params: { color: RGBColor, alpha: number, empty: boolean }) => any,\r\n  prefix?: () => any,\r\n  suffix?: () => any,\r\n  label?: (params: { color: RGBColor, alpha: number, empty: boolean, label: string }) => any,\r\n}\r\n\r\nexport const defaultShortcuts = Object.freeze([\r\n  '#2d8cf0',\r\n  '#19be6b',\r\n  '#ff9900',\r\n  '#ed4014',\r\n  '#00b5ff',\r\n  '#19c919',\r\n  '#f9e31c',\r\n  '#ea1a1a',\r\n  '#9b1dea',\r\n  '#00c2b1',\r\n  '#ac7a33',\r\n  '#1d35ea',\r\n  '#8bc34a',\r\n  '#f16b62',\r\n  '#ea4ca3',\r\n  '#0d94aa',\r\n  '#febd79',\r\n  '#5d4037',\r\n  '#00bcd4',\r\n  '#f06292',\r\n  '#cddc39',\r\n  '#607d8b',\r\n  '#000000',\r\n  '#ffffff',\r\n])\r\n\r\nexport const getDefaultHsv = () => rgbToHsv(0, 0, 0)\r\n","<script setup lang=\"ts\">\r\nimport { Button } from '@/components/button'\r\nimport { Icon } from '@/components/icon'\r\nimport { Input } from '@/components/input'\r\nimport { Popper } from '@/components/popper'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { useFieldStore } from '@/components/form'\r\n\r\nimport { computed, nextTick, ref, toRef, watch } from 'vue'\r\n\r\nimport ColorPalette from './color-palette.vue'\r\nimport ColorHue from './color-hue.vue'\r\nimport ColorAlpha from './color-alpha.vue'\r\nimport { placementWhileList, useClickOutside, useHover, usePopper } from '@vexip-ui/hooks'\r\nimport {\r\n  createIconProp,\r\n  createSizeProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport {\r\n  getLast,\r\n  hsvToHsl,\r\n  hsvToRgb,\r\n  isClient,\r\n  isElement,\r\n  parseColorToRgba,\r\n  rgbToHex,\r\n  rgbToHsv,\r\n  rgbaToHex,\r\n  toAttrValue,\r\n  toFixed,\r\n} from '@vexip-ui/utils'\r\nimport { colorPickerProps } from './props'\r\nimport { defaultShortcuts, getDefaultHsv } from './symbol'\r\n\r\nimport type { PopperExposed } from '@/components/popper'\r\nimport type { Color, HSLAColor, HSVAColor, HSVColor, RGBAColor } from '@vexip-ui/utils'\r\nimport type { ColorFormat, ColorPrickerSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'ColorPicker' })\r\n\r\nconst {\r\n  idFor,\r\n  labelId,\r\n  state,\r\n  disabled,\r\n  loading,\r\n  size,\r\n  validateField,\r\n  clearField,\r\n  getFieldValue,\r\n  setFieldValue,\r\n} = useFieldStore<Color | null>(() => reference.value?.focus())\r\n\r\nconst nh = useNameHelper('color-picker')\r\n\r\nconst _props = defineProps(colorPickerProps)\r\nconst props = useProps('colorPicker', _props, {\r\n  size: createSizeProp(size),\r\n  state: createStateProp(state),\r\n  locale: null,\r\n  value: {\r\n    default: () => getFieldValue()!,\r\n    static: true,\r\n  },\r\n  visible: false,\r\n  format: {\r\n    default: 'rgb',\r\n    validator: value => ['rgb', 'hsl', 'hsv', 'hex'].includes(value),\r\n  },\r\n  alpha: false,\r\n  disabled: () => disabled.value,\r\n  transitionName: () => nh.ns('drop'),\r\n  noInput: false,\r\n  shortcut: false,\r\n  placement: {\r\n    default: 'bottom',\r\n    validator: value => placementWhileList.includes(value),\r\n  },\r\n  transfer: false,\r\n  outsideClose: true,\r\n  clearable: false,\r\n  cancelText: null,\r\n  confirmText: null,\r\n  prefix: createIconProp(),\r\n  prefixColor: '',\r\n  suffix: createIconProp(),\r\n  suffixColor: '',\r\n  noSuffix: false,\r\n  staticSuffix: false,\r\n  loading: () => loading.value,\r\n  loadingIcon: createIconProp(),\r\n  loadingLock: false,\r\n  loadingEffect: null,\r\n  popperAlive: null,\r\n  showLabel: false,\r\n  labelFormat: null,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:value', 'update:visible'])\r\n\r\nconst slots = defineSlots<ColorPrickerSlots>()\r\n\r\nconst icons = useIcons()\r\nconst locale = useLocale('colorPicker', toRef(props, 'locale'))\r\n\r\nconst isEmpty = ref(true)\r\nconst currentVisible = ref(props.visible)\r\nconst currentValue = ref<HSVColor>(null!)\r\nconst currentAlpha = ref(1)\r\nconst editing = ref(false)\r\nconst placement = toRef(props, 'placement')\r\nconst transfer = toRef(props, 'transfer')\r\nconst shortcutHitting = ref(0)\r\nconst shortcutsFocused = ref(false)\r\n\r\nparseValue(props.value)\r\n\r\nconst palette = ref(null)\r\nconst hue = ref(null)\r\nconst alphaEl = ref(null)\r\nconst shortcutEl = ref(null)\r\nconst input = ref(null)\r\nconst cancel = ref(null)\r\nconst confirm = ref(null)\r\n\r\nconst wrapper = useClickOutside(handleClickOutside)\r\nconst popper = ref<PopperExposed>()\r\nconst { reference, transferTo, updatePopper } = usePopper({\r\n  placement,\r\n  transfer,\r\n  wrapper,\r\n  popper: computed(() => popper.value?.wrapper),\r\n  isDrop: true,\r\n})\r\nconst { isHover } = useHover(reference)\r\n\r\nconst unitList = computed(() => {\r\n  return [\r\n    palette.value,\r\n    hue.value,\r\n    alphaEl.value,\r\n    shortcutEl.value,\r\n    input.value,\r\n    cancel.value,\r\n    confirm.value,\r\n  ].filter(Boolean) as any[]\r\n})\r\n\r\nconst lastValue = ref<HSVAColor>({\r\n  ...currentValue.value,\r\n  a: currentAlpha.value,\r\n  format: 'hsva',\r\n})\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.ns('input-vars')]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm('empty')]: isEmpty.value && !currentVisible.value,\r\n    [nh.bm('focused')]: currentVisible.value,\r\n    [nh.bm('disabled')]: props.disabled,\r\n    [nh.bm('alpha')]: props.alpha,\r\n    [nh.bm(props.size)]: props.size !== 'default',\r\n    [nh.bm(props.state)]: props.state !== 'default',\r\n  }\r\n})\r\nconst readonly = computed(() => props.loading && props.loadingLock)\r\nconst selectorClass = computed(() => {\r\n  const baseCls = nh.be('selector')\r\n\r\n  return {\r\n    [baseCls]: true,\r\n    [`${baseCls}--disabled`]: props.disabled,\r\n    [`${baseCls}--readonly`]: readonly.value,\r\n    [`${baseCls}--loading`]: props.loading,\r\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\r\n    [`${baseCls}--focused`]: currentVisible.value,\r\n    [`${baseCls}--${props.state}`]: props.state !== 'default',\r\n  }\r\n})\r\nconst rgb = computed(() => {\r\n  const { h, s, v } =\r\n    currentValue.value && currentVisible.value\r\n      ? currentValue.value\r\n      : (lastValue.value ?? { h: 0, s: 0, v: 0 })\r\n\r\n  return hsvToRgb(h, s, v)\r\n})\r\nconst hex = computed(() => {\r\n  const { r, g, b } = rgb.value\r\n\r\n  if (props.alpha) {\r\n    return rgbaToHex(r, g, b, currentAlpha.value)\r\n  }\r\n\r\n  return rgbToHex(r, g, b)\r\n})\r\nconst shortcutList = computed(() => {\r\n  if (!props.shortcut) return []\r\n\r\n  if (Array.isArray(props.shortcut)) {\r\n    return props.shortcut\r\n  }\r\n\r\n  return defaultShortcuts\r\n})\r\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\r\nconst showClear = computed(() => {\r\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && !isEmpty.value\r\n})\r\nconst formattedColor = computed(() => getFormattedColor(props.format))\r\nconst labelColor = computed(() => {\r\n  return (\r\n    props.labelFormat ? getFormattedColor(props.labelFormat) : formattedColor.value\r\n  )?.toString()\r\n})\r\n\r\nwatch(\r\n  () => props.visible,\r\n  value => {\r\n    currentVisible.value = value\r\n  },\r\n)\r\nwatch(currentVisible, value => {\r\n  value && updatePopper()\r\n})\r\nwatch(\r\n  () => props.value,\r\n  value => {\r\n    parseValue(value)\r\n    lastValue.value = { ...currentValue.value, a: currentAlpha.value, format: 'hsva' }\r\n  },\r\n)\r\nwatch(\r\n  () => props.disabled,\r\n  value => {\r\n    if (value) {\r\n      setVisible(false)\r\n    }\r\n  },\r\n)\r\n\r\ndefineExpose({\r\n  idFor,\r\n  isEmpty,\r\n  currentVisible,\r\n  currentValue,\r\n  currentAlpha,\r\n  rgb,\r\n  hex,\r\n  labelColor,\r\n  wrapper,\r\n  reference,\r\n  popper,\r\n  toggleVisible,\r\n  focus,\r\n  blur,\r\n})\r\n\r\nfunction parseValue(value: Color | null) {\r\n  if (value) {\r\n    const { r, g, b, a } = parseColorToRgba(value)\r\n\r\n    isEmpty.value = false\r\n    currentValue.value = rgbToHsv(r, g, b)\r\n    currentAlpha.value = a\r\n  } else {\r\n    isEmpty.value = true\r\n    currentValue.value = getDefaultHsv()\r\n    currentAlpha.value = 1\r\n  }\r\n}\r\n\r\nfunction setVisible(visible: boolean) {\r\n  if (currentVisible.value === visible) return\r\n\r\n  currentVisible.value = visible\r\n\r\n  emit('update:visible', visible)\r\n  emitEvent(props.onToggle, visible)\r\n}\r\n\r\nfunction getFormattedColor(format: ColorFormat) {\r\n  let color: Color\r\n\r\n  if (format === 'hex') {\r\n    const { r, g, b } = rgb.value\r\n\r\n    if (props.alpha) {\r\n      color = rgbaToHex(r, g, b, currentAlpha.value)\r\n    } else {\r\n      color = rgbToHex(r, g, b)\r\n    }\r\n  } else {\r\n    switch (format) {\r\n      case 'rgb': {\r\n        color = { ...rgb.value } as RGBAColor\r\n        color.r = Math.round(color.r)\r\n        color.g = Math.round(color.g)\r\n        color.b = Math.round(color.b)\r\n\r\n        break\r\n      }\r\n      case 'hsl': {\r\n        const { h, s, v } = currentValue.value\r\n\r\n        color = hsvToHsl(h, s, v) as HSLAColor\r\n        color.h = Math.round(color.h)\r\n        color.s = toFixed(color.s, 3)\r\n        color.l = toFixed(color.l, 3)\r\n\r\n        break\r\n      }\r\n      default: {\r\n        color = { ...currentValue.value } as HSVAColor\r\n        color.h = Math.round(color.h)\r\n        color.s = toFixed(color.s, 3)\r\n        color.v = toFixed(color.v, 3)\r\n      }\r\n    }\r\n\r\n    color.a = toFixed(currentAlpha.value, 3)\r\n  }\r\n\r\n  return color\r\n}\r\n\r\nfunction handleClickOutside() {\r\n  if (!editing.value) {\r\n    emitEvent(props.onClickOutside)\r\n\r\n    if (props.outsideClose && currentVisible.value) {\r\n      setVisible(false)\r\n      emitEvent(props.onOutsideClose)\r\n    }\r\n  }\r\n}\r\n\r\nfunction toggleVisible() {\r\n  if (props.disabled || readonly.value) return\r\n\r\n  setVisible(!currentVisible.value)\r\n}\r\n\r\nfunction handleClear() {\r\n  if (props.disabled || readonly.value) return\r\n\r\n  if (props.clearable) {\r\n    setVisible(false)\r\n    emit('update:value', '')\r\n    emitEvent(props.onChange, '')\r\n\r\n    nextTick(() => {\r\n      parseValue(null)\r\n      clearField()\r\n      emitEvent(props.onClear)\r\n    })\r\n  }\r\n}\r\n\r\nfunction handleConfirm() {\r\n  if (props.disabled || readonly.value) return\r\n\r\n  lastValue.value = { ...currentValue.value, a: currentAlpha.value, format: 'hsva' }\r\n  isEmpty.value = false\r\n  setVisible(false)\r\n  handleChange()\r\n}\r\n\r\nfunction handleChange() {\r\n  const color = formattedColor.value\r\n\r\n  emit('update:value', color)\r\n  setFieldValue(color)\r\n  emitEvent(props.onChange, color)\r\n  validateField()\r\n}\r\n\r\nfunction handlePaletteChange({ s, v }: HSVColor) {\r\n  currentValue.value.s = s\r\n  currentValue.value.v = v\r\n}\r\n\r\nfunction handleHueChange(hue: number) {\r\n  currentValue.value.h = hue\r\n}\r\n\r\nfunction handleAlphaChange(alpha: number) {\r\n  currentAlpha.value = alpha\r\n}\r\n\r\nfunction handleInputColor(value: string) {\r\n  const { r, g, b, a } = parseColorToRgba(value)\r\n\r\n  currentValue.value = rgbToHsv(r, g, b)\r\n  currentAlpha.value = a\r\n}\r\n\r\nfunction handleShortcutClick(color: string) {\r\n  const { r, g, b, a } = parseColorToRgba(color)\r\n\r\n  currentValue.value = rgbToHsv(r, g, b)\r\n  currentAlpha.value = a\r\n\r\n  emitEvent(props.onShortcut, formattedColor.value)\r\n}\r\n\r\nfunction toggleEditing(able: boolean) {\r\n  if (!able) {\r\n    setTimeout(() => {\r\n      editing.value = false\r\n    }, 0)\r\n  } else {\r\n    editing.value = true\r\n  }\r\n}\r\n\r\nfunction handleTabDown(event: KeyboardEvent) {\r\n  if (isClient && currentVisible.value) {\r\n    const activeEl = document && document.activeElement\r\n\r\n    if (!activeEl) return\r\n\r\n    event.preventDefault()\r\n\r\n    const shift = event.shiftKey\r\n    const elList = Array.from(unitList.value)\r\n    const index = elList.findIndex(unit => {\r\n      const el = isElement(unit) ? unit : unit.$el\r\n\r\n      return el === activeEl || el.contains(activeEl)\r\n    })\r\n\r\n    let maybeEl: any\r\n\r\n    if (!~index) {\r\n      maybeEl = shift ? getLast(elList) : elList[0]\r\n    } else if (shift ? !index : index === elList.length - 1) {\r\n      maybeEl = reference.value\r\n    } else {\r\n      maybeEl = elList[index + (shift ? -1 : 1)]\r\n    }\r\n\r\n    if (maybeEl) {\r\n      if (typeof maybeEl.focus === 'function') {\r\n        maybeEl.focus()\r\n      } else {\r\n        maybeEl.$el?.focus()\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nfunction handleShortcutsFocus() {\r\n  shortcutHitting.value = 0\r\n  shortcutsFocused.value = true\r\n}\r\n\r\nfunction handleShortcutsKeydown(event: KeyboardEvent) {\r\n  const key = event.code || event.key\r\n  const shortcutCount = shortcutList.value.length\r\n\r\n  switch (key) {\r\n    case 'ArrowUp':\r\n    case 'ArrowLeft': {\r\n      shortcutHitting.value--\r\n      break\r\n    }\r\n    case 'ArrowDown':\r\n    case 'ArrowRight': {\r\n      shortcutHitting.value++\r\n      break\r\n    }\r\n    case 'Enter':\r\n    case 'Space':\r\n    case ' ': {\r\n      const color = shortcutList.value[shortcutHitting.value]\r\n\r\n      color && handleShortcutClick(color)\r\n      break\r\n    }\r\n  }\r\n\r\n  shortcutHitting.value = (shortcutHitting.value + shortcutCount) % shortcutCount\r\n}\r\n\r\nfunction handleSpaceDown(event: KeyboardEvent) {\r\n  if (props.disabled) {\r\n    setVisible(false)\r\n  } else {\r\n    event.preventDefault()\r\n\r\n    if (currentVisible.value) {\r\n      handleConfirm()\r\n      reference.value?.focus()\r\n    } else {\r\n      setVisible(true)\r\n    }\r\n  }\r\n}\r\n\r\nfunction handleEscDown() {\r\n  setVisible(false)\r\n  reference.value?.focus()\r\n}\r\n\r\nfunction focus(options?: FocusOptions) {\r\n  reference.value?.focus(options)\r\n}\r\n\r\nfunction blur() {\r\n  reference.value?.blur()\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :id=\"idFor\"\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"group\"\r\n    :aria-disabled=\"toAttrValue(props.disabled)\"\r\n    :aria-expanded=\"toAttrValue(currentVisible)\"\r\n    aria-haspopup=\"listbox\"\r\n    :aria-labelledby=\"labelId\"\r\n    @click=\"toggleVisible\"\r\n    @keydown.tab.stop=\"handleTabDown\"\r\n    @keydown.space=\"handleSpaceDown\"\r\n    @keydown.escape=\"handleEscDown\"\r\n  >\r\n    <div ref=\"reference\" :class=\"selectorClass\" tabindex=\"0\">\r\n      <slot\r\n        name=\"control\"\r\n        :color=\"rgb\"\r\n        :alpha=\"currentAlpha\"\r\n        :empty=\"isEmpty\"\r\n      >\r\n        <Renderer\r\n          :renderer=\"props.slots.control\"\r\n          :data=\"{ color: rgb, alpha: currentAlpha, empty: isEmpty }\"\r\n        >\r\n          <div\r\n            v-if=\"hasPrefix\"\r\n            :class=\"[nh.be('icon'), nh.be('prefix')]\"\r\n            :style=\"{ color: props.prefixColor }\"\r\n          >\r\n            <slot name=\"prefix\">\r\n              <Renderer :renderer=\"props.slots.prefix\">\r\n                <Icon :icon=\"props.prefix\"></Icon>\r\n              </Renderer>\r\n            </slot>\r\n          </div>\r\n          <div :class=\"nh.be('control')\">\r\n            <div :class=\"[nh.be('marker'), showLabel && nh.bem('marker', 'with-label')]\">\r\n              <Icon v-if=\"!currentVisible && isEmpty\" v-bind=\"icons.close\"></Icon>\r\n              <div\r\n                v-else\r\n                :style=\"{\r\n                  width: '100%',\r\n                  height: '100%',\r\n                  backgroundColor: `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${\r\n                    currentVisible ? currentAlpha : lastValue.a\r\n                  })`\r\n                }\"\r\n              ></div>\r\n            </div>\r\n            <div v-if=\"showLabel\" :class=\"nh.be('label')\">\r\n              <slot\r\n                name=\"label\"\r\n                :color=\"rgb\"\r\n                :alpha=\"currentAlpha\"\r\n                :empty=\"isEmpty\"\r\n                :label=\"labelColor\"\r\n              >\r\n                <Renderer\r\n                  :renderer=\"props.slots.label\"\r\n                  :data=\"{ color: rgb, alpha: currentAlpha, empty: isEmpty, label: labelColor }\"\r\n                >\r\n                  {{ labelColor }}\r\n                </Renderer>\r\n              </slot>\r\n            </div>\r\n          </div>\r\n          <div\r\n            v-if=\"!props.noSuffix\"\r\n            :class=\"[nh.be('icon'), nh.be('suffix')]\"\r\n            :style=\"{\r\n              color: props.suffixColor,\r\n              opacity: showClear || props.loading ? '0%' : ''\r\n            }\"\r\n          >\r\n            <slot name=\"suffix\">\r\n              <Renderer :renderer=\"props.slots.suffix\">\r\n                <Icon\r\n                  v-if=\"props.suffix\"\r\n                  :icon=\"props.suffix\"\r\n                  :class=\"{\r\n                    [nh.be('arrow')]: !props.staticSuffix\r\n                  }\"\r\n                ></Icon>\r\n                <Icon v-else v-bind=\"icons.angleDown\" :class=\"nh.be('arrow')\"></Icon>\r\n              </Renderer>\r\n            </slot>\r\n          </div>\r\n          <div\r\n            v-else-if=\"props.clearable || props.loading\"\r\n            :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\r\n          ></div>\r\n          <Transition :name=\"nh.ns('fade')\" appear>\r\n            <button\r\n              v-if=\"showClear\"\r\n              :class=\"[nh.be('icon'), nh.be('clear')]\"\r\n              type=\"button\"\r\n              tabindex=\"-1\"\r\n              :aria-label=\"locale.ariaLabel.clear\"\r\n              @click.stop=\"handleClear\"\r\n            >\r\n              <Icon v-bind=\"icons.clear\"></Icon>\r\n            </button>\r\n            <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\r\n              <Icon\r\n                v-bind=\"icons.loading\"\r\n                :effect=\"props.loadingEffect || icons.loading.effect\"\r\n                :icon=\"props.loadingIcon || icons.loading.icon\"\r\n              ></Icon>\r\n            </div>\r\n          </Transition>\r\n        </Renderer>\r\n      </slot>\r\n    </div>\r\n    <Popper\r\n      ref=\"popper\"\r\n      :class=\"[nh.be('popper'), nh.bs('vars')]\"\r\n      :visible=\"currentVisible\"\r\n      :to=\"transferTo\"\r\n      :transition=\"props.transitionName\"\r\n      :alive=\"props.popperAlive ?? !transferTo\"\r\n      @click.stop\r\n      @keydown.tab.stop=\"handleTabDown\"\r\n      @keydown.space=\"handleSpaceDown\"\r\n      @keydown.escape=\"handleEscDown\"\r\n    >\r\n      <div :class=\"nh.be('panel')\">\r\n        <div :class=\"nh.be('section')\">\r\n          <ColorPalette\r\n            ref=\"palette\"\r\n            :hue=\"currentValue.h\"\r\n            :saturation=\"currentValue.s\"\r\n            :value=\"currentValue.v\"\r\n            @edit-start=\"toggleEditing(true)\"\r\n            @edit-end=\"toggleEditing(false)\"\r\n            @change=\"handlePaletteChange\"\r\n          ></ColorPalette>\r\n          <ColorHue\r\n            ref=\"hue\"\r\n            :hue=\"currentValue.h\"\r\n            @edit-start=\"toggleEditing(true)\"\r\n            @edit-end=\"toggleEditing(false)\"\r\n            @change=\"handleHueChange\"\r\n          ></ColorHue>\r\n          <ColorAlpha\r\n            v-if=\"props.alpha\"\r\n            ref=\"alphaEl\"\r\n            :rgb=\"rgb\"\r\n            :alpha=\"currentAlpha\"\r\n            @edit-start=\"toggleEditing(true)\"\r\n            @edit-end=\"toggleEditing(false)\"\r\n            @change=\"handleAlphaChange\"\r\n          ></ColorAlpha>\r\n          <div\r\n            v-if=\"props.shortcut\"\r\n            ref=\"shortcutEl\"\r\n            :class=\"nh.be('shortcuts')\"\r\n            tabindex=\"-1\"\r\n            @focus=\"handleShortcutsFocus\"\r\n            @blur=\"shortcutsFocused = false\"\r\n            @keydown=\"handleShortcutsKeydown\"\r\n          >\r\n            <div\r\n              v-for=\"(item, index) in shortcutList\"\r\n              :key=\"index\"\r\n              :class=\"{\r\n                [nh.be('shortcut-item')]: true,\r\n                [nh.bem('shortcut-item', 'hitting')]: shortcutsFocused && shortcutHitting === index\r\n              }\"\r\n              :style=\"{ backgroundColor: item }\"\r\n              @click=\"handleShortcutClick(item)\"\r\n            ></div>\r\n          </div>\r\n        </div>\r\n        <div :class=\"nh.be('action')\">\r\n          <Input\r\n            v-if=\"!props.noInput\"\r\n            ref=\"input\"\r\n            inherit\r\n            :class=\"nh.be('input')\"\r\n            size=\"small\"\r\n            :value=\"hex.toUpperCase()\"\r\n            :respond=\"false\"\r\n            @change=\"handleInputColor\"\r\n          ></Input>\r\n          <Button\r\n            v-if=\"props.clearable\"\r\n            ref=\"cancel\"\r\n            inherit\r\n            text\r\n            size=\"small\"\r\n            @click=\"handleClear\"\r\n          >\r\n            {{ props.cancelText || locale.cancel }}\r\n          </Button>\r\n          <Button\r\n            ref=\"confirm\"\r\n            inherit\r\n            type=\"primary\"\r\n            size=\"small\"\r\n            @click=\"handleConfirm\"\r\n          >\r\n            {{ props.confirmText || locale.confirm }}\r\n          </Button>\r\n        </div>\r\n      </div>\r\n    </Popper>\r\n  </div>\r\n</template>\r\n","import { wrapProps } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconsOptions, LocaleOptions } from '@vexip-ui/config'\r\nimport type { PropsOptions } from '@/components/props'\r\n\r\nexport const configProviderProps = wrapProps({\r\n  props: {\r\n    type: Object as PropType<PropsOptions>,\r\n    default: () => ({}),\r\n  },\r\n  locale: {\r\n    type: Object as PropType<LocaleOptions>,\r\n    default: () => ({}),\r\n  },\r\n  icons: {\r\n    type: Object as PropType<IconsOptions>,\r\n    default: () => ({}),\r\n  },\r\n  zIndex: {\r\n    type: Number,\r\n    default: null,\r\n  },\r\n  theme: {\r\n    type: String as PropType<'base' | 'dark' | (string & {})>,\r\n    default: null,\r\n  },\r\n  hoverDelay: {\r\n    type: Number,\r\n    default: null,\r\n  },\r\n})\r\n\r\nexport type ConfigProviderProps = ExtractPropTypes<typeof configProviderProps>\r\n","import { defineComponent, renderSlot, toRefs } from 'vue'\r\n\r\nimport {\r\n  configHoverDelay,\r\n  configIcons,\r\n  configLocale,\r\n  configProps,\r\n  configZIndex,\r\n  useNameHelper,\r\n} from '@vexip-ui/config'\r\nimport { configProviderProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'ConfigProvider',\r\n  props: configProviderProps,\r\n  setup(_props, { slots }) {\r\n    const { props, locale, icons, zIndex, theme, hoverDelay } = toRefs(_props)\r\n\r\n    const nh = useNameHelper('config-provider')\r\n\r\n    configProps(props)\r\n    configLocale(locale)\r\n    configIcons(icons)\r\n    configZIndex(zIndex)\r\n    configHoverDelay(hoverDelay)\r\n\r\n    return () => {\r\n      if (theme.value) {\r\n        return (\r\n          <section class={[nh.b(), nh.ns(`theme-vars-${theme.value}`)]}>\r\n            {renderSlot(slots, 'default')}\r\n          </section>\r\n        )\r\n      }\r\n\r\n      return renderSlot(slots, 'default')\r\n    }\r\n  },\r\n})\r\n","import { booleanProp, booleanStringProp, buildProps, eventProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\n\r\nexport const maskerProps = buildProps({\r\n  active: booleanProp,\r\n  closable: booleanProp,\r\n  inner: booleanProp,\r\n  maskTransition: String,\r\n  transitionName: String,\r\n  disabled: booleanProp,\r\n  onBeforeClose: Function as PropType<() => any | Promise<any>>,\r\n  transfer: booleanStringProp,\r\n  autoRemove: booleanProp,\r\n  permeable: booleanProp,\r\n  disableEsc: booleanProp,\r\n  onToggle: eventProp<(active: boolean) => void>(),\r\n  onClose: eventProp(),\r\n  onHide: eventProp(),\r\n  onShow: eventProp(),\r\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>(),\r\n  onMaskClick: eventProp<(event: MouseEvent) => void>(),\r\n})\r\n\r\nexport type MaskerProps = ExtractPropTypes<typeof maskerProps>\r\nexport type MaskerCProps = ConfigurableProps<MaskerProps, never, 'onBeforeClose'>\r\n","<script setup lang=\"ts\">\r\nimport { Portal } from '@/components/portal'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport { computed, nextTick, ref, watch } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\r\nimport { getLast, isPromise, queryTabables } from '@vexip-ui/utils'\r\nimport { maskerProps } from './props'\r\n\r\ndefineOptions({ name: 'Masker' })\r\n\r\nconst nh = useNameHelper('masker')\r\nconst _props = defineProps(maskerProps)\r\nconst props = useProps('masker', _props, {\r\n  active: {\r\n    default: false,\r\n    static: true,\r\n  },\r\n  closable: false,\r\n  inner: false,\r\n  maskTransition: () => nh.ns('fade'),\r\n  transitionName: () => nh.ns('fade'),\r\n  disabled: false,\r\n  onBeforeClose: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  transfer: false,\r\n  autoRemove: false,\r\n  permeable: false,\r\n  disableEsc: false,\r\n})\r\n\r\nconst emit = defineEmits(['update:active'])\r\n\r\nconst slots = defineSlots<{\r\n  mask?: () => any,\r\n  default?: (params: { show: boolean }) => any,\r\n}>()\r\n\r\nconst getIndex = useZIndex()\r\n\r\nconst currentActive = ref(props.active)\r\n// If initial active, we should set a valid index as initial value\r\nconst zIndex = ref(props.active ? getIndex() : 0)\r\nconst wrapperShow = ref(props.active)\r\n\r\nconst wrapper = ref<HTMLElement>()\r\nconst topTrap = ref<HTMLElement>()\r\nconst bottomTrap = ref<HTMLElement>()\r\n\r\nlet maskShow = false\r\nlet contentShow = false\r\nlet stable = false\r\nlet prevFocusedEl: HTMLElement | null = null\r\n\r\nconst transferTo = computed(() => {\r\n  return props.inner\r\n    ? ''\r\n    : typeof props.transfer === 'boolean'\r\n      ? props.transfer\r\n        ? 'body'\r\n        : ''\r\n      : props.transfer\r\n})\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    {\r\n      [nh.bm('inherit')]: transferTo.value !== 'body' && props.inherit,\r\n      [nh.bm('inner')]: props.inner,\r\n      [nh.bm('disabled')]: props.disabled,\r\n    },\r\n  ]\r\n})\r\n\r\nwatch(\r\n  () => props.active,\r\n  value => {\r\n    currentActive.value = value\r\n\r\n    if (value) {\r\n      wrapperShow.value = value\r\n    }\r\n  },\r\n)\r\nwatch(currentActive, value => {\r\n  if (!value) {\r\n    stable = false\r\n\r\n    if (prevFocusedEl) {\r\n      prevFocusedEl.focus()\r\n      prevFocusedEl = null\r\n    }\r\n  } else {\r\n    prevFocusedEl = document.activeElement as HTMLElement\r\n    zIndex.value = getIndex()\r\n  }\r\n\r\n  if ((!props.maskTransition || props.disabled) && !props.transitionName) {\r\n    value ? afterOpen() : afterClose()\r\n  }\r\n})\r\nwatch(\r\n  [() => props.permeable, wrapper],\r\n  () => {\r\n    if (wrapper.value) {\r\n      wrapper.value.removeEventListener('wheel', disableWheel)\r\n\r\n      if (!props.permeable) {\r\n        wrapper.value.addEventListener('wheel', disableWheel)\r\n      }\r\n    }\r\n  },\r\n  { immediate: true, flush: 'post' },\r\n)\r\n\r\ndefineExpose({\r\n  currentActive,\r\n  zIndex,\r\n  wrapperShow,\r\n  wrapper,\r\n  topTrap,\r\n  bottomTrap,\r\n})\r\n\r\nfunction disableWheel(event: WheelEvent) {\r\n  event.preventDefault()\r\n  event.stopPropagation()\r\n}\r\n\r\nfunction toggleActive(active: boolean) {\r\n  if (currentActive.value === active) return\r\n\r\n  currentActive.value = active\r\n\r\n  emit('update:active', active)\r\n  emitEvent(props.onToggle, active)\r\n}\r\n\r\nasync function handleClose() {\r\n  if (!props.closable) return\r\n\r\n  let result: unknown = true\r\n\r\n  if (typeof props.onBeforeClose === 'function') {\r\n    result = props.onBeforeClose()\r\n\r\n    if (isPromise(result)) {\r\n      result = await result\r\n    }\r\n  }\r\n\r\n  if (result !== false) {\r\n    nextTick(() => {\r\n      toggleActive(false)\r\n      emitEvent(props.onClose)\r\n    })\r\n  }\r\n}\r\n\r\nfunction afterOpen() {\r\n  if (!currentActive.value) return\r\n\r\n  const activeEl = document && document.activeElement\r\n\r\n  if (!activeEl || !wrapper.value || !wrapper.value.contains(activeEl)) {\r\n    topTrap.value?.focus()\r\n  }\r\n\r\n  nextTick(() => {\r\n    stable = true\r\n    emitEvent(props.onShow)\r\n  })\r\n}\r\n\r\nfunction afterClose() {\r\n  if (currentActive.value) return\r\n\r\n  nextTick(() => {\r\n    wrapperShow.value = false\r\n    emitEvent(props.onHide)\r\n  })\r\n}\r\n\r\nfunction afterMaskOpen() {\r\n  if (!currentActive.value) return\r\n\r\n  maskShow = true\r\n  ;(!props.transitionName || !slots.default || contentShow) && afterOpen()\r\n}\r\n\r\nfunction afterMaskClose() {\r\n  if (currentActive.value) return\r\n\r\n  maskShow = false\r\n  ;(!props.transitionName || !slots.default || !contentShow) && afterClose()\r\n}\r\n\r\nfunction afterContentOpen() {\r\n  if (!currentActive.value) return\r\n\r\n  contentShow = true\r\n  ;(!props.maskTransition || props.disabled || maskShow) && afterOpen()\r\n}\r\n\r\nfunction afterContentClose() {\r\n  if (currentActive.value) return\r\n\r\n  contentShow = false\r\n  ;(!props.maskTransition || props.disabled || !maskShow) && afterClose()\r\n}\r\n\r\nfunction handleMaskClick(event: MouseEvent) {\r\n  emitEvent(props.onMaskClick, event)\r\n  handleClose()\r\n}\r\n\r\nfunction handleFocusIn(event: FocusEvent) {\r\n  const target = event.target as HTMLElement\r\n\r\n  if (!stable || !wrapper.value || !target || !topTrap.value || !bottomTrap.value) {\r\n    return\r\n  }\r\n\r\n  const tabables = queryTabables(wrapper.value)\r\n\r\n  if (!tabables.length) {\r\n    return\r\n  }\r\n\r\n  if (topTrap.value === target) {\r\n    getLast(tabables)!.focus()\r\n  } else if (bottomTrap.value === target) {\r\n    tabables[0].focus()\r\n  }\r\n}\r\n\r\nfunction handleResize(entry: ResizeObserverEntry) {\r\n  emitEvent(props.onResize, entry)\r\n}\r\n\r\nfunction handleEscape(event: KeyboardEvent) {\r\n  if (!props.disableEsc) {\r\n    event.preventDefault()\r\n    handleClose()\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <Portal v-if=\"!props.autoRemove || wrapperShow\" :to=\"transferTo\">\r\n    <div\r\n      v-bind=\"$attrs\"\r\n      ref=\"wrapper\"\r\n      :class=\"[className, $attrs.class]\"\r\n      tabindex=\"-1\"\r\n      :style=\"{\r\n        zIndex,\r\n        ...($attrs.style || {}),\r\n        pointerEvents: wrapperShow ? undefined : 'none',\r\n        visibility: wrapperShow ? undefined : 'hidden',\r\n      }\"\r\n      @focusin=\"handleFocusIn\"\r\n      @keydown.escape=\"handleEscape\"\r\n    >\r\n      <ResizeObserver @resize=\"handleResize\">\r\n        <Transition\r\n          v-if=\"!props.disabled\"\r\n          appear\r\n          :name=\"props.maskTransition\"\r\n          @after-enter=\"afterMaskOpen\"\r\n          @after-leave=\"afterMaskClose\"\r\n        >\r\n          <div v-show=\"currentActive\" :class=\"nh.be('mask')\" @click=\"handleMaskClick\">\r\n            <slot name=\"mask\">\r\n              <div :class=\"nh.be('mask-inner')\"></div>\r\n            </slot>\r\n          </div>\r\n        </Transition>\r\n        <div\r\n          v-else\r\n          :class=\"nh.be('placeholder')\"\r\n          role=\"none\"\r\n          aria-hidden\r\n        ></div>\r\n      </ResizeObserver>\r\n      <div\r\n        ref=\"topTrap\"\r\n        tabindex=\"0\"\r\n        role=\"none\"\r\n        style=\"width: 0; height: 0; overflow: hidden; outline: none\"\r\n      ></div>\r\n      <div :class=\"nh.be('content')\" @wheel.stop.prevent>\r\n        <Transition\r\n          v-if=\"props.transitionName\"\r\n          appear\r\n          :name=\"props.transitionName\"\r\n          @after-enter=\"afterContentOpen\"\r\n          @after-leave=\"afterContentClose\"\r\n        >\r\n          <slot :show=\"currentActive\"></slot>\r\n        </Transition>\r\n        <slot v-else :show=\"currentActive\"></slot>\r\n      </div>\r\n      <div\r\n        ref=\"bottomTrap\"\r\n        tabindex=\"0\"\r\n        role=\"none\"\r\n        style=\"width: 0; height: 0; overflow: hidden; outline: none\"\r\n      ></div>\r\n    </div>\r\n  </Portal>\r\n</template>\r\n","import {\r\n  booleanProp,\r\n  booleanStringProp,\r\n  buildProps,\r\n  classProp,\r\n  eventProp,\r\n  localeProp,\r\n  sizeProp,\r\n  styleProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { ButtonProps, ButtonType } from '@/components/button'\r\nimport type { ModalSlots, PositionPayload, SizePayload } from './symbol'\r\n\r\nconst positionType = [Number, String]\r\n\r\nexport const positionValidator = (value: string | number) => {\r\n  return value === 'auto' || !Number.isNaN(parseFloat(value as string))\r\n}\r\nexport const positionProp = {\r\n  default: 'auto' as const,\r\n  validator: positionValidator,\r\n}\r\n\r\nexport const modalProps = buildProps({\r\n  locale: localeProp('modal'),\r\n  transfer: booleanStringProp,\r\n  active: booleanProp,\r\n  width: positionType,\r\n  height: positionType,\r\n  top: positionType,\r\n  left: positionType,\r\n  right: positionType,\r\n  bottom: positionType,\r\n  title: String,\r\n  closable: booleanProp,\r\n  inner: booleanProp,\r\n  maskClose: booleanProp,\r\n  modalClass: classProp,\r\n  modalStyle: styleProp,\r\n  noFooter: booleanProp,\r\n  hideMask: booleanProp,\r\n  draggable: booleanProp,\r\n  resizable: booleanProp,\r\n  onBeforeClose: Function as PropType<(isConfirm: boolean) => any>,\r\n  loading: booleanProp,\r\n  minWidth: Number,\r\n  minHeight: Number,\r\n  transitionName: String,\r\n  confirmText: String,\r\n  cancelText: String,\r\n  actionSize: sizeProp,\r\n  autoRemove: booleanProp,\r\n  confirmType: String as PropType<ButtonType>,\r\n  confirmProps: Object as PropType<ButtonProps>,\r\n  cancelType: String as PropType<ButtonType>,\r\n  cancelProps: Object as PropType<ButtonProps>,\r\n  undivided: booleanProp,\r\n  xOffset: positionType,\r\n  yOffset: positionType,\r\n  disableEsc: booleanProp,\r\n  slots: Object as PropType<ModalSlots>,\r\n  onToggle: eventProp<(active: boolean) => void>(),\r\n  onConfirm: eventProp(),\r\n  onCancel: eventProp(),\r\n  onClose: eventProp(),\r\n  onShow: eventProp(),\r\n  onHide: eventProp(),\r\n  onDragStart: eventProp<(position: PositionPayload) => void>(),\r\n  onDragMove: eventProp<(position: PositionPayload) => void>(),\r\n  onDragEnd: eventProp<(position: PositionPayload) => void>(),\r\n  onResizeStart: eventProp<(size: SizePayload) => void>(),\r\n  onResizeMove: eventProp<(size: SizePayload) => void>(),\r\n  onResizeEnd: eventProp<(size: SizePayload) => void>(),\r\n})\r\n\r\nexport type ModalProps = ExtractPropTypes<typeof modalProps>\r\nexport type ModalCProps = ConfigurableProps<ModalProps, never, 'onBeforeClose'>\r\n","<script setup lang=\"ts\">\r\nimport { Button } from '@/components/button'\r\nimport { Icon } from '@/components/icon'\r\nimport { Masker } from '@/components/masker'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport { computed, nextTick, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\r\n\r\nimport {\r\n  createSizeProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useId,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { useMoving } from '@vexip-ui/hooks'\r\nimport { isNull, isPromise, isValidNumber, toNumber } from '@vexip-ui/utils'\r\nimport { modalProps, positionProp } from './props'\r\n\r\nimport type { MaskerExposed } from '@/components/masker'\r\nimport type { ModalSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'Modal' })\r\n\r\nconst nh = useNameHelper('modal')\r\n\r\nconst _props = defineProps(modalProps)\r\nconst props = useProps('modal', _props, {\r\n  locale: null,\r\n  transfer: false,\r\n  active: {\r\n    default: false,\r\n    static: true,\r\n  },\r\n  width: positionProp,\r\n  height: positionProp,\r\n  top: positionProp,\r\n  left: positionProp,\r\n  right: positionProp,\r\n  bottom: positionProp,\r\n  title: '',\r\n  closable: true,\r\n  inner: false,\r\n  maskClose: true,\r\n  modalClass: null,\r\n  modalStyle: null,\r\n  noFooter: false,\r\n  hideMask: false,\r\n  draggable: false,\r\n  resizable: false,\r\n  onBeforeClose: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  loading: false,\r\n  minWidth: 150,\r\n  minHeight: 120,\r\n  transitionName: () => nh.ns('ease'),\r\n  confirmText: null,\r\n  cancelText: null,\r\n  autoRemove: false,\r\n  confirmType: 'primary',\r\n  confirmProps: null,\r\n  cancelType: 'default',\r\n  cancelProps: null,\r\n  actionSize: createSizeProp('small'),\r\n  undivided: false,\r\n  xOffset: 0,\r\n  yOffset: 0,\r\n  disableEsc: false,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:active'])\r\n\r\nconst slots = defineSlots<ModalSlots>()\r\n\r\nconst locale = useLocale('modal', toRef(props, 'locale'))\r\nconst icons = useIcons()\r\n\r\nfunction isSpecified(value?: string | number) {\r\n  return !isNull(value) && value !== 'auto'\r\n}\r\n\r\nfunction normalizeStyle(value?: string | number) {\r\n  return isValidNumber(value, true)\r\n    ? `${toNumber(value)}px`\r\n    : isNull(value)\r\n      ? 'auto'\r\n      : String(value)\r\n}\r\n\r\nconst currentActive = ref(props.active)\r\nconst rect = reactive({\r\n  top: normalizeStyle(props.top),\r\n  right: normalizeStyle(props.right),\r\n  bottom: normalizeStyle(props.bottom),\r\n  left: normalizeStyle(props.left),\r\n  width: normalizeStyle(props.width),\r\n  height: normalizeStyle(props.height),\r\n})\r\nconst maskerRect = reactive({ width: 0, height: 0 })\r\nconst modalRect = reactive({ width: 0, height: 0 })\r\n\r\nconst transformed = ref(false)\r\n\r\nconst masker = ref<MaskerExposed>()\r\nconst wrapper = ref<HTMLElement>()\r\nconst footer = ref<HTMLElement>()\r\n\r\nconst uselessTop = computed(() => {\r\n  return props.top === 'auto' && isSpecified(props.bottom) && isSpecified(props.height)\r\n})\r\nconst uselessLeft = computed(() => {\r\n  return props.left === 'auto' && isSpecified(props.right) && isSpecified(props.width)\r\n})\r\n\r\nconst { target: header, moving: dragging } = useMoving({\r\n  capture: false,\r\n  onStart: (state, event) => {\r\n    if (!wrapper.value || !props.draggable || event.button > 0) {\r\n      return false\r\n    }\r\n\r\n    transferRect(false)\r\n\r\n    transformed.value = true\r\n    state.xStart = parseFloat(rect.left)\r\n    state.yStart = parseFloat(rect.top)\r\n\r\n    emitEvent(props.onDragStart, {\r\n      top: state.yStart,\r\n      left: state.xStart,\r\n    })\r\n  },\r\n  onMove: state => {\r\n    rect.left = `${state.xEnd}px`\r\n    rect.top = `${state.yEnd}px`\r\n\r\n    emitEvent(props.onDragMove, {\r\n      top: state.yEnd,\r\n      left: state.xEnd,\r\n    })\r\n  },\r\n  onEnd: state => {\r\n    emitEvent(props.onDragEnd, {\r\n      top: state.yEnd,\r\n      left: state.xEnd,\r\n    })\r\n  },\r\n})\r\n\r\nconst { target: resizer, moving: resizing } = useMoving({\r\n  onStart: (state, event) => {\r\n    if (!wrapper.value || !props.resizable || event.button > 0) {\r\n      return false\r\n    }\r\n\r\n    transferRect()\r\n\r\n    let minHeight = 32\r\n\r\n    if (header.value) {\r\n      minHeight += header.value.offsetHeight\r\n    }\r\n\r\n    if (footer.value) {\r\n      minHeight += footer.value.offsetHeight\r\n    }\r\n\r\n    transformed.value = true\r\n    state.xStart = parseFloat(rect.width)\r\n    state.yStart = parseFloat(rect.height)\r\n    state.minHeight = Math.max(minHeight, props.minHeight)\r\n\r\n    emitEvent(props.onResizeStart, {\r\n      width: state.xStart,\r\n      height: state.yStart,\r\n    })\r\n  },\r\n  onMove: state => {\r\n    const width = Math.max(props.minWidth, state.xEnd, 32)\r\n    const height = Math.max(state.minHeight as number, state.yEnd)\r\n\r\n    rect.width = `${width}px`\r\n    rect.height = `${height}px`\r\n\r\n    emitEvent(props.onResizeMove, { width, height })\r\n  },\r\n  onEnd: state => {\r\n    const width = Math.max(props.minWidth, state.xEnd, 32)\r\n    const height = Math.max(state.minHeight as number, state.yEnd)\r\n\r\n    emitEvent(props.onResizeEnd, { width, height })\r\n  },\r\n})\r\n\r\n// const shouldParse = computed(() => !props.draggable && !props.resizable)\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('inner')]: props.inner,\r\n      [nh.bm('draggable')]: props.draggable,\r\n      [nh.bm('resizable')]: props.resizable,\r\n      [nh.bm('undivided')]: props.undivided,\r\n    },\r\n  ]\r\n})\r\nconst wrapperClass = computed(() => {\r\n  return [\r\n    nh.be('wrapper'),\r\n    {\r\n      [nh.bem('wrapper', 'closable')]: props.closable,\r\n      [nh.bem('wrapper', 'dragging')]: dragging.value,\r\n      [nh.bem('wrapper', 'resizing')]: resizing.value,\r\n    },\r\n    props.modalClass,\r\n  ]\r\n})\r\nconst transform = computed(() => {\r\n  const transforms: string[] = []\r\n\r\n  if (props.xOffset) {\r\n    transforms.push(`translateX(${normalizeStyle(props.xOffset)})`)\r\n  }\r\n\r\n  if (props.yOffset) {\r\n    transforms.push(`translateY(${normalizeStyle(props.yOffset)})`)\r\n  }\r\n\r\n  if (transforms.length) {\r\n    transforms.push('translateZ(0)')\r\n  }\r\n\r\n  return transforms.length ? transforms.join(' ') : undefined\r\n})\r\nconst wrapperStyle = computed(() => {\r\n  return [\r\n    props.modalStyle,\r\n    {\r\n      ...rect,\r\n      height: rect.height !== 'auto' ? rect.height : undefined,\r\n      transform: transform.value,\r\n    },\r\n  ]\r\n})\r\nconst transformOrigin = computed(() => {\r\n  const origin = { x: '50%', y: '50%' }\r\n\r\n  if (transformed.value) {\r\n    origin.x = `${parseFloat(rect.left) + 0.5 * modalRect.width}px`\r\n    origin.y = `${parseFloat(rect.top) + 0.5 * modalRect.height}px`\r\n  } else {\r\n    if (uselessTop.value) {\r\n      origin.y = `calc(100% - ${parseFloat(rect.bottom) + 0.5 * parseFloat(rect.height)}px)`\r\n    } else if (isSpecified(props.top)) {\r\n      const top = parseFloat(rect.top)\r\n\r\n      if (isSpecified(props.height)) {\r\n        origin.y = `${top + 0.5 * parseFloat(rect.height)}px`\r\n      } else if (isSpecified(props.bottom)) {\r\n        const bottom = parseFloat(rect.bottom)\r\n        const height = maskerRect.height - top - bottom\r\n\r\n        origin.y = `${top + 0.5 * height}px`\r\n      } else {\r\n        origin.y = `${parseFloat(rect.top) + 0.5 * modalRect.height}px`\r\n      }\r\n    }\r\n\r\n    if (uselessLeft.value) {\r\n      origin.x = `calc(100% - ${parseFloat(rect.right) + 0.5 * parseFloat(rect.width)}px)`\r\n    } else if (isSpecified(props.left)) {\r\n      const left = parseFloat(rect.left)\r\n\r\n      if (isSpecified(props.width)) {\r\n        origin.x = `${left + 0.5 * parseFloat(rect.width)}px`\r\n      } else if (isSpecified(props.right)) {\r\n        const right = parseFloat(rect.right)\r\n        const width = maskerRect.width - left - right\r\n\r\n        origin.x = `${left + 0.5 * width}px`\r\n      } else {\r\n        origin.x = `${parseFloat(rect.left) + 0.5 * modalRect.width}px`\r\n      }\r\n    }\r\n  }\r\n\r\n  return `${origin.x} ${origin.y}`\r\n})\r\nconst hasHeader = computed(() => {\r\n  return !!(slots.header || slots.title || props.title || props.slots.header || props.slots.title)\r\n})\r\nconst titleId = useId()\r\nconst bodyId = useId()\r\n\r\nfor (const style of Object.keys(rect) as Array<keyof typeof rect>) {\r\n  watch(\r\n    () => props[style],\r\n    value => {\r\n      rect[style] = normalizeStyle(value)\r\n    },\r\n  )\r\n}\r\n\r\nwatch(\r\n  () => props.active,\r\n  value => {\r\n    currentActive.value = value\r\n  },\r\n)\r\nwatch(currentActive, value => {\r\n  props.hideMask && value && handleResize()\r\n})\r\nwatch([() => props.top, () => props.bottom, () => props.height], () => {\r\n  currentActive.value && nextTick(computeTop)\r\n})\r\nwatch([() => props.left, () => props.right, () => props.width], () => {\r\n  currentActive.value && nextTick(computeLeft)\r\n})\r\n\r\nconst handleResize = () => {\r\n  if (currentActive.value && !transformed.value) {\r\n    nextTick(() => {\r\n      computeTop()\r\n      computeLeft()\r\n    })\r\n  }\r\n\r\n  if (masker.value?.wrapper) {\r\n    maskerRect.width = masker.value.wrapper.offsetWidth\r\n    maskerRect.height = masker.value.wrapper.offsetHeight\r\n  }\r\n}\r\n\r\ndefineExpose({\r\n  dragging,\r\n  resizing,\r\n  titleId,\r\n  bodyId,\r\n  wrapper,\r\n  header,\r\n  footer,\r\n  resizer,\r\n  handleResize,\r\n  handleConfirm,\r\n  handleCancel,\r\n  handleClose,\r\n})\r\n\r\nconst slotParams = shallowReadonly(\r\n  reactive({\r\n    dragging,\r\n    resizing,\r\n    handleResize,\r\n    handleConfirm,\r\n    handleCancel,\r\n    handleClose,\r\n  }),\r\n)\r\n\r\nfunction setActive(active: boolean) {\r\n  if (currentActive.value === active) return\r\n\r\n  currentActive.value = active\r\n\r\n  emit('update:active', active)\r\n  emitEvent(props.onToggle, active)\r\n}\r\n\r\nfunction findPositionalParent() {\r\n  if (!wrapper.value) return document.body\r\n\r\n  let parentElement = wrapper.value.parentElement as HTMLElement\r\n\r\n  while (parentElement && parentElement !== document.body) {\r\n    if (getComputedStyle(parentElement).position !== 'static') {\r\n      return parentElement\r\n    }\r\n\r\n    parentElement = parentElement.parentElement as HTMLElement\r\n  }\r\n\r\n  return parentElement\r\n}\r\n\r\nfunction computeTop() {\r\n  if (!wrapper.value || props.top !== 'auto' || uselessTop.value) return\r\n\r\n  const currentHeight = wrapper.value.offsetHeight\r\n\r\n  if (props.inner) {\r\n    rect.top = `${(findPositionalParent().offsetHeight - currentHeight) / 2}px`\r\n  } else {\r\n    rect.top = `${(window.innerHeight - currentHeight) / 2 - 20}px`\r\n  }\r\n}\r\n\r\nfunction computeLeft() {\r\n  if (!wrapper.value || props.left !== 'auto' || uselessLeft.value) return\r\n\r\n  const currentWidth = wrapper.value.offsetWidth\r\n\r\n  if (props.inner) {\r\n    rect.left = `${(findPositionalParent().offsetWidth - currentWidth) / 2}px`\r\n  } else {\r\n    rect.left = `${(window.innerWidth - currentWidth) / 2}px`\r\n  }\r\n}\r\n\r\nfunction transferRect(withSize = true) {\r\n  if (!wrapper.value) return\r\n\r\n  const { offsetWidth, offsetHeight, offsetTop, offsetLeft } = wrapper.value\r\n\r\n  // If user is using top/bottom or right/left to specify size,\r\n  // here need to force transfer to use offset size\r\n  if (\r\n    !withSize &&\r\n    ((!uselessTop.value && props.bottom !== 'auto') ||\r\n      (!uselessLeft.value && props.right !== 'auto'))\r\n  ) {\r\n    withSize = true\r\n  }\r\n\r\n  Object.assign(\r\n    rect,\r\n    {\r\n      top: `${offsetTop}px`,\r\n      right: 'auto',\r\n      bottom: 'auto',\r\n      left: `${offsetLeft}px`,\r\n    },\r\n    withSize\r\n      ? {\r\n        width: `${offsetWidth}px`,\r\n        height: `${offsetHeight}px`,\r\n      }\r\n      : {},\r\n  )\r\n}\r\n\r\nfunction handleConfirm() {\r\n  handleClose(true)\r\n  emitEvent(props.onConfirm)\r\n}\r\n\r\nfunction handleCancel() {\r\n  handleClose(false)\r\n  emitEvent(props.onCancel)\r\n}\r\n\r\nasync function handleClose(isConfirm = false) {\r\n  let result: unknown = true\r\n\r\n  if (typeof props.onBeforeClose === 'function') {\r\n    result = props.onBeforeClose(isConfirm)\r\n\r\n    if (isPromise(result)) {\r\n      result = await result\r\n    }\r\n  }\r\n\r\n  if (result !== false) {\r\n    await nextTick(() => {\r\n      setActive(false)\r\n      emitEvent(props.onClose)\r\n    })\r\n  }\r\n\r\n  return result\r\n}\r\n\r\nfunction handleShow() {\r\n  emitEvent(props.onShow)\r\n}\r\n\r\nfunction handleHide() {\r\n  emitEvent(props.onHide)\r\n}\r\n\r\nfunction handleMaskClose() {\r\n  if (props.maskClose) {\r\n    return handleClose(false)\r\n  }\r\n}\r\n\r\nfunction handleModalResize(entry: ResizeObserverEntry) {\r\n  const box = entry.borderBoxSize?.[0]\r\n\r\n  if (box) {\r\n    modalRect.width = box.inlineSize\r\n    modalRect.height = box.blockSize\r\n  } else {\r\n    modalRect.width = entry.contentRect.width\r\n    modalRect.height = entry.contentRect.height\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <Masker\r\n    ref=\"masker\"\r\n    v-model:active=\"currentActive\"\r\n    :inherit=\"props.inherit\"\r\n    :class=\"className\"\r\n    :inner=\"props.inner\"\r\n    :transition-name=\"props.transitionName\"\r\n    :closable=\"props.maskClose\"\r\n    :disabled=\"props.hideMask\"\r\n    :on-before-close=\"handleMaskClose\"\r\n    :transfer=\"props.transfer\"\r\n    :auto-remove=\"props.autoRemove\"\r\n    :disable-esc=\"props.disableEsc\"\r\n    @show=\"handleShow\"\r\n    @hide=\"handleHide\"\r\n    @resize=\"handleResize\"\r\n  >\r\n    <template #default=\"{ show }\">\r\n      <section v-show=\"show\" :class=\"nh.be('transform')\" :style=\"{ transformOrigin }\">\r\n        <ResizeObserver @resize=\"handleModalResize\">\r\n          <div\r\n            ref=\"wrapper\"\r\n            :class=\"wrapperClass\"\r\n            role=\"dialog\"\r\n            :style=\"wrapperStyle\"\r\n            :aria-modal=\"show ? 'true' : undefined\"\r\n            :aria-labelledby=\"titleId\"\r\n            :aria-describedby=\"bodyId\"\r\n          >\r\n            <div v-if=\"hasHeader\" ref=\"header\" :class=\"nh.be('header')\">\r\n              <slot name=\"header\" v-bind=\"slotParams\">\r\n                <Renderer :renderer=\"props.slots.header\" :data=\"slotParams\">\r\n                  <div :id=\"titleId\" :class=\"nh.be('title')\">\r\n                    <slot name=\"title\" v-bind=\"slotParams\">\r\n                      <Renderer :renderer=\"props.slots.title\" :data=\"slotParams\">\r\n                        {{ props.title }}\r\n                      </Renderer>\r\n                    </slot>\r\n                  </div>\r\n                  <button\r\n                    v-if=\"props.closable\"\r\n                    type=\"button\"\r\n                    :class=\"nh.be('close')\"\r\n                    @pointerdown.stop\r\n                    @mousedown.stop\r\n                    @touchstart.stop\r\n                    @click=\"handleClose(false)\"\r\n                  >\r\n                    <slot name=\"close\" v-bind=\"slotParams\">\r\n                      <Renderer :renderer=\"props.slots.close\" :data=\"slotParams\">\r\n                        <Icon\r\n                          v-bind=\"icons.close\"\r\n                          :scale=\"+(icons.close.scale || 1) * 1.2\"\r\n                          label=\"close\"\r\n                        ></Icon>\r\n                      </Renderer>\r\n                    </slot>\r\n                  </button>\r\n                </Renderer>\r\n              </slot>\r\n            </div>\r\n            <div\r\n              :id=\"bodyId\"\r\n              :class=\"nh.be('content')\"\r\n              :style=\"{\r\n                overflow: resizing ? 'hidden' : undefined\r\n              }\"\r\n            >\r\n              <slot v-bind=\"slotParams\">\r\n                <Renderer :renderer=\"props.slots.default\" :data=\"slotParams\"></Renderer>\r\n              </slot>\r\n            </div>\r\n            <div v-if=\"!props.noFooter\" ref=\"footer\" :class=\"nh.be('footer')\">\r\n              <slot name=\"footer\" v-bind=\"slotParams\">\r\n                <Renderer :renderer=\"props.slots.footer\" :data=\"slotParams\">\r\n                  <Button\r\n                    :class=\"[nh.be('button'), nh.bem('button', 'cancel')]\"\r\n                    inherit\r\n                    text\r\n                    :type=\"props.cancelType\"\r\n                    :size=\"props.actionSize\"\r\n                    v-bind=\"props.cancelProps\"\r\n                    @click=\"handleCancel\"\r\n                  >\r\n                    {{ props.cancelText || locale.cancel }}\r\n                  </Button>\r\n                  <Button\r\n                    :class=\"[nh.be('button'), nh.bem('button', 'confirm')]\"\r\n                    inherit\r\n                    :type=\"props.confirmType\"\r\n                    :size=\"props.actionSize\"\r\n                    :loading=\"props.loading\"\r\n                    v-bind=\"props.confirmProps\"\r\n                    @click=\"handleConfirm\"\r\n                  >\r\n                    {{ props.confirmText || locale.confirm }}\r\n                  </Button>\r\n                </Renderer>\r\n              </slot>\r\n            </div>\r\n            <div v-if=\"props.resizable\" ref=\"resizer\" :class=\"nh.be('resizer')\"></div>\r\n          </div>\r\n        </ResizeObserver>\r\n      </section>\r\n    </template>\r\n  </Masker>\r\n</template>\r\n","import { createApp, createVNode, getCurrentInstance, h, nextTick, ref, render, unref } from 'vue'\r\n\r\nimport Component from './modal.vue'\r\nimport { isClient, noop } from '@vexip-ui/utils'\r\n\r\nimport type { App, AppContext, ComponentPublicInstance, MaybeRef } from 'vue'\r\nimport type { ModalProps } from './props'\r\nimport type { ModalCommonSlot } from './symbol'\r\n\r\nexport type ModalOptions = Omit<ModalProps, 'active' | 'transfer' | 'loading' | 'autoRemove'> & {\r\n  /**\r\n   * Specify the app context, ensue the modal using same context\r\n   */\r\n  appContext: AppContext,\r\n  /**\r\n   * Specify whether the modal is loading\r\n   */\r\n  loading: MaybeRef<boolean>,\r\n  /**\r\n   * Another way to use default slot\r\n   */\r\n  renderer: ModalCommonSlot,\r\n  /**\r\n   * Another way to use header slot\r\n   */\r\n  headerRenderer: ModalCommonSlot,\r\n  /**\r\n   * Another way to use title slot\r\n   */\r\n  titleRenderer: ModalCommonSlot,\r\n  /**\r\n   * Another way to use close slot\r\n   */\r\n  closeRenderer: ModalCommonSlot,\r\n  /**\r\n   * Another way to use footer slot\r\n   */\r\n  footerRenderer: ModalCommonSlot,\r\n}\r\n\r\nexport function useModal(options: Partial<ModalOptions> = {}): () => Promise<void> {\r\n  if (!isClient) return noop\r\n\r\n  const {\r\n    appContext,\r\n    loading,\r\n    renderer,\r\n    headerRenderer,\r\n    titleRenderer,\r\n    closeRenderer,\r\n    footerRenderer,\r\n    onHide,\r\n    ...props\r\n  } = options\r\n\r\n  const active = ref(false)\r\n\r\n  let instance = getCurrentInstance()\r\n\r\n  let container: HTMLElement | undefined = document.createElement('div')\r\n  let app: App | undefined\r\n\r\n  if (appContext || instance) {\r\n    const vnode = createVNode(createModal, null, null)\r\n\r\n    vnode.appContext = appContext || instance!.appContext\r\n    render(vnode, container)\r\n  } else {\r\n    app = createApp(createModal)\r\n    app.mount(container)\r\n  }\r\n\r\n  document.body.appendChild(container)\r\n\r\n  // Ensure Modal show transition is effective\r\n  nextTick(() => {\r\n    active.value = true\r\n  })\r\n\r\n  function createModal() {\r\n    return h(\r\n      Component,\r\n      {\r\n        ...props,\r\n        active: active.value,\r\n        transfer: false,\r\n        autoRemove: false,\r\n        loading: unref(loading),\r\n        onHide: Array.isArray(onHide) ? [...onHide, destroy] : onHide ? [onHide, destroy] : destroy,\r\n      },\r\n      {\r\n        header: headerRenderer,\r\n        title: titleRenderer,\r\n        close: closeRenderer,\r\n        default: renderer,\r\n        footer: footerRenderer,\r\n      },\r\n    )\r\n  }\r\n\r\n  function destroy() {\r\n    if (instance) {\r\n      container && render(null, container)\r\n      instance = null\r\n    }\r\n\r\n    if (app) {\r\n      app.unmount()\r\n      app = undefined\r\n    }\r\n\r\n    if (container) {\r\n      document.body.removeChild(container)\r\n      container = undefined\r\n    }\r\n  }\r\n\r\n  return () =>\r\n    nextTick(() => {\r\n      active.value = false\r\n    })\r\n}\r\n\r\nComponent.open = useModal\r\n\r\nconst Modal = Component as typeof Component & { open: typeof useModal }\r\n\r\nexport { Modal }\r\nexport { modalProps } from './props'\r\n\r\nexport type ModalExposed = ComponentPublicInstance & InstanceType<typeof Component>\r\n\r\nexport type { ModalProps, ModalCProps } from './props'\r\nexport type { ModalSlotParams } from './symbol'\r\n","import { booleanProp, buildProps, classProp, localeProp, styleProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { IconMinorProps } from '@/components/icon'\r\nimport type { ConfirmAlign, ConfirmButtonType, ConfirmRenderFn } from './symbol'\r\n\r\nconst positionType = [Number, String]\r\n\r\nexport const confirmProps = buildProps({\r\n  locale: localeProp('confirm'),\r\n  width: positionType,\r\n  height: positionType,\r\n  top: positionType,\r\n  left: positionType,\r\n  right: positionType,\r\n  bottom: positionType,\r\n  maskClose: booleanProp,\r\n  confirmType: String as PropType<ConfirmButtonType>,\r\n  cancelType: String as PropType<ConfirmButtonType>,\r\n  confirmText: String,\r\n  cancelText: String,\r\n  icon: {\r\n    type: [Boolean, Object, Function],\r\n    default: null,\r\n  },\r\n  className: classProp,\r\n  style: styleProp,\r\n  renderer: Function as PropType<ConfirmRenderFn>,\r\n  iconProps: Object as PropType<IconMinorProps>,\r\n  closable: booleanProp,\r\n  contentAlign: String as PropType<ConfirmAlign>,\r\n  actionsAlign: String as PropType<ConfirmAlign>,\r\n  parseHtml: booleanProp,\r\n  cancelable: booleanProp,\r\n  xOffset: positionType,\r\n  yOffset: positionType,\r\n})\r\n\r\nexport type ConfirmProps = ExtractPropTypes<typeof confirmProps>\r\nexport type ConfirmCProps = ConfigurableProps<ConfirmProps>\r\n","<script setup lang=\"ts\">\r\nimport { Button } from '@/components/button'\r\nimport { Icon } from '@/components/icon'\r\nimport { Modal } from '@/components/modal'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { nextTick, onMounted, reactive, ref, toRef } from 'vue'\r\n\r\nimport { useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { isFunction, isPromise } from '@vexip-ui/utils'\r\nimport { confirmProps } from './props'\r\n\r\nimport type { ConfirmButtonType, ConfirmOptions, ConfirmRenderFn, ConfirmState } from './symbol'\r\n\r\nconst positionValidator = (value: string | number) => {\r\n  return value === 'auto' || !Number.isNaN(parseFloat(value as string))\r\n}\r\nconst positionProp = {\r\n  default: 'auto',\r\n  validator: positionValidator,\r\n}\r\n\r\nconst confirmButtonTypes = Object.freeze<ConfirmButtonType[]>([\r\n  'default',\r\n  'primary',\r\n  'info',\r\n  'success',\r\n  'warning',\r\n  'error',\r\n])\r\n\r\ndefineOptions({ name: 'Confirm' })\r\n\r\nconst _props = defineProps(confirmProps)\r\nconst props = useProps('confirm', _props, {\r\n  locale: null,\r\n  width: {\r\n    default: 420,\r\n    validator: positionValidator,\r\n  },\r\n  height: positionProp,\r\n  top: positionProp,\r\n  left: positionProp,\r\n  right: positionProp,\r\n  bottom: positionProp,\r\n  maskClose: false,\r\n  confirmType: {\r\n    default: 'primary',\r\n    validator: value => confirmButtonTypes.includes(value),\r\n  },\r\n  cancelType: {\r\n    default: 'default',\r\n    validator: value => confirmButtonTypes.includes(value),\r\n  },\r\n  confirmText: null,\r\n  cancelText: null,\r\n  icon: {\r\n    isFunc: true,\r\n    default: false,\r\n  },\r\n  className: null,\r\n  style: null,\r\n  renderer: {\r\n    default: null,\r\n    isFunc: true,\r\n    static: true,\r\n  },\r\n  iconProps: () => ({}),\r\n  closable: false,\r\n  parseHtml: false,\r\n  contentAlign: 'left',\r\n  actionsAlign: 'right',\r\n  cancelable: true,\r\n  xOffset: 0,\r\n  yOffset: 0,\r\n})\r\n\r\nconst nh = useNameHelper('confirm')\r\nconst icons = useIcons()\r\nconst locale = useLocale('confirm', toRef(props, 'locale'))\r\n\r\nconst commonProps = [\r\n  'className',\r\n  'style',\r\n  'icon',\r\n  'iconProps',\r\n  'maskClose',\r\n  'confirmType',\r\n  'cancelType',\r\n  'confirmText',\r\n  'cancelText',\r\n  'parseHtml',\r\n  'closable',\r\n  'contentAlign',\r\n  'actionsAlign',\r\n  'cancelable',\r\n  'width',\r\n  'height',\r\n  'top',\r\n  'right',\r\n  'bottom',\r\n  'left',\r\n  'xOffset',\r\n  'yOffset',\r\n] as const\r\n\r\nconst state = reactive<ConfirmState>({\r\n  ...commonProps.reduce((prev, current) => ((prev[current] = props[current]), prev), {} as any),\r\n  visible: false,\r\n  loading: false,\r\n  title: '',\r\n  content: '',\r\n  raw: {},\r\n})\r\n\r\nconst rendererR = ref<ConfirmRenderFn | null>(props.renderer)\r\n\r\nlet beforeConfirmR: (() => unknown) | null = null\r\n\r\nlet onConfirm: (() => void) | null = null\r\nlet onCancel: (() => void) | null = null\r\n\r\nconst mountedPromise = new Promise<void>(resolve => {\r\n  onMounted(() => {\r\n    nextTick(resolve)\r\n  })\r\n})\r\n\r\ndefineExpose({ state, openConfirm, closeConfirm: handleCancel, handleReset })\r\n\r\nasync function openConfirm(options: ConfirmOptions) {\r\n  await mountedPromise\r\n\r\n  return await new Promise<boolean>(resolve => {\r\n    for (const prop of commonProps) {\r\n      ;(state as any)[prop] = options[prop] ?? props[prop]\r\n    }\r\n\r\n    state.title = options.title ?? ''\r\n    state.content = options.content ?? ''\r\n\r\n    state.raw = options\r\n\r\n    rendererR.value = isFunction(options.renderer) ? options.renderer : props.renderer\r\n    beforeConfirmR = isFunction(options.onBeforeConfirm) ? options.onBeforeConfirm : null\r\n\r\n    if (isFunction(rendererR.value)) {\r\n      const render = rendererR.value\r\n\r\n      rendererR.value = () => render(state, handleConfirm, handleCancel)\r\n    }\r\n\r\n    state.visible = true\r\n    onConfirm = () => {\r\n      resolve(true)\r\n      beforeConfirmR = null\r\n    }\r\n    onCancel = () => {\r\n      resolve(false)\r\n      beforeConfirmR = null\r\n    }\r\n  })\r\n}\r\n\r\nasync function handleConfirm() {\r\n  state.loading = true\r\n\r\n  if (isFunction(beforeConfirmR)) {\r\n    let result = beforeConfirmR()\r\n\r\n    if (isPromise(result)) {\r\n      result = await result\r\n    }\r\n\r\n    if (result === false) {\r\n      state.loading = false\r\n\r\n      return\r\n    }\r\n  }\r\n\r\n  state.visible = false\r\n  state.loading = false\r\n\r\n  if (isFunction(onConfirm)) {\r\n    onConfirm()\r\n    onConfirm = null\r\n  }\r\n}\r\n\r\nfunction handleCancel() {\r\n  state.visible = false\r\n\r\n  if (isFunction(onCancel)) {\r\n    onCancel()\r\n    onCancel = null\r\n  }\r\n}\r\n\r\nfunction handleReset() {\r\n  for (const prop of commonProps) {\r\n    ;(state as any)[prop] = props[prop]\r\n  }\r\n\r\n  state.visible = false\r\n  state.loading = false\r\n  state.title = ''\r\n  state.content = ''\r\n\r\n  state.raw = {}\r\n\r\n  rendererR.value = props.renderer\r\n}\r\n</script>\r\n\r\n<template>\r\n  <!-- eslint-disable vue/no-v-html -->\r\n  <div :class=\"[nh.b(), nh.bs('vars')]\">\r\n    <Modal\r\n      no-footer\r\n      :auto-remove=\"false\"\r\n      :transfer=\"false\"\r\n      :closable=\"false\"\r\n      :active=\"state.visible\"\r\n      :modal-class=\"state.className\"\r\n      :modal-style=\"state.style\"\r\n      :width=\"state.width\"\r\n      :height=\"state.height\"\r\n      :top=\"state.top\"\r\n      :left=\"state.left\"\r\n      :right=\"state.right\"\r\n      :bottom=\"state.bottom\"\r\n      :x-offset=\"state.xOffset\"\r\n      :y-offset=\"state.yOffset\"\r\n      :mask-close=\"state.maskClose\"\r\n      @hide=\"handleReset\"\r\n    >\r\n      <Renderer v-if=\"isFunction(rendererR)\" :renderer=\"rendererR\"></Renderer>\r\n      <template v-else>\r\n        <div v-if=\"state.title\" :class=\"nh.be('header')\">\r\n          <div :class=\"nh.be('title')\">\r\n            <Renderer v-if=\"typeof state.title === 'function'\" :renderer=\"state.title\"></Renderer>\r\n            <template v-else>\r\n              {{ state.title }}\r\n            </template>\r\n          </div>\r\n          <button\r\n            v-if=\"state.closable\"\r\n            type=\"button\"\r\n            :class=\"nh.be('close')\"\r\n            @mousedown.stop\r\n            @click=\"handleCancel\"\r\n          >\r\n            <slot name=\"close\">\r\n              <Icon\r\n                v-bind=\"icons.close\"\r\n                :scale=\"+(icons.close.scale || 1) * 1.2\"\r\n                label=\"close\"\r\n              ></Icon>\r\n            </slot>\r\n          </button>\r\n        </div>\r\n        <div\r\n          :class=\"[\r\n            nh.be('body'),\r\n            nh.bem('body', state.contentAlign),\r\n            !state.title && nh.bem('body', 'no-title')\r\n          ]\"\r\n        >\r\n          <div v-if=\"state.icon !== false\" :class=\"nh.be('icon')\">\r\n            <Icon\r\n              v-if=\"typeof state.icon !== 'boolean'\"\r\n              v-bind=\"state.iconProps\"\r\n              :icon=\"state.icon\"\r\n            ></Icon>\r\n            <Icon\r\n              v-else\r\n              :scale=\"2.2\"\r\n              v-bind=\"{\r\n                ...(state.cancelable ? icons.question : icons.warning),\r\n                ...state.iconProps\r\n              }\"\r\n              :icon=\"(state.cancelable ? icons.question : icons.warning).icon\"\r\n            ></Icon>\r\n          </div>\r\n          <Renderer v-if=\"typeof state.content === 'function'\" :renderer=\"state.content\"></Renderer>\r\n          <template v-else>\r\n            <div v-if=\"state.parseHtml\" :class=\"nh.be('content')\" v-html=\"state.content\"></div>\r\n            <div v-else :class=\"nh.be('content')\">\r\n              {{ state.content }}\r\n            </div>\r\n          </template>\r\n        </div>\r\n        <div :class=\"[nh.be('footer'), nh.bem('footer', state.actionsAlign)]\">\r\n          <Button\r\n            v-if=\"state.cancelable\"\r\n            :class=\"[nh.be('button'), nh.bem('button', 'cancel')]\"\r\n            inherit\r\n            no-pulse\r\n            :type=\"state.cancelType\"\r\n            @click=\"handleCancel\"\r\n          >\r\n            {{ state.cancelText || locale.cancel }}\r\n          </Button>\r\n          <Button\r\n            :class=\"[nh.be('button'), nh.bem('button', 'confirm')]\"\r\n            inherit\r\n            no-pulse\r\n            :type=\"state.confirmType\"\r\n            :loading=\"state.loading\"\r\n            @click=\"handleConfirm\"\r\n          >\r\n            {{ state.confirmText || locale.confirm }}\r\n          </Button>\r\n        </div>\r\n      </template>\r\n    </Modal>\r\n  </div>\r\n</template>\r\n","import { createApp, createVNode, markRaw, render } from 'vue'\r\n\r\nimport Component from './confirm.vue'\r\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\r\nimport { destroyObject, isClient } from '@vexip-ui/utils'\r\n\r\nimport type { App, MaybeRef } from 'vue'\r\nimport type { MaybeInstance } from '@vexip-ui/hooks'\r\nimport type { ConfirmButtonType, ConfirmInstance, ConfirmOptions, ConfirmState } from './symbol'\r\n\r\nexport { confirmProps } from './props'\r\n\r\nexport type { ConfirmProps, ConfirmCProps } from './props'\r\nexport type { ConfirmButtonType, ConfirmOptions, ConfirmState }\r\n\r\ntype FuzzyOptions = string | ConfirmOptions\r\n\r\nComponent.name = 'Confirm'\r\n\r\nexport class ConfirmManager {\r\n  name: string\r\n  defaults: Record<string, unknown>\r\n\r\n  private _mountedApp: App<unknown> | null\r\n  private _instance: ConfirmInstance | null\r\n  private _innerApp: App<unknown> | null\r\n  private _container: HTMLElement | null\r\n  private _wrapper: HTMLElement | SVGElement | null\r\n  private _mountedEl: HTMLElement | null\r\n\r\n  constructor(options: Partial<ConfirmOptions> = {}) {\r\n    this._mountedApp = null\r\n    this._instance = null\r\n    this._innerApp = null\r\n    this._container = null\r\n    this._wrapper = null\r\n    this._mountedEl = null\r\n    this.name = 'Confirm'\r\n    this.defaults = {}\r\n\r\n    this.config(options)\r\n  }\r\n\r\n  open(content: string, type?: ConfirmButtonType): Promise<boolean>\r\n  open(options: ConfirmOptions): Promise<boolean>\r\n  open(content: string, title: string, type?: ConfirmButtonType): Promise<boolean>\r\n  open(options: FuzzyOptions, title?: string, type?: ConfirmButtonType) {\r\n    if (!isClient) {\r\n      return\r\n    }\r\n\r\n    if (typeof options === 'string') {\r\n      if (type) {\r\n        options = { title, content: options, confirmType: type }\r\n      } else {\r\n        options = { content: options, confirmType: title as ConfirmButtonType }\r\n      }\r\n    }\r\n\r\n    const item: ConfirmOptions = { ...this.defaults, ...options }\r\n\r\n    if (item.icon && typeof item.icon === 'object') {\r\n      item.icon = markRaw(item.icon)\r\n    }\r\n\r\n    return this._getInstance()?.openConfirm(item)\r\n  }\r\n\r\n  close() {\r\n    this._getInstance()?.closeConfirm()\r\n  }\r\n\r\n  config(options: Record<string, unknown>) {\r\n    this.defaults = { ...this.defaults, ...options }\r\n  }\r\n\r\n  clone() {\r\n    const manager = new ConfirmManager(this.defaults)\r\n\r\n    manager._mountedApp = this._mountedApp\r\n\r\n    return manager\r\n  }\r\n\r\n  destroy() {\r\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\r\n    this._innerApp?.unmount()\r\n    this._container && render(null, this._container)\r\n    destroyObject(this)\r\n  }\r\n\r\n  isDestroyed() {\r\n    return false\r\n  }\r\n\r\n  install(app: App, options: Partial<ConfirmOptions> & { property?: string } = {}) {\r\n    const { property, ...others } = options\r\n\r\n    this.config(others)\r\n    this._mountedApp = app\r\n\r\n    if (property || !app.config.globalProperties.$confirm) {\r\n      app.config.globalProperties[property || '$confirm'] = this\r\n    }\r\n  }\r\n\r\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\r\n    if (!isClient) return\r\n\r\n    const el = unrefElement(target)\r\n\r\n    if (el) {\r\n      this._wrapper = el\r\n\r\n      if (this._instance) {\r\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\r\n      } else {\r\n        this._getInstance()\r\n      }\r\n    }\r\n  }\r\n\r\n  private _getInstance() {\r\n    if (!this._instance && isClient) {\r\n      if (!this._mountedApp) {\r\n        console.warn('[vexip-ui:Confirm]: App missing, the plugin maybe not installed.')\r\n\r\n        this._container = document.createElement('div')\r\n        this._innerApp = createApp(Component)\r\n        this._instance = this._innerApp.mount(this._container) as ConfirmInstance\r\n      } else {\r\n        const vnode = createVNode(Component, null, null)\r\n\r\n        this._container = document.createElement('div')\r\n        vnode.appContext = this._mountedApp._context\r\n\r\n        render(vnode, this._container)\r\n\r\n        this._instance = proxyExposed<ConfirmInstance>(vnode)\r\n      }\r\n\r\n      this._mountedEl = this._container.firstElementChild as HTMLElement\r\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\r\n    }\r\n\r\n    return this._instance\r\n  }\r\n}\r\n\r\nexport const Confirm = new ConfirmManager()\r\n","import type { InjectionKey } from 'vue'\r\n\r\nexport type DropdownTrigger = 'hover' | 'click' | 'custom'\r\n\r\ntype SelectHandler = (labels: (string | number)[], metas: Array<Record<string, any>>) => void\r\n\r\nexport interface DropdownState {\r\n  alive: boolean,\r\n  shift: boolean,\r\n  handleSelect: SelectHandler,\r\n  handleTriggerEnter: () => void,\r\n  handleTriggerLeave: () => void,\r\n}\r\n\r\nexport const SELECT_HANDLER = '__VXP_SELECT_HANDLER' as unknown as InjectionKey<SelectHandler>\r\nexport const DROPDOWN_STATE = '__VXP_DROPDOWN_STATE' as unknown as InjectionKey<DropdownState>\r\n","import { defineComponent, inject, provide, renderSlot } from 'vue'\r\n\r\nimport { DROPDOWN_STATE, SELECT_HANDLER } from './symbol'\r\n\r\nexport default defineComponent({\r\n  setup(_, { slots }) {\r\n    const dropdownState = inject(DROPDOWN_STATE, null)\r\n\r\n    dropdownState && provide(SELECT_HANDLER, dropdownState.handleSelect)\r\n\r\n    return () => renderSlot(slots, 'default')\r\n  },\r\n})\r\n","import {\r\n  booleanProp,\r\n  booleanStringProp,\r\n  buildProps,\r\n  classProp,\r\n  eventProp,\r\n  wrapProps,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { Placement } from '@vexip-ui/hooks'\r\nimport type { DropdownTrigger } from './symbol'\r\n\r\nexport const dropdownProps = buildProps({\r\n  visible: booleanProp,\r\n  placement: String as PropType<Placement>,\r\n  outsideClose: booleanProp,\r\n  trigger: String as PropType<DropdownTrigger>,\r\n  label: [String, Number],\r\n  transitionName: String,\r\n  transfer: booleanStringProp,\r\n  dropClass: classProp,\r\n  appear: booleanProp,\r\n  meta: Object as PropType<Record<string, any>>,\r\n  alive: booleanProp,\r\n  custom: booleanProp,\r\n  shift: booleanProp,\r\n  onToggle: eventProp<(visible: boolean) => void>(),\r\n  onSelect: eventProp<(labels: (string | number)[], metas: Array<Record<string, any>>) => void>(),\r\n  onClickOutside: eventProp(),\r\n  onOutsideClose: eventProp(),\r\n})\r\n\r\nexport type DropdownProps = ExtractPropTypes<typeof dropdownProps>\r\nexport type DropdownCProps = ConfigurableProps<DropdownProps>\r\n\r\nexport const dropdownItemProps = wrapProps({\r\n  label: {\r\n    type: [String, Number],\r\n    default: null,\r\n  },\r\n  disabled: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  selected: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  divided: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  reference: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  meta: {\r\n    type: Object,\r\n    default: () => ({}),\r\n  },\r\n  onSelect: eventProp<(label: string | number) => void>(),\r\n})\r\n\r\nexport type DropdownItemProps = ExtractPropTypes<typeof dropdownItemProps>\r\n","import { nextTick, onMounted, ref, watch } from 'vue'\r\n\r\nimport type { Ref } from 'vue'\r\n\r\nexport function useLabel(\r\n  rawLabel: Ref<string | number | null>,\r\n  element: Ref<HTMLElement | null | undefined>,\r\n) {\r\n  const label = ref(rawLabel.value)\r\n\r\n  function setLabel(value: string | number | null) {\r\n    if (element.value) {\r\n      label.value = value ?? element.value.textContent?.trim() ?? null\r\n    } else {\r\n      label.value = value\r\n    }\r\n  }\r\n\r\n  watch(rawLabel, value => {\r\n    setLabel(value)\r\n  })\r\n\r\n  onMounted(() => {\r\n    nextTick(() => {\r\n      setLabel(rawLabel.value)\r\n    })\r\n  })\r\n\r\n  return label\r\n}\r\n","<script setup lang=\"ts\">\r\nimport { Popper } from '@/components/popper'\r\n\r\nimport { computed, inject, nextTick, onMounted, provide, reactive, ref, toRef, watch } from 'vue'\r\n\r\nimport {\r\n  placementWhileList,\r\n  useClickOutside,\r\n  usePopper,\r\n  useRtl,\r\n  useSetTimeout,\r\n} from '@vexip-ui/hooks'\r\nimport { emitEvent, useHoverDelay, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport DropdownDrop from './dropdown-drop'\r\nimport { dropdownProps } from './props'\r\nimport { useLabel } from './hooks'\r\nimport { DROPDOWN_STATE, SELECT_HANDLER } from './symbol'\r\n\r\nimport type { PopperExposed } from '@/components/popper'\r\nimport type { Placement } from '@vexip-ui/hooks'\r\n\r\ndefineOptions({ name: 'Dropdown' })\r\n\r\nconst nh = useNameHelper('dropdown')\r\n\r\nconst _props = defineProps(dropdownProps)\r\nconst props = useProps('dropdown', _props, {\r\n  visible: {\r\n    default: false,\r\n    static: true,\r\n  },\r\n  placement: {\r\n    default: 'bottom',\r\n    validator: value => placementWhileList.includes(value),\r\n  },\r\n  outsideClose: true,\r\n  trigger: {\r\n    default: 'hover',\r\n    validator: value => ['hover', 'click', 'custom'].includes(value),\r\n  },\r\n  label: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  transitionName: () => nh.ns('drop'),\r\n  transfer: false,\r\n  dropClass: null,\r\n  appear: false,\r\n  meta: null,\r\n  alive: false,\r\n  custom: false,\r\n  shift: true,\r\n})\r\n\r\nconst emit = defineEmits(['update:visible'])\r\n\r\nconst parentState = inject(DROPDOWN_STATE, null)\r\nconst { isRtl } = useRtl()\r\nconst hoverDelay = useHoverDelay()\r\n\r\nconst isNested = !!parentState\r\nconst label = toRef(props, 'label')\r\nconst placement = ref(props.placement)\r\nconst currentVisible = ref(props.visible)\r\nconst popperAlive = ref(false)\r\n\r\nconst transfer = isNested ? ref(false) : toRef(props, 'transfer')\r\n\r\nconst shift = computed(() => !!(parentState?.shift || props.shift))\r\n\r\nconst wrapper = useClickOutside(handleClickOutside)\r\nconst popper = ref<PopperExposed>()\r\nconst { reference, transferTo, updatePopper } = usePopper({\r\n  placement,\r\n  shift,\r\n  transfer,\r\n  wrapper,\r\n  popper: computed(() => popper.value?.wrapper),\r\n  isDrop: true,\r\n  offset: isNested ? [-5, 0] : undefined,\r\n})\r\nconst currentLabel = useLabel(label, reference)\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm('visible')]: currentVisible.value,\r\n  }\r\n})\r\nconst isAlive = computed(() => parentState?.alive || props.alive)\r\n\r\nprovide(SELECT_HANDLER, null!)\r\n!props.custom &&\r\n  provide(\r\n    DROPDOWN_STATE,\r\n    reactive({\r\n      alive: isAlive,\r\n      shift,\r\n      handleSelect,\r\n      handleTriggerEnter,\r\n      handleTriggerLeave,\r\n    }),\r\n  )\r\n\r\nwatch(\r\n  () => props.visible,\r\n  value => {\r\n    currentVisible.value = value\r\n  },\r\n)\r\n\r\nwatch(\r\n  () => props.placement,\r\n  value => {\r\n    setPlacement(value)\r\n  },\r\n)\r\n\r\nwatch(currentVisible, value => {\r\n  if (value) {\r\n    updatePopper()\r\n  }\r\n})\r\n\r\nonMounted(() => {\r\n  nextTick(() => {\r\n    setPlacement(props.placement)\r\n  })\r\n})\r\n\r\ndefineExpose({\r\n  isNested,\r\n  currentVisible,\r\n  isAlive,\r\n  wrapper,\r\n  reference,\r\n  popper,\r\n  handleTriggerEnter,\r\n  handleTriggerLeave,\r\n  handleTriggerClick,\r\n})\r\n\r\nfunction setVisible(visible: boolean) {\r\n  if (currentVisible.value === visible) return\r\n\r\n  currentVisible.value = visible\r\n\r\n  emit('update:visible', visible)\r\n  emitEvent(props.onToggle, visible)\r\n}\r\n\r\nfunction handleClickOutside() {\r\n  emitEvent(props.onClickOutside)\r\n\r\n  if (props.outsideClose && props.trigger !== 'custom' && currentVisible.value) {\r\n    setVisible(false)\r\n    emitEvent(props.onOutsideClose)\r\n  }\r\n}\r\n\r\nfunction handleSelect(labels: (string | number)[], metaList: Array<Record<string, any>>) {\r\n  if (props.trigger !== 'custom') {\r\n    setVisible(false)\r\n    emitEvent(props.onSelect, labels, metaList)\r\n  }\r\n\r\n  if (typeof parentState?.handleSelect === 'function') {\r\n    parentState.handleSelect([currentLabel.value!, ...labels], [props.meta || {}, ...metaList])\r\n  }\r\n}\r\n\r\nfunction setPlacement(value: Placement) {\r\n  const [xPlacement] = value.split('-')\r\n\r\n  if (isNested && xPlacement !== 'right' && xPlacement !== 'left') {\r\n    placement.value = isRtl.value ? 'left-start' : 'right-start'\r\n  } else {\r\n    placement.value = value\r\n  }\r\n}\r\n\r\nconst { timer } = useSetTimeout()\r\n\r\nfunction handleTriggerEnter() {\r\n  if (props.trigger === 'hover') {\r\n    clearTimeout(timer.hover)\r\n\r\n    if (typeof parentState?.handleTriggerEnter === 'function') {\r\n      parentState.handleTriggerEnter()\r\n    }\r\n\r\n    timer.hover = setTimeout(() => {\r\n      setVisible(true)\r\n    }, hoverDelay.value)\r\n  }\r\n}\r\n\r\nfunction handleTriggerLeave() {\r\n  if (props.trigger === 'hover') {\r\n    clearTimeout(timer.hover)\r\n\r\n    if (typeof parentState?.handleTriggerLeave === 'function') {\r\n      parentState.handleTriggerLeave()\r\n    }\r\n\r\n    timer.hover = setTimeout(() => {\r\n      setVisible(false)\r\n    }, hoverDelay.value)\r\n  }\r\n}\r\n\r\nfunction handleTriggerClick() {\r\n  if (props.trigger === 'click') {\r\n    setVisible(!currentVisible.value)\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    @mouseenter=\"handleTriggerEnter\"\r\n    @mouseleave=\"handleTriggerLeave\"\r\n  >\r\n    <div\r\n      ref=\"reference\"\r\n      :class=\"[nh.be('trigger'), currentVisible ? nh.bem('trigger', 'active') : '']\"\r\n      @click=\"handleTriggerClick\"\r\n      @keydown.enter.prevent=\"handleTriggerClick\"\r\n      @keydown.space.prevent=\"handleTriggerClick\"\r\n    >\r\n      <slot></slot>\r\n    </div>\r\n    <DropdownDrop>\r\n      <Popper\r\n        ref=\"popper\"\r\n        :class=\"[\r\n          nh.be('popper'),\r\n          nh.bs('vars'),\r\n          isNested ? nh.bem('popper', 'nested') : null,\r\n          props.dropClass\r\n        ]\"\r\n        :visible=\"currentVisible\"\r\n        :alive=\"isAlive || popperAlive\"\r\n        :to=\"transferTo\"\r\n        :transition=\"props.transitionName\"\r\n        :appear=\"props.appear\"\r\n        @mouseenter=\"handleTriggerEnter\"\r\n        @mouseleave=\"handleTriggerLeave\"\r\n        @after-enter=\"popperAlive = true\"\r\n        @after-leave=\"popperAlive = false\"\r\n      >\r\n        <slot name=\"drop\"></slot>\r\n      </Popper>\r\n    </DropdownDrop>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { useNameHelper } from '@vexip-ui/config'\r\n\r\ndefineOptions({ name: 'DropdownList' })\r\n\r\nconst nh = useNameHelper('dropdown')\r\n</script>\r\n\r\n<template>\r\n  <ul :class=\"nh.be('list')\" role=\"menu\">\r\n    <slot></slot>\r\n  </ul>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed, inject, ref, toRef } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper } from '@vexip-ui/config'\r\nimport { dropdownItemProps } from './props'\r\nimport { useLabel } from './hooks'\r\nimport { SELECT_HANDLER } from './symbol'\r\n\r\ndefineOptions({ name: 'DropdownItem' })\r\n\r\nconst props = defineProps(dropdownItemProps)\r\n\r\nconst parentSelectHandler = inject(SELECT_HANDLER, null)\r\n\r\nconst nh = useNameHelper('dropdown')\r\nconst wrapper = ref(null)\r\nconst label = toRef(props, 'label')\r\nconst isReference = ref(props.reference)\r\n\r\nconst currentLabel = useLabel(label, wrapper)\r\n\r\nconst className = computed(() => {\r\n  const baseClass = nh.be('item')\r\n\r\n  return {\r\n    [baseClass]: true,\r\n    [`${baseClass}--disabled`]: props.disabled,\r\n    [`${baseClass}--selected`]: !props.disabled && props.selected,\r\n    [`${baseClass}--divided`]: props.divided,\r\n  }\r\n})\r\n\r\ndefineExpose({ wrapper, handleSelect })\r\n\r\nfunction handleSelect() {\r\n  if (props.disabled || isReference.value) {\r\n    return\r\n  }\r\n\r\n  if (typeof parentSelectHandler === 'function') {\r\n    parentSelectHandler([currentLabel.value!], [props.meta || {}])\r\n  }\r\n\r\n  emitEvent(props.onSelect!, currentLabel.value!)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <li\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"menuitem\"\r\n    tabindex=\"0\"\r\n    @click=\"handleSelect\"\r\n  >\r\n    <slot></slot>\r\n  </li>\r\n</template>\r\n","import { Dropdown } from '@/components/dropdown'\r\nimport { DropdownList } from '@/components/dropdown-list'\r\nimport { DropdownItem } from '@/components/dropdown-item'\r\nimport { Icon } from '@/components/icon'\r\n\r\nimport { useIcons } from '@vexip-ui/config'\r\nimport { useRtl } from '@vexip-ui/hooks'\r\n\r\nimport type { NameHelper } from '@vexip-ui/config'\r\nimport type { ContextmenuConfig } from './symbol'\r\n\r\nfunction renderItemIcon(item: ContextmenuConfig, nh: NameHelper) {\r\n  if (!item.icon) return null\r\n\r\n  return (\r\n    <div class={nh.be('icon')}>\r\n      <Icon\r\n        icon={item.icon}\r\n        style={[{ color: item.iconColor || item.color }, (item.icon as any).style]}\r\n      ></Icon>\r\n    </div>\r\n  )\r\n}\r\n\r\nfunction renderItemShortcut(item: ContextmenuConfig, nh: NameHelper) {\r\n  if (!item.shortcut) return null\r\n\r\n  return <div class={nh.be('shortcut')}>{item.shortcut}</div>\r\n}\r\n\r\nfunction renderGroupItem(item: ContextmenuConfig, nh: NameHelper) {\r\n  const icons = useIcons()\r\n  const { isRtl } = useRtl()\r\n\r\n  return (\r\n    <Dropdown\r\n      inherit\r\n      transfer={false}\r\n      {...{\r\n        onContextmenu: (event: MouseEvent) => {\r\n          event.preventDefault()\r\n          event.stopPropagation()\r\n        },\r\n      }}\r\n    >\r\n      {{\r\n        default: () => (\r\n          <DropdownItem\r\n            class={nh.be('item')}\r\n            label={item.key}\r\n            divided={item.divided}\r\n            disabled={item.disabled}\r\n          >\r\n            {renderItemIcon(item, nh)}\r\n            {typeof item.renderer === 'function' ? (\r\n              item.renderer()\r\n            ) : (\r\n              <span class={nh.be('label')} style={{ color: item.color }}>\r\n                {item.label || item.key}\r\n              </span>\r\n            )}\r\n            {renderItemShortcut(item, nh)}\r\n            <div class={[nh.be('icon'), nh.be('arrow')]}>\r\n              <Icon\r\n                {...(isRtl.value ? icons.value.angleLeft : icons.value.angleRight)}\r\n                style={{ color: item.iconColor || item.color }}\r\n              ></Icon>\r\n            </div>\r\n          </DropdownItem>\r\n        ),\r\n        drop: () => (\r\n          <DropdownList\r\n            class={[\r\n              nh.be('list'),\r\n              item.children!.some(c => c.icon)\r\n                ? nh.bem('list', 'icons')\r\n                : nh.bem('list', 'no-icon'),\r\n              item.children!.some(c => c.children?.length)\r\n                ? nh.bem('list', 'arrows')\r\n                : nh.bem('list', 'no-arrow'),\r\n            ]}\r\n          >\r\n            {item.children!.map(i => renderItem({ nh, config: i }))}\r\n          </DropdownList>\r\n        ),\r\n      }}\r\n    </Dropdown>\r\n  )\r\n}\r\n\r\nexport function renderItem({ config, nh }: { config: ContextmenuConfig, nh: NameHelper }) {\r\n  if (config.children?.length) {\r\n    return renderGroupItem(config, nh)\r\n  } else {\r\n    return (\r\n      <DropdownItem\r\n        class={nh.be('item')}\r\n        label={config.key}\r\n        divided={config.divided}\r\n        disabled={config.disabled}\r\n      >\r\n        {renderItemIcon(config, nh)}\r\n        {typeof config.renderer === 'function' ? (\r\n          config.renderer()\r\n        ) : (\r\n          <span class={nh.be('label')} style={{ color: config.color }}>\r\n            {config.label || config.key}\r\n          </span>\r\n        )}\r\n        {renderItemShortcut(config, nh)}\r\n      </DropdownItem>\r\n    )\r\n  }\r\n}\r\n","<script setup lang=\"ts\">\r\nimport { Dropdown } from '@/components/dropdown'\r\nimport { DropdownList } from '@/components/dropdown-list'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { reactive, ref } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { useRtl } from '@vexip-ui/hooks'\r\nimport { isFunction } from '@vexip-ui/utils'\r\nimport { renderItem } from './render'\r\n\r\nimport type { ContextmenuConfig, ContextmenuOptions, Key } from './symbol'\r\n\r\ndefineOptions({ name: 'Contextmenu' })\r\n\r\nconst nh = useNameHelper('contextmenu')\r\nconst { isRtl } = useRtl()\r\nconst visible = ref(false)\r\nconst configs = ref<ContextmenuConfig[]>([])\r\nconst appear = ref(false)\r\n\r\nconst position = reactive({\r\n  x: 0,\r\n  y: 0,\r\n})\r\n\r\nconst onSelect = ref<((keys: Key[]) => void) | null>(null)\r\nconst onCancel = ref<(() => void) | null>(null)\r\n\r\nfunction openContextmenu(options: ContextmenuOptions) {\r\n  position.x = options.clientX || 0\r\n  position.y = options.clientY || 0\r\n  configs.value = options.configs\r\n  appear.value = options.appear ?? false\r\n\r\n  visible.value = true\r\n\r\n  return new Promise<Key[] | null>(resolve => {\r\n    onSelect.value = (keys: Key[]) => {\r\n      resolve(keys)\r\n    }\r\n    onCancel.value = () => {\r\n      resolve(null)\r\n    }\r\n  })\r\n}\r\n\r\nfunction afterContextmenu() {\r\n  onSelect.value = null\r\n  onCancel.value = null\r\n}\r\n\r\nfunction handleSelect(keys: Key[]) {\r\n  visible.value = false\r\n\r\n  if (isFunction(onSelect.value)) {\r\n    onSelect.value(keys)\r\n    afterContextmenu()\r\n  }\r\n}\r\n\r\nfunction handleCancel() {\r\n  visible.value = false\r\n\r\n  if (isFunction(onCancel.value)) {\r\n    onCancel.value()\r\n    afterContextmenu()\r\n  }\r\n}\r\n\r\ndefineExpose({ visible, position, openContextmenu, handleSelect, handleCancel })\r\n</script>\r\n\r\n<template>\r\n  <Dropdown\r\n    v-model:visible=\"visible\"\r\n    :class=\"[nh.b(), nh.bs('vars')]\"\r\n    trigger=\"click\"\r\n    :placement=\"isRtl ? 'left-start' : 'right-start'\"\r\n    :appear=\"appear\"\r\n    :transfer=\"false\"\r\n    :style=\"{\r\n      top: `${position.y}px`,\r\n      left: `${position.x}px`\r\n    }\"\r\n    @contextmenu.prevent.stop\r\n    @select=\"handleSelect\"\r\n    @outside-close=\"handleCancel\"\r\n  >\r\n    <!-- <div :class=\"nh.be('anchor')\"></div> -->\r\n    <template #drop>\r\n      <DropdownList\r\n        :class=\"[\r\n          nh.be('list'),\r\n          configs.some(c => c.icon) ? nh.bem('list', 'icons') : nh.bem('list', 'no-icon'),\r\n          configs.some(c => c.children && c.children.length)\r\n            ? nh.bem('list', 'arrows')\r\n            : nh.bem('list', 'no-arrow')\r\n        ]\"\r\n      >\r\n        <Renderer\r\n          v-for=\"item in configs\"\r\n          :key=\"item.key\"\r\n          :data=\"{ config: item, nh }\"\r\n          :renderer=\"renderItem\"\r\n        ></Renderer>\r\n      </DropdownList>\r\n    </template>\r\n  </Dropdown>\r\n</template>\r\n","import { createApp, createVNode, render } from 'vue'\r\n\r\nimport Component from './contextmenu.vue'\r\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\r\nimport { destroyObject, isClient } from '@vexip-ui/utils'\r\n\r\nimport type { App, MaybeRef } from 'vue'\r\nimport type { MaybeInstance } from '@vexip-ui/hooks'\r\nimport type { ContextmenuConfig, ContextmenuInstance, ContextmenuOptions, Key } from './symbol'\r\n\r\nexport type { ContextmenuConfig, ContextmenuOptions }\r\n\r\nexport class ContextmenuManager {\r\n  name: string\r\n\r\n  private _mountedApp: App<unknown> | null\r\n  private _instance: ContextmenuInstance | null\r\n  private _innerApp: App<unknown> | null\r\n  private _container: HTMLElement | null\r\n  private _pending: Promise<Key[] | null> | null\r\n  private _wrapper: HTMLElement | SVGElement | null\r\n  private _mountedEl: HTMLElement | null\r\n\r\n  constructor() {\r\n    this._mountedApp = null\r\n    this._instance = null\r\n    this._innerApp = null\r\n    this._container = null\r\n    this._pending = null\r\n    this._wrapper = null\r\n    this._mountedEl = null\r\n    this.name = 'Contextmenu'\r\n  }\r\n\r\n  open(options: ContextmenuOptions) {\r\n    if (!isClient) {\r\n      return\r\n    }\r\n\r\n    const { target = document.body, ...others } = options\r\n\r\n    this._pending = this._getInstance(target)!.openContextmenu(others)\r\n\r\n    return this._pending\r\n  }\r\n\r\n  destroy() {\r\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\r\n    this._innerApp?.unmount()\r\n    this._container && render(null, this._container)\r\n    destroyObject(this)\r\n  }\r\n\r\n  isDestroyed() {\r\n    return false\r\n  }\r\n\r\n  install(app: App, options: { property?: string } = {}) {\r\n    const { property } = options\r\n\r\n    this._mountedApp = app\r\n\r\n    if (property || !app.config.globalProperties.$contextmenu) {\r\n      app.config.globalProperties[property || '$contextmenu'] = this\r\n    }\r\n  }\r\n\r\n  private _getInstance(target: MaybeRef<string | MaybeInstance>) {\r\n    if (!isClient) return\r\n\r\n    if (this._pending) {\r\n      let innerApp = this._innerApp\r\n      let container = this._container\r\n\r\n      const unmount = () => {\r\n        innerApp?.unmount()\r\n        container && render(null, container)\r\n\r\n        innerApp = null\r\n        container = null\r\n      }\r\n\r\n      this._pending.finally(unmount)\r\n      this._instance?.handleCancel()\r\n    } else {\r\n      this._innerApp?.unmount()\r\n      this._container && render(null, this._container)\r\n    }\r\n\r\n    this._pending = null\r\n\r\n    if (!this._mountedApp) {\r\n      console.warn('[vexip-ui:Contextmenu]: App missing, the plugin maybe not installed.')\r\n\r\n      this._container = document.createElement('div')\r\n      this._innerApp = createApp(Component)\r\n      this._instance = this._innerApp.mount(this._container) as ContextmenuInstance\r\n    } else {\r\n      const vnode = createVNode(Component, null, null)\r\n\r\n      this._container = document.createElement('div')\r\n      vnode.appContext = this._mountedApp._context\r\n\r\n      render(vnode, this._container)\r\n\r\n      this._instance = proxyExposed<ContextmenuInstance>(vnode)\r\n    }\r\n\r\n    this._mountedEl = this._container.firstElementChild as HTMLElement\r\n    this._wrapper = unrefElement(target) || document.body\r\n\r\n    this._wrapper.appendChild(this._mountedEl)\r\n\r\n    return this._instance\r\n  }\r\n}\r\n\r\nexport const Contextmenu = new ContextmenuManager()\r\n","import type { Dateable } from '@vexip-ui/utils'\r\nimport type { CalendarPanelSlots } from '../calendar'\r\nimport type { WheelSlots } from '../wheel'\r\n\r\nexport type DateType = 'year' | 'month' | 'date'\r\nexport type TimeType = 'hour' | 'minute' | 'second'\r\nexport type DateTimeType = DateType | TimeType\r\n\r\nexport type DatePickerType = 'date' | 'datetime' | 'year' | 'month'\r\nexport type DateShortcutsPlacement = 'top' | 'right' | 'bottom' | 'left'\r\nexport type TimeShortcutsPlacement = DateShortcutsPlacement\r\n\r\nexport type DatePickerFormatFn = (timestamp: number, type: 'start' | 'end') => unknown\r\n\r\nexport interface DateShortcut {\r\n  name: string,\r\n  value: Dateable | Dateable[] | (() => Dateable | Dateable[]),\r\n}\r\n\r\nexport interface TimeShortcut {\r\n  name: string,\r\n  value: string | string[] | (() => string | string[]),\r\n}\r\n\r\nexport interface DatePickerState {\r\n  type: DatePickerType,\r\n  currentColumn: DateTimeType,\r\n  enabled: Record<DateTimeType, boolean>,\r\n  activated: Record<DateTimeType, boolean>,\r\n  dateValue: Record<DateTimeType, number>,\r\n  enterColumn(type: 'prev' | 'next'): void,\r\n}\r\n\r\nexport interface DisabledTime {\r\n  hour?(hour: number): boolean,\r\n  minute?(hour: number, minute: number): boolean,\r\n  second?(hour: number, minute: number, second: number): boolean,\r\n}\r\n\r\nexport const enum DisabledType {\r\n  UPSTREAM,\r\n  TRUE,\r\n  AT_MIN_TRUE,\r\n  AT_MAX_TRUE,\r\n  FALSE,\r\n}\r\n\r\nexport type DatePickerChangeEvent = (value: number | number[] | null) => void\r\nexport type TimePickerChangeEvent = (value: string | string[]) => void\r\n\r\nexport const datePickerTypes = Object.freeze<DatePickerType[]>([\r\n  'date',\r\n  'datetime',\r\n  'year',\r\n  'month',\r\n])\r\n\r\nexport const invalidDate = new Date('')\r\n\r\n// export const TIME_REG = /^((?:[01]?[0-9])|(?:2[0-3]))((?::[0-5]?[0-9]))?((?::[0-5]?[0-9]))?$/\r\nexport const TIME_REG = /^((?:\\d{1,2}))((?::\\d{1,2}))?((?::\\d{1,2}))?$/\r\n\r\nexport interface TimeWheelSlots {\r\n  hour?: WheelSlots['default'],\r\n  minute?: WheelSlots['default'],\r\n  second?: WheelSlots['default'],\r\n}\r\n\r\nexport interface DatePanelSlots {\r\n  title?: (params: {\r\n    panel: DateType,\r\n    yearStart: number,\r\n    year: number,\r\n    month: number,\r\n    togglePanel: (panel: DateType) => void,\r\n  }) => any,\r\n  year?: (params: {\r\n    year: number,\r\n    selected: boolean,\r\n    isNext: boolean,\r\n    disabled: boolean,\r\n    inRange: boolean,\r\n  }) => any,\r\n  month?: (params: {\r\n    year: number,\r\n    month: number,\r\n    selected: boolean,\r\n    disabled: boolean,\r\n    inRange: boolean,\r\n  }) => any,\r\n  week?: CalendarPanelSlots['week'],\r\n  date?: CalendarPanelSlots['item'],\r\n}\r\n\r\nexport interface DatePickerSlots {\r\n  prefix?: () => any,\r\n  suffix?: () => any,\r\n  exchange?: () => any,\r\n  panelTitle?: DatePanelSlots['title'],\r\n  panelYear?: DatePanelSlots['year'],\r\n  panelMonth?: DatePanelSlots['month'],\r\n  panelWeek?: DatePanelSlots['week'],\r\n  panelDate?: DatePanelSlots['date'],\r\n}\r\n\r\nexport interface TimePickerSlots {\r\n  prefix?: () => any,\r\n  exchange?: () => any,\r\n  suffix?: () => any,\r\n}\r\n","import { computed, reactive, ref } from 'vue'\r\n\r\nimport { getLast, toNumber } from '@vexip-ui/utils'\r\nimport { DisabledType } from './symbol'\r\n\r\nimport type { Ref } from 'vue'\r\nimport type { DisabledTime } from './symbol'\r\n\r\ntype Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9\r\n\r\nconst numberKeys = Array.from({ length: 10 }, (_, i) => i) as Digit[]\r\n\r\nfunction isNumberKey(key: string, num: Digit) {\r\n  return key === `Digit${num}` || key === `Numpad${num}` || key === `${num}`\r\n}\r\n\r\nexport function handleKeyEnter(event: KeyboardEvent) {\r\n  const key = event.code || event.key\r\n\r\n  let type: null | number | 'next' | 'prev' | 'up' | 'down' | 'ok' | 'esc' = null\r\n  let isMatch = false\r\n\r\n  switch (key) {\r\n    case 'Tab': {\r\n      isMatch = true\r\n      type = event.shiftKey ? 'prev' : 'next'\r\n      break\r\n    }\r\n    case 'ArrowRight': {\r\n      // 下一列\r\n      isMatch = true\r\n      type = 'next'\r\n      break\r\n    }\r\n    case 'Delete':\r\n    case 'ArrowLeft': {\r\n      // 上一列\r\n      isMatch = true\r\n      type = 'prev'\r\n      break\r\n    }\r\n    case 'ArrowUp': {\r\n      // 加一\r\n      isMatch = true\r\n      type = 'up'\r\n      break\r\n    }\r\n    case 'ArrowDown': {\r\n      // 减一\r\n      isMatch = true\r\n      type = 'down'\r\n      break\r\n    }\r\n    case 'Space':\r\n    case ' ':\r\n    case 'Enter':\r\n    case 'NumpadEnter': {\r\n      // 确认\r\n      isMatch = true\r\n      type = 'ok'\r\n      break\r\n    }\r\n    case 'Escape': {\r\n      // 取消\r\n      isMatch = true\r\n      type = 'esc'\r\n      break\r\n    }\r\n  }\r\n\r\n  if (isMatch) {\r\n    event.preventDefault()\r\n    event.stopPropagation()\r\n  } else {\r\n    // 键入数字\r\n    const inputtedNumber = numberKeys.findIndex(num => isNumberKey(key, num))\r\n\r\n    if (~inputtedNumber) {\r\n      type = inputtedNumber\r\n\r\n      event.preventDefault()\r\n      event.stopPropagation()\r\n    }\r\n  }\r\n\r\n  return type\r\n}\r\n\r\nexport function useColumn<T extends string>(\r\n  colTypes: T[],\r\n  currentColumn = ref(colTypes[0]) as Ref<T | null>,\r\n) {\r\n  const columnTypes = Array.from(colTypes)\r\n  const columnCount = columnTypes.length\r\n  const enabled = reactive(\r\n    columnTypes.reduce((prev, current) => {\r\n      prev[current] = false\r\n      return prev\r\n    }, {} as any),\r\n  ) as Record<T, boolean>\r\n\r\n  function findEnabledColumn(types: T[]) {\r\n    currentColumn.value = types.find(type => enabled[type]) ?? currentColumn.value\r\n  }\r\n\r\n  function resetColumn(type?: T | null, reverse = false) {\r\n    if (!type) {\r\n      currentColumn.value = null\r\n    }\r\n\r\n    const types = reverse ? Array.from(columnTypes).reverse() : columnTypes\r\n    const index = types.findIndex(column => column === type)\r\n\r\n    if (~index) {\r\n      findEnabledColumn(types.slice(index, columnCount).concat(types.slice(0, index)))\r\n    } else {\r\n      findEnabledColumn(types)\r\n    }\r\n  }\r\n\r\n  function enterColumn(type: 'prev' | 'next', canLoop = true) {\r\n    if (!currentColumn.value) {\r\n      currentColumn.value = (type === 'next' ? getLast(columnTypes) : columnTypes[0]) ?? null\r\n    }\r\n\r\n    for (let i = 0; i < columnCount; ++i) {\r\n      if (currentColumn.value === columnTypes[i]) {\r\n        const rawTypes = type === 'prev' ? Array.from(columnTypes).reverse() : columnTypes\r\n        const nextIndex = (type === 'prev' ? columnCount - i : i + 1) % columnCount\r\n        const types = canLoop\r\n          ? rawTypes.slice(nextIndex, columnCount).concat(rawTypes.slice(0, nextIndex))\r\n          : nextIndex\r\n            ? rawTypes.slice(nextIndex, columnCount)\r\n            : []\r\n\r\n        findEnabledColumn(types)\r\n\r\n        break\r\n      }\r\n    }\r\n  }\r\n\r\n  return {\r\n    currentColumn,\r\n    enabled,\r\n    resetColumn,\r\n    enterColumn,\r\n  }\r\n}\r\n\r\nconst defaultMin = [0, 0, 0]\r\nconst defaultMax = [23, 59, 59]\r\n\r\nexport function useTimeBound(originMin: Ref<string>, originMax: Ref<string>) {\r\n  const minUnits = computed(() => {\r\n    return originMin.value ? originMin.value.split(':').map(toNumber) : defaultMin\r\n  })\r\n  const maxUnits = computed(() => {\r\n    return originMax.value ? originMax.value.split(':').map(toNumber) : defaultMax\r\n  })\r\n  const reversed = computed(() => {\r\n    const min = minUnits.value\r\n    const max = maxUnits.value\r\n\r\n    for (let i = 0; i < 3; ++i) {\r\n      if (min[i] < max[i]) return false\r\n      if (min[i] > max[i]) return true\r\n    }\r\n\r\n    return false\r\n  })\r\n\r\n  const isTimeDisabled: Required<DisabledTime> = {\r\n    hour: isHourDisabled,\r\n    minute: (hour, minute) => isMinuteDisabled(hour, minute) !== DisabledType.FALSE,\r\n    second: (hour, minute, second) => isSecondDisabled(hour, minute, second) !== DisabledType.FALSE,\r\n  }\r\n\r\n  function isHourDisabled(hour: number) {\r\n    const min = minUnits.value[0] || defaultMin[0]\r\n    const max = maxUnits.value[0] || defaultMax[0]\r\n\r\n    return reversed.value ? hour > max && hour < min : hour < min || hour > max\r\n  }\r\n\r\n  function isMinuteDisabled(hour: number, minute: number) {\r\n    if (isHourDisabled(hour)) return DisabledType.UPSTREAM\r\n\r\n    if (minUnits.value[0] === maxUnits.value[0] && hour === minUnits.value[0]) {\r\n      const min = minUnits.value[1] || defaultMin[1]\r\n      const max = maxUnits.value[1] || defaultMax[1]\r\n\r\n      if (reversed.value ? minute > max && minute < min : minute < min || minute > max) {\r\n        return DisabledType.TRUE\r\n      }\r\n    }\r\n\r\n    if (hour === minUnits.value[0]) {\r\n      const min = minUnits.value[1] || defaultMin[1]\r\n\r\n      if (minute < min) return DisabledType.AT_MIN_TRUE\r\n    }\r\n\r\n    if (hour === maxUnits.value[0]) {\r\n      const max = maxUnits.value[1] || defaultMax[1]\r\n\r\n      if (minute > max) return DisabledType.AT_MAX_TRUE\r\n    }\r\n\r\n    return DisabledType.FALSE\r\n  }\r\n\r\n  function isSecondDisabled(hour: number, minute: number, second: number) {\r\n    if (isMinuteDisabled(hour, minute) !== DisabledType.FALSE) return DisabledType.UPSTREAM\r\n\r\n    if (\r\n      minUnits.value[0] === maxUnits.value[0] &&\r\n      hour === minUnits.value[0] &&\r\n      minUnits.value[1] === maxUnits.value[1] &&\r\n      minute === minUnits.value[1]\r\n    ) {\r\n      const min = minUnits.value[2] || defaultMin[2]\r\n      const max = maxUnits.value[2] || defaultMax[2]\r\n\r\n      if (reversed.value ? second > max && second < min : second < min || second > max) {\r\n        return DisabledType.TRUE\r\n      }\r\n    }\r\n\r\n    if (hour === minUnits.value[0] && minute === minUnits.value[1]) {\r\n      const min = minUnits.value[2] || defaultMin[2]\r\n\r\n      if (second < min) return DisabledType.AT_MIN_TRUE\r\n    }\r\n\r\n    if (hour === maxUnits.value[0] && minute === maxUnits.value[1]) {\r\n      const max = maxUnits.value[2] || defaultMax[2]\r\n\r\n      if (second > max) return DisabledType.AT_MAX_TRUE\r\n    }\r\n\r\n    return DisabledType.FALSE\r\n  }\r\n\r\n  return {\r\n    minUnits,\r\n    maxUnits,\r\n    reversed,\r\n    isTimeDisabled,\r\n  }\r\n}\r\n","<script setup lang=\"ts\">\r\nimport { computed, ref } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { doubleDigits, getLastDayOfMonth } from '@vexip-ui/utils'\r\nimport { handleKeyEnter } from './helper'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { LocaleConfig } from '@vexip-ui/config'\r\nimport type { DateTimeType, DateType } from './symbol'\r\n\r\ndefineOptions({ name: 'DateControl' })\r\n\r\nconst props = defineProps({\r\n  unitType: {\r\n    type: String as PropType<DateTimeType | ''>,\r\n    default: '',\r\n  },\r\n  enabled: {\r\n    type: Object as PropType<Record<DateTimeType, boolean>>,\r\n    default: () => ({}),\r\n  },\r\n  activated: {\r\n    type: Object as PropType<Record<DateTimeType, boolean>>,\r\n    default: () => ({}),\r\n  },\r\n  dateValue: {\r\n    type: Object as PropType<Record<DateTimeType, number>>,\r\n    default: () => ({}),\r\n  },\r\n  dateSeparator: {\r\n    type: String,\r\n    default: '/',\r\n  },\r\n  timeSeparator: {\r\n    type: String,\r\n    default: ':',\r\n  },\r\n  visible: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  focused: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  filler: {\r\n    type: String,\r\n    default: '-',\r\n    validator: (value: string) => {\r\n      return value.length === 1\r\n    },\r\n  },\r\n  steps: {\r\n    type: Array as PropType<number[]>,\r\n    default: () => [1, 1, 1],\r\n  },\r\n  ctrlSteps: {\r\n    type: Array as PropType<number[]>,\r\n    default: () => [5, 5, 5],\r\n  },\r\n  labels: {\r\n    type: Object as PropType<Partial<Record<DateTimeType, string>>>,\r\n    default: () => ({}),\r\n  },\r\n  hasError: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  placeholder: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n  readonly: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  labeledBy: {\r\n    type: String,\r\n    default: undefined,\r\n  },\r\n  locale: {\r\n    type: Object as PropType<LocaleConfig['calendar'] & LocaleConfig['datePicker']>,\r\n    default: () => ({}),\r\n  },\r\n  dateUnitOrder: {\r\n    type: Array as PropType<DateType[]>,\r\n    default: () => ['year', 'month', 'date'],\r\n  },\r\n})\r\n\r\nconst emit = defineEmits([\r\n  'input',\r\n  'plus',\r\n  'minus',\r\n  'enter',\r\n  'cancel',\r\n  'unit-focus',\r\n  'prev-unit',\r\n  'next-unit',\r\n  'blur',\r\n])\r\n\r\nconst nh = useNameHelper('date-picker')\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nconst label = computed(() => props.locale.ariaLabel ?? {})\r\nconst isActivated = computed(() => {\r\n  return (Object.keys(props.enabled) as DateTimeType[]).every(type => {\r\n    return !props.enabled[type] || props.activated[type]\r\n  })\r\n})\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.be('input')]: true,\r\n    [nh.bem('input', 'activated')]: isActivated.value,\r\n    [nh.bem('input', 'error')]: props.hasError,\r\n  }\r\n})\r\nconst showTimeUnits = computed(() => {\r\n  return props.enabled.hour || props.enabled.minute || props.enabled.second\r\n})\r\nconst formattedYear = computed(() => {\r\n  return formatValue('year')\r\n})\r\nconst formattedMonth = computed(() => {\r\n  return formatValue('month')\r\n})\r\nconst formattedDate = computed(() => {\r\n  return formatValue('date')\r\n})\r\nconst formattedHour = computed(() => {\r\n  return formatValue('hour')\r\n})\r\nconst formattedMinute = computed(() => {\r\n  return formatValue('minute')\r\n})\r\nconst formattedSecond = computed(() => {\r\n  return formatValue('second')\r\n})\r\nconst maxDateCount = computed(() => {\r\n  return getLastDayOfMonth(props.dateValue.year, props.dateValue.month)\r\n})\r\nconst dateUnitOrder = computed(() => {\r\n  const [one, two, three] = props.dateUnitOrder\r\n\r\n  return {\r\n    [one]: -4,\r\n    [two]: -2,\r\n    [three]: 0,\r\n  }\r\n})\r\n\r\ndefineExpose({\r\n  isActivated,\r\n  wrapper,\r\n  focus: () => {\r\n    wrapper.value?.focus()\r\n  },\r\n  blur: () => {\r\n    wrapper.value?.blur()\r\n  },\r\n})\r\n\r\nfunction formatValue(type: DateTimeType) {\r\n  const isYear = type === 'year'\r\n  const filler = props.filler\r\n\r\n  return props.activated[type]\r\n    ? isYear\r\n      ? props.dateValue.year.toString().padStart(4, '0')\r\n      : doubleDigits(props.dateValue[type])\r\n    : `${isYear ? `${filler}${filler}` : ''}${filler}${filler}`\r\n}\r\n\r\nfunction getUnitFocusClass(type: DateTimeType) {\r\n  return props.visible && props.unitType === type ? nh.bem('unit', 'focused') : null\r\n}\r\n\r\nfunction handleInputFocus(type: DateTimeType) {\r\n  if (props.readonly) return\r\n\r\n  emit('unit-focus', type)\r\n}\r\n\r\nfunction handleInput(event: KeyboardEvent) {\r\n  if (!props.visible) return\r\n\r\n  const type = handleKeyEnter(event)\r\n\r\n  if (props.readonly) {\r\n    switch (type) {\r\n      case 'ok': {\r\n        emit('enter')\r\n        break\r\n      }\r\n      case 'esc': {\r\n        emit('cancel')\r\n        break\r\n      }\r\n    }\r\n\r\n    return\r\n  }\r\n\r\n  switch (type) {\r\n    case 'next': {\r\n      emit('next-unit')\r\n      break\r\n    }\r\n    case 'prev': {\r\n      emit('prev-unit')\r\n      break\r\n    }\r\n    case 'up': {\r\n      emit('minus', event.ctrlKey)\r\n      break\r\n    }\r\n    case 'down': {\r\n      emit('plus', event.ctrlKey)\r\n      break\r\n    }\r\n    case 'ok': {\r\n      emit('enter')\r\n      break\r\n    }\r\n    case 'esc': {\r\n      emit('cancel')\r\n      break\r\n    }\r\n    default: {\r\n      if (typeof type === 'number') {\r\n        emit('input', type)\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nfunction handleBlur() {\r\n  emit('blur')\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"none\"\r\n    tabindex=\"-1\"\r\n    @keydown=\"handleInput\"\r\n    @blur=\"handleBlur\"\r\n  >\r\n    <div v-if=\"!focused && !isActivated\" :class=\"nh.be('placeholder')\">\r\n      {{ placeholder }}\r\n    </div>\r\n    <template v-else>\r\n      <div\r\n        v-if=\"enabled.year\"\r\n        :class=\"[nh.be('unit'), getUnitFocusClass('year')]\"\r\n        role=\"spinbutton\"\r\n        :aria-label=\"label.year\"\r\n        :aria-valuenow=\"props.dateValue.year\"\r\n        :aria-valuetext=\"formattedYear\"\r\n        :aria-valuemin=\"1\"\r\n        :aria-valuemax=\"9999\"\r\n        :aria-labelledby=\"labeledBy\"\r\n        :style=\"{ order: dateUnitOrder['year'] }\"\r\n        @click=\"handleInputFocus('year')\"\r\n      >\r\n        {{ formattedYear }}\r\n      </div>\r\n      <div\r\n        v-if=\"labels.year\"\r\n        :class=\"nh.be('label')\"\r\n        aria-hidden\r\n        :style=\"{ order: dateUnitOrder['year'] }\"\r\n        @click=\"handleInputFocus('year')\"\r\n      >\r\n        {{ labels.year }}\r\n      </div>\r\n      <template v-if=\"enabled.month\">\r\n        <div\r\n          v-if=\"enabled.year\"\r\n          :class=\"nh.be('separator')\"\r\n          aria-hidden\r\n          style=\"order: -3\"\r\n        >\r\n          {{ dateSeparator }}\r\n        </div>\r\n        <div\r\n          :class=\"[nh.be('unit'), getUnitFocusClass('month')]\"\r\n          role=\"spinbutton\"\r\n          :aria-label=\"label.month\"\r\n          :aria-valuenow=\"props.dateValue.month\"\r\n          :aria-valuetext=\"formattedMonth\"\r\n          :aria-valuemin=\"1\"\r\n          :aria-valuemax=\"12\"\r\n          :aria-labelledby=\"labeledBy\"\r\n          :style=\"{ order: dateUnitOrder['month'] }\"\r\n          @click=\"handleInputFocus('month')\"\r\n        >\r\n          {{ formattedMonth }}\r\n        </div>\r\n        <div\r\n          v-if=\"labels.month\"\r\n          :class=\"nh.be('label')\"\r\n          aria-hidden\r\n          :style=\"{ order: dateUnitOrder['month'] }\"\r\n          @click=\"handleInputFocus('month')\"\r\n        >\r\n          {{ labels.month }}\r\n        </div>\r\n      </template>\r\n      <template v-if=\"enabled.date\">\r\n        <div\r\n          v-if=\"enabled.month || enabled.year\"\r\n          :class=\"nh.be('separator')\"\r\n          aria-hidden\r\n          style=\"order: -1\"\r\n        >\r\n          {{ dateSeparator }}\r\n        </div>\r\n        <div\r\n          :class=\"[nh.be('unit'), getUnitFocusClass('date')]\"\r\n          role=\"spinbutton\"\r\n          :aria-label=\"label.date\"\r\n          :aria-valuenow=\"props.dateValue.date\"\r\n          :aria-valuetext=\"formattedDate\"\r\n          :aria-valuemin=\"1\"\r\n          :aria-valuemax=\"maxDateCount || 31\"\r\n          :aria-labelledby=\"labeledBy\"\r\n          :style=\"{ order: dateUnitOrder['date'] }\"\r\n          @click=\"handleInputFocus('date')\"\r\n        >\r\n          {{ formattedDate }}\r\n        </div>\r\n        <div\r\n          v-if=\"labels.date\"\r\n          :class=\"nh.be('label')\"\r\n          aria-hidden\r\n          :style=\"{ order: dateUnitOrder['date'] }\"\r\n          @click=\"handleInputFocus('date')\"\r\n        >\r\n          {{ labels.date }}\r\n        </div>\r\n      </template>\r\n\r\n      <template v-if=\"showTimeUnits\">\r\n        <div :class=\"nh.be('pad')\"></div>\r\n        <div\r\n          v-if=\"enabled.hour\"\r\n          :class=\"[nh.be('unit'), getUnitFocusClass('hour')]\"\r\n          role=\"spinbutton\"\r\n          :aria-label=\"label.hour\"\r\n          :aria-valuenow=\"props.dateValue.hour\"\r\n          :aria-valuetext=\"formattedHour\"\r\n          :aria-valuemin=\"0\"\r\n          :aria-valuemax=\"23\"\r\n          :aria-labelledby=\"labeledBy\"\r\n          @click=\"handleInputFocus('hour')\"\r\n        >\r\n          {{ formattedHour }}\r\n        </div>\r\n        <div\r\n          v-if=\"labels.hour\"\r\n          :class=\"nh.be('label')\"\r\n          aria-hidden\r\n          @click=\"handleInputFocus('hour')\"\r\n        >\r\n          {{ labels.hour }}\r\n        </div>\r\n        <template v-if=\"enabled.minute\">\r\n          <div v-if=\"enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\r\n            {{ timeSeparator }}\r\n          </div>\r\n          <div\r\n            :class=\"[nh.be('unit'), getUnitFocusClass('minute')]\"\r\n            role=\"spinbutton\"\r\n            :aria-label=\"label.minute\"\r\n            :aria-valuenow=\"props.dateValue.minute\"\r\n            :aria-valuetext=\"formattedMinute\"\r\n            :aria-valuemin=\"0\"\r\n            :aria-valuemax=\"59\"\r\n            :aria-labelledby=\"labeledBy\"\r\n            @click=\"handleInputFocus('minute')\"\r\n          >\r\n            {{ formattedMinute }}\r\n          </div>\r\n          <div\r\n            v-if=\"labels.minute\"\r\n            :class=\"nh.be('label')\"\r\n            aria-hidden\r\n            @click=\"handleInputFocus('minute')\"\r\n          >\r\n            {{ labels.minute }}\r\n          </div>\r\n        </template>\r\n        <template v-if=\"enabled.second\">\r\n          <div v-if=\"enabled.minute || enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\r\n            {{ timeSeparator }}\r\n          </div>\r\n          <div\r\n            :class=\"[nh.be('unit'), getUnitFocusClass('second')]\"\r\n            role=\"spinbutton\"\r\n            :aria-label=\"label.second\"\r\n            :aria-valuenow=\"props.dateValue.second\"\r\n            :aria-valuetext=\"formattedSecond\"\r\n            :aria-valuemin=\"0\"\r\n            :aria-valuemax=\"59\"\r\n            :aria-labelledby=\"labeledBy\"\r\n            @click=\"handleInputFocus('second')\"\r\n          >\r\n            {{ formattedSecond }}\r\n          </div>\r\n          <div\r\n            v-if=\"labels.second\"\r\n            :class=\"nh.be('label')\"\r\n            aria-hidden\r\n            @click=\"handleInputFocus('second')\"\r\n          >\r\n            {{ labels.second }}\r\n          </div>\r\n        </template>\r\n      </template>\r\n    </template>\r\n  </div>\r\n</template>\r\n","import {\r\n  booleanNumberProp,\r\n  booleanProp,\r\n  buildProps,\r\n  classProp,\r\n  eventProp,\r\n  styleProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { BarScrollPayload, ScrollMode, ScrollPayload } from './symbol'\r\n\r\nexport const scrollProps = buildProps({\r\n  scrollClass: classProp,\r\n  scrollStyle: styleProp,\r\n  scrollAttrs: Object as PropType<Record<string, any>>,\r\n  mode: String as PropType<ScrollMode>,\r\n  width: [Number, String],\r\n  height: [Number, String],\r\n  deltaX: Number,\r\n  deltaY: Number,\r\n  disabled: booleanProp,\r\n  pointer: booleanProp,\r\n  wheel: booleanProp,\r\n  scrollX: Number,\r\n  scrollY: Number,\r\n  useXBar: booleanProp,\r\n  useYBar: booleanProp,\r\n  barFade: Number,\r\n  barClass: classProp,\r\n  autoplay: booleanNumberProp,\r\n  playWaiting: Number,\r\n  noBuffer: booleanProp,\r\n  noTransition: booleanProp,\r\n  onBeforeScroll: Function as PropType<(payload: { signX: number, signY: number }) => boolean>,\r\n  useBarTrack: booleanProp,\r\n  scrollTag: String,\r\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>(),\r\n  onXEnabledChange: eventProp<(enabled: boolean) => void>(),\r\n  onYEnabledChange: eventProp<(enabled: boolean) => void>(),\r\n  onWheel: eventProp<(payload: BarScrollPayload & { sign: 1 | -1 }) => void>(),\r\n  onScrollStart: eventProp<(payload: Omit<ScrollPayload, 'type'>) => void>(),\r\n  onScroll: eventProp<(payload: ScrollPayload) => void>(),\r\n  onScrollEnd: eventProp<(payload: Omit<ScrollPayload, 'type'>) => void>(),\r\n  onBarScrollStart: eventProp<(payload: BarScrollPayload) => void>(),\r\n  onBarScroll: eventProp<(payload: BarScrollPayload) => void>(),\r\n  onBarScrollEnd: eventProp<(payload: BarScrollPayload) => void>(),\r\n  onReady: eventProp(),\r\n})\r\n\r\nexport type ScrollProps = ExtractPropTypes<typeof scrollProps>\r\nexport type ScrollCProps = ConfigurableProps<ScrollProps, 'scrollX' | 'scrollY', 'onBeforeScroll'>\r\n","import { computed, nextTick, onMounted, reactive, ref, watch } from 'vue'\r\n\r\nimport { useManualRef } from '@vexip-ui/hooks'\r\nimport { multipleFixed, toNumber } from '@vexip-ui/utils'\r\n\r\nimport type { Ref } from 'vue'\r\nimport type { ScrollMode } from './symbol'\r\n\r\nexport function useScrollWrapper({\r\n  mode,\r\n  disabled,\r\n  width,\r\n  height,\r\n  scrollX,\r\n  scrollY,\r\n  onResize,\r\n  onBeforeRefresh,\r\n  onAfterRefresh,\r\n}: {\r\n  mode: Ref<Exclude<ScrollMode, 'horizontal-exact'>>,\r\n  disabled: Ref<boolean>,\r\n  width: Ref<number | string>,\r\n  height: Ref<number | string>,\r\n  scrollX: Ref<number>,\r\n  scrollY: Ref<number>,\r\n  onResize?: (entry: ResizeObserverEntry) => void,\r\n  onBeforeRefresh?: () => void,\r\n  onAfterRefresh?: () => void,\r\n}) {\r\n  const { manualRef, triggerUpdate } = useManualRef()\r\n\r\n  const wrapperEl = ref<HTMLElement>()\r\n  const contentEl = ref<HTMLElement>()\r\n\r\n  // 容器长宽\r\n  const wrapper = reactive({\r\n    el: wrapperEl,\r\n    width: toNumber(width.value),\r\n    height: toNumber(height.value),\r\n  })\r\n\r\n  // 内容长宽\r\n  const content = reactive({\r\n    el: contentEl,\r\n    width: 0,\r\n    height: 0,\r\n  })\r\n\r\n  const x = manualRef(-scrollX.value)\r\n  const y = manualRef(-scrollY.value)\r\n\r\n  const isReady = ref(false)\r\n\r\n  const percentX = manualRef(0)\r\n  const percentY = manualRef(0)\r\n\r\n  const xScrollLimit = computed(() => {\r\n    return wrapper.width ? wrapper.width - content.width : 0\r\n  })\r\n  const yScrollLimit = computed(() => {\r\n    return wrapper.height ? wrapper.height - content.height : 0\r\n  })\r\n  const enableXScroll = computed(() => {\r\n    return (\r\n      !disabled.value &&\r\n      mode.value !== 'vertical' &&\r\n      !!wrapper.width &&\r\n      content.width - wrapper.width > 1\r\n    )\r\n  })\r\n  const enableYScroll = computed(() => {\r\n    return (\r\n      !disabled.value &&\r\n      mode.value !== 'horizontal' &&\r\n      !!wrapper.height &&\r\n      content.height - wrapper.height > 1\r\n    )\r\n  })\r\n  const xBarLength = computed(() => {\r\n    if (wrapper.width) {\r\n      return Math.max(Math.min((wrapper.width / (content.width || 1)) * 100, 99), 5)\r\n    }\r\n\r\n    return 35\r\n  })\r\n  const yBarLength = computed(() => {\r\n    if (wrapper.height) {\r\n      return Math.max(Math.min((wrapper.height / (content.height || 1)) * 100, 99), 5)\r\n    }\r\n\r\n    return 35\r\n  })\r\n\r\n  watch(wrapperEl, () => {\r\n    refreshWrapper()\r\n  })\r\n  watch(contentEl, () => {\r\n    computeContentSize()\r\n  })\r\n  watch(scrollX, value => {\r\n    x.value = -value\r\n    verifyScroll()\r\n  })\r\n  watch(scrollY, value => {\r\n    y.value = -value\r\n    verifyScroll()\r\n  })\r\n  watch(width, () => {\r\n    refreshWrapper().then(verifyScroll)\r\n  })\r\n  watch(height, () => {\r\n    refreshWrapper().then(verifyScroll)\r\n  })\r\n\r\n  function computeWrapperSize(sizeType: 'width' | 'height') {\r\n    return nextTick(() => {\r\n      if (!wrapper.el) return\r\n\r\n      const size = sizeType === 'width' ? width.value : height.value\r\n      const titleCaseSizeType = sizeType.slice(0, 1).toUpperCase() + sizeType.slice(1)\r\n\r\n      // 获取 wrapper 的 px 大小\r\n      if (typeof size === 'string') {\r\n        if (!size.endsWith('px') && (!size || Number.isNaN(Number(size)))) {\r\n          wrapper[sizeType] =\r\n            wrapper.el[`offset${titleCaseSizeType}` as 'offsetWidth' | 'offsetHeight']\r\n        } else {\r\n          wrapper[sizeType] = parseInt(size)\r\n        }\r\n      } else {\r\n        wrapper[sizeType] = size\r\n      }\r\n    })\r\n  }\r\n\r\n  async function refreshWrapper() {\r\n    const promises: Promise<void>[] = []\r\n\r\n    if (mode.value !== 'vertical') {\r\n      promises.push(computeWrapperSize('width'))\r\n    }\r\n\r\n    if (mode.value !== 'horizontal') {\r\n      promises.push(computeWrapperSize('height'))\r\n    }\r\n\r\n    await Promise.all(promises)\r\n  }\r\n\r\n  let timer: ReturnType<typeof setTimeout>\r\n\r\n  function computeContentSize() {\r\n    clearTimeout(timer)\r\n\r\n    return new Promise<void>(resolve => {\r\n      isReady.value = false\r\n\r\n      timer = setTimeout(() => {\r\n        if (!content.el) {\r\n          resolve()\r\n          return\r\n        }\r\n\r\n        if (mode.value !== 'vertical') {\r\n          content.width = content.el.offsetWidth\r\n\r\n          if (wrapper.width >= content.width) {\r\n            x.value = 0\r\n          } else {\r\n            if (x.value === 0) {\r\n              x.value = -scrollX.value\r\n            }\r\n          }\r\n        }\r\n\r\n        if (mode.value !== 'horizontal') {\r\n          content.height = content.el.offsetHeight\r\n\r\n          if (wrapper.height >= content.height) {\r\n            y.value = 0\r\n          } else {\r\n            if (y.value === 0) {\r\n              y.value = -scrollY.value\r\n            }\r\n          }\r\n        }\r\n\r\n        setTimeout(() => {\r\n          isReady.value = true\r\n          verifyScroll()\r\n          resolve()\r\n        }, 1)\r\n      }, 0)\r\n    })\r\n  }\r\n\r\n  /**\r\n   * Will post process the percent scroll values.\r\n   */\r\n  function verifyScroll() {\r\n    if (!isReady.value) {\r\n      return\r\n    }\r\n\r\n    if (mode.value !== 'vertical') {\r\n      x.value = Math.min(0, Math.max(x.value, xScrollLimit.value))\r\n\r\n      if (mode.value !== 'both') {\r\n        y.value = 0\r\n      }\r\n    }\r\n\r\n    if (mode.value !== 'horizontal') {\r\n      y.value = Math.min(0, Math.max(y.value, yScrollLimit.value))\r\n\r\n      if (mode.value !== 'both') {\r\n        x.value = 0\r\n      }\r\n    }\r\n\r\n    computePercent()\r\n    triggerUpdate()\r\n  }\r\n\r\n  function computePercent() {\r\n    percentX.value = multipleFixed(x.value / (xScrollLimit.value || -1), 100, 2)\r\n    percentY.value = multipleFixed(y.value / (yScrollLimit.value || -1), 100, 2)\r\n\r\n    percentX.value = Math.max(0, Math.min(percentX.value, 100))\r\n    percentY.value = Math.max(0, Math.min(percentY.value, 100))\r\n  }\r\n\r\n  function handleResize(entity: ResizeObserverEntry) {\r\n    refresh()\r\n    onResize?.(entity)\r\n  }\r\n\r\n  let isMounted = false\r\n\r\n  onMounted(() => {\r\n    refresh()\r\n    isMounted = true\r\n  })\r\n\r\n  async function refresh() {\r\n    if (typeof onBeforeRefresh === 'function') {\r\n      onBeforeRefresh()\r\n    }\r\n\r\n    refreshWrapper()\r\n    await computeContentSize().then(() => {\r\n      setTimeout(\r\n        () => {\r\n          verifyScroll()\r\n\r\n          if (typeof onAfterRefresh === 'function') {\r\n            onAfterRefresh()\r\n          }\r\n        },\r\n        isMounted ? 20 : 100,\r\n      )\r\n    })\r\n  }\r\n\r\n  return {\r\n    wrapperEl,\r\n    contentEl,\r\n\r\n    wrapper,\r\n    content,\r\n    isReady,\r\n    x,\r\n    y,\r\n    percentX,\r\n    percentY,\r\n    xScrollLimit,\r\n    yScrollLimit,\r\n    enableXScroll,\r\n    enableYScroll,\r\n    xBarLength,\r\n    yBarLength,\r\n\r\n    handleResize,\r\n    verifyScroll,\r\n    computePercent,\r\n    refresh,\r\n    triggerUpdate,\r\n  }\r\n}\r\n","import { USE_TOUCH } from '@vexip-ui/utils'\r\n\r\nexport type ScrollMode = 'horizontal' | 'horizontal-exact' | 'vertical' | 'both'\r\n\r\nexport interface ScrollPayload {\r\n  type: Exclude<ScrollMode, 'horizontal-exact'>,\r\n  clientX: number,\r\n  clientY: number,\r\n  percentX: number,\r\n  percentY: number,\r\n}\r\n\r\nexport interface BarScrollPayload {\r\n  type: 'vertical' | 'horizontal',\r\n  clientX: number,\r\n  clientY: number,\r\n  percentX: number,\r\n  percentY: number,\r\n}\r\n\r\nexport interface ScrollState {\r\n  scrollX: number,\r\n  scrollY: number,\r\n  percentX: number,\r\n  percentY: number,\r\n  enableXScroll: number,\r\n  enableYScroll: number,\r\n}\r\n\r\nexport interface ScrollSlotParams {\r\n  getState: () => ScrollState,\r\n  refresh: () => void,\r\n  scrollTo: (clientX: number, clientY: number, duration?: number) => void,\r\n  scrollBy: (deltaX: number, deltaY: number, duration?: number) => void,\r\n  scrollToElement: (el: string | Element, duration?: number, offset?: number) => void,\r\n  ensureInView: (el: string | Element, duration?: number, offset?: number) => void,\r\n}\r\n\r\nexport const scrollModes = Object.freeze<ScrollMode[]>([\r\n  'horizontal',\r\n  'horizontal-exact',\r\n  'vertical',\r\n  'both',\r\n])\r\n\r\nexport const MOVE_EVENT = USE_TOUCH ? 'touchmove' : 'mousemove'\r\nexport const UP_EVENT = USE_TOUCH ? 'touchend' : 'mouseup'\r\n","<script setup lang=\"ts\">\r\nimport { Scrollbar } from '@/components/scrollbar'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport {\r\n  computed,\r\n  nextTick,\r\n  onBeforeUnmount,\r\n  onMounted,\r\n  ref,\r\n  shallowReadonly,\r\n  toRef,\r\n  watch,\r\n  watchEffect,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useRtl, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { USE_TOUCH, createEventEmitter, isClient, isElement, isTrue } from '@vexip-ui/utils'\r\nimport { scrollProps } from './props'\r\nimport { useScrollWrapper } from './hooks'\r\nimport { MOVE_EVENT, UP_EVENT, scrollModes } from './symbol'\r\n\r\nimport type { ScrollbarExposed } from '@/components/scrollbar'\r\nimport type { EventHandler } from '@vexip-ui/utils'\r\nimport type { ScrollMode } from './symbol'\r\n\r\ndefineOptions({ name: 'Scroll' })\r\n\r\nconst _props = defineProps(scrollProps)\r\nconst props = useProps('scroll', _props, {\r\n  scrollClass: null,\r\n  scrollStyle: null,\r\n  scrollAttrs: null,\r\n  mode: {\r\n    default: 'vertical',\r\n    validator: value => scrollModes.includes(value),\r\n  },\r\n  width: '',\r\n  height: '',\r\n  deltaX: 40,\r\n  deltaY: 40,\r\n  disabled: false,\r\n  pointer: USE_TOUCH,\r\n  wheel: true,\r\n  scrollX: {\r\n    default: 0,\r\n    static: true,\r\n  },\r\n  scrollY: {\r\n    default: 0,\r\n    static: true,\r\n  },\r\n  useXBar: false,\r\n  useYBar: false,\r\n  barFade: 1500,\r\n  barClass: null,\r\n  autoplay: false,\r\n  playWaiting: 500,\r\n  noBuffer: false,\r\n  noTransition: false,\r\n  onBeforeScroll: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  useBarTrack: false,\r\n  scrollTag: 'div',\r\n})\r\n\r\nconst emitter = createEventEmitter()\r\n\r\nconst nh = useNameHelper('scroll')\r\nconst { isRtl } = useRtl()\r\nconst { timer } = useSetTimeout()\r\n\r\nconst usingBar = ref(false)\r\nconst scrolling = ref(false)\r\nconst transitionDuration = ref<number>(0)\r\nconst mode = computed(() => (props.mode === 'horizontal-exact' ? 'horizontal' : props.mode))\r\n\r\nlet waitDelay = 180\r\n\r\nconst xBar = ref<ScrollbarExposed>()\r\nconst yBar = ref<ScrollbarExposed>()\r\n\r\nlet initialized = false\r\n\r\nconst {\r\n  wrapperEl,\r\n  contentEl,\r\n\r\n  wrapper,\r\n  isReady,\r\n  x,\r\n  y,\r\n  percentX,\r\n  percentY,\r\n  xScrollLimit,\r\n  yScrollLimit,\r\n  enableXScroll,\r\n  enableYScroll,\r\n  xBarLength,\r\n  yBarLength,\r\n\r\n  handleResize,\r\n  verifyScroll,\r\n  computePercent,\r\n  refresh,\r\n  triggerUpdate,\r\n} = useScrollWrapper({\r\n  mode,\r\n  disabled: toRef(props, 'disabled'),\r\n  width: toRef(props, 'width'),\r\n  height: toRef(props, 'height'),\r\n  scrollX: toRef(props, 'scrollX'),\r\n  scrollY: toRef(props, 'scrollY'),\r\n  onResize: entry => {\r\n    emitEvent(props.onResize, entry)\r\n  },\r\n  // onBeforeRefresh: stopAutoplay,\r\n  onAfterRefresh: () => {\r\n    syncBarScroll()\r\n\r\n    if (!initialized) {\r\n      initialized = true\r\n      startAutoplay()\r\n    }\r\n  },\r\n})\r\n\r\nconst slotParams = shallowReadonly({\r\n  getState,\r\n  refresh,\r\n  scrollTo,\r\n  scrollBy,\r\n  scrollToElement,\r\n  ensureInView,\r\n})\r\n\r\n/* autoplay */\r\nconst canPlay = ref(false)\r\n\r\nconst canAutoplay = computed(() => {\r\n  return (\r\n    mode.value !== 'both' &&\r\n    (isTrue(props.autoplay) || +props.autoplay > 1000) &&\r\n    ((mode.value === 'horizontal' && enableXScroll.value) ||\r\n      (mode.value === 'vertical' && enableYScroll.value))\r\n  )\r\n})\r\n\r\nwatch([() => props.autoplay, () => props.playWaiting], () => {\r\n  stopAutoplay()\r\n  nextTick(startAutoplay)\r\n})\r\n\r\nfunction startAutoplay() {\r\n  if (!canAutoplay.value) return\r\n\r\n  stopAutoplay()\r\n\r\n  const distance = mode.value === 'horizontal' ? 'width' : 'height'\r\n  const limit = mode.value === 'horizontal' ? xScrollLimit : yScrollLimit\r\n  // const prop = mode.value === 'horizontal' ? 'x' : 'y'\r\n  const prop = mode.value === 'horizontal' ? x : y\r\n  const waiting = props.playWaiting < 20 ? 20 : props.playWaiting\r\n\r\n  let playSpeed = 0.5\r\n\r\n  if (typeof props.autoplay === 'number') {\r\n    playSpeed = (wrapper[distance] / props.autoplay) * 16\r\n  }\r\n\r\n  const precessScroll = () => {\r\n    computePercent()\r\n    triggerUpdate()\r\n    syncBarScroll()\r\n    emitScrollEvent(mode.value)\r\n  }\r\n  const scroll = () => {\r\n    prop.value -= playSpeed\r\n\r\n    if (prop.value <= limit.value) {\r\n      prop.value = limit.value\r\n      canPlay.value = false\r\n\r\n      precessScroll()\r\n\r\n      timer.end = setTimeout(() => {\r\n        scrollTo(0, 0, 500)\r\n\r\n        timer.start = setTimeout(() => {\r\n          canPlay.value = true\r\n\r\n          emitScrollEvent(mode.value)\r\n          scroll()\r\n        }, 500 + waiting)\r\n      }, waiting)\r\n    } else {\r\n      precessScroll()\r\n\r\n      if (canPlay.value) {\r\n        requestAnimationFrame(scroll)\r\n      }\r\n    }\r\n  }\r\n\r\n  timer.play = setTimeout(() => {\r\n    canPlay.value = true\r\n    scroll()\r\n  }, waiting)\r\n}\r\n\r\nfunction stopAutoplay() {\r\n  canPlay.value = false\r\n\r\n  clearTimeout(timer.play)\r\n  clearTimeout(timer.start)\r\n  clearTimeout(timer.end)\r\n}\r\n/* autoplay */\r\n\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    nh.bm(mode.value),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('using-bar')]: usingBar.value,\r\n      [nh.bm('scrolling')]: scrolling.value,\r\n      [nh.bm('no-ready')]: !isReady.value,\r\n      [nh.bm('no-transition')]: props.noTransition,\r\n    },\r\n  ]\r\n})\r\nconst style = computed(() => {\r\n  const { width, height } = props\r\n\r\n  return {\r\n    width: width\r\n      ? typeof width === 'string'\r\n        ? Number.isNaN(Number(width))\r\n          ? width\r\n          : `${Number(width)}px`\r\n        : `${width}px`\r\n      : undefined,\r\n    height: height\r\n      ? typeof height === 'string'\r\n        ? Number.isNaN(Number(height))\r\n          ? height\r\n          : `${Number(height)}px`\r\n        : `${height}px`\r\n      : undefined,\r\n  }\r\n})\r\nconst wrapperClass = computed(() => {\r\n  return [props.scrollAttrs?.class, props.scrollClass, nh.be('wrapper')]\r\n})\r\nconst wrapperStyle = computed(() => {\r\n  return [props.scrollAttrs?.style, props.scrollStyle]\r\n})\r\n\r\nwatch(enableXScroll, value => {\r\n  emitEvent(props.onXEnabledChange, value)\r\n})\r\nwatch(enableYScroll, value => {\r\n  emitEvent(props.onYEnabledChange, value)\r\n})\r\nwatch(isReady, value => {\r\n  if (value) {\r\n    transitionDuration.value = -1\r\n    emitEvent(props.onReady)\r\n  } else {\r\n    transitionDuration.value = 0\r\n  }\r\n})\r\nwatchEffect(() => {\r\n  if (!contentEl.value) return\r\n\r\n  contentEl.value.style.transform = `translate3d(${isRtl.value ? -x.value : x.value}px, ${\r\n    y.value\r\n  }px, 0)`\r\n})\r\nwatchEffect(() => {\r\n  if (!contentEl.value) return\r\n\r\n  contentEl.value.style.transitionDuration =\r\n    transitionDuration.value < 0 ? '' : `${transitionDuration.value}ms`\r\n})\r\n\r\nonMounted(() => {\r\n  if (!isClient || !wrapperEl.value) return\r\n\r\n  const style = getComputedStyle(wrapperEl.value)\r\n  const duration = style.getPropertyValue(nh.cv('move-duration')).trim()\r\n\r\n  if (duration.endsWith('ms')) {\r\n    waitDelay = parseFloat(duration)\r\n  } else if (duration.endsWith('s')) {\r\n    waitDelay = parseFloat(duration) * 1000\r\n  }\r\n\r\n  waitDelay = Number.isNaN(waitDelay) ? 140 : waitDelay\r\n})\r\n\r\nonBeforeUnmount(stopAutoplay)\r\n\r\ndefineExpose({\r\n  percentX,\r\n  percentY,\r\n  x,\r\n  y,\r\n  isReady,\r\n\r\n  xBarLength,\r\n  yBarLength,\r\n  enableXScroll,\r\n  enableYScroll,\r\n\r\n  wrapper: wrapperEl,\r\n  content: contentEl,\r\n  xBar,\r\n  yBar,\r\n\r\n  refresh,\r\n  scrollTo,\r\n  scrollBy,\r\n  scrollToElement,\r\n  ensureInView,\r\n  getXScrollLimit,\r\n  getYScrollLimit,\r\n  addScrollListener,\r\n  removeScrollListener,\r\n})\r\n\r\nfunction getCommonPayload() {\r\n  return {\r\n    clientX: -x.value,\r\n    clientY: -y.value,\r\n    percentX: percentX.value,\r\n    percentY: percentY.value,\r\n  }\r\n}\r\n\r\nfunction syncBarScroll() {\r\n  xBar.value?.handleScroll(percentX.value)\r\n  yBar.value?.handleScroll(percentY.value)\r\n}\r\n\r\nfunction handleMouseDown(event: MouseEvent) {\r\n  if (!props.pointer || event.button > 0 || USE_TOUCH) {\r\n    return false\r\n  }\r\n\r\n  handlePointerDown(event)\r\n}\r\n\r\nfunction handleTouchStart(event: TouchEvent) {\r\n  if (!props.pointer || event.touches.length !== 1) {\r\n    return false\r\n  }\r\n\r\n  handlePointerDown(event)\r\n}\r\n\r\n// 记录滚动开始位置\r\nlet xScrollStartAt = 0\r\nlet yScrollStartAt = 0\r\n\r\n// 记录滚动开始鼠标位置\r\nlet cursorXPosition = 0\r\nlet cursorYPosition = 0\r\n\r\nlet moved = false\r\nlet target: EventTarget | null = null\r\nlet lastDate = 0\r\n\r\nfunction handlePointerDown(event: MouseEvent | TouchEvent) {\r\n  if (!enableXScroll.value && !enableYScroll.value) {\r\n    return false\r\n  }\r\n\r\n  if (event.cancelable) {\r\n    event.preventDefault()\r\n  }\r\n\r\n  prepareScroll()\r\n\r\n  transitionDuration.value = 0\r\n\r\n  const pointer = 'touches' in event ? event.touches[0] : event\r\n\r\n  xScrollStartAt = x.value\r\n  yScrollStartAt = y.value\r\n  cursorXPosition = pointer.clientX\r\n  cursorYPosition = pointer.clientY\r\n\r\n  moved = false\r\n  target = event.target\r\n  lastDate = Date.now()\r\n\r\n  document.addEventListener(MOVE_EVENT, handlePointerMove)\r\n  document.addEventListener(UP_EVENT, handlePointerUp)\r\n\r\n  emitEvent(props.onScrollStart, getCommonPayload())\r\n}\r\n\r\nfunction handlePointerMove(event: MouseEvent | TouchEvent) {\r\n  event.stopPropagation()\r\n\r\n  if (!USE_TOUCH) {\r\n    event.preventDefault()\r\n  }\r\n\r\n  const pointer = 'touches' in event ? event.touches[0] : event\r\n  const signX = pointer.clientX - cursorXPosition > 0 ? 1 : -1\r\n  const signY = pointer.clientY - cursorYPosition > 0 ? 1 : -1\r\n\r\n  if (props.onBeforeScroll?.({ signX, signY }) === false) {\r\n    return false\r\n  }\r\n\r\n  scrolling.value = true\r\n\r\n  if (enableXScroll.value) {\r\n    x.value = xScrollStartAt + pointer.clientX - cursorXPosition\r\n    moved = true\r\n  }\r\n\r\n  if (enableYScroll.value) {\r\n    y.value = yScrollStartAt + pointer.clientY - cursorYPosition\r\n    moved = true\r\n  }\r\n\r\n  if (props.noBuffer) {\r\n    verifyScroll()\r\n  } else {\r\n    computePercent()\r\n    triggerUpdate()\r\n  }\r\n\r\n  syncBarScroll()\r\n  emitScrollEvent(mode.value)\r\n}\r\n\r\nfunction handlePointerUp(event: MouseEvent | TouchEvent) {\r\n  if (!moved && target && event.target === target && Date.now() - lastDate <= 500) {\r\n    target.dispatchEvent(new MouseEvent('click', event))\r\n  }\r\n\r\n  document.removeEventListener(MOVE_EVENT, handlePointerMove)\r\n  document.removeEventListener(UP_EVENT, handlePointerUp)\r\n\r\n  transitionDuration.value = -1\r\n  moved = false\r\n\r\n  handleBuffer()\r\n  verifyScroll()\r\n  syncBarScroll()\r\n  emitEvent(props.onScrollEnd, getCommonPayload())\r\n  startAutoplay()\r\n}\r\n\r\n// 按下 shift 时为横向滚动，保持和原生操作一致\r\nfunction handleWheel(event: WheelEvent, type: 'vertical' | 'horizontal') {\r\n  const isVerticalScroll = enableYScroll.value && type === 'vertical'\r\n  const isHorizontalScroll = enableXScroll.value && type === 'horizontal'\r\n\r\n  // 纵横滚动均使用 deltaY 标记\r\n  const sign = event.deltaY > 0 ? -1 : 1\r\n\r\n  if (\r\n    props.wheel &&\r\n    (isVerticalScroll || isHorizontalScroll) &&\r\n    props.onBeforeScroll?.({ signX: -sign, signY: -sign }) !== false\r\n  ) {\r\n    event.preventDefault()\r\n    event.stopPropagation()\r\n  } else {\r\n    return true\r\n  }\r\n\r\n  if (mode.value !== 'both' && mode.value !== type) return false\r\n\r\n  prepareScroll()\r\n\r\n  const computedDelta = sign * (type === 'horizontal' ? props.deltaX : props.deltaY)\r\n\r\n  if (isVerticalScroll) {\r\n    y.value += computedDelta\r\n  } else if (isHorizontalScroll) {\r\n    x.value += computedDelta\r\n  }\r\n\r\n  verifyScroll()\r\n  syncBarScroll()\r\n  emitScrollEvent(type)\r\n\r\n  emitEvent(props.onWheel, {\r\n    ...getCommonPayload(),\r\n    type,\r\n    sign: -sign as 1 | -1,\r\n  })\r\n\r\n  startAutoplay()\r\n}\r\n\r\nfunction prepareScroll() {\r\n  stopAutoplay()\r\n  clearTimeout(timer.buffer)\r\n}\r\n\r\nfunction handleBuffer() {\r\n  if (props.noBuffer) {\r\n    timer.buffer = setTimeout(() => {\r\n      scrolling.value = false\r\n    }, 300)\r\n  } else {\r\n    scrolling.value = false\r\n  }\r\n}\r\n\r\nfunction handleBarScrollStart(type: 'vertical' | 'horizontal') {\r\n  usingBar.value = true\r\n  emitEvent(props.onBarScrollStart, { ...getCommonPayload(), type })\r\n}\r\n\r\nfunction handleBarScrollEnd(type: 'vertical' | 'horizontal') {\r\n  usingBar.value = false\r\n  emitEvent(props.onBarScrollEnd, { ...getCommonPayload(), type })\r\n}\r\n\r\nfunction handleXBarScroll(percent: number) {\r\n  percentX.value = percent\r\n  x.value = (percent * xScrollLimit.value) / 100\r\n  triggerUpdate()\r\n\r\n  emitEvent(props.onBarScroll, {\r\n    ...getCommonPayload(),\r\n    type: 'horizontal',\r\n  })\r\n  emitScrollEvent('horizontal')\r\n}\r\n\r\nfunction handleYBarScroll(percent: number) {\r\n  percentY.value = percent\r\n  y.value = (percent * yScrollLimit.value) / 100\r\n  triggerUpdate()\r\n\r\n  emitEvent(props.onBarScroll, {\r\n    ...getCommonPayload(),\r\n    type: 'vertical',\r\n  })\r\n  emitScrollEvent('vertical')\r\n}\r\n\r\nfunction emitScrollEvent(type: Exclude<ScrollMode, 'horizontal-exact'>) {\r\n  emitEvent(props.onScroll, {\r\n    ...getCommonPayload(),\r\n    type,\r\n  })\r\n  emitter.emit('scroll', {\r\n    ...getCommonPayload(),\r\n    type,\r\n  })\r\n}\r\n\r\nfunction ensureScrollOffset() {\r\n  if (wrapperEl.value) {\r\n    wrapperEl.value.scrollTop = 0\r\n    wrapperEl.value.scrollLeft = 0\r\n  }\r\n}\r\n\r\nfunction getState() {\r\n  const { clientX: scrollX, clientY: scrollY, percentX, percentY } = getCommonPayload()\r\n\r\n  return {\r\n    scrollX,\r\n    scrollY,\r\n    percentX,\r\n    percentY,\r\n    enableXScroll: enableXScroll.value,\r\n    enableYScroll: enableYScroll.value,\r\n  }\r\n}\r\n\r\nfunction waitTransition(duration = waitDelay) {\r\n  clearTimeout(timer.wait)\r\n\r\n  return new Promise<void>(resolve => {\r\n    timer.wait = setTimeout(() => resolve(), duration + 1)\r\n  })\r\n}\r\n\r\nfunction scrollTo(clientX: number, clientY: number, duration?: number) {\r\n  setDuration(duration)\r\n  nextTick(() => {\r\n    let changed = false\r\n\r\n    if (enableXScroll.value && Math.abs(x.value + clientX) > 0.01) {\r\n      x.value = -clientX\r\n      changed = true\r\n    }\r\n\r\n    if (enableYScroll.value && Math.abs(y.value + clientY) > 0.01) {\r\n      y.value = -clientY\r\n      changed = true\r\n    }\r\n\r\n    verifyScroll()\r\n    syncBarScroll()\r\n\r\n    if (!changed) transitionDuration.value = -1\r\n  })\r\n\r\n  return waitTransition(duration)\r\n}\r\n\r\nfunction scrollBy(deltaX: number, deltaY: number, duration?: number) {\r\n  setDuration(duration)\r\n  nextTick(() => {\r\n    let changed = false\r\n\r\n    if (deltaX && enableXScroll) {\r\n      x.value -= deltaX\r\n      changed = true\r\n    }\r\n\r\n    if (deltaY && enableYScroll) {\r\n      y.value -= deltaY\r\n      changed = true\r\n    }\r\n\r\n    verifyScroll()\r\n    syncBarScroll()\r\n\r\n    if (!changed) transitionDuration.value = -1\r\n  })\r\n\r\n  return waitTransition(duration)\r\n}\r\n\r\nfunction setDuration(duration?: number) {\r\n  if (typeof duration === 'number') {\r\n    transitionDuration.value = duration\r\n\r\n    if (transitionDuration.value === 0) {\r\n      nextTick(() => {\r\n        transitionDuration.value = -1\r\n      })\r\n    }\r\n  }\r\n}\r\n\r\nfunction scrollToElement(el: string | Element, duration?: number, offset = 0) {\r\n  if (!contentEl.value) return Promise.resolve()\r\n\r\n  if (typeof el === 'string') {\r\n    el = contentEl.value.querySelector(el)!\r\n  }\r\n\r\n  if (!isElement(el)) return Promise.resolve()\r\n\r\n  const wrapperRect = contentEl.value.getBoundingClientRect()\r\n  const elRect = el.getBoundingClientRect()\r\n\r\n  let clientX = 0\r\n  let clientY = 0\r\n\r\n  if (mode.value !== 'vertical') {\r\n    clientX = elRect.left - wrapperRect.left + offset\r\n  }\r\n\r\n  if (mode.value !== 'horizontal') {\r\n    clientY = elRect.top - wrapperRect.top + offset\r\n  }\r\n\r\n  return scrollTo(clientX, clientY, duration)\r\n}\r\n\r\nfunction ensureInView(el: string | Element, duration?: number, offset = 0) {\r\n  if (!wrapperEl.value) return Promise.resolve()\r\n\r\n  if (typeof el === 'string') {\r\n    el = wrapperEl.value.querySelector(el)!\r\n  }\r\n\r\n  if (!isElement(el)) return Promise.resolve()\r\n\r\n  const wrapperRect = wrapperEl.value.getBoundingClientRect()\r\n  const elRect = el.getBoundingClientRect()\r\n\r\n  let clientX = 0\r\n  let clientY = 0\r\n\r\n  if (mode.value !== 'vertical') {\r\n    if (elRect.left < wrapperRect.left + offset) {\r\n      clientX = elRect.left - wrapperRect.left - offset\r\n    } else if (elRect.right > wrapperRect.right - offset) {\r\n      clientX = elRect.right - wrapperRect.right + offset\r\n    }\r\n  }\r\n\r\n  if (mode.value !== 'horizontal') {\r\n    if (elRect.top < wrapperRect.top + offset) {\r\n      clientY = elRect.top - wrapperRect.top - offset\r\n    } else if (elRect.bottom > wrapperRect.bottom - offset) {\r\n      clientY = elRect.bottom - wrapperRect.bottom + offset\r\n    }\r\n  }\r\n\r\n  return scrollBy(clientX, clientY, duration)\r\n}\r\n\r\nfunction getXScrollLimit() {\r\n  return [0, -xScrollLimit.value]\r\n}\r\n\r\nfunction getYScrollLimit() {\r\n  return [0, -yScrollLimit.value]\r\n}\r\n\r\nfunction addScrollListener(listener: EventHandler) {\r\n  emitter.on('scroll', listener)\r\n}\r\n\r\nfunction removeScrollListener(listener: EventHandler) {\r\n  emitter.off('scroll', listener)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"wrapperEl\"\r\n    :class=\"className\"\r\n    :style=\"style\"\r\n    @mousedown=\"handleMouseDown\"\r\n    @touchstart=\"handleTouchStart\"\r\n    @scroll=\"ensureScrollOffset\"\r\n    @wheel.exact=\"\r\n      handleWheel($event, props.mode === 'horizontal-exact' ? 'horizontal' : 'vertical')\r\n    \"\r\n    @wheel.shift=\"handleWheel($event, 'horizontal')\"\r\n  >\r\n    <div v-if=\"$slots.extra\" :class=\"nh.be('extra')\">\r\n      <slot name=\"extra\" v-bind=\"slotParams\"></slot>\r\n    </div>\r\n    <ResizeObserver throttle :on-resize=\"handleResize\">\r\n      <component\r\n        :is=\"props.scrollTag || 'div'\"\r\n        v-bind=\"props.scrollAttrs\"\r\n        ref=\"contentEl\"\r\n        :class=\"wrapperClass\"\r\n        :style=\"wrapperStyle\"\r\n        @transitionend=\"transitionDuration = -1\"\r\n      >\r\n        <slot v-bind=\"slotParams\"></slot>\r\n      </component>\r\n    </ResizeObserver>\r\n    <Scrollbar\r\n      v-if=\"props.useXBar\"\r\n      ref=\"xBar\"\r\n      inherit\r\n      placement=\"bottom\"\r\n      :class=\"[nh.bem('bar', 'horizontal'), props.barClass]\"\r\n      :fade=\"props.barFade\"\r\n      :bar-length=\"xBarLength\"\r\n      :disabled=\"!enableXScroll\"\r\n      :duration=\"transitionDuration\"\r\n      :use-track=\"props.useBarTrack\"\r\n      @scroll-start=\"handleBarScrollStart('horizontal')\"\r\n      @scroll=\"handleXBarScroll\"\r\n      @scroll-end=\"handleBarScrollEnd('horizontal')\"\r\n    ></Scrollbar>\r\n    <Scrollbar\r\n      v-if=\"props.useYBar\"\r\n      ref=\"yBar\"\r\n      inherit\r\n      placement=\"right\"\r\n      :class=\"[nh.bem('bar', 'vertical'), props.barClass]\"\r\n      :fade=\"props.barFade\"\r\n      :bar-length=\"yBarLength\"\r\n      :disabled=\"!enableYScroll\"\r\n      :duration=\"transitionDuration\"\r\n      :use-track=\"props.useBarTrack\"\r\n      @scroll-start=\"handleBarScrollStart('vertical')\"\r\n      @scroll=\"handleYBarScroll\"\r\n      @scroll-end=\"handleBarScrollEnd('vertical')\"\r\n    ></Scrollbar>\r\n  </div>\r\n</template>\r\n","import type { InjectionKey } from 'vue'\r\n\r\nexport type WheelRawOption =\r\n  | string\r\n  | number\r\n  | {\r\n    value: string | number,\r\n    label?: string,\r\n    disabled?: boolean,\r\n  }\r\n\r\nexport interface WheelOption {\r\n  value: string | number,\r\n  label: string,\r\n  disabled: boolean,\r\n  meta: WheelRawOption,\r\n}\r\n\r\nexport interface ItemState {\r\n  width: number,\r\n  height: number,\r\n  el?: HTMLElement | null,\r\n  value: number | string,\r\n  disabled: boolean,\r\n  meta: any,\r\n}\r\n\r\nexport interface WheelState {\r\n  increaseItem(item: ItemState): void,\r\n  decreaseItem(item: ItemState): void,\r\n}\r\n\r\nexport interface WheelSlots {\r\n  default?: (params: { option: WheelOption, index: number }) => any,\r\n}\r\n\r\nexport const WHEEL_STATE = '__VXP_WHEEL_STATE' as unknown as InjectionKey<WheelState>\r\n","<script setup lang=\"ts\">\r\nimport { computed, inject, onBeforeUnmount, onMounted, reactive, ref, toRef } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { WHEEL_STATE } from './symbol'\r\n\r\ndefineOptions({ name: 'WheelItem' })\r\n\r\nconst props = defineProps({\r\n  value: {\r\n    type: [Number, String],\r\n    default: null,\r\n  },\r\n  disabled: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  active: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  meta: {\r\n    type: [String, Number, Object],\r\n    default: null,\r\n  },\r\n})\r\n\r\nconst nh = useNameHelper('wheel')\r\n\r\nconst wheelState = inject(WHEEL_STATE, null)\r\n\r\nconst width = ref(0)\r\nconst height = ref(0)\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nconst state = reactive({\r\n  width,\r\n  height,\r\n  el: wrapper,\r\n  value: toRef(props, 'value'),\r\n  disabled: toRef(props, 'disabled'),\r\n  meta: toRef(props, 'meta'),\r\n})\r\n\r\nconst style = computed(() => {\r\n  return {\r\n    width: width.value ? `${width.value}px` : undefined,\r\n    height: height.value ? `${height.value}px` : undefined,\r\n  }\r\n})\r\n\r\nif (wheelState) {\r\n  onMounted(() => {\r\n    wheelState.increaseItem(state)\r\n  })\r\n\r\n  onBeforeUnmount(() => {\r\n    wheelState.decreaseItem(state)\r\n  })\r\n}\r\n\r\ndefineExpose({ wrapper })\r\n</script>\r\n\r\n<template>\r\n  <li\r\n    ref=\"wrapper\"\r\n    :class=\"[\r\n      nh.be('item'),\r\n      disabled && nh.bem('item', 'disabled'),\r\n      active && nh.bem('item', 'active')\r\n    ]\"\r\n    role=\"option\"\r\n    :aria-disabled=\"disabled ? 'true' : undefined\"\r\n    :aria-selected=\"active\"\r\n    :style=\"style\"\r\n  >\r\n    <slot>\r\n      {{ value }}\r\n    </slot>\r\n  </li>\r\n</template>\r\n","import { booleanProp, booleanStringProp, buildProps, eventProp, stateProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { WheelRawOption, WheelSlots } from './symbol'\r\n\r\nexport const wheelProps = buildProps({\r\n  state: stateProp,\r\n  horizontal: booleanProp,\r\n  value: [String, Number],\r\n  /**\r\n   * 上下或左右两侧的候选数\r\n   */\r\n  candidate: Number as PropType<0 | 1 | 2 | 3>,\r\n  arrow: booleanProp,\r\n  pointer: booleanProp,\r\n  options: Array as PropType<WheelRawOption[]>,\r\n  insertEmpty: booleanStringProp,\r\n  disabled: booleanProp,\r\n  loading: booleanProp,\r\n  loadingLock: booleanProp,\r\n  disabledItem: Function as PropType<(value: string | number, data: WheelRawOption) => boolean>,\r\n  noTransition: booleanProp,\r\n  selectable: booleanProp,\r\n  slots: Object as PropType<WheelSlots>,\r\n  onChange: eventProp<(value: string | number, data: WheelRawOption) => void>(),\r\n  onPrev: eventProp<(value: string | number, data: WheelRawOption) => void>(),\r\n  onNext: eventProp<(value: string | number, data: WheelRawOption) => void>(),\r\n  onItemClick: eventProp<(value: string | number, data: WheelRawOption) => void>(),\r\n})\r\n\r\nexport type WheelProps = ExtractPropTypes<typeof wheelProps>\r\nexport type WheelCProps = ConfigurableProps<WheelProps>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon/'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { Scroll } from '@/components/scroll'\r\nimport { useFieldStore } from '@/components/form'\r\n\r\nimport { computed, nextTick, provide, ref, watch } from 'vue'\r\n\r\nimport WheelItem from './wheel-item.vue'\r\nimport { createStateProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useDisplay, useModifier, useRtl } from '@vexip-ui/hooks'\r\nimport { USE_TOUCH, boundRange, debounce, debounceMinor, toFalse } from '@vexip-ui/utils'\r\nimport { wheelProps } from './props'\r\nimport { WHEEL_STATE } from './symbol'\r\n\r\nimport type { ItemState, WheelOption, WheelSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'Wheel' })\r\n\r\nconst { idFor, labelId, state, disabled, loading, validateField, getFieldValue, setFieldValue } =\r\n  useFieldStore<string | number>(() => wrapper.value?.focus())\r\n\r\nconst _props = defineProps(wheelProps)\r\nconst props = useProps('wheel', _props, {\r\n  state: createStateProp(state),\r\n  horizontal: false,\r\n  value: {\r\n    default: () => getFieldValue(),\r\n    static: true,\r\n  },\r\n  candidate: {\r\n    default: 2,\r\n    validator: value => [0, 1, 2, 3].includes(value),\r\n  },\r\n  arrow: false,\r\n  pointer: USE_TOUCH,\r\n  options: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  insertEmpty: false,\r\n  disabled: () => disabled.value,\r\n  loading: () => loading.value,\r\n  loadingLock: false,\r\n  disabledItem: {\r\n    default: toFalse,\r\n    isFunc: true,\r\n  },\r\n  noTransition: false,\r\n  selectable: false,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:value'])\r\n\r\ndefineSlots<WheelSlots>()\r\n\r\nconst nh = useNameHelper('wheel')\r\nconst icons = useIcons()\r\n\r\nconst items = ref(new Set<ItemState>())\r\nconst currentActive = ref(0)\r\nconst wrapperWidth = ref(0)\r\nconst wrapperHeight = ref(0)\r\nconst targetWidth = ref(0)\r\nconst targetHeight = ref(0)\r\nconst horizontalPadding = ref(0)\r\nconst verticalPadding = ref(0)\r\nconst isInit = ref(false)\r\n\r\nconst { isRtl } = useRtl()\r\n\r\nconst wrapper = useDisplay(displayInit)\r\nconst scroll = ref<InstanceType<typeof Scroll>>()\r\n\r\nuseModifier({\r\n  target: wrapper,\r\n  passive: false,\r\n  onKeyDown: (event, modifier) => {\r\n    if (modifier.up || modifier.down) {\r\n      event.preventDefault()\r\n      modifier.up ? handlePrev() : handleNext()\r\n    }\r\n  },\r\n})\r\n\r\nconst normalizedOptions = computed<WheelOption[]>(() => {\r\n  const options = props.options.map(option => {\r\n    if (typeof option === 'object') {\r\n      const { value, label, disabled = false } = option\r\n\r\n      return {\r\n        value,\r\n        label: label || String(value),\r\n        disabled,\r\n        meta: option,\r\n      }\r\n    }\r\n\r\n    return { value: option, label: String(option), disabled: false, meta: option }\r\n  })\r\n\r\n  if (props.insertEmpty) {\r\n    options.unshift({\r\n      value: '',\r\n      label: typeof props.insertEmpty === 'string' ? props.insertEmpty : '-',\r\n      disabled: false,\r\n      meta: '',\r\n    })\r\n  }\r\n\r\n  return options\r\n})\r\nconst itemList = computed(() => {\r\n  return Array.from(items.value)\r\n})\r\nconst readonly = computed(() => props.loading && props.loadingLock)\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    nh.bm(props.horizontal ? 'horizontal' : 'vertical'),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm(props.state)]: props.state !== 'default',\r\n      [nh.bm('disabled')]: props.disabled,\r\n      [nh.bm('readonly')]: readonly.value,\r\n      [nh.bm('loading')]: props.loading,\r\n    },\r\n  ]\r\n})\r\nconst listStyle = computed(() => {\r\n  if (props.horizontal) {\r\n    return {\r\n      paddingRight: `${horizontalPadding.value}px`,\r\n      paddingLeft: `${horizontalPadding.value}px`,\r\n    }\r\n  }\r\n\r\n  return {\r\n    paddingTop: `${verticalPadding.value}px`,\r\n    paddingBottom: `${verticalPadding.value}px`,\r\n  }\r\n})\r\nconst maskStyle = computed(() => {\r\n  if (props.horizontal) {\r\n    return {\r\n      width: horizontalPadding.value ? `${horizontalPadding.value}px` : undefined,\r\n    }\r\n  }\r\n\r\n  return {\r\n    height: verticalPadding.value ? `${verticalPadding.value}px` : undefined,\r\n  }\r\n})\r\nconst borderStyle = computed(() => {\r\n  const style: Record<string, string> = {\r\n    inset: props.horizontal\r\n      ? `0 ${horizontalPadding.value - 1}px`\r\n      : `${verticalPadding.value - 1}px 0`,\r\n  }\r\n\r\n  if (props.horizontal) {\r\n    style.borderTop = '0'\r\n    style.borderBottom = '0'\r\n  } else {\r\n    style.borderRight = '0'\r\n    style.borderLeft = '0'\r\n  }\r\n\r\n  return style\r\n})\r\nconst prevDisabled = computed(() => {\r\n  return (\r\n    props.disabled ||\r\n    !itemList.value.slice(0, currentActive.value).some(item => !isItemDisabled(item))\r\n  )\r\n})\r\nconst nextDisabled = computed(() => {\r\n  return (\r\n    props.disabled ||\r\n    currentActive.value >= itemList.value.length - 1 ||\r\n    !itemList.value\r\n      .slice(currentActive.value + 1, itemList.value.length)\r\n      .some(item => !isItemDisabled(item))\r\n  )\r\n})\r\nconst prevIcon = computed(() =>\r\n  props.horizontal\r\n    ? isRtl.value\r\n      ? icons.value.angleRight\r\n      : icons.value.angleLeft\r\n    : icons.value.angleUp,\r\n)\r\nconst nextIcon = computed(() =>\r\n  props.horizontal\r\n    ? isRtl.value\r\n      ? icons.value.angleLeft\r\n      : icons.value.angleRight\r\n    : icons.value.angleDown,\r\n)\r\n\r\nprovide(WHEEL_STATE, { increaseItem, decreaseItem })\r\n\r\nconst updateActive = debounceMinor(() => {\r\n  const active = Math.max(\r\n    itemList.value.findIndex(item => item.value === props.value),\r\n    0,\r\n  )\r\n\r\n  setActive(findEnabledActive(active))\r\n})\r\n\r\nconst computeSize = debounceMinor(() => {\r\n  nextTick(() => {\r\n    const horizontal = props.horizontal\r\n\r\n    itemList.value.forEach(item => {\r\n      if (item && item.el) {\r\n        targetWidth.value = Math.max(targetWidth.value, item.el.offsetWidth)\r\n        targetHeight.value = Math.max(targetHeight.value, item.el.offsetHeight)\r\n      }\r\n    })\r\n\r\n    const candidate = props.candidate\r\n    const showCount = 2 * candidate + 1\r\n\r\n    wrapperWidth.value = showCount * targetWidth.value\r\n    wrapperHeight.value = showCount * targetHeight.value\r\n\r\n    horizontalPadding.value = candidate * targetWidth.value\r\n    verticalPadding.value = candidate * targetHeight.value\r\n\r\n    items.value.forEach(item => {\r\n      if (horizontal) {\r\n        item.width = targetWidth.value\r\n      } else {\r\n        item.height = targetHeight.value\r\n      }\r\n    })\r\n\r\n    setTimeout(() => {\r\n      scroll.value?.refresh()\r\n    }, 0)\r\n  })\r\n})\r\n\r\nconst refreshScroll = debounce(() => {\r\n  if (scroll.value) {\r\n    let targetXScroll = 0\r\n    let targetYScroll = 0\r\n\r\n    if (props.horizontal) {\r\n      targetXScroll = currentActive.value * targetWidth.value\r\n    } else {\r\n      targetYScroll = currentActive.value * targetHeight.value\r\n    }\r\n\r\n    nextTick(() => {\r\n      scroll.value?.scrollTo(targetXScroll, targetYScroll)\r\n    })\r\n  }\r\n}, 20)\r\n\r\nwatch(\r\n  () => props.value,\r\n  () => {\r\n    updateActive()\r\n    refreshScroll()\r\n  },\r\n  { immediate: true },\r\n)\r\nwatch(() => props.horizontal, computeSize)\r\nwatch(() => props.candidate, computeSize)\r\n\r\ndefineExpose({\r\n  idFor,\r\n  currentActive,\r\n  isInit,\r\n  targetWidth,\r\n  targetHeight,\r\n  wrapperWidth,\r\n  wrapperHeight,\r\n  itemList,\r\n  wrapper,\r\n  scroll,\r\n  refreshScroll,\r\n  focus: (options?: FocusOptions) => wrapper.value?.focus(options),\r\n  blur: () => wrapper.value?.blur(),\r\n})\r\n\r\nfunction isItemDisabled(item: ItemState) {\r\n  return item.disabled || props.disabledItem(item.value, item.meta)\r\n}\r\n\r\nfunction setActive(active: number) {\r\n  if (currentActive.value === active) return\r\n\r\n  currentActive.value = active\r\n\r\n  const item = itemList.value[active]\r\n  const value = item?.value\r\n\r\n  refreshScroll()\r\n  emit('update:value', value)\r\n  setFieldValue(value)\r\n  emitEvent(props.onChange, value, item?.meta)\r\n  validateField()\r\n}\r\n\r\nfunction queryEnabledActive(active: number, step: number) {\r\n  step = step / Math.abs(step)\r\n\r\n  while (itemList.value[active].disabled) {\r\n    active += step\r\n\r\n    if (active < 0 || active >= itemList.value.length) break\r\n  }\r\n\r\n  return active\r\n}\r\n\r\nfunction findEnabledActive(active: number, sign = 1) {\r\n  if (itemList.value[active] && isItemDisabled(itemList.value[active])) {\r\n    active = queryEnabledActive(active, 1 * sign)\r\n\r\n    if (sign > 0 ? active >= itemList.value.length : active < 0) {\r\n      active = queryEnabledActive(boundRange(active, 0, itemList.value.length - 1), -1 * sign)\r\n\r\n      // 全禁用\r\n      if (sign > 0 ? active < 0 : active >= itemList.value.length) active = 0\r\n    }\r\n  }\r\n\r\n  return active\r\n}\r\n\r\nfunction increaseItem(item: ItemState) {\r\n  items.value.add(item)\r\n  computeSize()\r\n  updateActive()\r\n}\r\n\r\nfunction decreaseItem(item: ItemState) {\r\n  items.value.delete(item)\r\n  computeSize()\r\n  updateActive()\r\n}\r\n\r\nfunction displayInit() {\r\n  computeSize()\r\n  scroll.value?.refresh()\r\n\r\n  nextTick(() => {\r\n    isInit.value = true\r\n\r\n    updateActive()\r\n    refreshScroll()\r\n  })\r\n}\r\n\r\nfunction beforeScroll({ signX, signY }: { signX: number, signY: number }) {\r\n  if (props.disabled || readonly.value) return false\r\n\r\n  const sign = props.horizontal ? signX : signY\r\n\r\n  return !((sign < 0 && prevDisabled.value) || (sign > 0 && nextDisabled.value))\r\n}\r\n\r\nfunction handleScrollEnd({ clientX, clientY }: { clientX: number, clientY: number }) {\r\n  const aboutActive = props.horizontal ? clientX / targetWidth.value : clientY / targetHeight.value\r\n  const active = Math.round(aboutActive)\r\n\r\n  if (active !== currentActive.value) {\r\n    setActive(findEnabledActive(active, active > aboutActive ? 1 : -1))\r\n  } else {\r\n    refreshScroll()\r\n  }\r\n}\r\n\r\nfunction handleWheel({\r\n  sign,\r\n  clientX,\r\n  clientY,\r\n}: {\r\n  clientX: number,\r\n  clientY: number,\r\n  sign: 1 | -1,\r\n}) {\r\n  const active = props.horizontal\r\n    ? Math.round(clientX / targetWidth.value)\r\n    : Math.round(clientY / targetHeight.value)\r\n\r\n  setActive(findEnabledActive(active, sign))\r\n}\r\n\r\nfunction handlePrev() {\r\n  if (!prevDisabled.value) {\r\n    setActive(findEnabledActive(currentActive.value - 1, -1))\r\n\r\n    const item = itemList.value[currentActive.value]\r\n\r\n    emitEvent(props.onPrev, item?.value, item?.meta)\r\n  }\r\n}\r\n\r\nfunction handleNext() {\r\n  if (!nextDisabled.value) {\r\n    setActive(findEnabledActive(currentActive.value + 1, 1))\r\n\r\n    const item = itemList.value[currentActive.value]\r\n\r\n    emitEvent(props.onNext, item?.value, item?.meta)\r\n  }\r\n}\r\n\r\nfunction handleItemClick(option: WheelOption, index: number) {\r\n  if (props.selectable && !isItemDisabled(itemList.value[index])) {\r\n    setActive(index)\r\n  }\r\n\r\n  emitEvent(props.onItemClick, option.value, option.meta)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :id=\"idFor\"\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    tabindex=\"0\"\r\n    role=\"group\"\r\n    :aria-labelledby=\"labelId\"\r\n  >\r\n    <div\r\n      v-if=\"props.arrow\"\r\n      ref=\"prevArrow\"\r\n      :class=\"[\r\n        nh.be('arrow'),\r\n        nh.bem('arrow', 'prev'),\r\n        prevDisabled ? nh.bem('arrow', 'disabled') : '',\r\n      ]\"\r\n      aria-hidden\r\n      @click=\"handlePrev\"\r\n    >\r\n      <Icon v-bind=\"prevIcon\"></Icon>\r\n    </div>\r\n    <div :class=\"nh.be('scroll')\" role=\"none\">\r\n      <Scroll\r\n        ref=\"scroll\"\r\n        inherit\r\n        :scroll-x=\"props.horizontal ? targetWidth * currentActive : 0\"\r\n        :scroll-y=\"props.horizontal ? 0 : targetHeight * currentActive\"\r\n        :width=\"props.horizontal ? wrapperWidth : '100%'\"\r\n        :height=\"props.horizontal ? '100%' : wrapperHeight\"\r\n        :pointer=\"props.pointer\"\r\n        :mode=\"props.horizontal ? 'horizontal' : 'vertical'\"\r\n        :delta-x=\"targetWidth\"\r\n        :delta-y=\"targetHeight\"\r\n        :on-before-scroll=\"beforeScroll\"\r\n        :no-transition=\"props.noTransition\"\r\n        @wheel=\"handleWheel\"\r\n        @scroll-end=\"handleScrollEnd\"\r\n      >\r\n        <ul ref=\"list\" :class=\"nh.be('list')\" :style=\"listStyle\">\r\n          <template v-if=\"isInit\">\r\n            <WheelItem\r\n              v-for=\"(option, index) in normalizedOptions\"\r\n              :key=\"index\"\r\n              :value=\"option.value\"\r\n              :disabled=\"option.disabled || props.disabledItem(option.value, option)\"\r\n              :active=\"currentActive === index\"\r\n              :meta=\"option.meta\"\r\n              @click=\"handleItemClick(option, index)\"\r\n            >\r\n              <slot :option=\"option\" :index=\"index\">\r\n                <Renderer :renderer=\"props.slots.default\" :data=\"{ option, index }\">\r\n                  {{ option.label }}\r\n                </Renderer>\r\n              </slot>\r\n            </WheelItem>\r\n          </template>\r\n        </ul>\r\n      </Scroll>\r\n      <template v-if=\"props.candidate\">\r\n        <div :class=\"[nh.be('mask'), nh.bem('mask', 'top')]\" :style=\"maskStyle\"></div>\r\n        <div :class=\"[nh.be('mask'), nh.bem('mask', 'bottom')]\" :style=\"maskStyle\"></div>\r\n      </template>\r\n      <div\r\n        :class=\"{\r\n          [nh.be('border')]: true,\r\n          [nh.bem('border', 'active')]: props.loading,\r\n          [nh.bem('border', 'vertical')]: props.horizontal,\r\n        }\"\r\n        :style=\"borderStyle\"\r\n      ></div>\r\n    </div>\r\n    <div\r\n      v-if=\"props.arrow\"\r\n      ref=\"nextArrow\"\r\n      :class=\"[\r\n        nh.be('arrow'),\r\n        nh.bem('arrow', 'next'),\r\n        nextDisabled ? nh.bem('arrow', 'disabled') : '',\r\n      ]\"\r\n      aria-hidden\r\n      @click=\"handleNext\"\r\n    >\r\n      <Icon v-bind=\"nextIcon\"></Icon>\r\n    </div>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Wheel } from '@/components/wheel'\r\n\r\nimport { ref, watch } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { USE_TOUCH, doubleDigits, range } from '@vexip-ui/utils'\r\n\r\nimport type { WheelExposed } from '@/components/wheel'\r\nimport type { PropType } from 'vue'\r\nimport type { DisabledTime, TimeType, TimeWheelSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'TimeWheel' })\r\n\r\nconst props = defineProps({\r\n  noArrow: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  hour: {\r\n    type: Number,\r\n    default: 0,\r\n    validator: (value: number) => value >= 0 && value <= 23,\r\n  },\r\n  minute: {\r\n    type: Number,\r\n    default: 0,\r\n    validator: (value: number) => value >= 0 && value <= 59,\r\n  },\r\n  second: {\r\n    type: Number,\r\n    default: 0,\r\n    validator: (value: number) => value >= 0 && value <= 59,\r\n  },\r\n  candidate: {\r\n    default: 2 as 0 | 1 | 2 | 3,\r\n    validator: (value: number) => [0, 1, 2, 3].includes(value),\r\n  },\r\n  steps: {\r\n    type: Array as PropType<number[]>,\r\n    default: () => [1, 1, 1],\r\n    validator: (value: [number, number, number]) => {\r\n      if (value[0] && 24 % value[0] !== 0) {\r\n        return false\r\n      }\r\n\r\n      for (let i = 1; i < 3; ++i) {\r\n        if (value[i] && 60 % value[i] !== 0) {\r\n          return false\r\n        }\r\n      }\r\n\r\n      return true\r\n    },\r\n  },\r\n  pointer: {\r\n    type: Boolean,\r\n    default: USE_TOUCH,\r\n  },\r\n  disabledTime: {\r\n    type: Object as PropType<DisabledTime>,\r\n    default: () => ({}),\r\n  },\r\n  noTransition: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n})\r\n\r\nconst emit = defineEmits(['change', 'toggle-col', 'update:hour', 'update:minute', 'update:second'])\r\n\r\ndefineSlots<TimeWheelSlots>()\r\n\r\nconst nh = useNameHelper('time-picker')\r\n\r\nconst currentHour = ref(props.hour)\r\nconst currentMinute = ref(props.minute)\r\nconst currentSecond = ref(props.second)\r\nconst hourRange = ref<number[]>([])\r\nconst minuteRange = ref<number[]>([])\r\nconst secondRange = ref<number[]>([])\r\n\r\nconst hourWheel = ref<WheelExposed>()\r\nconst minuteWheel = ref<WheelExposed>()\r\nconst secondWheel = ref<WheelExposed>()\r\n\r\nwatch(() => props.steps, updateTimeRange, { immediate: true })\r\nwatch(\r\n  () => props.hour,\r\n  value => {\r\n    currentHour.value = value\r\n  },\r\n)\r\nwatch(\r\n  () => props.minute,\r\n  value => {\r\n    currentMinute.value = value\r\n  },\r\n)\r\nwatch(\r\n  () => props.second,\r\n  value => {\r\n    currentSecond.value = value\r\n  },\r\n)\r\nwatch(currentHour, value => {\r\n  emit('update:hour', value)\r\n  emit('change', 'hour', value)\r\n})\r\nwatch(currentMinute, value => {\r\n  emit('update:minute', value)\r\n  emit('change', 'minute', value)\r\n})\r\nwatch(currentSecond, value => {\r\n  emit('update:second', value)\r\n  emit('change', 'second', value)\r\n})\r\n\r\ndefineExpose({ refreshWheel })\r\n\r\nfunction isHourDisabled(hour: number) {\r\n  return typeof props.disabledTime.hour === 'function' && props.disabledTime.hour(hour)\r\n}\r\n\r\nfunction isMinuteDisabled(minute: number) {\r\n  return (\r\n    typeof props.disabledTime.minute === 'function' &&\r\n    props.disabledTime.minute(currentHour.value, minute)\r\n  )\r\n}\r\n\r\nfunction isSecondDisabled(second: number) {\r\n  return (\r\n    typeof props.disabledTime.second === 'function' &&\r\n    props.disabledTime.second(currentHour.value, currentMinute.value, second)\r\n  )\r\n}\r\n\r\nfunction updateTimeRange() {\r\n  const [hourStep = 1, minuteStep = 1, secondStep = 1] = props.steps\r\n\r\n  hourRange.value = range(24 / hourStep, 0, hourStep)\r\n  minuteRange.value = range(60 / minuteStep, 0, minuteStep)\r\n  secondRange.value = range(60 / secondStep, 0, secondStep)\r\n}\r\n\r\nfunction handleToggleColumn(type: TimeType) {\r\n  emit('toggle-col', type)\r\n}\r\n\r\nfunction refreshWheel() {\r\n  ;[hourWheel.value, minuteWheel.value, secondWheel.value].forEach(wheel => {\r\n    wheel?.refreshScroll()\r\n  })\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"nh.be('wheel')\">\r\n    <Wheel\r\n      ref=\"hourWheel\"\r\n      v-model:value=\"currentHour\"\r\n      inherit\r\n      :class=\"nh.be('hour-wheel')\"\r\n      :pointer=\"pointer\"\r\n      :arrow=\"!noArrow\"\r\n      :candidate=\"candidate\"\r\n      :options=\"hourRange\"\r\n      tabindex=\"-1\"\r\n      :no-transition=\"noTransition\"\r\n      @mouseenter=\"handleToggleColumn('hour')\"\r\n      @touchstart=\"handleToggleColumn('hour')\"\r\n      @keydown.stop\r\n      @item-click=\"currentHour = $event\"\r\n    >\r\n      <template #default=\"{ option, index }\">\r\n        <span\r\n          :class=\"[\r\n            nh.be('option'),\r\n            nh.be('hour'),\r\n            isHourDisabled(option.value as number) && nh.bem('option', 'disabled')\r\n          ]\"\r\n        >\r\n          <slot name=\"hour\" :option=\"option\" :index=\"index\">\r\n            {{ doubleDigits(option.value as number) }}\r\n          </slot>\r\n        </span>\r\n      </template>\r\n    </Wheel>\r\n    <Wheel\r\n      ref=\"minuteWheel\"\r\n      v-model:value=\"currentMinute\"\r\n      inherit\r\n      :class=\"nh.be('minute-wheel')\"\r\n      :pointer=\"pointer\"\r\n      :arrow=\"!noArrow\"\r\n      :candidate=\"candidate\"\r\n      :options=\"minuteRange\"\r\n      tabindex=\"-1\"\r\n      :no-transition=\"noTransition\"\r\n      @mouseenter=\"handleToggleColumn('minute')\"\r\n      @touchstart=\"handleToggleColumn('minute')\"\r\n      @keydown.stop\r\n      @item-click=\"currentMinute = $event\"\r\n    >\r\n      <template #default=\"{ option, index }\">\r\n        <span\r\n          :class=\"[\r\n            nh.be('option'),\r\n            nh.be('minute'),\r\n            isMinuteDisabled(option.value as number) && nh.bem('option', 'disabled')\r\n          ]\"\r\n        >\r\n          <slot name=\"minute\" :option=\"option\" :index=\"index\">\r\n            {{ doubleDigits(option.value as number) }}\r\n          </slot>\r\n        </span>\r\n      </template>\r\n    </Wheel>\r\n    <Wheel\r\n      ref=\"secondWheel\"\r\n      v-model:value=\"currentSecond\"\r\n      inherit\r\n      :class=\"nh.be('second-wheel')\"\r\n      :pointer=\"pointer\"\r\n      :arrow=\"!noArrow\"\r\n      :candidate=\"candidate\"\r\n      :options=\"secondRange\"\r\n      tabindex=\"-1\"\r\n      :no-transition=\"noTransition\"\r\n      @mouseenter=\"handleToggleColumn('second')\"\r\n      @touchstart=\"handleToggleColumn('second')\"\r\n      @keydown.stop\r\n      @item-click=\"currentSecond = $event\"\r\n    >\r\n      <template #default=\"{ option, index }\">\r\n        <span\r\n          :class=\"[\r\n            nh.be('option'),\r\n            nh.be('second'),\r\n            isSecondDisabled(option.value as number) && nh.bem('option', 'disabled')\r\n          ]\"\r\n        >\r\n          <slot name=\"second\" :option=\"option\" :index=\"index\">\r\n            {{ doubleDigits(option.value as number) }}\r\n          </slot>\r\n        </span>\r\n      </template>\r\n    </Wheel>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Button } from '@/components/button'\r\nimport { CalendarPanel } from '@/components/calendar-panel'\r\nimport { Icon } from '@/components/icon'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport { computed, onMounted, reactive, ref, watch } from 'vue'\r\n\r\nimport TimeWheel from './time-wheel.vue'\r\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\r\nimport { callIfFunc, range as rangeNumbers, toDate } from '@vexip-ui/utils'\r\nimport { useRtl } from '@vexip-ui/hooks'\r\nimport { datePickerTypes } from './symbol'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { MonthIndex } from '@/components/calendar'\r\nimport type { LocaleConfig } from '@vexip-ui/config'\r\nimport type { Dateable } from '@vexip-ui/utils'\r\nimport type {\r\n  DatePanelSlots,\r\n  DatePickerType,\r\n  DateShortcut,\r\n  DateShortcutsPlacement,\r\n  DateTimeType,\r\n  DateType,\r\n  DisabledTime,\r\n  TimeType,\r\n} from './symbol'\r\n\r\ndefineOptions({ name: 'DatePanel' })\r\n\r\nconst props = defineProps({\r\n  type: {\r\n    default: 'date' as DatePickerType,\r\n    validator: (value: DatePickerType) => datePickerTypes.includes(value),\r\n  },\r\n  enabled: {\r\n    type: Object as PropType<Record<DateTimeType, boolean>>,\r\n    default: () => ({}),\r\n  },\r\n  startValue: {\r\n    type: Object as PropType<Record<DateTimeType, number>>,\r\n    default: null,\r\n  },\r\n  endValue: {\r\n    type: Object as PropType<Record<DateTimeType, number>>,\r\n    default: null,\r\n  },\r\n  shortcuts: {\r\n    type: Array as PropType<DateShortcut[]>,\r\n    default: () => [],\r\n  },\r\n  confirmText: {\r\n    type: String,\r\n    default: null,\r\n  },\r\n  cancelText: {\r\n    type: String,\r\n    default: null,\r\n  },\r\n  today: {\r\n    type: [Number, String, Date] as PropType<Dateable>,\r\n    default: () => new Date(),\r\n  },\r\n  disabledDate: {\r\n    type: Function as PropType<(date: Date) => boolean>,\r\n    default: () => false,\r\n  },\r\n  noAction: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  steps: {\r\n    type: Array as PropType<number[]>,\r\n    default: () => [1, 1, 1],\r\n  },\r\n  range: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  startActivated: {\r\n    type: Object as PropType<Record<DateTimeType, boolean>>,\r\n    default: () => ({}),\r\n  },\r\n  endActivated: {\r\n    type: Object as PropType<Record<DateTimeType, boolean>>,\r\n    default: () => ({}),\r\n  },\r\n  min: {\r\n    type: [Number, String, Date] as PropType<Dateable>,\r\n    default: null,\r\n  },\r\n  max: {\r\n    type: [Number, String, Date] as PropType<Dateable>,\r\n    default: null,\r\n  },\r\n  disabledTime: {\r\n    type: Object as PropType<DisabledTime>,\r\n    default: () => ({}),\r\n  },\r\n  hasError: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  locale: {\r\n    type: Object as PropType<LocaleConfig['calendar'] & LocaleConfig['datePicker']>,\r\n    default: () => ({}),\r\n  },\r\n  selectingType: {\r\n    type: String as PropType<'start' | 'end'>,\r\n    default: 'start',\r\n  },\r\n  weekStart: {\r\n    type: Number,\r\n    default: null,\r\n  },\r\n  staticWheel: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  shortcutsPlacement: {\r\n    type: String as PropType<DateShortcutsPlacement>,\r\n    default: 'left',\r\n  },\r\n  labeledBy: {\r\n    type: String,\r\n    default: undefined,\r\n  },\r\n})\r\n\r\nconst emit = defineEmits([\r\n  'click',\r\n  'shortcut',\r\n  'toggle-col',\r\n  'change',\r\n  'cancel',\r\n  'confirm',\r\n  'hover',\r\n  'type-change',\r\n  'time-change',\r\n])\r\n\r\ndefineSlots<DatePanelSlots>()\r\n\r\nconst nh = useNameHelper('date-picker')\r\nconst icons = useIcons()\r\nconst { isRtl } = useRtl()\r\n\r\nconst today = toDate(props.today)\r\nconst monthRange = rangeNumbers(12, 1, 1)\r\n\r\nconst currentPanel = ref<DateType>(\r\n  props.type === 'year' ? 'year' : props.type === 'month' ? 'month' : 'date',\r\n)\r\nconst calendarYear = ref(today.getFullYear())\r\nconst calendarMonth = ref(today.getMonth() + 1) // 1 ~ 12\r\nconst hoveredYear = ref(0) // 0 is no hover (falsy)\r\nconst hoveredMonth = ref(0) // 0 is no hover (falsy)\r\nconst yearRange = ref<number[]>([])\r\n\r\nconst shortcutsRect = reactive({ width: 0, height: 0 })\r\n\r\nconst panelStyle = computed(() => {\r\n  const { width, height } = shortcutsRect\r\n\r\n  switch (props.shortcutsPlacement) {\r\n    case 'top':\r\n      return { paddingTop: `${height}px` }\r\n    case 'right':\r\n      return { paddingRight: `${width}px` }\r\n    case 'bottom':\r\n      return { paddingBottom: `${height}px` }\r\n    default:\r\n      return { paddingLeft: `${width}px` }\r\n  }\r\n})\r\nconst startActivated = computed(() => {\r\n  const activated = props.startActivated\r\n\r\n  return activated.year && activated.month && activated.date\r\n})\r\nconst endActivated = computed(() => {\r\n  const activated = props.endActivated\r\n\r\n  return activated.year && activated.month && activated.date\r\n})\r\nconst isDatetime = computed(() => {\r\n  return props.type === 'datetime'\r\n})\r\nconst calendarValue = computed(() => {\r\n  return props.range\r\n    ? startActivated.value || endActivated.value\r\n      ? [getStringValue('start'), getStringValue('end')]\r\n      : ['', '']\r\n    : startActivated.value\r\n      ? getStringValue('start')\r\n      : ''\r\n})\r\nconst weekDays = computed(() => {\r\n  return [\r\n    props.locale.week7,\r\n    props.locale.week1,\r\n    props.locale.week2,\r\n    props.locale.week3,\r\n    props.locale.week4,\r\n    props.locale.week5,\r\n    props.locale.week6,\r\n  ].map(week => week.slice(0, 2))\r\n})\r\n\r\nwatch(\r\n  calendarYear,\r\n  value => {\r\n    yearRange.value = rangeNumbers(12, Math.floor(value / 10) * 10, 1)\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\nonMounted(() => {\r\n  refreshCalendar('start')\r\n})\r\n\r\ndefineExpose({ refreshCalendar })\r\n\r\nfunction getStringValue(type: 'start' | 'end') {\r\n  const value = type === 'start' ? props.startValue : props.endValue\r\n\r\n  return value ? `${value.year}-${value.month}-${value.date}` : ''\r\n}\r\n\r\nfunction getMonthLabel(index: number) {\r\n  return props.locale[`month${index as MonthIndex}`]\r\n}\r\n\r\nfunction togglePanel(type: DateType) {\r\n  currentPanel.value = type\r\n}\r\n\r\nfunction adjustCalendar(type: 'year' | 'month', amount: number) {\r\n  if (type === 'year') {\r\n    calendarYear.value += amount\r\n  } else {\r\n    // 月份存在进位\r\n    calendarMonth.value += amount\r\n\r\n    const date = new Date(calendarYear.value, calendarMonth.value - 1, 1)\r\n\r\n    calendarYear.value = date.getFullYear()\r\n    calendarMonth.value = date.getMonth() + 1\r\n  }\r\n}\r\n\r\nfunction handleClick(event: MouseEvent) {\r\n  emit('click', event)\r\n}\r\n\r\nfunction handleShortcut(index: number) {\r\n  const { value, name } = props.shortcuts[index]\r\n\r\n  emit('shortcut', name, callIfFunc(value))\r\n}\r\n\r\nfunction handleSelectDate(date: Date) {\r\n  emitChange([date.getFullYear(), date.getMonth() + 1, date.getDate()])\r\n}\r\n\r\nfunction handleSelectYear(year: number) {\r\n  if (isDisabledYear(year)) return\r\n\r\n  calendarYear.value = year\r\n\r\n  if (props.type !== 'year') {\r\n    togglePanel('month')\r\n  } else {\r\n    emitChange([year, 1, 1])\r\n  }\r\n}\r\n\r\nfunction handleSelectMonth(month: number) {\r\n  if (isDisabledMonth(month)) return\r\n\r\n  calendarMonth.value = month\r\n\r\n  if (props.type !== 'month') {\r\n    togglePanel('date')\r\n  } else {\r\n    emitChange([calendarYear.value, month, 1])\r\n  }\r\n}\r\n\r\nfunction emitChange(values: number[]) {\r\n  emit('change', values)\r\n}\r\n\r\nfunction handleStartTimeChange(type: TimeType, time: number) {\r\n  emit('time-change', 'start', type, time)\r\n}\r\n\r\nfunction handleEndTimeChange(type: TimeType, time: number) {\r\n  emit('time-change', 'end', type, time)\r\n}\r\n\r\nfunction handleDoublePrevClick() {\r\n  if (currentPanel.value === 'year') {\r\n    yearRange.value = rangeNumbers(12, yearRange.value[0] - 10, 1)\r\n  } else {\r\n    adjustCalendar('year', -1)\r\n  }\r\n}\r\nfunction handleDoubleNextClick() {\r\n  if (currentPanel.value === 'year') {\r\n    yearRange.value = rangeNumbers(12, yearRange.value[10], 1)\r\n  } else {\r\n    adjustCalendar('year', 1)\r\n  }\r\n}\r\n\r\nfunction handleCancel() {\r\n  emit('cancel')\r\n}\r\n\r\nfunction handleConfirm() {\r\n  emit('confirm')\r\n}\r\n\r\nfunction handleHoverDate(date: Date | null) {\r\n  emit('hover', date)\r\n}\r\n\r\nfunction isSelectedYear(year: number) {\r\n  if (!year) return false\r\n\r\n  return (\r\n    (props.startActivated.year && props.startValue.year === year) ||\r\n    (props.endActivated.year && props.endValue.year === year)\r\n  )\r\n}\r\n\r\nfunction isSelectedMonth(month: number) {\r\n  if (!month) return false\r\n\r\n  const monthYear = 100 * calendarYear.value + month\r\n\r\n  return (\r\n    (props.startActivated.month &&\r\n      100 * props.startValue.year + props.startValue.month === monthYear) ||\r\n    (props.endActivated.month && 100 * props.endValue.year + props.endValue.month === monthYear)\r\n  )\r\n}\r\n\r\nfunction isDisabledYear(year: number) {\r\n  if (props.type === 'year') {\r\n    return props.disabledDate(new Date(year, 0))\r\n  }\r\n\r\n  for (let i = 1; i <= 12; ++i) {\r\n    if (!isDisabledMonth(i, year)) {\r\n      return false\r\n    }\r\n  }\r\n\r\n  return true\r\n}\r\n\r\nfunction isDisabledMonth(month: number, year = calendarYear.value) {\r\n  if (props.type === 'year') return false\r\n\r\n  if (props.type === 'month') {\r\n    return props.disabledDate(new Date(year, month - 1))\r\n  }\r\n\r\n  const current = new Date(year, month - 1)\r\n  const end = new Date(year, month, 0)\r\n  const dayCount = end.getDate()\r\n\r\n  for (let i = 1; i <= dayCount; ++i) {\r\n    current.setDate(i)\r\n\r\n    if (!props.disabledDate(current)) {\r\n      return false\r\n    }\r\n  }\r\n\r\n  return true\r\n}\r\n\r\nfunction handleYearHover(year: number) {\r\n  hoveredYear.value = isDisabledYear(year) ? 0 : year\r\n}\r\n\r\nfunction handleMonthHover(month: number) {\r\n  hoveredMonth.value = isDisabledMonth(month) ? 0 : month\r\n}\r\n\r\nfunction isYearInRange(year: number) {\r\n  if (\r\n    !props.range ||\r\n    (!hoveredYear.value && !props.startActivated.year && !props.endActivated.year)\r\n  ) {\r\n    return false\r\n  }\r\n\r\n  // if (\r\n  //   (props.valueType === 'start' && !props.endActivated.year) ||\r\n  //   (props.valueType === 'end' && !props.startActivated.year)\r\n  // ) {\r\n  //   return false\r\n  // }\r\n\r\n  const startYear = props.startValue.year\r\n  const endYear = props.endValue.year\r\n\r\n  let min: number\r\n  let max: number\r\n\r\n  if (!hoveredYear.value && props.startActivated.year && props.endActivated.year) {\r\n    min = Math.min(startYear, endYear)\r\n    max = Math.max(startYear, endYear)\r\n  } else if (hoveredYear.value) {\r\n    if (!props.startActivated.year && !props.endActivated.year) return false\r\n\r\n    if (!props.startActivated.year || !props.endActivated.year) {\r\n      const selectedYear = props.startActivated.year ? startYear : endYear\r\n\r\n      min = Math.min(hoveredYear.value, selectedYear)\r\n      max = Math.max(hoveredYear.value, selectedYear)\r\n    } else {\r\n      const minYear = Math.min(startYear, endYear)\r\n      const maxYear = Math.max(startYear, endYear)\r\n\r\n      min = Math.min(hoveredYear.value, minYear)\r\n      max = Math.max(hoveredYear.value, maxYear)\r\n    }\r\n  } else {\r\n    return false\r\n  }\r\n\r\n  return year >= min && year <= max\r\n}\r\n\r\nfunction isMonthInRange(month: number) {\r\n  if (\r\n    !props.range ||\r\n    (!hoveredMonth.value && !props.startActivated.month && !props.endActivated.month)\r\n  ) {\r\n    return false\r\n  }\r\n\r\n  // if (\r\n  //   (props.valueType === 'start' && !props.endActivated.month) ||\r\n  //   (props.valueType === 'end' && !props.startActivated.month)\r\n  // ) {\r\n  //   return false\r\n  // }\r\n\r\n  const startMonthYear = 100 * props.startValue.year + props.startValue.month\r\n  const endMonthYear = 100 * props.endValue.year + props.endValue.month\r\n\r\n  let min: number\r\n  let max: number\r\n\r\n  if (!hoveredMonth.value && props.startActivated.month && props.endActivated.month) {\r\n    min = Math.min(startMonthYear, endMonthYear)\r\n    max = Math.max(startMonthYear, endMonthYear)\r\n  } else if (hoveredMonth.value) {\r\n    if (!props.startActivated.month && !props.endActivated.month) return false\r\n\r\n    const hoveredMonthYear = 100 * calendarYear.value + hoveredMonth.value\r\n\r\n    if (!props.startActivated.month || !props.endActivated.month) {\r\n      const selectedMonthYear = props.startActivated.month ? startMonthYear : endMonthYear\r\n\r\n      min = Math.min(hoveredMonthYear, selectedMonthYear)\r\n      max = Math.max(hoveredMonthYear, selectedMonthYear)\r\n    } else {\r\n      const minMonthYear = Math.min(startMonthYear, endMonthYear)\r\n      const maxMonthYear = Math.max(startMonthYear, endMonthYear)\r\n\r\n      min = Math.min(hoveredMonthYear, minMonthYear)\r\n      max = Math.max(hoveredMonthYear, maxMonthYear)\r\n    }\r\n  } else {\r\n    return false\r\n  }\r\n\r\n  const monthYear = 100 * calendarYear.value + month\r\n\r\n  return monthYear >= min && monthYear <= max\r\n}\r\n\r\n// 重新计算日历页面\r\nfunction refreshCalendar(valueType: 'start' | 'end') {\r\n  const today = toDate(props.today)\r\n\r\n  if (valueType === 'start') {\r\n    calendarYear.value = props.startActivated.year ? props.startValue.year : today.getFullYear()\r\n    calendarMonth.value = props.startActivated.month ? props.startValue.month : today.getMonth() + 1\r\n  } else {\r\n    calendarYear.value = props.endActivated.year ? props.endValue.year : today.getFullYear()\r\n    calendarMonth.value = props.endActivated.month ? props.endValue.month : today.getMonth() + 1\r\n  }\r\n}\r\n\r\nfunction handleShortcutsResize(entry: ResizeObserverEntry) {\r\n  const box = entry.borderBoxSize?.[0]\r\n\r\n  if (box) {\r\n    shortcutsRect.width = box.inlineSize\r\n    shortcutsRect.height = box.blockSize\r\n  } else {\r\n    shortcutsRect.width = entry.contentRect.width\r\n    shortcutsRect.height = entry.contentRect.height\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :class=\"{\r\n      [nh.be('panel')]: true,\r\n      [nh.bem('panel', 'vertical')]:\r\n        shortcuts.length && (shortcutsPlacement === 'top' || shortcutsPlacement === 'bottom')\r\n    }\"\r\n    :aria-labelledby=\"labeledBy\"\r\n    :style=\"panelStyle\"\r\n    @click=\"handleClick\"\r\n  >\r\n    <ResizeObserver v-if=\"shortcuts.length\" :on-resize=\"handleShortcutsResize\">\r\n      <div\r\n        :class=\"[\r\n          nh.be('list'),\r\n          nh.bem('list', 'sub'),\r\n          nh.be('shortcuts'),\r\n          nh.bem('shortcuts', shortcutsPlacement)\r\n        ]\"\r\n      >\r\n        <div\r\n          v-for=\"(item, index) in shortcuts\"\r\n          :key=\"index\"\r\n          :class=\"nh.be('shortcut')\"\r\n          :title=\"item.name\"\r\n          @click=\"handleShortcut(index)\"\r\n        >\r\n          {{ item.name }}\r\n        </div>\r\n      </div>\r\n    </ResizeObserver>\r\n    <div :class=\"nh.be('list')\" role=\"application\">\r\n      <div :class=\"nh.be('panel-body')\">\r\n        <div :class=\"nh.be('date-panel')\">\r\n          <div :class=\"nh.be('header')\">\r\n            <div :class=\"[nh.be('arrow'), nh.be('prev-year')]\" @click=\"handleDoublePrevClick\">\r\n              <Icon v-bind=\"isRtl ? icons.anglesRight : icons.anglesLeft\"></Icon>\r\n            </div>\r\n            <div\r\n              v-show=\"currentPanel === 'date'\"\r\n              :class=\"[nh.be('arrow'), nh.be('prev-month')]\"\r\n              @click=\"adjustCalendar('month', -1)\"\r\n            >\r\n              <Icon v-bind=\"isRtl ? icons.angleRight : icons.angleLeft\"></Icon>\r\n            </div>\r\n            <div :class=\"nh.be('year-month')\">\r\n              <slot\r\n                name=\"title\"\r\n                :panel=\"currentPanel\"\r\n                :year-start=\"yearRange[0]\"\r\n                :year=\"calendarYear\"\r\n                :month=\"calendarMonth\"\r\n                :toggle-panel=\"togglePanel\"\r\n              >\r\n                <div key=\"year\" :class=\"nh.be('year')\" @click.stop=\"togglePanel('year')\">\r\n                  <template v-if=\"currentPanel === 'year'\">\r\n                    {{ `${yearRange[0]}${locale.year} - ${yearRange[9]}${locale.year}` }}\r\n                  </template>\r\n                  <template v-else>\r\n                    {{ `${calendarYear}${locale.year}` }}\r\n                  </template>\r\n                </div>\r\n                <div\r\n                  v-show=\"currentPanel === 'date'\"\r\n                  :class=\"nh.be('month')\"\r\n                  @click.stop=\"togglePanel('month')\"\r\n                >\r\n                  {{ getMonthLabel(calendarMonth) }}\r\n                </div>\r\n              </slot>\r\n            </div>\r\n            <div\r\n              v-show=\"currentPanel === 'date'\"\r\n              :class=\"[nh.be('arrow'), nh.be('next-month')]\"\r\n              @click=\"adjustCalendar('month', 1)\"\r\n            >\r\n              <Icon v-bind=\"isRtl ? icons.angleLeft : icons.angleRight\"></Icon>\r\n            </div>\r\n            <div :class=\"[nh.be('arrow'), nh.be('next-year')]\" @click=\"handleDoubleNextClick\">\r\n              <Icon v-bind=\"isRtl ? icons.anglesLeft : icons.anglesRight\"></Icon>\r\n            </div>\r\n          </div>\r\n          <div :class=\"nh.be('calendar')\">\r\n            <div\r\n              v-if=\"currentPanel === 'year'\"\r\n              :class=\"nh.be('year-panel')\"\r\n              @mouseleave=\"hoveredYear = 0\"\r\n            >\r\n              <div\r\n                v-for=\"(item, index) in yearRange\"\r\n                :key=\"index\"\r\n                :class=\"{\r\n                  [nh.be('year-item')]: true,\r\n                  [nh.bem('year-item', 'selected')]: isSelectedYear(item),\r\n                  [nh.bem('year-item', 'next')]: index > 9,\r\n                  [nh.bem('year-item', 'disabled')]: isDisabledYear(item),\r\n                  [nh.bem('year-item', 'in-range')]: isYearInRange(item)\r\n                }\"\r\n                @click.stop=\"handleSelectYear(item)\"\r\n                @mouseenter=\"handleYearHover(item)\"\r\n              >\r\n                <div :class=\"nh.be('year-label')\">\r\n                  <slot\r\n                    name=\"year\"\r\n                    :year=\"item\"\r\n                    :selected=\"isSelectedYear(item)\"\r\n                    :is-next=\"index > 9\"\r\n                    :disabled=\"isDisabledYear(item)\"\r\n                    :in-range=\"isYearInRange(item)\"\r\n                  >\r\n                    <div :class=\"nh.be('year-label-inner')\">\r\n                      {{ item }}\r\n                    </div>\r\n                  </slot>\r\n                </div>\r\n              </div>\r\n            </div>\r\n            <div\r\n              v-else-if=\"currentPanel === 'month'\"\r\n              :class=\"nh.be('month-panel')\"\r\n              @mouseleave=\"hoveredMonth = 0\"\r\n            >\r\n              <div\r\n                v-for=\"index in monthRange\"\r\n                :key=\"index\"\r\n                :class=\"{\r\n                  [nh.be('month-item')]: true,\r\n                  [nh.bem('month-item', 'selected')]: isSelectedMonth(index),\r\n                  [nh.bem('month-item', 'disabled')]: isDisabledMonth(index),\r\n                  [nh.bem('month-item', 'in-range')]: isMonthInRange(index)\r\n                }\"\r\n                @click.stop=\"handleSelectMonth(index)\"\r\n                @mouseenter=\"handleMonthHover(index)\"\r\n              >\r\n                <div :class=\"nh.be('month-label')\">\r\n                  <slot\r\n                    name=\"month\"\r\n                    :year=\"calendarYear\"\r\n                    :month=\"index\"\r\n                    :selected=\"isSelectedMonth(index)\"\r\n                    :disabled=\"isDisabledMonth(index)\"\r\n                    :in-range=\"isMonthInRange(index)\"\r\n                  >\r\n                    <div :class=\"nh.be('month-label-inner')\">\r\n                      {{ getMonthLabel(index) }}\r\n                    </div>\r\n                  </slot>\r\n                </div>\r\n              </div>\r\n            </div>\r\n            <CalendarPanel\r\n              v-else\r\n              inherit\r\n              :value=\"calendarValue\"\r\n              :year=\"calendarYear\"\r\n              :month=\"calendarMonth\"\r\n              :value-type=\"selectingType\"\r\n              :disabled-date=\"disabledDate\"\r\n              :range=\"range\"\r\n              :min=\"min\"\r\n              :max=\"max\"\r\n              :week-start=\"weekStart\"\r\n              :week-days=\"weekDays\"\r\n              @select=\"handleSelectDate\"\r\n              @hover=\"handleHoverDate\"\r\n            >\r\n              <template v-if=\"$slots.week\" #week=\"weekParams\">\r\n                <slot name=\"week\" v-bind=\"weekParams\"></slot>\r\n              </template>\r\n              <template v-if=\"$slots.date\" #itemContent=\"itemParams\">\r\n                <slot name=\"date\" v-bind=\"itemParams\"></slot>\r\n              </template>\r\n            </CalendarPanel>\r\n          </div>\r\n        </div>\r\n        <div v-if=\"isDatetime\" :class=\"nh.be('time-panel')\">\r\n          <div :class=\"[nh.be('header'), nh.bem('header', 'time')]\">\r\n            <template v-if=\"range\">\r\n              <div :class=\"nh.be('title')\">\r\n                {{ locale.startTime }}\r\n              </div>\r\n              <div :class=\"nh.be('title')\">\r\n                {{ locale.endTime }}\r\n              </div>\r\n            </template>\r\n          </div>\r\n          <div :class=\"nh.be('wheel')\">\r\n            <TimeWheel\r\n              :hour=\"startValue.hour\"\r\n              :minute=\"startValue.minute\"\r\n              :second=\"startValue.second\"\r\n              :candidate=\"3\"\r\n              :steps=\"steps\"\r\n              :disabled-time=\"disabledTime\"\r\n              :no-transition=\"staticWheel\"\r\n              @change=\"handleStartTimeChange\"\r\n            ></TimeWheel>\r\n            <TimeWheel\r\n              v-if=\"range\"\r\n              :hour=\"endValue.hour\"\r\n              :minute=\"endValue.minute\"\r\n              :second=\"endValue.second\"\r\n              :candidate=\"3\"\r\n              :steps=\"steps\"\r\n              :disabled-time=\"disabledTime\"\r\n              :no-transition=\"staticWheel\"\r\n              @change=\"handleEndTimeChange\"\r\n            ></TimeWheel>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div v-if=\"!noAction\" :class=\"nh.be('action')\">\r\n        <Button\r\n          inherit\r\n          text\r\n          size=\"small\"\r\n          @click=\"handleCancel\"\r\n        >\r\n          {{ cancelText || locale.cancel }}\r\n        </Button>\r\n        <Button\r\n          inherit\r\n          type=\"primary\"\r\n          size=\"small\"\r\n          :disabled=\"hasError\"\r\n          @click=\"handleConfirm\"\r\n        >\r\n          {{ confirmText || locale.confirm }}\r\n        </Button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n","import {\r\n  booleanProp,\r\n  booleanStringProp,\r\n  buildProps,\r\n  eventProp,\r\n  iconProp,\r\n  localeProp,\r\n  sizeProp,\r\n  stateProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps, EventListener, LocaleConfig } from '@vexip-ui/config'\r\nimport type { Placement } from '@vexip-ui/hooks'\r\nimport type { Dateable } from '@vexip-ui/utils'\r\nimport type {\r\n  DatePickerChangeEvent,\r\n  DatePickerFormatFn,\r\n  DatePickerSlots,\r\n  DatePickerType,\r\n  DateShortcut,\r\n  DateShortcutsPlacement,\r\n  DateTimeType,\r\n  TimePickerChangeEvent,\r\n  TimePickerSlots,\r\n  TimeShortcut,\r\n  TimeShortcutsPlacement,\r\n  TimeType,\r\n} from './symbol'\r\n\r\nexport interface DatePickerShortcutEvent {\r\n  (name: string, value: Dateable | Dateable[]): void,\r\n  (name: string, value: Dateable): void,\r\n  (name: string, value: Dateable[]): void,\r\n}\r\n\r\nexport const datePickerProps = buildProps({\r\n  size: sizeProp,\r\n  state: stateProp,\r\n  locale: Object as PropType<Partial<LocaleConfig['calendar'] & LocaleConfig['datePicker']>>,\r\n  type: String as PropType<DatePickerType>,\r\n  visible: booleanProp,\r\n  placement: String as PropType<Placement>,\r\n  transfer: booleanStringProp,\r\n  value: [Number, String, Date, Array] as PropType<Dateable | Dateable[]>,\r\n  format: String,\r\n  valueFormat: [String, Array, Function] as PropType<string | string[] | DatePickerFormatFn>,\r\n  filler: String,\r\n  clearable: booleanProp,\r\n  noAction: booleanProp,\r\n  labels: Object as PropType<Partial<Record<DateTimeType, string>>>,\r\n  dateSeparator: String,\r\n  timeSeparator: String,\r\n  shortcuts: Array as PropType<DateShortcut[]>,\r\n  disabledDate: Function as PropType<(date: Date) => boolean>,\r\n  steps: Array as PropType<number[]>,\r\n  ctrlSteps: Array as PropType<number[]>,\r\n  prefix: iconProp,\r\n  prefixColor: String,\r\n  suffix: iconProp,\r\n  suffixColor: String,\r\n  noSuffix: booleanProp,\r\n  disabled: booleanProp,\r\n  transitionName: String,\r\n  confirmText: String,\r\n  cancelText: String,\r\n  today: [Number, String, Date] as PropType<Dateable>,\r\n  range: booleanProp,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingLock: booleanProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  min: [Number, String, Date] as PropType<Dateable>,\r\n  max: [Number, String, Date] as PropType<Dateable>,\r\n  outsideClose: booleanProp,\r\n  outsideCancel: booleanProp,\r\n  placeholder: [String, Array] as PropType<string | string[]>,\r\n  unitReadonly: booleanProp,\r\n  weekStart: Number,\r\n  popperAlive: booleanProp,\r\n  shortcutsPlacement: String as PropType<DateShortcutsPlacement>,\r\n  slots: Object as PropType<DatePickerSlots>,\r\n  onInput: eventProp<(type: DateTimeType, value: number) => void>(),\r\n  onPlus: eventProp<(type: DateTimeType, value: number) => void>(),\r\n  onMinus: eventProp<(type: DateTimeType, value: number) => void>(),\r\n  onEnter: eventProp(),\r\n  onCancel: eventProp(),\r\n  onChange: eventProp<EventListener<DatePickerChangeEvent>>(),\r\n  onClear: eventProp(),\r\n  onShortcut: eventProp<DatePickerShortcutEvent>(),\r\n  onToggle: eventProp<(visible: boolean) => void>(),\r\n  onFocus: eventProp(),\r\n  onBlur: eventProp(),\r\n  onChangeCol: eventProp<(type: DateTimeType | null, inputType: 'start' | 'end') => void>(),\r\n  onClickOutside: eventProp(),\r\n  onOutsideClose: eventProp(),\r\n})\r\n\r\nexport type DatePickerProps = ExtractPropTypes<typeof datePickerProps>\r\nexport type DatePickerCProps = ConfigurableProps<DatePickerProps>\r\n\r\nexport interface TimePickerShortcutEvent {\r\n  (name: string, value: string | string[]): void,\r\n  (name: string, value: string): void,\r\n  (name: string, value: string[]): void,\r\n}\r\n\r\nexport const timePickerProps = buildProps({\r\n  size: sizeProp,\r\n  state: stateProp,\r\n  locale: localeProp('timePicker'),\r\n  visible: booleanProp,\r\n  placement: String as PropType<Placement>,\r\n  transfer: booleanStringProp,\r\n  format: String,\r\n  separator: String,\r\n  value: [String, Array] as PropType<string | string[]>,\r\n  filler: String,\r\n  clearable: booleanProp,\r\n  noAction: booleanProp,\r\n  noArrow: booleanProp,\r\n  pointer: booleanProp,\r\n  candidate: Number as PropType<0 | 1 | 2 | 3>,\r\n  steps: Array as PropType<number[]>,\r\n  labels: Object as PropType<Partial<Record<TimeType, string>>>,\r\n  shortcuts: Array as PropType<TimeShortcut[]>,\r\n  range: booleanProp,\r\n  disabled: booleanProp,\r\n  transitionName: String,\r\n  confirmText: String,\r\n  cancelText: String,\r\n  ctrlSteps: Array as PropType<number[]>,\r\n  prefix: iconProp,\r\n  prefixColor: String,\r\n  suffix: iconProp,\r\n  suffixColor: String,\r\n  noSuffix: booleanProp,\r\n  exchange: booleanProp,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingLock: booleanProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  min: String,\r\n  max: String,\r\n  outsideClose: booleanProp,\r\n  outsideCancel: booleanProp,\r\n  unitReadonly: booleanProp,\r\n  popperAlive: booleanProp,\r\n  shortcutsPlacement: String as PropType<TimeShortcutsPlacement>,\r\n  placeholder: [String, Array] as PropType<string | string[]>,\r\n  slots: Object as PropType<TimePickerSlots>,\r\n  onInput: eventProp<(type: TimeType, value: number) => void>(),\r\n  onPlus: eventProp<(type: TimeType, value: number) => void>(),\r\n  onMinus: eventProp<(type: TimeType, value: number) => void>(),\r\n  onEnter: eventProp(),\r\n  onCancel: eventProp(),\r\n  onChange: eventProp<EventListener<TimePickerChangeEvent>>(),\r\n  onClear: eventProp(),\r\n  onShortcut: eventProp<TimePickerShortcutEvent>(),\r\n  onToggle: eventProp<(visible: boolean) => void>(),\r\n  onFocus: eventProp(),\r\n  onBlur: eventProp(),\r\n  onChangeCol: eventProp<(type: TimeType | null, inputType: 'start' | 'end') => void>(),\r\n  onClickOutside: eventProp(),\r\n  onOutsideClose: eventProp(),\r\n})\r\n\r\nexport type TimePickerProps = ExtractPropTypes<typeof timePickerProps>\r\nexport type TimePickerCProps = ConfigurableProps<TimePickerProps>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Popper } from '@/components/popper'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { useFieldStore } from '@/components/form'\r\n\r\nimport { computed, nextTick, reactive, ref, toRef, watch } from 'vue'\r\n\r\nimport DateControl from './date-control.vue'\r\nimport DatePanel from './date-panel.vue'\r\nimport {\r\n  createIconProp,\r\n  createSizeProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  makeSentence,\r\n  useIcons,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n  useWordSpace,\r\n} from '@vexip-ui/config'\r\nimport {\r\n  placementWhileList,\r\n  useClickOutside,\r\n  useHover,\r\n  usePopper,\r\n  useSetTimeout,\r\n} from '@vexip-ui/hooks'\r\nimport {\r\n  boundRange,\r\n  differenceDays,\r\n  doubleDigits,\r\n  format,\r\n  getTime,\r\n  isLeapYear,\r\n  isObject,\r\n  mergeObjects,\r\n  startOfMonth,\r\n  toAttrValue,\r\n  toDate,\r\n  toFalse,\r\n} from '@vexip-ui/utils'\r\nimport { datePickerProps } from './props'\r\nimport { useColumn, useTimeBound } from './helper'\r\nimport { datePickerTypes, invalidDate } from './symbol'\r\n\r\nimport type { PopperExposed } from '@/components/popper'\r\nimport type { Dateable } from '@vexip-ui/utils'\r\nimport type {\r\n  DatePickerChangeEvent,\r\n  DatePickerFormatFn,\r\n  DatePickerSlots,\r\n  DateTimeType,\r\n  DateType,\r\n  TimeType,\r\n} from './symbol'\r\n\r\ndefineOptions({ name: 'DatePicker' })\r\n\r\nconst {\r\n  idFor,\r\n  labelId,\r\n  state,\r\n  disabled,\r\n  loading,\r\n  size,\r\n  validateField,\r\n  clearField,\r\n  getFieldValue,\r\n  setFieldValue,\r\n} = useFieldStore<Dateable | Dateable[]>(() => reference.value?.focus())\r\n\r\nconst nh = useNameHelper('date-picker')\r\n\r\nconst _props = defineProps(datePickerProps)\r\nconst props = useProps('datePicker', _props, {\r\n  size: createSizeProp(size),\r\n  state: createStateProp(state),\r\n  locale: null,\r\n  type: {\r\n    default: 'date',\r\n    validator: value => datePickerTypes.includes(value),\r\n  },\r\n  visible: false,\r\n  placement: {\r\n    default: 'bottom-start',\r\n    validator: value => placementWhileList.includes(value),\r\n  },\r\n  transfer: false,\r\n  value: {\r\n    default: () => getFieldValue(),\r\n    static: true,\r\n  },\r\n  format: 'yMd Hms',\r\n  valueFormat: null,\r\n  filler: {\r\n    default: '-',\r\n    validator: value => value.length === 1,\r\n  },\r\n  clearable: false,\r\n  noAction: false,\r\n  labels: () => ({}),\r\n  dateSeparator: '/',\r\n  timeSeparator: ':',\r\n  shortcuts: () => [],\r\n  disabledDate: {\r\n    default: toFalse,\r\n    isFunc: true,\r\n  },\r\n  steps: () => [1, 1, 1],\r\n  ctrlSteps: () => [5, 5, 5],\r\n  prefix: createIconProp(),\r\n  prefixColor: '',\r\n  suffix: createIconProp(),\r\n  suffixColor: '',\r\n  noSuffix: false,\r\n  disabled: () => disabled.value,\r\n  transitionName: () => nh.ns('drop'),\r\n  confirmText: null,\r\n  cancelText: null,\r\n  today: {\r\n    default: () => new Date(),\r\n    validator: value => !Number.isNaN(new Date(value)),\r\n  },\r\n  range: null,\r\n  loading: () => loading.value,\r\n  loadingIcon: createIconProp(),\r\n  loadingLock: false,\r\n  loadingEffect: null,\r\n  min: null,\r\n  max: null,\r\n  outsideClose: true,\r\n  outsideCancel: false,\r\n  placeholder: null,\r\n  unitReadonly: false,\r\n  weekStart: null,\r\n  popperAlive: null,\r\n  shortcutsPlacement: 'left',\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:value', 'update:formatted-value', 'update:visible'])\r\n\r\nconst slots = defineSlots<DatePickerSlots>()\r\n\r\nconst calendarLocale = useLocale('calendar')\r\nconst datePickerLocale = useLocale('datePicker')\r\nconst icons = useIcons()\r\nconst wordSpace = useWordSpace()\r\n\r\nconst placement = toRef(props, 'placement')\r\nconst transfer = toRef(props, 'transfer')\r\nconst currentVisible = ref(props.visible)\r\nconst focused = ref(false)\r\nconst startState = createDateState()\r\nconst endState = createDateState()\r\nconst currentState = ref<'start' | 'end'>('start')\r\nconst lastValue = ref('')\r\nconst firstSelected = ref<number[] | undefined>()\r\nconst hoveredDate = ref(new Date())\r\nconst staticWheel = ref(false)\r\nconst dateUnitOrder = ref<DateType[]>([])\r\n\r\nconst { timer } = useSetTimeout()\r\n\r\nconst wrapper = useClickOutside(handleClickOutside)\r\nconst popper = ref<PopperExposed>()\r\nconst { reference, transferTo, updatePopper } = usePopper({\r\n  placement,\r\n  transfer,\r\n  wrapper,\r\n  popper: computed(() => popper.value?.wrapper),\r\n  isDrop: true,\r\n})\r\nconst { isHover } = useHover(reference)\r\n\r\nconst startInput = ref<InstanceType<typeof DateControl>>()\r\nconst endInput = ref<InstanceType<typeof DateControl>>()\r\nconst datePanel = ref<InstanceType<typeof DatePanel>>()\r\n\r\nconst mergedLocale = computed(() => {\r\n  const locale = mergeObjects(calendarLocale.value, datePickerLocale.value, true)\r\n\r\n  return isObject(props.locale) ? mergeObjects(locale, props.locale) : locale\r\n})\r\nconst startPlaceholder = computed(() => {\r\n  if (props.placeholder) {\r\n    return Array.isArray(props.placeholder) ? props.placeholder[0] : props.placeholder\r\n  }\r\n\r\n  const { select, start, [props.type]: type } = mergedLocale.value.placeholder\r\n\r\n  return makeSentence(props.range ? `${start} ${type}` : `${select} ${type}`, wordSpace.value)\r\n})\r\nconst endPlaceholder = computed(() => {\r\n  if (props.placeholder) {\r\n    return Array.isArray(props.placeholder)\r\n      ? props.placeholder[1] || props.placeholder[0]\r\n      : props.placeholder\r\n  }\r\n\r\n  const { end, [props.type]: type } = mergedLocale.value.placeholder\r\n\r\n  return makeSentence(`${end} ${type}`, wordSpace.value)\r\n})\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.ns('input-vars'),\r\n    nh.bs('vars'),\r\n    nh.bm(props.type),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('disabled')]: props.disabled,\r\n      [nh.bm(props.size)]: props.size !== 'default',\r\n      [nh.bm('no-hour')]: !startState.enabled.hour,\r\n      [nh.bm('no-minute')]: !startState.enabled.minute,\r\n      [nh.bm('no-second')]: !startState.enabled.second,\r\n      [nh.bm('visible')]: currentVisible.value,\r\n      [nh.bm(props.state)]: props.state !== 'default',\r\n      [nh.bm('is-range')]: props.range,\r\n    },\r\n  ]\r\n})\r\nconst readonly = computed(() => props.loading && props.loadingLock)\r\nconst selectorClass = computed(() => {\r\n  const baseCls = nh.be('selector')\r\n\r\n  return {\r\n    [baseCls]: true,\r\n    [`${baseCls}--disabled`]: props.disabled,\r\n    [`${baseCls}--readonly`]: readonly.value,\r\n    [`${baseCls}--loading`]: props.loading,\r\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\r\n    [`${baseCls}--focused`]: focused.value,\r\n    [`${baseCls}--${props.state}`]: props.state !== 'default',\r\n  }\r\n})\r\nconst hasPrefix = computed(() => {\r\n  return !!(slots.prefix || props.prefix)\r\n})\r\nconst currentValue = computed(() => {\r\n  const values = [startState, endState].map(state => {\r\n    const values = Object.values(state.dateValue).map(doubleDigits)\r\n\r\n    return `${values.slice(0, 3).join('-')} ${values.slice(3).join(':')}`\r\n  })\r\n\r\n  return props.range ? values : values[0]\r\n})\r\nconst hoveredLarge = computed(() => {\r\n  if (!firstSelected.value) return false\r\n\r\n  const [year, month, date] = firstSelected.value\r\n  const firstTime = new Date(`${year}-${month}-${date}`).getTime()\r\n  const hoverTime = hoveredDate.value.getTime()\r\n\r\n  return firstTime < hoverTime\r\n})\r\nconst showClear = computed(() => {\r\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && !!lastValue.value\r\n})\r\nconst min = computed(() => {\r\n  if (props.min) {\r\n    const date = rawValueToDate(props.min, invalidDate)\r\n\r\n    if (Number.isNaN(+date)) return -Infinity\r\n\r\n    date.setHours(0, 0, 0, 0)\r\n\r\n    return date.getTime()\r\n  }\r\n\r\n  return -Infinity\r\n})\r\nconst max = computed(() => {\r\n  if (props.max) {\r\n    let date = rawValueToDate(props.max, invalidDate)\r\n\r\n    if (Number.isNaN(+date)) return Infinity\r\n\r\n    if (props.type !== 'datetime') {\r\n      date.setHours(23, 59, 59, 999)\r\n\r\n      if (props.type === 'year') {\r\n        date.setMonth(11)\r\n        date.setDate(31)\r\n      } else if (props.type === 'month') {\r\n        date.setMonth(date.getMonth() + 1)\r\n        date = startOfMonth(date)\r\n        date.setDate(date.getDate() - 1)\r\n      }\r\n    }\r\n\r\n    return date.getTime()\r\n  }\r\n\r\n  return Infinity\r\n})\r\nconst reversed = computed(() => {\r\n  if (Number.isNaN(min.value) || Number.isNaN(max.value)) {\r\n    return false\r\n  }\r\n\r\n  return min.value > max.value\r\n})\r\nconst startMinTime = computed(() => {\r\n  if (props.type === 'datetime' && props.min && !differenceDays(props.min, startState.getDate())) {\r\n    return getTime(props.min)\r\n  }\r\n\r\n  return ''\r\n})\r\nconst startMaxTime = computed(() => {\r\n  if (props.type === 'datetime' && props.max && !differenceDays(props.max, startState.getDate())) {\r\n    return getTime(props.max)\r\n  }\r\n\r\n  return ''\r\n})\r\nconst endMinTime = computed(() => {\r\n  if (\r\n    props.type === 'datetime' &&\r\n    props.range &&\r\n    props.min &&\r\n    !differenceDays(props.min, startState.getDate())\r\n  ) {\r\n    return getTime(props.min)\r\n  }\r\n\r\n  return ''\r\n})\r\nconst endMaxTime = computed(() => {\r\n  if (\r\n    props.type === 'datetime' &&\r\n    props.range &&\r\n    props.max &&\r\n    !differenceDays(props.max, startState.getDate())\r\n  ) {\r\n    return getTime(props.max)\r\n  }\r\n\r\n  return ''\r\n})\r\nconst startReversed = computed(() => {\r\n  if (!props.range) return false\r\n\r\n  const startValue = startState.dateValue\r\n  const endValue = endState.dateValue\r\n\r\n  let types: DateTimeType[]\r\n\r\n  if (props.type === 'year') {\r\n    types = ['year']\r\n  } else if (props.type === 'month') {\r\n    types = ['year', 'month']\r\n  } else if (props.type === 'date') {\r\n    types = ['year', 'month', 'date']\r\n  } else {\r\n    types = ['year', 'month', 'date', 'hour', 'minute', 'second']\r\n  }\r\n\r\n  for (const type of types) {\r\n    if (startValue[type] < endValue[type]) return false\r\n    if (startValue[type] > endValue[type]) return true\r\n  }\r\n\r\n  return false\r\n})\r\n\r\nconst startTimeBound = useTimeBound(startMinTime, startMaxTime)\r\nconst endTimeBound = useTimeBound(endMinTime, endMaxTime)\r\n\r\nconst isTimeDisabled = computed(() => {\r\n  return currentState.value === 'start'\r\n    ? startTimeBound.isTimeDisabled\r\n    : endTimeBound.isTimeDisabled\r\n})\r\nconst startError = computed(() => {\r\n  const { hour, minute, second } = startState.dateValue\r\n  const { isTimeDisabled } = startTimeBound\r\n\r\n  return (\r\n    startReversed.value ||\r\n    isDateDisabled(startState.getDate()) ||\r\n    isTimeDisabled.hour(hour) ||\r\n    isTimeDisabled.minute(hour, minute) ||\r\n    isTimeDisabled.second(hour, minute, second)\r\n  )\r\n})\r\nconst endError = computed(() => {\r\n  if (!props.range) return false\r\n\r\n  const { hour, minute, second } = endState.dateValue\r\n  const { isTimeDisabled } = endTimeBound\r\n\r\n  return (\r\n    startReversed.value ||\r\n    isDateDisabled(endState.getDate()) ||\r\n    isTimeDisabled.hour(hour) ||\r\n    isTimeDisabled.minute(hour, minute) ||\r\n    isTimeDisabled.second(hour, minute, second)\r\n  )\r\n})\r\nconst noActionMode = computed(() => props.type !== 'datetime' && props.noAction)\r\n\r\nwatch(() => props.type, parseFormat)\r\nwatch(\r\n  () => props.value,\r\n  value => {\r\n    parseValue(value)\r\n\r\n    lastValue.value = (Array.isArray(value) ? value[0] || value[1] : value) ? getStringValue() : ''\r\n  },\r\n  { immediate: true },\r\n)\r\nwatch(\r\n  () => props.type,\r\n  value => {\r\n    const hasMonth = value !== 'year'\r\n    const hasDate = hasMonth && value !== 'month'\r\n\r\n    startState.enabled.year = true\r\n    endState.enabled.year = true\r\n    startState.enabled.month = hasMonth\r\n    endState.enabled.month = hasMonth\r\n    startState.enabled.date = hasDate\r\n    endState.enabled.date = hasDate\r\n  },\r\n  { immediate: true },\r\n)\r\nwatch(() => props.format, parseFormat, { immediate: true })\r\nwatch(\r\n  () => props.visible,\r\n  value => {\r\n    currentVisible.value = value\r\n  },\r\n)\r\nwatch(currentVisible, value => {\r\n  if (value) {\r\n    updatePopper()\r\n  }\r\n})\r\nwatch(focused, value => {\r\n  if (value) {\r\n    emitEvent(props.onFocus)\r\n  } else {\r\n    emitEvent(props.onBlur)\r\n  }\r\n})\r\nwatch(currentState, value => {\r\n  if (!props.unitReadonly && currentVisible.value) {\r\n    emitEvent(props.onChangeCol, getCurrentState().column, value)\r\n  }\r\n})\r\nwatch(\r\n  () => startState.column,\r\n  value => {\r\n    if (!props.unitReadonly && currentVisible.value && currentState.value === 'start') {\r\n      emitEvent(props.onChangeCol, value, 'start')\r\n    }\r\n  },\r\n)\r\nwatch(\r\n  () => endState.column,\r\n  value => {\r\n    if (!props.unitReadonly && currentVisible.value && currentState.value === 'end') {\r\n      emitEvent(props.onChangeCol, value, 'end')\r\n    }\r\n  },\r\n)\r\nwatch(\r\n  () => props.disabled,\r\n  value => {\r\n    if (value) {\r\n      setVisible(false)\r\n      handleBlur()\r\n    }\r\n  },\r\n)\r\nwatch(readonly, value => {\r\n  if (value) {\r\n    setVisible(false)\r\n  }\r\n})\r\n\r\ndefineExpose({\r\n  idFor,\r\n  currentVisible,\r\n  focused,\r\n  isHover,\r\n  startState,\r\n  endState,\r\n  currentState,\r\n  startError,\r\n  endError,\r\n  wrapper,\r\n  reference,\r\n  popper,\r\n  start: startInput,\r\n  end: endInput,\r\n  panel: datePanel,\r\n  updatePopper,\r\n  focus: (options?: FocusOptions) => reference.value?.focus(options),\r\n  blur: () => reference.value?.blur(),\r\n})\r\n\r\nfunction createDateState() {\r\n  // const noFiller = props.noFiller\r\n  const { currentColumn, enabled, resetColumn, enterColumn } = useColumn([\r\n    'year',\r\n    'month',\r\n    'date',\r\n    'hour',\r\n    'minute',\r\n    'second',\r\n  ] as DateTimeType[])\r\n\r\n  const dateValue = reactive({\r\n    year: 1970,\r\n    month: 1, // 1 ~ 12\r\n    date: 1,\r\n    hour: 0,\r\n    minute: 0,\r\n    second: 0,\r\n  })\r\n  const activated = reactive({\r\n    year: false,\r\n    month: false,\r\n    date: false,\r\n    hour: false,\r\n    minute: false,\r\n    second: false,\r\n  })\r\n\r\n  let valueRecord = { ...dateValue }\r\n  let activatedRecord = { ...activated }\r\n\r\n  return reactive({\r\n    column: currentColumn,\r\n    enabled,\r\n    activated,\r\n    dateValue,\r\n    resetColumn,\r\n    enterColumn,\r\n    setDate: (date: Date, withTime = true) => {\r\n      dateValue.year = date.getFullYear()\r\n      dateValue.month = date.getMonth() + 1\r\n      dateValue.date = date.getDate()\r\n\r\n      if (withTime) {\r\n        dateValue.hour = date.getHours()\r\n        dateValue.minute = date.getMinutes()\r\n        dateValue.second = date.getSeconds()\r\n      }\r\n    },\r\n    getDate: () => {\r\n      return new Date(\r\n        dateValue.year,\r\n        dateValue.month - 1,\r\n        dateValue.date,\r\n        dateValue.hour,\r\n        dateValue.minute,\r\n        dateValue.second,\r\n      )\r\n    },\r\n    record() {\r\n      valueRecord = { ...dateValue }\r\n      activatedRecord = { ...activated }\r\n    },\r\n    restore() {\r\n      Object.assign(dateValue, valueRecord)\r\n      Object.assign(activated, activatedRecord)\r\n    },\r\n  })\r\n}\r\n\r\nfunction getCurrentState() {\r\n  return currentState.value === 'start' ? startState : endState\r\n}\r\n\r\nfunction rawValueToDate(value: Dateable, defaultValue = new Date(props.today)) {\r\n  let date = toDate(value)\r\n\r\n  if (Number.isNaN(date.getTime())) {\r\n    date = defaultValue\r\n  }\r\n\r\n  return date\r\n}\r\n\r\nfunction parseValue<T extends Dateable | null>(value: T | T[]) {\r\n  if (!Array.isArray(value)) {\r\n    value = [value, value]\r\n  }\r\n\r\n  for (let i = 0; i < 2; ++i) {\r\n    const date = rawValueToDate(value[i] ?? '')\r\n    const state = i === 0 ? startState : endState\r\n\r\n    state.setDate(date)\r\n    toggleActivated(!!value[i], i === 0 ? 'start' : 'end')\r\n\r\n    if (!props.range) break\r\n  }\r\n}\r\n\r\nfunction parseDateUnitOrder() {\r\n  const orderSet = new Set<DateType>()\r\n\r\n  // to ignore 'xxx'\r\n  let inQuotation = false\r\n\r\n  for (let i = 0, len = props.format.length; i < len; ++i) {\r\n    const char = props.format.charAt(i)\r\n\r\n    if (char === \"'\") {\r\n      inQuotation = !inQuotation\r\n    } else if (!inQuotation) {\r\n      switch (char) {\r\n        case 'y':\r\n          orderSet.add('year')\r\n          break\r\n        case 'M':\r\n          orderSet.add('month')\r\n          break\r\n        case 'd':\r\n          orderSet.add('date')\r\n          break\r\n      }\r\n    }\r\n  }\r\n\r\n  dateUnitOrder.value = [...orderSet]\r\n}\r\n\r\nfunction parseTimeUnitEnabled() {\r\n  const isDatetime = props.type === 'datetime'\r\n\r\n  ;[startState, endState].forEach(state => {\r\n    state.enabled.hour = false\r\n    state.enabled.minute = false\r\n    state.enabled.second = false\r\n\r\n    if (isDatetime && props.format) {\r\n      // to ignore 'H', 'm' and 's'\r\n      let inQuotation = false\r\n\r\n      for (let i = 0, len = props.format.length; i < len; ++i) {\r\n        const char = props.format.charAt(i)\r\n\r\n        if (char === \"'\") {\r\n          inQuotation = !inQuotation\r\n        } else if (!inQuotation) {\r\n          switch (char) {\r\n            case 'H':\r\n              state.enabled.hour = true\r\n              break\r\n            case 'm':\r\n              state.enabled.minute = true\r\n              break\r\n            case 's':\r\n              state.enabled.second = true\r\n              break\r\n          }\r\n        }\r\n      }\r\n    }\r\n  })\r\n}\r\n\r\nfunction parseFormat() {\r\n  parseDateUnitOrder()\r\n  parseTimeUnitEnabled()\r\n}\r\n\r\nfunction toggleActivated(value: boolean, valueType?: 'start' | 'end') {\r\n  const states = valueType\r\n    ? valueType === 'start'\r\n      ? [startState]\r\n      : [endState]\r\n    : [startState, endState]\r\n\r\n  states.forEach(state => {\r\n    ;(Object.keys(state.activated) as DateTimeType[]).forEach(type => {\r\n      state.activated[type] = value\r\n    })\r\n  })\r\n}\r\n\r\nfunction getStringValue() {\r\n  return Array.isArray(currentValue.value) ? currentValue.value.join('|') : currentValue.value\r\n}\r\n\r\nfunction isDateDisabled(date: Date) {\r\n  if (typeof props.disabledDate === 'function') {\r\n    if (props.disabledDate(date)) {\r\n      return true\r\n    }\r\n  }\r\n\r\n  const time = date.getTime()\r\n\r\n  if (reversed.value) {\r\n    if (time > max.value && time < min.value) {\r\n      return true\r\n    }\r\n  } else {\r\n    if (time < min.value || time > max.value) {\r\n      return true\r\n    }\r\n  }\r\n\r\n  return false\r\n}\r\n\r\nfunction verifyDate() {\r\n  if (startError.value || (props.range && endError.value)) {\r\n    parseValue(props.value)\r\n  }\r\n}\r\n\r\nfunction setVisible(visible: boolean) {\r\n  if (currentVisible.value === visible) return\r\n\r\n  currentVisible.value = visible\r\n\r\n  emit('update:visible', visible)\r\n  emitEvent(props.onToggle, visible)\r\n}\r\n\r\nfunction emitChange() {\r\n  verifyDate()\r\n\r\n  if (lastValue.value !== getStringValue()) {\r\n    lastValue.value = getStringValue()\r\n\r\n    const values = Array.isArray(currentValue.value) ? currentValue.value : [currentValue.value]\r\n    const emitValues: number[] = []\r\n    const formattedValues: unknown[] = []\r\n\r\n    const valueFormat = props.valueFormat\r\n    const formatValue: DatePickerFormatFn =\r\n      typeof valueFormat === 'function'\r\n        ? valueFormat\r\n        : valueFormat\r\n          ? (timestamp, type) =>\r\n            format(\r\n              timestamp,\r\n              !Array.isArray(valueFormat)\r\n                ? valueFormat\r\n                : type === 'start'\r\n                  ? valueFormat[0]\r\n                  : valueFormat[1],\r\n            )\r\n          : timestamp => timestamp\r\n\r\n    for (let i = 0; i < 2; ++i) {\r\n      if (props.type === 'year') {\r\n        emitValues[i] = new Date(\r\n          i === 0 ? startState.dateValue.year : endState.dateValue.year,\r\n          0,\r\n        ).getTime()\r\n      } else if (props.type !== 'datetime') {\r\n        emitValues[i] = new Date(values[i].split(' ')[0] + ' 00:00:00').getTime()\r\n      } else {\r\n        emitValues[i] = new Date(values[i]).getTime()\r\n      }\r\n\r\n      formattedValues[i] = formatValue(emitValues[i], i === 0 ? 'start' : 'end')\r\n\r\n      if (!props.range) break\r\n    }\r\n\r\n    const emitValue = props.range ? emitValues : emitValues[0]\r\n    const formattedValue = props.range ? formattedValues : formattedValues[0]\r\n\r\n    toggleActivated(true)\r\n    emit('update:value', emitValue)\r\n    emit('update:formatted-value', formattedValue)\r\n    setFieldValue(emitValue)\r\n    emitEvent(props.onChange as DatePickerChangeEvent, emitValue)\r\n    validateField()\r\n  }\r\n}\r\n\r\nfunction finishInput(shouldChange = true) {\r\n  setVisible(false)\r\n\r\n  shouldChange && emitChange()\r\n  startState.resetColumn()\r\n  endState.resetColumn()\r\n}\r\n\r\nfunction verifyValue(type: DateTimeType) {\r\n  const dateValue = getCurrentState().dateValue\r\n\r\n  switch (type) {\r\n    case 'year': {\r\n      dateValue.year = boundRange(dateValue.year, 1970, 9999)\r\n      break\r\n    }\r\n    case 'month': {\r\n      dateValue.month = boundRange(dateValue.month, 1, 12)\r\n      break\r\n    }\r\n    case 'date': {\r\n      const month = dateValue.month\r\n\r\n      let lastDay\r\n\r\n      if (month < 7) {\r\n        if (month !== 2) {\r\n          lastDay = 30 + (month % 2)\r\n        } else {\r\n          if (isLeapYear(dateValue.year)) {\r\n            lastDay = 29\r\n          } else {\r\n            lastDay = 28\r\n          }\r\n        }\r\n      } else {\r\n        lastDay = 31 - (month % 2)\r\n      }\r\n\r\n      dateValue.date = boundRange(dateValue.date, 1, lastDay)\r\n      break\r\n    }\r\n    case 'hour':\r\n    case 'minute':\r\n    case 'second': {\r\n      dateValue[type] = boundRange(dateValue[type], 0, type === 'hour' ? 23 : 59)\r\n      dateValue[type] = Math.round(dateValue[type] / getStep(type)) * getStep(type)\r\n    }\r\n  }\r\n}\r\n\r\nfunction handleFocused() {\r\n  if (props.disabled) return\r\n\r\n  focused.value = true\r\n\r\n  timer.focus = setTimeout(() => {\r\n    if (focused.value) {\r\n      if (currentState.value === 'start') {\r\n        startInput.value?.focus()\r\n      } else {\r\n        endInput.value?.focus()\r\n      }\r\n    }\r\n  }, 120)\r\n}\r\n\r\nfunction handleBlur() {\r\n  clearTimeout(timer.focus)\r\n\r\n  focused.value = false\r\n  startInput.value?.blur()\r\n  endInput.value?.blur()\r\n}\r\n\r\nfunction showPanel(event: Event) {\r\n  if (props.disabled || readonly.value) return\r\n\r\n  const target = event.target as Node\r\n\r\n  setVisible(true)\r\n\r\n  if (wrapper.value && target) {\r\n    const units = Array.from(wrapper.value.querySelectorAll(`.${nh.be('unit')}`))\r\n    const index = units.findIndex(unit => unit === target || unit.contains(target))\r\n\r\n    if (!~index) {\r\n      startState.column = null\r\n      endState.column = null\r\n    }\r\n\r\n    if (props.range && index >= units.length / 2) {\r\n      toggleCurrentState('end')\r\n    } else {\r\n      toggleCurrentState('start')\r\n    }\r\n  }\r\n\r\n  handleFocused()\r\n}\r\n\r\nfunction handleInput(value: number) {\r\n  const state = getCurrentState()\r\n  const type = state.column\r\n\r\n  if (!type) return\r\n\r\n  handleInputNumber(type, value)\r\n\r\n  if (type === 'year' ? state.dateValue.year >= 1000 : state.dateValue[type] >= 10) {\r\n    state.enterColumn('next', false)\r\n  }\r\n}\r\n\r\nfunction handleInputNumber(type: DateTimeType, number: number) {\r\n  const state = getCurrentState()\r\n  const prev = state.dateValue[type]\r\n\r\n  if (state.activated[type] && prev > 0 && prev < (type === 'year' ? 1000 : 10)) {\r\n    state.dateValue[type] = prev * 10 + number\r\n  } else {\r\n    state.dateValue[type] = number\r\n    setActivatedTrue(type)\r\n  }\r\n\r\n  type !== 'year' && verifyValue(type)\r\n  emitEvent(props.onInput, type, state.dateValue[type])\r\n}\r\n\r\nfunction setActivatedTrue(type: DateTimeType) {\r\n  const activated = getCurrentState().activated\r\n\r\n  if (type === 'date') {\r\n    activated.year = true\r\n    activated.month = true\r\n  } else if (type === 'month') {\r\n    activated.year = true\r\n  } else if (type === 'minute') {\r\n    activated.hour = true\r\n  } else if (type === 'second') {\r\n    activated.hour = true\r\n    activated.minute = true\r\n  }\r\n\r\n  activated[type] = true\r\n}\r\n\r\nfunction handleInputFocus(type: DateTimeType) {\r\n  getCurrentState().column = type\r\n}\r\n\r\nfunction isTimeType(type: DateTimeType): type is TimeType {\r\n  return ['hour', 'minute', 'second'].includes(type)\r\n}\r\n\r\nfunction handleAdjust(adjustType: 'plus' | 'minus', ctrlKey: boolean) {\r\n  const isPlus = adjustType === 'plus'\r\n  const sign = isPlus ? 1 : -1\r\n  const state = getCurrentState()\r\n  const type = state.column\r\n\r\n  if (!type) return\r\n\r\n  if (state.enabled[type]) {\r\n    if (isTimeType(type)) {\r\n      state.dateValue[type] += sign * (ctrlKey ? getCtrlStep(type) : getStep(type))\r\n    } else {\r\n      if (ctrlKey) {\r\n        if (type === 'year') {\r\n          state.dateValue.year += sign * 10\r\n        } else {\r\n          state.dateValue[type === 'date' ? 'month' : 'year'] += sign\r\n        }\r\n      } else {\r\n        state.dateValue[type] += sign\r\n      }\r\n\r\n      computeDate()\r\n      updateDateActivated(type)\r\n    }\r\n\r\n    verifyValue(type)\r\n    emitEvent(props[isPlus ? 'onPlus' : 'onMinus'], type, state.dateValue[type])\r\n    datePanel.value?.refreshCalendar(currentState.value)\r\n  }\r\n}\r\n\r\nfunction handlePlus(ctrlKey: boolean) {\r\n  handleAdjust('plus', ctrlKey)\r\n}\r\n\r\nfunction handleMinus(ctrlKey: boolean) {\r\n  handleAdjust('minus', ctrlKey)\r\n}\r\n\r\nfunction computeDate() {\r\n  const dateValue = getCurrentState().dateValue\r\n  const date = new Date(dateValue.year, dateValue.month - 1, dateValue.date)\r\n\r\n  dateValue.year = date.getFullYear()\r\n  dateValue.month = date.getMonth() + 1\r\n  dateValue.date = date.getDate()\r\n}\r\n\r\nfunction fallbackFocus() {\r\n  requestAnimationFrame(() => {\r\n    handleBlur()\r\n    reference.value?.focus()\r\n  })\r\n}\r\n\r\nfunction handleEnter() {\r\n  fallbackFocus()\r\n  finishInput()\r\n  emitEvent(props.onEnter)\r\n}\r\n\r\nfunction handleCancel() {\r\n  fallbackFocus()\r\n  parseValue(lastValue.value.split('|'))\r\n  finishInput(false)\r\n  emitEvent(props.onCancel)\r\n}\r\n\r\nfunction handleClear(finish = true) {\r\n  if (props.disabled || readonly.value) return\r\n\r\n  if (props.clearable) {\r\n    nextTick(() => {\r\n      const emitValue = props.range ? ([] as number[]) : null\r\n\r\n      parseValue(null)\r\n      finish && finishInput(false)\r\n      emit('update:value', emitValue)\r\n      emit('update:formatted-value', props.range ? [] : null)\r\n      emitEvent(props.onChange as DatePickerChangeEvent, emitValue)\r\n      emitEvent(props.onClear)\r\n      clearField(emitValue!)\r\n      finish && handleBlur()\r\n\r\n      lastValue.value = ''\r\n\r\n      nextTick(() => {\r\n        toggleActivated(false)\r\n      })\r\n    })\r\n  }\r\n}\r\n\r\nfunction handleShortcut(name: string, value: Dateable | Dateable[]) {\r\n  fallbackFocus()\r\n  parseValue(value)\r\n  emitEvent(props.onShortcut as (name: string, value: Dateable | Dateable[]) => void, name, value)\r\n  finishInput()\r\n}\r\n\r\n// 只有时分秒\r\nfunction getStep(type: TimeType) {\r\n  return props.steps[type === 'hour' ? 0 : type === 'minute' ? 1 : 2] || 1\r\n}\r\n\r\n// 只有时分秒\r\nfunction getCtrlStep(type: TimeType) {\r\n  return props.ctrlSteps[type === 'hour' ? 0 : type === 'minute' ? 1 : 2] || 1\r\n}\r\n\r\nfunction handleDateHover(hoverDate: Date | null) {\r\n  if (props.range && hoverDate) {\r\n    hoveredDate.value = hoverDate\r\n\r\n    if (firstSelected.value) {\r\n      const hoverValues = [hoverDate.getFullYear(), hoverDate.getMonth() + 1, hoverDate.getDate()]\r\n      const start = hoveredLarge.value ? firstSelected.value : hoverValues\r\n      const end = hoveredLarge.value ? hoverValues : firstSelected.value\r\n\r\n      let types: DateTimeType[]\r\n\r\n      if (props.type === 'year') {\r\n        types = ['year']\r\n      } else if (props.type === 'month') {\r\n        types = ['year', 'month']\r\n      } else {\r\n        types = ['year', 'month', 'date']\r\n      }\r\n\r\n      for (let i = 0, len = types.length; i < len; ++i) {\r\n        startState.dateValue[types[i]] = start[i]\r\n        endState.dateValue[types[i]] = end[i]\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nfunction handlePanelChange(values: number[]) {\r\n  let types: DateTimeType[]\r\n\r\n  if (props.type === 'year') {\r\n    types = ['year']\r\n  } else if (props.type === 'month') {\r\n    types = ['year', 'month']\r\n  } else {\r\n    types = ['year', 'month', 'date']\r\n  }\r\n\r\n  if (!props.range) {\r\n    for (let i = 0, len = types.length; i < len; ++i) {\r\n      startState.dateValue[types[i]] = values[i]\r\n      updateDateActivated(types[i], 'start')\r\n    }\r\n\r\n    if (noActionMode.value) handleEnter()\r\n\r\n    return\r\n  }\r\n\r\n  if (!firstSelected.value) {\r\n    firstSelected.value = values\r\n\r\n    for (let i = 0, len = types.length; i < len; ++i) {\r\n      startState.dateValue[types[i]] = values[i]\r\n      endState.dateValue[types[i]] = values[i]\r\n      updateDateActivated(types[i], 'start')\r\n      updateDateActivated(types[i], 'end')\r\n    }\r\n  } else {\r\n    const [year, month, date] = firstSelected.value\r\n    const firstTime = new Date(`${year}-${month}-${date}`).getTime()\r\n    const secondTime = new Date(`${values[0]}-${values[1]}-${values[2]}`).getTime()\r\n    const start = firstTime < secondTime ? firstSelected.value : values\r\n    const end = firstTime < secondTime ? values : firstSelected.value\r\n\r\n    for (let i = 0, len = types.length; i < len; ++i) {\r\n      startState.dateValue[types[i]] = start[i]\r\n      endState.dateValue[types[i]] = end[i]\r\n      updateDateActivated(types[i], 'start')\r\n      updateDateActivated(types[i], 'end')\r\n    }\r\n\r\n    verifyRangeValue()\r\n    firstSelected.value = undefined\r\n\r\n    if (noActionMode.value) handleEnter()\r\n  }\r\n}\r\n\r\nfunction handleTimeChange(valueType: 'start' | 'end', type: TimeType, time: number) {\r\n  const state = valueType === 'start' ? startState : endState\r\n\r\n  state.dateValue[type] = time\r\n  updateDateActivated('hour', valueType)\r\n  updateDateActivated('minute', valueType)\r\n  updateDateActivated('second', valueType)\r\n}\r\n\r\nfunction updateDateActivated(type: DateTimeType, valueType?: 'start' | 'end') {\r\n  const state = valueType ? (valueType === 'start' ? startState : endState) : getCurrentState()\r\n\r\n  if (type === 'month') {\r\n    state.activated.year = true\r\n  } else if (type === 'date') {\r\n    state.activated.year = true\r\n    state.activated.month = true\r\n  }\r\n\r\n  state.activated[type] = true\r\n}\r\n\r\nfunction verifyRangeValue() {\r\n  if (!props.range) return\r\n\r\n  const startDate = startState.getDate()\r\n  const endDate = endState.getDate()\r\n\r\n  if (startDate.getTime() > endDate.getTime()) {\r\n    startState.setDate(endDate)\r\n    endState.setDate(startDate)\r\n  }\r\n}\r\n\r\nfunction toggleCurrentState(type: 'start' | 'end') {\r\n  currentState.value = type\r\n}\r\n\r\nfunction enterColumn(type: 'prev' | 'next') {\r\n  if (props.range) {\r\n    if (type === 'prev' && currentState.value === 'start' && !startState.column) {\r\n      toggleCurrentState('end')\r\n    }\r\n\r\n    const state = getCurrentState()\r\n    const currentColumn = state.column\r\n\r\n    state.enterColumn(type, !currentColumn)\r\n\r\n    if (currentColumn === state.column) {\r\n      const isStart = currentState.value === 'start'\r\n      const otherState = isStart ? endState : startState\r\n\r\n      otherState.resetColumn(type === 'prev' ? 'second' : 'year', type === 'prev')\r\n      toggleCurrentState(isStart ? 'end' : 'start')\r\n    }\r\n  } else {\r\n    startState.enterColumn(type)\r\n  }\r\n}\r\n\r\nfunction handleStartInput(type: DateTimeType) {\r\n  toggleCurrentState('start')\r\n  handleInputFocus(type)\r\n\r\n  nextTick(() => {\r\n    datePanel.value?.refreshCalendar('start')\r\n  })\r\n}\r\n\r\nfunction handleEndInput(type: DateTimeType) {\r\n  toggleCurrentState('end')\r\n  handleInputFocus(type)\r\n\r\n  nextTick(() => {\r\n    datePanel.value?.refreshCalendar('end')\r\n  })\r\n}\r\n\r\nfunction handleClickOutside() {\r\n  emitEvent(props.onClickOutside)\r\n\r\n  if (props.outsideClose && currentVisible.value) {\r\n    finishInput(!noActionMode.value && !props.outsideCancel)\r\n    handleBlur()\r\n    emitEvent(props.onOutsideClose)\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :id=\"idFor\"\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"group\"\r\n    :aria-disabled=\"toAttrValue(props.disabled)\"\r\n    :aria-expanded=\"toAttrValue(currentVisible)\"\r\n    aria-haspopup=\"dialog\"\r\n    :aria-labelledby=\"labelId\"\r\n    @click=\"showPanel\"\r\n  >\r\n    <div\r\n      ref=\"reference\"\r\n      :class=\"selectorClass\"\r\n      tabindex=\"0\"\r\n      @keydown.space.prevent=\"showPanel\"\r\n      @keydown.backspace.prevent=\"handleClear(false)\"\r\n    >\r\n      <div\r\n        v-if=\"hasPrefix\"\r\n        :class=\"[nh.be('icon'), nh.be('prefix')]\"\r\n        :style=\"{ color: props.prefixColor }\"\r\n      >\r\n        <slot name=\"prefix\">\r\n          <Renderer :renderer=\"props.slots.prefix\">\r\n            <Icon :icon=\"props.prefix\"></Icon>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n      <div :class=\"nh.be('control')\">\r\n        <DateControl\r\n          ref=\"start\"\r\n          :unit-type=\"currentState === 'start' ? startState.column! : ''\"\r\n          :enabled=\"startState.enabled\"\r\n          :activated=\"startState.activated\"\r\n          :date-value=\"startState.dateValue\"\r\n          :steps=\"props.steps\"\r\n          :ctrl-steps=\"props.ctrlSteps\"\r\n          :focused=\"focused\"\r\n          :visible=\"currentVisible\"\r\n          :date-separator=\"props.dateSeparator\"\r\n          :time-separator=\"props.timeSeparator\"\r\n          :filler=\"props.filler\"\r\n          :labels=\"props.labels\"\r\n          :has-error=\"startError\"\r\n          :placeholder=\"startPlaceholder\"\r\n          :readonly=\"props.unitReadonly\"\r\n          :labeled-by=\"labelId\"\r\n          :date-unit-order=\"dateUnitOrder\"\r\n          @input=\"handleInput\"\r\n          @plus=\"handlePlus\"\r\n          @minus=\"handleMinus\"\r\n          @enter=\"handleEnter\"\r\n          @cancel=\"handleCancel\"\r\n          @unit-focus=\"handleStartInput\"\r\n          @prev-unit=\"enterColumn('prev')\"\r\n          @next-unit=\"enterColumn('next')\"\r\n          @blur=\"startState.column = null\"\r\n        ></DateControl>\r\n        <template v-if=\"props.range\">\r\n          <div :class=\"nh.be('exchange')\">\r\n            <slot name=\"exchange\">\r\n              <Renderer :renderer=\"props.slots.exchange\">\r\n                <Icon v-bind=\"icons.exchange\" style=\"padding-top: 1px\"></Icon>\r\n              </Renderer>\r\n            </slot>\r\n          </div>\r\n          <DateControl\r\n            ref=\"end\"\r\n            :unit-type=\"currentState === 'end' ? endState.column! : ''\"\r\n            :enabled=\"endState.enabled\"\r\n            :activated=\"endState.activated\"\r\n            :date-value=\"endState.dateValue\"\r\n            :steps=\"props.steps\"\r\n            :ctrl-steps=\"props.ctrlSteps\"\r\n            :focused=\"focused\"\r\n            :visible=\"currentVisible\"\r\n            :date-separator=\"props.dateSeparator\"\r\n            :time-separator=\"props.timeSeparator\"\r\n            :filler=\"props.filler\"\r\n            :labels=\"props.labels\"\r\n            :has-error=\"endError\"\r\n            :placeholder=\"endPlaceholder\"\r\n            :readonly=\"props.unitReadonly\"\r\n            :labeled-by=\"labelId\"\r\n            :date-unit-order=\"dateUnitOrder\"\r\n            @input=\"handleInput\"\r\n            @plus=\"handlePlus\"\r\n            @minus=\"handleMinus\"\r\n            @enter=\"handleEnter\"\r\n            @cancel=\"handleCancel\"\r\n            @unit-focus=\"handleEndInput\"\r\n            @prev-unit=\"enterColumn('prev')\"\r\n            @next-unit=\"enterColumn('next')\"\r\n            @blur=\"endState.column = null\"\r\n          ></DateControl>\r\n        </template>\r\n      </div>\r\n      <div\r\n        v-if=\"!props.noSuffix\"\r\n        :class=\"[nh.be('icon'), nh.be('suffix')]\"\r\n        :style=\"{\r\n          color: props.suffixColor,\r\n          opacity: showClear || props.loading ? '0%' : ''\r\n        }\"\r\n      >\r\n        <slot name=\"suffix\">\r\n          <Renderer :renderer=\"props.slots.suffix\">\r\n            <Icon v-bind=\"icons.calendar\" :icon=\"props.suffix || icons.calendar.icon\"></Icon>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n      <div\r\n        v-else-if=\"props.clearable || props.loading\"\r\n        :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\r\n      ></div>\r\n      <Transition :name=\"nh.ns('fade')\" appear>\r\n        <button\r\n          v-if=\"showClear\"\r\n          :class=\"[nh.be('icon'), nh.be('clear')]\"\r\n          type=\"button\"\r\n          tabindex=\"-1\"\r\n          :aria-label=\"mergedLocale.ariaLabel.clear\"\r\n          @click.stop=\"handleClear()\"\r\n        >\r\n          <Icon v-bind=\"icons.clear\" label=\"clear\"></Icon>\r\n        </button>\r\n        <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\r\n          <Icon\r\n            v-bind=\"icons.loading\"\r\n            :effect=\"props.loadingEffect || icons.loading.effect\"\r\n            :icon=\"props.loadingIcon || icons.loading.icon\"\r\n            label=\"loading\"\r\n          ></Icon>\r\n        </div>\r\n      </Transition>\r\n    </div>\r\n    <Popper\r\n      ref=\"popper\"\r\n      :class=\"[nh.be('popper'), nh.ns('calendar-vars'), nh.ns('time-picker-vars'), nh.bs('vars')]\"\r\n      :visible=\"currentVisible\"\r\n      :to=\"transferTo\"\r\n      :transition=\"props.transitionName\"\r\n      :alive=\"props.popperAlive ?? !transferTo\"\r\n      @click.stop=\"handleFocused\"\r\n      @before-enter=\"staticWheel = true\"\r\n      @before-leave=\"staticWheel = true\"\r\n      @after-enter=\"staticWheel = false\"\r\n      @after-leave=\"staticWheel = false\"\r\n    >\r\n      <DatePanel\r\n        ref=\"panel\"\r\n        :type=\"props.type\"\r\n        :start-value=\"startState.dateValue\"\r\n        :end-value=\"endState.dateValue\"\r\n        :start-activated=\"startState.activated\"\r\n        :end-activated=\"endState.activated\"\r\n        :value-type=\"currentState\"\r\n        :shortcuts=\"props.shortcuts\"\r\n        :confirm-text=\"props.confirmText\"\r\n        :cancel-text=\"props.cancelText\"\r\n        :today=\"props.today\"\r\n        :no-action=\"props.noAction\"\r\n        :steps=\"props.steps\"\r\n        :range=\"props.range\"\r\n        :min=\"props.min\"\r\n        :max=\"props.max\"\r\n        :disabled-date=\"isDateDisabled\"\r\n        :disabled-time=\"isTimeDisabled\"\r\n        :has-error=\"startError || endError\"\r\n        :selecting-type=\"hoveredLarge ? 'end' : 'start'\"\r\n        :locale=\"mergedLocale\"\r\n        :week-start=\"props.weekStart\"\r\n        :static-wheel=\"staticWheel\"\r\n        :shortcuts-placement=\"props.shortcutsPlacement\"\r\n        :labeled-by=\"labelId\"\r\n        @shortcut=\"handleShortcut\"\r\n        @change=\"handlePanelChange\"\r\n        @confirm=\"handleEnter\"\r\n        @cancel=\"handleCancel\"\r\n        @hover=\"handleDateHover\"\r\n        @time-change=\"handleTimeChange\"\r\n      >\r\n        <template v-if=\"$slots.panelTitle || props.slots.panelTitle\" #title=\"titleParams\">\r\n          <slot name=\"panelTitle\" v-bind=\"titleParams\">\r\n            <Renderer :renderer=\"props.slots.panelTitle\" :data=\"titleParams\"></Renderer>\r\n          </slot>\r\n        </template>\r\n        <template v-if=\"$slots.panelYear || props.slots.panelYear\" #year=\"yearParams\">\r\n          <slot name=\"panelYear\" v-bind=\"yearParams\">\r\n            <Renderer :renderer=\"props.slots.panelYear\" :data=\"yearParams\"></Renderer>\r\n          </slot>\r\n        </template>\r\n        <template v-if=\"$slots.panelMonth || props.slots.panelMonth\" #month=\"monthParams\">\r\n          <slot name=\"panelMonth\" v-bind=\"monthParams\">\r\n            <Renderer :renderer=\"props.slots.panelMonth\" :data=\"monthParams\"></Renderer>\r\n          </slot>\r\n        </template>\r\n        <template v-if=\"$slots.panelWeek || props.slots.panelWeek\" #week=\"weekParams\">\r\n          <slot name=\"panelWeek\" v-bind=\"weekParams\">\r\n            <Renderer :renderer=\"props.slots.panelWeek\" :data=\"weekParams\"></Renderer>\r\n          </slot>\r\n        </template>\r\n        <template v-if=\"$slots.panelDate || props.slots.panelDate\" #date=\"dateParams\">\r\n          <slot name=\"panelDate\" v-bind=\"dateParams\">\r\n            <Renderer :renderer=\"props.slots.panelDate\" :data=\"dateParams\"></Renderer>\r\n          </slot>\r\n        </template>\r\n      </DatePanel>\r\n    </Popper>\r\n  </div>\r\n</template>\r\n","import { booleanProp, buildProps } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { DividerTextPosition } from './symbol'\r\n\r\nexport const dividerProps = buildProps({\r\n  vertical: booleanProp,\r\n  textPosition: String as PropType<DividerTextPosition>,\r\n  /**\r\n   * 字体增大加粗\r\n   */\r\n  primary: booleanProp,\r\n  dashed: booleanProp,\r\n  margin: [String, Number],\r\n})\r\n\r\nexport type DividerProps = ExtractPropTypes<typeof dividerProps>\r\nexport type DividerCProps = ConfigurableProps<DividerProps>\r\n","<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { toCssSize } from '@vexip-ui/utils'\r\nimport { dividerProps } from './props'\r\n\r\ndefineOptions({ name: 'Divider' })\r\n\r\nconst _props = defineProps(dividerProps)\r\nconst props = useProps('divider', _props, {\r\n  vertical: false,\r\n  textPosition: {\r\n    default: 'center',\r\n    validator: value => ['center', 'left', 'right'].includes(value),\r\n  },\r\n  primary: false,\r\n  dashed: false,\r\n  margin: null,\r\n})\r\n\r\nconst slots = defineSlots<{ default: () => any }>()\r\n\r\nconst nh = useNameHelper('divider')\r\n\r\nconst hasText = computed(() => !!slots.default)\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    nh.bm(props.vertical ? 'vertical' : 'horizontal'),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('primary')]: !props.vertical && props.primary,\r\n      [nh.bm('dashed')]: props.dashed,\r\n      [nh.bm('with-text')]: !props.vertical && hasText.value,\r\n      [nh.bm(`with-text-${props.textPosition}`)]:\r\n        !props.vertical && hasText.value && props.textPosition !== 'center',\r\n    },\r\n  ]\r\n})\r\nconst margin = computed(() => toCssSize(props.margin))\r\nconst style = computed(() => {\r\n  if (!margin.value) return {}\r\n\r\n  return props.vertical\r\n    ? {\r\n      marginRight: margin.value,\r\n      marginLeft: margin.value,\r\n    }\r\n    : {\r\n      marginTop: margin.value,\r\n      marginBottom: margin.value,\r\n    }\r\n})\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"className\" role=\"separator\" :style=\"style\">\r\n    <span v-if=\"!props.vertical && hasText\" :class=\"nh.be('text')\">\r\n      <slot></slot>\r\n    </span>\r\n  </div>\r\n</template>\r\n","import {\r\n  booleanProp,\r\n  booleanStringProp,\r\n  buildProps,\r\n  classProp,\r\n  eventProp,\r\n  localeProp,\r\n  sizeProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { ButtonProps, ButtonType } from '@/components/button'\r\nimport type { DrawerPlacement, DrawerSlots } from './symbol'\r\n\r\nexport const drawerProps = buildProps({\r\n  locale: localeProp('drawer'),\r\n  transfer: booleanStringProp,\r\n  active: booleanProp,\r\n  width: [Number, String],\r\n  height: [Number, String],\r\n  placement: String as PropType<DrawerPlacement>,\r\n  title: String,\r\n  closable: booleanProp,\r\n  inner: booleanProp,\r\n  maskClose: booleanProp,\r\n  drawerClass: classProp,\r\n  hideMask: booleanProp,\r\n  onBeforeClose: Function as PropType<(isConfirm?: boolean) => any>,\r\n  resizable: booleanProp,\r\n  autoRemove: booleanProp,\r\n  footer: booleanProp,\r\n  confirmText: String,\r\n  cancelText: String,\r\n  loading: booleanProp,\r\n  confirmType: String as PropType<ButtonType>,\r\n  confirmProps: Object as PropType<ButtonProps>,\r\n  cancelType: String as PropType<ButtonType>,\r\n  cancelProps: Object as PropType<ButtonProps>,\r\n  actionSize: sizeProp,\r\n  undivided: booleanProp,\r\n  disableEsc: booleanProp,\r\n  slots: Object as PropType<DrawerSlots>,\r\n  onToggle: eventProp<(active: boolean) => void>(),\r\n  onClose: eventProp(),\r\n  onShow: eventProp(),\r\n  onHide: eventProp(),\r\n  onResizeStart: eventProp<(rect: { width: number, height: number }) => void>(),\r\n  onResizeMove: eventProp<(rect: { width: number, height: number }) => void>(),\r\n  onResizeEnd: eventProp<(rect: { width: number, height: number }) => void>(),\r\n  onConfirm: eventProp(),\r\n  onCancel: eventProp(),\r\n})\r\n\r\nexport type DrawerProps = ExtractPropTypes<typeof drawerProps>\r\nexport type DrawerCProps = ConfigurableProps<DrawerProps, never, 'onBeforeClose'>\r\n","export type DrawerPlacement = 'top' | 'right' | 'bottom' | 'left'\r\n\r\nexport interface DrawerSlotParams {\r\n  resizing: boolean,\r\n  handleConfirm: () => void,\r\n  handleCancel: () => void,\r\n  handleClose: (isConfirm?: boolean) => Promise<unknown>,\r\n}\r\n\r\nexport type DrawerCommonSlot = (params: DrawerSlotParams) => any\r\n\r\nexport interface DrawerSlots {\r\n  header?: DrawerCommonSlot,\r\n  title?: DrawerCommonSlot,\r\n  close?: DrawerCommonSlot,\r\n  default?: DrawerCommonSlot,\r\n  footer?: DrawerCommonSlot,\r\n  handler?: DrawerCommonSlot,\r\n}\r\n\r\nexport const drawerPlacements = Object.freeze<DrawerPlacement[]>(['top', 'right', 'bottom', 'left'])\r\n","<script setup lang=\"ts\">\r\nimport { Button } from '@/components/button'\r\nimport { Icon } from '@/components/icon'\r\nimport { Masker } from '@/components/masker'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, nextTick, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\r\n\r\nimport {\r\n  createSizeProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useId,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { useMoving } from '@vexip-ui/hooks'\r\nimport { isPromise, toNumber } from '@vexip-ui/utils'\r\nimport { drawerProps } from './props'\r\nimport { drawerPlacements } from './symbol'\r\n\r\nimport type { DrawerSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'Drawer' })\r\n\r\nconst _props = defineProps(drawerProps)\r\nconst props = useProps('drawer', _props, {\r\n  locale: null,\r\n  transfer: false,\r\n  active: {\r\n    default: false,\r\n    static: true,\r\n  },\r\n  width: {\r\n    default: 280,\r\n    validator: value => typeof value === 'string' || value > 0,\r\n  },\r\n  height: {\r\n    default: 280,\r\n    validator: value => typeof value === 'string' || value > 0,\r\n  },\r\n  placement: {\r\n    default: 'right',\r\n    validator: value => drawerPlacements.includes(value),\r\n  },\r\n  title: '',\r\n  closable: true,\r\n  inner: false,\r\n  maskClose: true,\r\n  drawerClass: null,\r\n  hideMask: false,\r\n  onBeforeClose: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  resizable: false,\r\n  autoRemove: false,\r\n  footer: false,\r\n  confirmText: null,\r\n  confirmProps: null,\r\n  cancelText: null,\r\n  cancelProps: null,\r\n  loading: false,\r\n  confirmType: 'primary',\r\n  cancelType: 'default',\r\n  actionSize: createSizeProp('small'),\r\n  undivided: false,\r\n  disableEsc: false,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:active'])\r\n\r\nconst slots = defineSlots<DrawerSlots>()\r\n\r\nconst nh = useNameHelper('drawer')\r\nconst icons = useIcons()\r\nconst locale = useLocale('drawer', toRef(props, 'locale'))\r\n\r\nconst currentActive = ref(props.active)\r\nconst currentWidth = ref(props.width)\r\nconst currentHeight = ref(props.height)\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nconst { target: resizer, moving: resizing } = useMoving({\r\n  onStart: (state, event) => {\r\n    if (!props.resizable || event.button > 0 || !wrapper.value) {\r\n      return false\r\n    }\r\n\r\n    const width = `${currentWidth.value}`.endsWith('%')\r\n      ? wrapper.value.offsetWidth\r\n      : toNumber(currentWidth.value)\r\n    const height = `${currentHeight.value}`.endsWith('%')\r\n      ? wrapper.value.offsetHeight\r\n      : toNumber(currentHeight.value)\r\n\r\n    state.xStart = width\r\n    state.yStart = height\r\n\r\n    emitEvent(props.onResizeStart, { width, height })\r\n  },\r\n  onMove: (state, event) => {\r\n    const deltaX = event.clientX - state.clientX\r\n    const deltaY = event.clientY - state.clientY\r\n\r\n    let width = toNumber(currentWidth.value)\r\n    let height = toNumber(currentHeight.value)\r\n\r\n    switch (props.placement) {\r\n      case 'top': {\r\n        height = state.yStart + deltaY\r\n        break\r\n      }\r\n      case 'right': {\r\n        width = state.xStart - deltaX\r\n        break\r\n      }\r\n      case 'bottom': {\r\n        height = state.yStart - deltaY\r\n        break\r\n      }\r\n      default: {\r\n        width = state.xStart + deltaX\r\n      }\r\n    }\r\n\r\n    currentWidth.value = Math.max(width, 100)\r\n    currentHeight.value = Math.max(height, 100)\r\n\r\n    emitEvent(props.onResizeMove, {\r\n      width: toNumber(currentWidth.value),\r\n      height: toNumber(currentHeight.value),\r\n    })\r\n  },\r\n  onEnd: () => {\r\n    emitEvent(props.onResizeEnd, {\r\n      width: toNumber(currentWidth.value),\r\n      height: toNumber(currentHeight.value),\r\n    })\r\n  },\r\n})\r\n\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('inner')]: props.inner,\r\n      [nh.bm('closable')]: props.closable,\r\n      [nh.bm('resizable')]: props.resizable,\r\n      [nh.bm('undivided')]: props.undivided,\r\n    },\r\n  ]\r\n})\r\nconst moveTransition = computed(() => {\r\n  return nh.ns(`move-${props.placement}`)\r\n})\r\nconst wrapperClass = computed(() => {\r\n  return [\r\n    nh.be('wrapper'),\r\n    nh.bem('wrapper', props.placement),\r\n    {\r\n      [nh.bem('wrapper', 'hide-mask')]: props.hideMask,\r\n      [nh.bem('wrapper', 'resizing')]: resizing.value,\r\n    },\r\n    props.drawerClass,\r\n  ]\r\n})\r\nconst wrapperStyle = computed(() => {\r\n  const placement = props.placement\r\n\r\n  if (placement === 'top' || placement === 'bottom') {\r\n    const height = currentHeight.value\r\n\r\n    return {\r\n      height: `${height}`.endsWith('%') ? height : `${height}px`,\r\n    }\r\n  }\r\n\r\n  const width = currentWidth.value\r\n\r\n  return {\r\n    width: `${width}`.endsWith('%') ? width : `${width}px`,\r\n  }\r\n})\r\nconst hasTitle = computed(() => {\r\n  return !!(slots.header || slots.title || props.title || props.slots.header || props.slots.title)\r\n})\r\nconst titleId = useId()\r\nconst bodyId = useId()\r\n\r\nwatch(\r\n  () => props.active,\r\n  value => {\r\n    currentActive.value = value\r\n  },\r\n)\r\nwatch(\r\n  () => props.width,\r\n  value => {\r\n    currentWidth.value = value\r\n  },\r\n)\r\nwatch(\r\n  () => props.height,\r\n  value => {\r\n    currentHeight.value = value\r\n  },\r\n)\r\n\r\ndefineExpose({\r\n  resizing,\r\n  titleId,\r\n  bodyId,\r\n  wrapper,\r\n  resizer,\r\n  handleConfirm,\r\n  handleCancel,\r\n  handleClose,\r\n})\r\n\r\nconst slotParams = shallowReadonly(\r\n  reactive({\r\n    resizing,\r\n    handleConfirm,\r\n    handleCancel,\r\n    handleClose,\r\n  }),\r\n)\r\n\r\nfunction setActive(active: boolean) {\r\n  if (currentActive.value === active) return\r\n\r\n  currentActive.value = active\r\n\r\n  emit('update:active', active)\r\n  emitEvent(props.onToggle, active)\r\n}\r\n\r\nasync function handleClose(isConfirm = false) {\r\n  let result: unknown = true\r\n\r\n  if (typeof props.onBeforeClose === 'function') {\r\n    result = props.onBeforeClose(isConfirm)\r\n\r\n    if (isPromise(result)) {\r\n      result = await result\r\n    }\r\n  }\r\n\r\n  if (result !== false) {\r\n    nextTick(() => {\r\n      setActive(false)\r\n      emitEvent(props.onClose)\r\n    })\r\n  }\r\n\r\n  return result\r\n}\r\n\r\nfunction handleMaskClose() {\r\n  if (props.maskClose) {\r\n    return handleClose()\r\n  }\r\n}\r\n\r\nfunction handleShow() {\r\n  emitEvent(props.onShow)\r\n}\r\n\r\nfunction handleHide() {\r\n  emitEvent(props.onHide)\r\n}\r\n\r\nfunction handleConfirm() {\r\n  handleClose(true)\r\n  emitEvent(props.onConfirm)\r\n}\r\n\r\nfunction handleCancel() {\r\n  handleClose(false)\r\n  emitEvent(props.onCancel)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <Masker\r\n    v-model:active=\"currentActive\"\r\n    :inherit=\"props.inherit\"\r\n    :class=\"className\"\r\n    :inner=\"props.inner\"\r\n    :transition-name=\"moveTransition\"\r\n    :closable=\"props.maskClose\"\r\n    :disabled=\"props.hideMask\"\r\n    :on-before-close=\"handleMaskClose\"\r\n    :transfer=\"props.transfer\"\r\n    :auto-remove=\"props.autoRemove\"\r\n    :disable-esc=\"props.disableEsc\"\r\n    @show=\"handleShow\"\r\n    @hide=\"handleHide\"\r\n  >\r\n    <template #default=\"{ show }\">\r\n      <section\r\n        v-show=\"show\"\r\n        ref=\"wrapper\"\r\n        :class=\"wrapperClass\"\r\n        :style=\"wrapperStyle\"\r\n        role=\"dialog\"\r\n        :aria-modal=\"show ? 'true' : undefined\"\r\n        :aria-labelledby=\"titleId\"\r\n        :aria-describedby=\"bodyId\"\r\n      >\r\n        <div v-if=\"hasTitle\" :class=\"nh.be('header')\">\r\n          <slot name=\"header\" v-bind=\"slotParams\">\r\n            <Renderer :renderer=\"props.slots.header\" :data=\"slotParams\">\r\n              <div :id=\"titleId\" :class=\"nh.be('title')\">\r\n                <slot name=\"title\" v-bind=\"slotParams\">\r\n                  <Renderer :renderer=\"props.slots.title\" :data=\"slotParams\">\r\n                    {{ props.title }}\r\n                  </Renderer>\r\n                </slot>\r\n              </div>\r\n              <button\r\n                v-if=\"props.closable\"\r\n                type=\"button\"\r\n                :class=\"nh.be('close')\"\r\n                @click=\"handleClose()\"\r\n              >\r\n                <slot name=\"close\" v-bind=\"slotParams\">\r\n                  <Renderer :renderer=\"props.slots.close\" :data=\"slotParams\">\r\n                    <Icon\r\n                      v-bind=\"icons.close\"\r\n                      :scale=\"+(icons.close.scale || 1) * 1.2\"\r\n                      label=\"close\"\r\n                    ></Icon>\r\n                  </Renderer>\r\n                </slot>\r\n              </button>\r\n            </Renderer>\r\n          </slot>\r\n        </div>\r\n        <div :id=\"bodyId\" :class=\"nh.be('content')\">\r\n          <slot v-bind=\"slotParams\">\r\n            <Renderer :renderer=\"props.slots.default\" :data=\"slotParams\"></Renderer>\r\n          </slot>\r\n        </div>\r\n        <div v-if=\"props.footer || slots.footer || props.slots.footer\" :class=\"nh.be('footer')\">\r\n          <slot name=\"footer\" v-bind=\"slotParams\">\r\n            <Renderer :renderer=\"props.slots.footer\" :data=\"slotParams\">\r\n              <Button\r\n                :class=\"[nh.be('button'), nh.bem('button', 'cancel')]\"\r\n                inherit\r\n                text\r\n                :type=\"props.cancelType\"\r\n                :size=\"props.actionSize\"\r\n                v-bind=\"props.cancelProps\"\r\n                @click=\"handleCancel\"\r\n              >\r\n                {{ props.cancelText || locale.cancel }}\r\n              </Button>\r\n              <Button\r\n                :class=\"[nh.be('button'), nh.bem('button', 'confirm')]\"\r\n                inherit\r\n                :type=\"props.confirmType\"\r\n                :size=\"props.actionSize\"\r\n                :loading=\"props.loading\"\r\n                v-bind=\"props.confirmProps\"\r\n                @click=\"handleConfirm\"\r\n              >\r\n                {{ props.confirmText || locale.confirm }}\r\n              </Button>\r\n            </Renderer>\r\n          </slot>\r\n        </div>\r\n        <div\r\n          v-if=\"props.resizable\"\r\n          ref=\"resizer\"\r\n          :class=\"[\r\n            nh.be('handler'),\r\n            nh.bem('handler', props.placement),\r\n            {\r\n              [nh.bem('handler', 'resizing')]: resizing\r\n            }\r\n          ]\"\r\n        >\r\n          <slot name=\"handler\" v-bind=\"slotParams\">\r\n            <Renderer :renderer=\"props.slots.handler\" :data=\"slotParams\"></Renderer>\r\n          </slot>\r\n        </div>\r\n      </section>\r\n    </template>\r\n  </Masker>\r\n</template>\r\n","import { booleanProp, booleanStringProp, buildProps, classProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { Placement } from '@vexip-ui/hooks'\r\nimport type { TooltipShift, TooltipTheme } from '@/components/tooltip'\r\n\r\nexport const ellipsisProps = buildProps({\r\n  placement: String as PropType<Placement>,\r\n  transfer: booleanStringProp,\r\n  noHover: booleanProp,\r\n  transitionName: String,\r\n  tooltipTheme: String as PropType<TooltipTheme>,\r\n  tipClass: classProp,\r\n  maxLines: Number,\r\n  tipMaxWidth: [Number, String],\r\n  tipDisabled: booleanProp,\r\n  tipShift: {\r\n    type: [Boolean, String] as PropType<boolean | TooltipShift>,\r\n    default: null,\r\n  },\r\n})\r\n\r\nexport type EllipsisProps = ExtractPropTypes<typeof ellipsisProps>\r\nexport type EllipsisCProps = ConfigurableProps<EllipsisProps>\r\n","<script setup lang=\"ts\">\r\nimport { Tooltip } from '@/components/tooltip'\r\n\r\nimport { computed, ref } from 'vue'\r\n\r\nimport { useHoverDelay, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { placementWhileList, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { getRangeWidth } from '@vexip-ui/utils'\r\nimport { ellipsisProps } from './props'\r\n\r\ndefineOptions({ name: 'Ellipsis' })\r\n\r\nconst nh = useNameHelper('ellipsis')\r\n\r\nconst _props = defineProps(ellipsisProps)\r\nconst props = useProps('ellipsis', _props, {\r\n  placement: {\r\n    default: 'top',\r\n    validator: value => placementWhileList.includes(value),\r\n  },\r\n  transfer: 'body',\r\n  noHover: false,\r\n  transitionName: () => nh.ns('fade'),\r\n  tooltipTheme: {\r\n    default: 'dark',\r\n    validator: value => ['light', 'dark'].includes(value),\r\n  },\r\n  tipClass: null,\r\n  maxLines: null,\r\n  tipMaxWidth: 500,\r\n  tipDisabled: false,\r\n  tipShift: false,\r\n})\r\n\r\nconst hoverDelay = useHoverDelay()\r\nconst visible = ref(false)\r\nconst content = ref('')\r\n\r\nconst { timer } = useSetTimeout()\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm('multiple')]: props.maxLines,\r\n  }\r\n})\r\nconst ellipsisStyle = computed(() => {\r\n  return props.maxLines > 0 ? { '-webkit-line-clamp': props.maxLines } : ''\r\n})\r\nconst tipStyle = computed(() => {\r\n  return {\r\n    maxWidth:\r\n      typeof props.tipMaxWidth === 'string'\r\n        ? parseFloat(props.tipMaxWidth) || props.tipMaxWidth\r\n        : `${props.tipMaxWidth}px`,\r\n  }\r\n})\r\n\r\ndefineExpose({\r\n  visible,\r\n  wrapper,\r\n})\r\n\r\nfunction handleTriggerEnter() {\r\n  clearTimeout(timer.hover)\r\n\r\n  if (props.tipDisabled) return\r\n\r\n  timer.hover = setTimeout(() => {\r\n    if (!wrapper.value || !wrapper.value.childNodes.length) {\r\n      visible.value = false\r\n      return\r\n    }\r\n\r\n    // In the case of multiple lines, use visual height and\r\n    // real content height to control whether to display\r\n    if (props.maxLines > 0) {\r\n      const scrollHeight = wrapper.value.scrollHeight\r\n      const clientHeight = wrapper.value.clientHeight\r\n\r\n      visible.value = scrollHeight > clientHeight\r\n    } else {\r\n      visible.value = getRangeWidth(wrapper.value) > wrapper.value.getBoundingClientRect().width\r\n    }\r\n\r\n    content.value = visible.value ? (wrapper.value.textContent ?? '') : ''\r\n  }, hoverDelay.value)\r\n}\r\n\r\nfunction handleTriggerLeave() {\r\n  clearTimeout(timer.hover)\r\n\r\n  if (props.tipDisabled) return\r\n\r\n  timer.hover = setTimeout(() => {\r\n    visible.value = false\r\n  }, hoverDelay.value)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <Tooltip\r\n    :visible=\"visible\"\r\n    trigger=\"custom\"\r\n    :disabled=\"props.tipDisabled\"\r\n    :transfer=\"props.transfer\"\r\n    :placement=\"props.placement\"\r\n    :no-hover=\"props.noHover\"\r\n    :transition-name=\"props.transitionName\"\r\n    :tip-class=\"props.tipClass\"\r\n    :tip-style=\"tipStyle\"\r\n    :reverse=\"props.tooltipTheme === 'dark'\"\r\n    :shift=\"props.tipShift\"\r\n    @tip-enter=\"handleTriggerEnter\"\r\n    @tip-leave=\"handleTriggerLeave\"\r\n  >\r\n    <template #trigger>\r\n      <div\r\n        ref=\"wrapper\"\r\n        v-bind=\"$attrs\"\r\n        :class=\"className\"\r\n        :style=\"ellipsisStyle\"\r\n        @mouseenter=\"handleTriggerEnter\"\r\n        @mouseleave=\"handleTriggerLeave\"\r\n      >\r\n        <slot></slot>\r\n      </div>\r\n    </template>\r\n    {{ content }}\r\n  </Tooltip>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Column } from '@/components/column'\r\nimport { Icon } from '@/components/icon'\r\nimport { Tooltip } from '@/components/tooltip'\r\n\r\nimport {\r\n  computed,\r\n  inject,\r\n  onBeforeUnmount,\r\n  onMounted,\r\n  provide,\r\n  reactive,\r\n  ref,\r\n  shallowReadonly,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport {\r\n  makeSentence,\r\n  useIcons,\r\n  useId,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n  useWordSpace,\r\n} from '@vexip-ui/config'\r\nimport { useDisplay } from '@vexip-ui/hooks'\r\nimport { createEventEmitter, isFunction, isNull, isObject } from '@vexip-ui/utils'\r\nimport { formItemProps } from './props'\r\nimport { validate as asyncValidate } from './validator'\r\nimport { getValueByPath, setValueByPath } from './helper'\r\nimport { FIELD_OPTIONS, FORM_ACTIONS, FORM_FIELDS, FORM_PROPS, type FormItemSlots } from './symbol'\r\n\r\nimport type { ComponentState } from '@vexip-ui/config'\r\nimport type { Rule } from './validator'\r\n\r\ndefineOptions({ name: 'FormItem', inheritAttrs: true })\r\n\r\nconst nh = useNameHelper('form')\r\nconst _props = defineProps(formItemProps)\r\nconst props = useProps('formItem', _props, {\r\n  locale: null,\r\n  label: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  prop: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  name: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  rules: () => [],\r\n  labelWidth: null,\r\n  required: false,\r\n  htmlFor: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  errorTransition: () => nh.ns('fade'),\r\n  defaultValue: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  hideErrorTip: false,\r\n  validateAll: null,\r\n  hideAsterisk: null,\r\n  hideLabel: null,\r\n  action: false,\r\n  help: '',\r\n  pure: false,\r\n  manual: false,\r\n  span: 24,\r\n  offset: null,\r\n  push: null,\r\n  pull: null,\r\n  order: null,\r\n  xs: null,\r\n  sm: null,\r\n  md: null,\r\n  lg: null,\r\n  xl: null,\r\n  xxl: null,\r\n  flex: null,\r\n})\r\n\r\nconst slots = defineSlots<FormItemSlots>()\r\n\r\nconst formProps = inject(FORM_PROPS, {})\r\nconst formActions = inject(FORM_ACTIONS, null)\r\nconst formFields = inject(FORM_FIELDS, null)\r\nconst emitter = createEventEmitter()\r\n\r\nconst locale = useLocale('form', toRef(props, 'locale'))\r\nconst icons = useIcons()\r\nconst wordSpace = useWordSpace()\r\n\r\nconst initValue = ref(props.defaultValue)\r\nconst isError = ref(false)\r\nconst errorTip = ref('')\r\nconst validating = ref(false)\r\nconst disabledValidate = ref(false)\r\nconst labelWidth = ref(0)\r\n\r\nconst defaultSlotParams = shallowReadonly(\r\n  reactive({\r\n    isError,\r\n  }),\r\n)\r\n\r\nconst placeholder = useDisplay(() => {\r\n  if (placeholder.value) {\r\n    labelWidth.value = placeholder.value.offsetWidth\r\n  }\r\n})\r\n\r\nconst labelId = useId()\r\nconst isRequired = computed(() => formProps.allRequired || props.required)\r\nconst requiredTip = computed(() => {\r\n  return makeSentence(`${props.label || props.prop} ${locale.value.notNullable}`, wordSpace.value)\r\n})\r\nconst allRules = computed(() => {\r\n  if (!props.prop) return []\r\n\r\n  const requiredRule: Rule[] = isRequired.value\r\n    ? [{ required: isRequired.value, message: requiredTip.value }]\r\n    : []\r\n  const selfRules = Array.isArray(props.rules) ? props.rules : [props.rules]\r\n\r\n  let formRules: Rule[] = []\r\n\r\n  if (formProps.rules) {\r\n    formRules = (getValueByPath(formProps.rules, props.prop) as Rule[]) ?? []\r\n  }\r\n\r\n  formRules = Array.isArray(formRules) ? formRules : [formRules]\r\n\r\n  return requiredRule.concat(formRules, selfRules)\r\n})\r\nconst currentValue = computed(getValue)\r\nconst isValidateAll = computed(() => {\r\n  return isNull(props.validateAll) ? (formProps.validateAll ?? false) : props.validateAll\r\n})\r\nconst useAsterisk = computed(() => {\r\n  if (props.hideAsterisk === true || formProps.hideAsterisk) {\r\n    return false\r\n  }\r\n\r\n  for (const rule of allRules.value) {\r\n    if (rule.required) return true\r\n  }\r\n\r\n  return isRequired.value\r\n})\r\nconst hideLabel = computed(() => props.action || props.hideLabel === true || formProps.hideLabel)\r\nconst hasLabel = computed(() => !(hideLabel.value || !(props.label || slots.label)))\r\nconst labelAlign = computed(() => formProps.labelAlign)\r\nconst computedLabelWidth = computed(() => {\r\n  if (labelAlign.value) {\r\n    return getLabelWidth(\r\n      labelAlign.value === 'top'\r\n        ? 0\r\n        : hideLabel.value\r\n          ? 0\r\n          : props.labelWidth || formProps.labelWidth || 80,\r\n    )\r\n  }\r\n\r\n  return getLabelWidth(hideLabel.value ? 0 : props.labelWidth || 80)\r\n})\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.be('item')]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bem('item', 'inherit')]: formFields || props.inherit,\r\n    [nh.bem('item', 'required')]: !formProps.hideAsterisk && useAsterisk.value,\r\n    [nh.bem('item', 'error')]: isError.value,\r\n    [nh.bem('item', 'action')]: props.action,\r\n    [nh.bem('item', 'padding')]: formProps.inline && labelAlign.value === 'top' && !hasLabel.value,\r\n  }\r\n})\r\nconst controlStyle = computed(() => {\r\n  return {\r\n    width: labelAlign.value === 'top' ? undefined : `calc(100% - ${computedLabelWidth.value}px)`,\r\n    marginLeft:\r\n      hasLabel.value || labelAlign.value === 'top' ? undefined : `${computedLabelWidth.value}px`,\r\n  }\r\n})\r\nconst inputValue = computed(() => {\r\n  const value = currentValue.value\r\n\r\n  if (Array.isArray(value) || isObject(value)) {\r\n    return JSON.stringify(value)\r\n  }\r\n\r\n  return value\r\n})\r\nconst columnFlex = computed(() => {\r\n  return { justify: props.action ? 'center' : 'start', align: 'middle' } as const\r\n})\r\nconst labelWidthDefined = computed(\r\n  () => !!(formProps.labelWidth && formProps.labelWidth !== 'auto') || props.labelWidth > 0,\r\n)\r\n\r\nconst instances = new Set<any>()\r\n\r\nconst fieldObject = Object.freeze({\r\n  prop: computed(() => props.prop),\r\n  idFor: computed(() => props.prop),\r\n  labelId,\r\n  state: computed<ComponentState>(() => (isError.value ? 'error' : 'default')),\r\n  disabled: computed(() => !!formProps.disabled),\r\n  loading: computed(() => !!formProps.loading),\r\n  size: computed(() => formProps.size || 'default'),\r\n  emitter,\r\n  labelWidth,\r\n  validate,\r\n  clearError,\r\n  reset,\r\n  getValue,\r\n  setValue,\r\n  sync: (instance: any) => {\r\n    if (instances.size) {\r\n      console.warn('[vexip-ui:Form]: must only be one control component under FormItem.')\r\n    }\r\n\r\n    instances.add(instance)\r\n  },\r\n  unSync: (instance: any) => {\r\n    instances.delete(instance)\r\n  },\r\n})\r\n\r\nprovide(FIELD_OPTIONS, props.manual ? null : fieldObject)\r\n\r\nwatch(\r\n  () => props.defaultValue,\r\n  value => {\r\n    initValue.value = value\r\n  },\r\n)\r\n\r\nonMounted(() => {\r\n  const value = currentValue.value\r\n\r\n  if (isNull(initValue.value)) {\r\n    initValue.value = Array.isArray(value) ? Array.from(value) : value\r\n  }\r\n\r\n  if (formFields) {\r\n    formFields.add(fieldObject)\r\n  }\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n  if (formFields) {\r\n    formFields.delete(fieldObject)\r\n  }\r\n})\r\n\r\ndefineExpose({ isError, inputValue, computedLabelWidth })\r\n\r\nfunction getLabelWidth(width: number | 'auto') {\r\n  return width === 'auto' ? formActions?.getLabelWidth() || 80 : width\r\n}\r\n\r\nlet initialized = false\r\n\r\nfunction getValue(defaultValue: unknown = initValue.value) {\r\n  if (!formProps.model || !props.prop) return defaultValue\r\n\r\n  try {\r\n    const value = getValueByPath(formProps.model, props.prop, true)\r\n    initialized = true\r\n\r\n    return value\r\n  } catch (e) {\r\n    if (!initialized) {\r\n      setValueByPath(formProps.model, props.prop, defaultValue, false)\r\n      initialized = true\r\n    }\r\n\r\n    return defaultValue\r\n  }\r\n}\r\n\r\nfunction setValue(value: unknown, strict = false) {\r\n  if (!formProps.model || !props.prop) return\r\n\r\n  try {\r\n    return setValueByPath(formProps.model, props.prop, value, strict)\r\n  } catch (e) {}\r\n}\r\n\r\nfunction validate() {\r\n  return handleValidate()\r\n}\r\n\r\nfunction clearError() {\r\n  isError.value = false\r\n  errorTip.value = ''\r\n}\r\n\r\nfunction reset() {\r\n  clearError()\r\n\r\n  if (!formProps.model || !props.prop) return false\r\n\r\n  const value = currentValue.value\r\n\r\n  let resetValue\r\n\r\n  if (Array.isArray(value)) {\r\n    resetValue = Array.isArray(initValue.value) ? Array.from(initValue.value) : []\r\n  } else {\r\n    resetValue = isFunction(initValue.value) ? initValue.value() : initValue.value\r\n  }\r\n\r\n  return setValueByPath(formProps.model, props.prop, resetValue, true)\r\n}\r\n\r\nasync function handleValidate() {\r\n  if (disabledValidate.value) {\r\n    disabledValidate.value = false\r\n\r\n    return handleValidateEnd(null)\r\n  }\r\n\r\n  if (!props.prop || !formProps.model || validating.value) {\r\n    return handleValidateEnd(null)\r\n  }\r\n\r\n  validating.value = true\r\n\r\n  const value = currentValue.value\r\n  const useRules = allRules.value\r\n  const model = formProps.model\r\n\r\n  let errors: string[] | null = await asyncValidate(\r\n    useRules,\r\n    value,\r\n    model,\r\n    isValidateAll.value,\r\n    locale.value.validateFail,\r\n  )\r\n\r\n  errors = errors.length ? errors : null\r\n\r\n  return handleValidateEnd(errors)\r\n}\r\n\r\nfunction handleValidateEnd(errors: string[] | null) {\r\n  validating.value = false\r\n\r\n  if (!errors) {\r\n    clearError()\r\n  } else {\r\n    isError.value = true\r\n    errorTip.value = Array.isArray(errors) ? errors[0] : errors\r\n  }\r\n\r\n  return errors\r\n}\r\n\r\nfunction handleLabelClick() {\r\n  emitter.emit('focus')\r\n}\r\n\r\nconst isNative = computed(() => !!(formProps.action && formProps.method))\r\n</script>\r\n\r\n<template>\r\n  <slot v-if=\"props.pure\" v-bind=\"defaultSlotParams\"></slot>\r\n  <Column\r\n    v-else\r\n    v-bind=\"$attrs\"\r\n    :class=\"className\"\r\n    :inherit=\"props.inherit\"\r\n    role=\"group\"\r\n    tag=\"div\"\r\n    :span=\"props.span\"\r\n    :offset=\"props.offset\"\r\n    :push=\"props.push\"\r\n    :pull=\"props.pull\"\r\n    :order=\"props.order\"\r\n    :xs=\"props.xs\"\r\n    :sm=\"props.sm\"\r\n    :md=\"props.md\"\r\n    :lg=\"props.lg\"\r\n    :xl=\"props.xl\"\r\n    :xxl=\"props.xxl\"\r\n    :flex=\"props.flex\"\r\n    :use-flex=\"columnFlex\"\r\n  >\r\n    <input\r\n      v-if=\"isNative\"\r\n      type=\"hidden\"\r\n      :name=\"props.name || props.prop\"\r\n      :value=\"inputValue\"\r\n      style=\"display: none\"\r\n    />\r\n    <span\r\n      v-if=\"hasLabel && labelAlign !== 'top' && !labelWidthDefined\"\r\n      ref=\"placeholder\"\r\n      :class=\"nh.be('placeholder')\"\r\n      role=\"none\"\r\n    >\r\n      <Icon v-if=\"props.help || slots.help\" v-bind=\"icons.help\" :class=\"nh.be('help')\"></Icon>\r\n      <slot name=\"label\">\r\n        {{ props.label + (formProps.labelSuffix || '') }}\r\n      </slot>\r\n    </span>\r\n    <label\r\n      v-if=\"hasLabel\"\r\n      :id=\"labelId\"\r\n      :class=\"nh.be('label')\"\r\n      :style=\"{ width: labelAlign !== 'top' ? `${computedLabelWidth}px` : undefined }\"\r\n      :for=\"props.htmlFor || props.prop\"\r\n      @click=\"handleLabelClick\"\r\n    >\r\n      <Tooltip v-if=\"props.help || slots.help\" transfer>\r\n        <template #trigger>\r\n          <Icon v-bind=\"icons.help\" :class=\"nh.be('help')\"></Icon>\r\n        </template>\r\n        <slot name=\"help\">\r\n          <div :class=\"nh.be('help-tip')\">\r\n            {{ props.help }}\r\n          </div>\r\n        </slot>\r\n      </Tooltip>\r\n      <slot name=\"label\">\r\n        {{ props.label + (formProps.labelSuffix || '') }}\r\n      </slot>\r\n    </label>\r\n    <div\r\n      :class=\"{\r\n        [nh.be('control')]: true,\r\n        [nh.bem('control', 'no-label')]: !hasLabel,\r\n        [nh.bem('control', 'action')]: props.action\r\n      }\"\r\n      role=\"alert\"\r\n      aria-relevant=\"all\"\r\n      :style=\"controlStyle\"\r\n    >\r\n      <slot v-bind=\"defaultSlotParams\"></slot>\r\n      <Transition :name=\"props.errorTransition\">\r\n        <div v-if=\"!props.hideErrorTip && isError\" :class=\"nh.be('error-tip')\">\r\n          <slot name=\"error\" :tip=\"errorTip\">\r\n            {{ errorTip }}\r\n          </slot>\r\n        </div>\r\n      </Transition>\r\n    </div>\r\n  </Column>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Button } from '@/components/button'\r\n\r\nimport { computed, inject, toRef } from 'vue'\r\n\r\nimport { createIconProp, emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { isPromise } from '@vexip-ui/utils'\r\nimport { formResetProps } from './props'\r\nimport { FORM_ACTIONS } from './symbol'\r\n\r\ndefineOptions({ name: 'FormReset' })\r\n\r\nconst _props = defineProps(formResetProps)\r\nconst props = useProps('formReset', _props, {\r\n  size: null,\r\n  locale: null,\r\n  type: 'default',\r\n  label: null,\r\n  dashed: null,\r\n  text: null,\r\n  simple: null,\r\n  ghost: null,\r\n  disabled: null,\r\n  loading: null,\r\n  circle: null,\r\n  loadingIcon: createIconProp(),\r\n  loadingEffect: null,\r\n  icon: createIconProp(),\r\n  color: null,\r\n  buttonType: null,\r\n  block: null,\r\n  onBeforeReset: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n})\r\n\r\nconst slots = defineSlots<{\r\n  default?: () => any,\r\n  icon?: () => any,\r\n  loading?: () => any,\r\n}>()\r\n\r\nconst actions = inject(FORM_ACTIONS, null)\r\n\r\nconst nh = useNameHelper('form')\r\nconst locale = useLocale('form', toRef(props, 'locale'))\r\n\r\nconst isInherit = computed(() => !!actions || props.inherit)\r\n\r\nasync function handleReset() {\r\n  if (props.disabled) return\r\n\r\n  let result: unknown = true\r\n\r\n  if (typeof props.onBeforeReset === 'function') {\r\n    result = props.onBeforeReset()\r\n\r\n    if (isPromise(result)) {\r\n      result = await result\r\n    }\r\n  }\r\n\r\n  if (result !== false) {\r\n    actions?.reset()\r\n    emitEvent(props.onReset)\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <Button\r\n    v-bind=\"$attrs\"\r\n    :inherit=\"isInherit\"\r\n    :class=\"nh.be('reset')\"\r\n    :size=\"props.size\"\r\n    :type=\"props.type\"\r\n    :simple=\"props.simple\"\r\n    :ghost=\"props.ghost\"\r\n    :dashed=\"props.dashed\"\r\n    :text=\"props.text\"\r\n    :disabled=\"props.disabled\"\r\n    :loading=\"props.loading\"\r\n    :circle=\"props.circle\"\r\n    :loading-icon=\"props.loadingIcon\"\r\n    :loading-effect=\"props.loadingEffect\"\r\n    :icon=\"props.icon\"\r\n    :color=\"props.color\"\r\n    :button-type=\"props.buttonType\"\r\n    :block=\"props.block\"\r\n    :tag=\"props.tag\"\r\n    @click=\"handleReset\"\r\n  >\r\n    <slot>\r\n      {{ props.label || locale.reset }}\r\n    </slot>\r\n    <template v-if=\"slots.icon\" #icon>\r\n      <slot name=\"icon\"></slot>\r\n    </template>\r\n    <template v-if=\"slots.loading\" #loading>\r\n      <slot name=\"loading\"></slot>\r\n    </template>\r\n  </Button>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Button } from '@/components/button'\r\nimport { FIELD_OPTIONS } from '@/components/form/symbol'\r\n\r\nimport { computed, inject, ref, toRef } from 'vue'\r\n\r\nimport { createIconProp, emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useSetTimeout } from '@vexip-ui/hooks'\r\nimport { isPromise } from '@vexip-ui/utils'\r\nimport { formSubmitProps } from './props'\r\nimport { FORM_ACTIONS, FORM_PROPS } from './symbol'\r\n\r\ndefineOptions({ name: 'FormSubmit' })\r\n\r\nconst _props = defineProps(formSubmitProps)\r\nconst props = useProps('form-submit', _props, {\r\n  size: null,\r\n  locale: null,\r\n  type: 'primary',\r\n  label: null,\r\n  dashed: null,\r\n  text: null,\r\n  simple: null,\r\n  ghost: null,\r\n  disabled: null,\r\n  circle: null,\r\n  loadingIcon: createIconProp(),\r\n  loadingEffect: null,\r\n  icon: createIconProp(),\r\n  color: null,\r\n  buttonType: null,\r\n  block: null,\r\n  onBeforeSubmit: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n})\r\n\r\nconst slots = defineSlots<{\r\n  default?: () => any,\r\n  icon?: () => any,\r\n  loading?: () => any,\r\n}>()\r\n\r\nconst fieldActions = inject(FIELD_OPTIONS, null)\r\n\r\nconst formProps = inject(FORM_PROPS, {})\r\nconst actions = inject(FORM_ACTIONS, null)\r\n\r\nconst nh = useNameHelper('form')\r\nconst locale = useLocale('form', toRef(props, 'locale'))\r\n\r\nconst { timer } = useSetTimeout()\r\n\r\nconst loading = ref(false)\r\n\r\nconst submit = ref<HTMLElement>()\r\n\r\nconst isNative = computed(() => formProps.method && formProps.action)\r\nconst isInherit = computed(() => !!actions || props.inherit)\r\nconst isLoading = computed(() => {\r\n  return loading.value || (fieldActions ? fieldActions.loading.value : false)\r\n})\r\n\r\ndefineExpose({ submit, isNative, isLoading })\r\n\r\nasync function handleSubmit() {\r\n  if (props.disabled || loading.value || !actions) return\r\n\r\n  loading.value = true\r\n\r\n  const errors = await actions.validate()\r\n\r\n  if (errors.length) {\r\n    emitEvent(props.onError, errors)\r\n  } else {\r\n    let result: unknown = true\r\n\r\n    if (typeof props.onBeforeSubmit === 'function') {\r\n      result = props.onBeforeSubmit()\r\n\r\n      if (isPromise(result)) {\r\n        result = await result\r\n      }\r\n    }\r\n\r\n    if (result !== false) {\r\n      emitEvent(props.onSubmit)\r\n\r\n      if (isNative.value) {\r\n        submit.value?.click()\r\n      }\r\n    }\r\n  }\r\n\r\n  timer.loading = setTimeout(() => {\r\n    loading.value = false\r\n  }, 300)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <Button\r\n    v-bind=\"$attrs\"\r\n    :inherit=\"isInherit\"\r\n    :class=\"nh.be('submit')\"\r\n    :size=\"props.size\"\r\n    :type=\"props.type\"\r\n    :simple=\"props.simple\"\r\n    :ghost=\"props.ghost\"\r\n    :dashed=\"props.dashed\"\r\n    :text=\"props.text\"\r\n    :disabled=\"props.disabled\"\r\n    :loading=\"isLoading\"\r\n    :circle=\"props.circle\"\r\n    :loading-icon=\"props.loadingIcon\"\r\n    :loading-effect=\"props.loadingEffect\"\r\n    :icon=\"props.icon\"\r\n    :color=\"props.color\"\r\n    :button-type=\"props.buttonType\"\r\n    :block=\"props.block\"\r\n    :tag=\"props.tag\"\r\n    @click=\"handleSubmit\"\r\n  >\r\n    <slot>\r\n      {{ props.label || locale.submit }}\r\n    </slot>\r\n    <template v-if=\"slots.icon\" #icon>\r\n      <slot name=\"icon\"></slot>\r\n    </template>\r\n    <template v-if=\"slots.loading\" #loading>\r\n      <slot name=\"loading\"></slot>\r\n    </template>\r\n    <button\r\n      v-if=\"isNative\"\r\n      ref=\"submit\"\r\n      type=\"submit\"\r\n      style=\"display: none\"\r\n      @click.stop\r\n    ></button>\r\n  </Button>\r\n</template>\r\n","import { buildProps, eventProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { FullScreenType } from './symbol'\r\n\r\nexport const fullScreenProps = buildProps({\r\n  tag: String,\r\n  onToggle: eventProp<(full: false | FullScreenType) => void>(),\r\n})\r\n\r\nexport type FullScreenProps = ExtractPropTypes<typeof fullScreenProps>\r\nexport type FullScreenCProps = ConfigurableProps<FullScreenProps, 'model'>\r\n","<script setup lang=\"ts\">\r\nimport { Portal } from '@/components/portal'\r\n\r\nimport { computed, ref, watch } from 'vue'\r\n\r\nimport { emitEvent, useId, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useFullScreen } from '@vexip-ui/hooks'\r\nimport { fullScreenProps } from './props'\r\n// import { getIndexId } from './symbol'\r\n\r\nimport type { FullScreenSlotParams, FullScreenType } from './symbol'\r\n\r\ndefineOptions({ name: 'FullScreen' })\r\n\r\nconst _props = defineProps(fullScreenProps)\r\nconst props = useProps('fullScreen', _props, {\r\n  tag: 'div',\r\n})\r\n\r\ndefineSlots<{ default: (params: FullScreenSlotParams) => any }>()\r\n\r\nconst nh = useNameHelper('full-screen')\r\n\r\nconst placeId = useId()\r\n\r\nconst isEntered = ref(false)\r\nconst zIndex = ref<number>()\r\nconst fullType = ref<FullScreenType>()\r\n\r\nconst full = computed(() => isEntered.value && fullType.value!)\r\nconst className = computed(() => [nh.b(), nh.bs('vars'), { [nh.bm('full')]: full.value }])\r\nconst transferTo = computed(() => (fullType.value === 'window' ? 'body' : ''))\r\n\r\nconst {\r\n  enter: browserEnter,\r\n  exit: browserExit,\r\n  target: wrapper,\r\n  full: browserFull,\r\n} = useFullScreen()\r\n\r\nwatch(browserFull, value => {\r\n  if (!value) {\r\n    isEntered.value = false\r\n    fullType.value = undefined\r\n  }\r\n})\r\nwatch(full, value => {\r\n  emitEvent(props.onToggle, value)\r\n})\r\n\r\nasync function enter(type: FullScreenType = 'window', customZIndex?: number) {\r\n  if (isEntered.value) {\r\n    await exit()\r\n  }\r\n\r\n  if (type !== 'window') {\r\n    await browserEnter()\r\n  }\r\n\r\n  isEntered.value = true\r\n  zIndex.value = customZIndex\r\n  fullType.value = type !== 'window' ? 'browser' : 'window'\r\n}\r\n\r\nasync function exit() {\r\n  await browserExit()\r\n\r\n  zIndex.value = undefined\r\n  isEntered.value = false\r\n  fullType.value = undefined\r\n}\r\n\r\nasync function toggle(type: FullScreenType = 'window', zIndex?: number) {\r\n  if (isEntered.value) {\r\n    if (fullType.value !== type) {\r\n      await enter(type, zIndex)\r\n    } else {\r\n      await exit()\r\n    }\r\n  } else {\r\n    await enter(type, zIndex)\r\n  }\r\n}\r\n\r\ndefineExpose({\r\n  full,\r\n  placeId,\r\n  wrapper,\r\n  enter,\r\n  exit,\r\n  toggle,\r\n})\r\n</script>\r\n\r\n<template>\r\n  <Portal :to=\"transferTo\">\r\n    <component\r\n      :is=\"props.tag || 'div'\"\r\n      v-bind=\"$attrs\"\r\n      ref=\"wrapper\"\r\n      :class=\"className\"\r\n      :style=\"{ [nh.cv('z-index')]: zIndex }\"\r\n    >\r\n      <slot\r\n        :full=\"full\"\r\n        :place-id=\"placeId\"\r\n        :enter=\"enter\"\r\n        :exit=\"exit\"\r\n        :toggle=\"toggle\"\r\n      ></slot>\r\n      <div :id=\"placeId\" :class=\"nh.be('place')\" role=\"none\"></div>\r\n    </component>\r\n  </Portal>\r\n</template>\r\n","import { computed, defineComponent, h, provide, reactive, toRef } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { gridProps } from './props'\r\nimport { GRID_STATE } from './symbol'\r\n\r\nimport type { CSSProperties } from 'vue'\r\nimport type { GridAlign, GridJustify, LayoutProp } from './symbol'\r\n\r\nconst numberRE = /^\\d+$/\r\n\r\nconst justifyList = Object.freeze<GridJustify[]>([\r\n  'start',\r\n  'end',\r\n  'center',\r\n  'space-around',\r\n  'space-between',\r\n  'space-evenly',\r\n])\r\nconst alignList = Object.freeze<GridAlign[]>(['top', 'middle', 'bottom', 'stretch'])\r\n\r\nexport default defineComponent({\r\n  name: 'Grid',\r\n  props: gridProps,\r\n  setup(_props, { slots }) {\r\n    const props = useProps('grid', _props, {\r\n      tag: 'div',\r\n      gap: 0,\r\n      rows: 'none',\r\n      columns: 24,\r\n      autoRows: 'auto',\r\n      autoColumns: 'auto',\r\n      dense: false,\r\n      justify: {\r\n        default: 'start',\r\n        validator: value => justifyList.includes(value),\r\n      },\r\n      align: {\r\n        default: 'stretch',\r\n        validator: value => alignList.includes(value),\r\n      },\r\n      cellFlex: false,\r\n    })\r\n\r\n    const nh = useNameHelper('grid')\r\n\r\n    const className = computed(() => {\r\n      return {\r\n        [nh.b()]: true,\r\n        [nh.bm(props.justify)]: true,\r\n        [nh.bm('inherit')]: props.inherit,\r\n        [nh.bm(props.align)]: props.align !== 'stretch',\r\n        [nh.bm('dense')]: props.dense,\r\n      }\r\n    })\r\n    const style = computed(() => {\r\n      const style: CSSProperties = {}\r\n\r\n      if (props.gap) {\r\n        style.gap = Array.isArray(props.gap)\r\n          ? `${props.gap[0]}px ${props.gap[1]}px`\r\n          : `${props.gap}px`\r\n      }\r\n\r\n      style.gridTemplateColumns = parseSizeLayout(props.columns)\r\n\r\n      if (props.rows !== 'none') {\r\n        style.gridTemplateRows = parseSizeLayout(props.rows)\r\n      }\r\n\r\n      if (props.autoRows !== 'auto') {\r\n        style.gridAutoRows = parseAutoLayout(props.autoRows)\r\n      }\r\n\r\n      if (props.autoColumns !== 'auto') {\r\n        style.gridAutoColumns = parseAutoLayout(props.autoColumns)\r\n      }\r\n\r\n      return style\r\n    })\r\n    const cellFlex = computed(() => {\r\n      if (props.cellFlex === true) {\r\n        return {\r\n          justify: 'start',\r\n          align: 'top',\r\n        } as const\r\n      } else if (props.cellFlex) {\r\n        return {\r\n          justify: 'start',\r\n          align: 'top',\r\n          ...props.cellFlex,\r\n        } as const\r\n      }\r\n\r\n      return false\r\n    })\r\n\r\n    provide(GRID_STATE, reactive({ cellFlex, columns: toRef(props, 'columns') }))\r\n\r\n    function parseSizeLayout(value: LayoutProp) {\r\n      if (typeof value === 'number') {\r\n        return `repeat(${value}, 1fr)`\r\n      }\r\n\r\n      if (typeof value === 'string') {\r\n        return numberRE.test(value.trim()) ? `repeat(${value}, 1fr)` : value\r\n      }\r\n\r\n      if (Array.isArray(value)) {\r\n        return value\r\n          .map(item => {\r\n            if (typeof item === 'number') {\r\n              return `${item}fr`\r\n            }\r\n\r\n            if (typeof item === 'string') {\r\n              return numberRE.test(item.trim()) ? `${item}fr` : item\r\n            }\r\n\r\n            return item\r\n          })\r\n          .join(' ')\r\n      }\r\n\r\n      return value\r\n    }\r\n\r\n    function parseAutoLayout(value: LayoutProp) {\r\n      if (typeof value === 'number') {\r\n        return `${value}fr`\r\n      }\r\n\r\n      if (typeof value === 'string') {\r\n        return numberRE.test(value.trim()) ? `repeat(${value}, 1fr)` : value\r\n      }\r\n\r\n      if (Array.isArray(value)) {\r\n        return value\r\n          .map(item => {\r\n            if (typeof item === 'number') {\r\n              return `${item}fr`\r\n            }\r\n\r\n            if (typeof item === 'string') {\r\n              return numberRE.test(item.trim()) ? `${item}fr` : item\r\n            }\r\n\r\n            return item\r\n          })\r\n          .join(' ')\r\n      }\r\n\r\n      return value\r\n    }\r\n\r\n    return () =>\r\n      h(\r\n        props.tag || 'div',\r\n        {\r\n          class: className.value,\r\n          style: style.value,\r\n        },\r\n        {\r\n          default: () => slots.default?.(),\r\n        },\r\n      )\r\n  },\r\n})\r\n","import { booleanProp, buildProps } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\n\r\nexport const highlightProps = buildProps({\r\n  content: String,\r\n  keyWords: Array as PropType<string[]>,\r\n  ignoreCase: booleanProp,\r\n})\r\n\r\nexport type HighlightProps = ExtractPropTypes<typeof highlightProps>\r\nexport type HighlightCProps = ConfigurableProps<HighlightProps, 'content' | 'keyWords'>\r\n","<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { highlightProps } from './props'\r\n\r\ndefineOptions({ name: 'Highlight' })\r\n\r\nconst _props = defineProps(highlightProps)\r\nconst props = useProps('highlight', _props, {\r\n  content: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  keyWords: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  ignoreCase: false,\r\n})\r\n\r\nconst nh = useNameHelper('highlight')\r\n\r\nconst splitRE = computed(() => {\r\n  const keyWords = props.keyWords?.filter(Boolean)\r\n\r\n  if (!keyWords?.length) {\r\n    return null\r\n  }\r\n\r\n  return new RegExp(\r\n    `(${keyWords.sort((p, n) => n.length - p.length).join('|')})`,\r\n    `${props.ignoreCase ? 'i' : ''}g`,\r\n  )\r\n})\r\nconst renderTexts = computed(() => {\r\n  if (!splitRE.value || !props.content) {\r\n    return [{ isKey: false, text: props.content }]\r\n  }\r\n\r\n  return props.content.split(splitRE.value).map(text => {\r\n    return { isKey: splitRE.value!.test(text), text }\r\n  })\r\n})\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"[nh.b(), nh.bs('vars'), props.inherit && nh.bm('inherit')]\">\r\n    <template v-for=\"(item, index) in renderTexts\" :key=\"index\">\r\n      <span v-if=\"item.isKey\" :class=\"nh.be('key-word')\">\r\n        <slot name=\"light\" :text=\"item.text\">\r\n          {{ item.text }}\r\n        </slot>\r\n      </span>\r\n      <span v-else>\r\n        <slot :text=\"item.text\">\r\n          {{ item.text }}\r\n        </slot>\r\n      </span>\r\n    </template>\r\n  </div>\r\n</template>\r\n","import { booleanNumberProp, booleanProp, buildProps, eventProp, localeProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type {\r\n  ViewerActionLayout,\r\n  ViewerState,\r\n  ViewerToolbarAction,\r\n  ViewerToolbarPlacement,\r\n} from './symbol'\r\n\r\nexport const viewerProps = buildProps({\r\n  locale: localeProp('viewer'),\r\n  width: [String, Number],\r\n  height: [String, Number],\r\n  moveDisabled: booleanProp,\r\n  zoomDisabled: booleanProp,\r\n  zoomDelta: Number,\r\n  zoomMin: Number,\r\n  zoomMax: Number,\r\n  flipDisabled: booleanProp,\r\n  rotateDisabled: booleanProp,\r\n  rotateDelta: Number,\r\n  fullDisabled: booleanProp,\r\n  toolbarPlacement: String as PropType<ViewerToolbarPlacement>,\r\n  actions: Array as PropType<ViewerToolbarAction[]>,\r\n  toolbarFade: booleanNumberProp,\r\n  noTransition: booleanProp,\r\n  centerScale: booleanProp,\r\n  actionLayout: Array as PropType<ViewerActionLayout>,\r\n  onMoveStart: eventProp<(state: ViewerState) => void>(),\r\n  onMove: eventProp<(state: ViewerState) => void>(),\r\n  onMoveEnd: eventProp<(state: ViewerState) => void>(),\r\n  onWheel: eventProp<(sign: 1 | -1, state: ViewerState) => void>(),\r\n  onRotate: eventProp<(deg: number, state: ViewerState) => void>(),\r\n  onFlipX: eventProp<(flip: boolean, state: ViewerState) => void>(),\r\n  onFlipY: eventProp<(flip: boolean, state: ViewerState) => void>(),\r\n  onZoom: eventProp<(zoom: number, state: ViewerState) => void>(),\r\n  onFull: eventProp<(full: boolean, state: ViewerState) => void>(),\r\n  onReset: eventProp<(state: ViewerState) => void>(),\r\n})\r\n\r\nexport type ViewerProps = ExtractPropTypes<typeof viewerProps>\r\nexport type ViewerCProps = ConfigurableProps<ViewerProps>\r\n","import type { ClassType, StyleType } from '@vexip-ui/config'\r\n\r\nexport type ViewerToolbarPlacement =\r\n  | 'top'\r\n  | 'top-start'\r\n  | 'top-end'\r\n  | 'bottom'\r\n  | 'bottom-start'\r\n  | 'bottom-end'\r\n  | 'left'\r\n  | 'left-start'\r\n  | 'left-end'\r\n  | 'right'\r\n  | 'right-start'\r\n  | 'right-end'\r\nexport type ViewerPresetAction =\r\n  | 'rotate-right'\r\n  | 'rotate-left'\r\n  | 'flip-x'\r\n  | 'flip-y'\r\n  | 'zoom-in'\r\n  | 'zoom-out'\r\n  | 'full-screen'\r\n  | 'full-screen-exit'\r\n  | 'reset'\r\nexport type ViewerActionName = ViewerPresetAction | (string & {})\r\nexport type ViewerActionLayout = ViewerActionName[][]\r\n\r\nexport interface ViewerState {\r\n  x: number,\r\n  y: number,\r\n  zoom: number,\r\n  rotate: number,\r\n  flipX: boolean,\r\n  flipY: boolean,\r\n  full: boolean,\r\n  moving: boolean,\r\n  [custom: string]: unknown,\r\n}\r\n\r\nexport interface ViewerToolbarAction {\r\n  name: string,\r\n  process: (state: ViewerState) => void,\r\n  icon?: Record<string, any> | (() => any),\r\n  iconRenderer?: (data: { state: ViewerState }) => any,\r\n  class?: ClassType | ((state: ViewerState) => string),\r\n  title?: string | ((state: ViewerState) => string),\r\n  iconScale?: number | ((state: ViewerState) => number),\r\n  iconStyle?: StyleType | ((state: ViewerState) => StyleType),\r\n  /** @deprecated */\r\n  divided?: boolean | ((state: ViewerState) => boolean),\r\n  hidden?: boolean | ((state: ViewerState) => boolean),\r\n  disabled?: boolean | ((state: ViewerState) => boolean),\r\n}\r\n\r\nexport const enum InternalActionName {\r\n  RotateRight = 'rotate-right',\r\n  RotateLeft = 'rotate-left',\r\n  FlipX = 'flip-x',\r\n  FlipY = 'flip-y',\r\n  ZoomIn = 'zoom-in',\r\n  ZoomOut = 'zoom-out',\r\n  FullScreen = 'full-screen',\r\n  Reset = 'reset',\r\n}\r\n\r\nconst defaultActionLayout: ViewerActionLayout = [\r\n  ['rotate-right', 'rotate-left'],\r\n  ['flip-x', 'flip-y'],\r\n  ['zoom-in', 'zoom-out'],\r\n  ['full-screen'],\r\n  ['reset'],\r\n]\r\n\r\nfor (let i = 0, len = defaultActionLayout.length; i < len; ++i) {\r\n  defaultActionLayout[i] = Object.freeze(defaultActionLayout[i]) as any\r\n}\r\n\r\nexport const viewerDefaultActionLayout = Object.freeze(defaultActionLayout) as ViewerActionLayout\r\n","<script setup lang=\"ts\">\r\nimport { Divider } from '@/components/divider'\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, h, nextTick, onMounted, reactive, ref, toRef } from 'vue'\r\n\r\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useFullScreen, useModifier, useMoving, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { boundRange, callIfFunc, toCssSize, toFixed } from '@vexip-ui/utils'\r\nimport { viewerProps } from './props'\r\nimport { InternalActionName, viewerDefaultActionLayout } from './symbol'\r\n\r\nimport type { ViewerActionLayout, ViewerState, ViewerToolbarAction } from './symbol'\r\n\r\ndefineOptions({ name: 'Viewer' })\r\n\r\nconst _props = defineProps(viewerProps)\r\nconst props = useProps('viewer', _props, {\r\n  locale: null,\r\n  width: '100%',\r\n  height: '100%',\r\n  moveDisabled: false,\r\n  zoomDisabled: false,\r\n  zoomDelta: 0.15,\r\n  zoomMin: 0.1,\r\n  zoomMax: Infinity,\r\n  rotateDisabled: false,\r\n  rotateDelta: 90,\r\n  flipDisabled: false,\r\n  fullDisabled: false,\r\n  toolbarPlacement: 'bottom',\r\n  actions: () => [],\r\n  toolbarFade: false,\r\n  noTransition: false,\r\n  centerScale: false,\r\n  actionLayout: () => [],\r\n})\r\n\r\ndefineSlots<{\r\n  default: (params: { state: ViewerState }) => any,\r\n  [action: `action-${string}`]: (params: { state: ViewerState }) => any,\r\n}>()\r\n\r\nconst nh = useNameHelper('viewer')\r\nconst locale = useLocale('viewer', toRef(props, 'locale'))\r\nconst icons = useIcons()\r\n\r\nconst { timer } = useSetTimeout()\r\nconst toolbarActive = ref(false)\r\n\r\nconst zoom = ref(1)\r\nconst rotate = ref(0)\r\nconst flipX = ref(false)\r\nconst flipY = ref(false)\r\n\r\nconst viewer = ref<HTMLElement>()\r\nconst transition = ref<HTMLElement>()\r\n\r\nconst { supported: fullSupported, full, enter: enterFull, exit: exitFull } = useFullScreen(viewer)\r\nconst {\r\n  target: container,\r\n  x: currentLeft,\r\n  y: currentTop,\r\n  moving,\r\n} = useMoving({\r\n  onStart: (_, event) => {\r\n    if (props.moveDisabled || event.button > 0) {\r\n      return false\r\n    }\r\n\r\n    emitEvent(props.onMoveStart, getState())\r\n  },\r\n  onMove: () => {\r\n    emitEvent(props.onMoveStart, getState())\r\n  },\r\n  onEnd: () => {\r\n    emitEvent(props.onMoveStart, getState())\r\n  },\r\n})\r\n\r\nconst state = reactive({\r\n  zoom,\r\n  rotate,\r\n  flipX,\r\n  flipY,\r\n  full,\r\n  moving,\r\n  x: currentLeft,\r\n  y: currentTop,\r\n}) as ViewerState\r\n\r\nconst zoomOrigin = {\r\n  x: 0,\r\n  y: 0,\r\n}\r\n\r\nuseModifier({\r\n  target: viewer,\r\n  passive: false,\r\n  onKeyDown: (event, modifier) => {\r\n    if (moving.value) return\r\n\r\n    if (modifier.up || modifier.down || modifier.left || modifier.right) {\r\n      event.preventDefault()\r\n\r\n      const current = modifier.up || modifier.down ? currentTop : currentLeft\r\n      const step = modifier.up || modifier.left ? -10 : 10\r\n\r\n      current.value += event.ctrlKey ? 5 * step : step\r\n\r\n      modifier.resetAll()\r\n    }\r\n  },\r\n})\r\n\r\nfunction getState() {\r\n  return state\r\n}\r\n\r\nfunction getActionProp<\r\n  K extends Exclude<keyof ViewerToolbarAction, 'name' | 'icon' | 'iconRenderer' | 'process'>,\r\n>(action: ViewerToolbarAction, prop: K) {\r\n  return callIfFunc(action[prop] as any, state) as Exclude<\r\n    ViewerToolbarAction[K],\r\n    (...args: any) => any\r\n  >\r\n}\r\n\r\nfunction getActionClass(name: string) {\r\n  return nh.be(name)\r\n}\r\n\r\nconst internalActions: ViewerToolbarAction[] = [\r\n  {\r\n    name: InternalActionName.RotateRight,\r\n    process: () => handleRotate(props.rotateDelta),\r\n    iconRenderer: () => h(Icon, icons.value.rotateRight),\r\n    class: getActionClass(InternalActionName.RotateRight),\r\n    title: () => locale.value.rotateRight,\r\n    hidden: () => props.rotateDisabled,\r\n  },\r\n  {\r\n    name: InternalActionName.RotateLeft,\r\n    process: () => handleRotate(-1 * props.rotateDelta),\r\n    iconRenderer: () => h(Icon, icons.value.rotateLeft),\r\n    class: getActionClass(InternalActionName.RotateLeft),\r\n    title: () => locale.value.rotateLeft,\r\n    hidden: () => props.rotateDisabled,\r\n  },\r\n  {\r\n    name: InternalActionName.FlipX,\r\n    process: () => toggleFlipX(),\r\n    iconRenderer: () => h(Icon, icons.value.flipX),\r\n    class: getActionClass(InternalActionName.FlipX),\r\n    title: () => locale.value.flipHorizontal,\r\n    hidden: () => props.flipDisabled,\r\n  },\r\n  {\r\n    name: InternalActionName.FlipY,\r\n    process: () => toggleFlipY(),\r\n    iconRenderer: () => h(Icon, icons.value.flipY),\r\n    class: getActionClass(InternalActionName.FlipY),\r\n    title: () => locale.value.flipVertical,\r\n    hidden: () => props.flipDisabled,\r\n  },\r\n  {\r\n    name: InternalActionName.ZoomIn,\r\n    process: () => handleZoom(props.zoomDelta),\r\n    iconRenderer: () => h(Icon, icons.value.zoomIn),\r\n    class: getActionClass(InternalActionName.ZoomIn),\r\n    title: () => locale.value.zoomIn,\r\n    hidden: () => props.zoomDisabled,\r\n  },\r\n  {\r\n    name: InternalActionName.ZoomOut,\r\n    process: () => handleZoom(-1 * props.zoomDelta),\r\n    iconRenderer: () => h(Icon, icons.value.zoonOut),\r\n    class: getActionClass(InternalActionName.ZoomOut),\r\n    title: () => locale.value.zoomOut,\r\n    hidden: () => props.zoomDisabled,\r\n  },\r\n  {\r\n    name: InternalActionName.FullScreen,\r\n    process: () => toggleFull(!full.value),\r\n    iconRenderer: () => h(Icon, full.value ? icons.value.resetScreen : icons.value.fullScreen),\r\n    class: getActionClass(InternalActionName.FullScreen),\r\n    title: () => (full.value ? locale.value.fullScreenExit : locale.value.fullScreen),\r\n    hidden: () => props.fullDisabled,\r\n  },\r\n  {\r\n    name: InternalActionName.Reset,\r\n    process: () => handleReset(),\r\n    iconRenderer: () => h(Icon, icons.value.refresh),\r\n    class: getActionClass(InternalActionName.Reset),\r\n    title: () => locale.value.reset,\r\n  },\r\n]\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm('draggable')]: !props.moveDisabled,\r\n    [nh.bm('resizable')]: !props.zoomDisabled,\r\n    [nh.bm('full')]: full.value,\r\n    [nh.bm('moving')]: moving.value,\r\n    [nh.bm('static')]: props.noTransition,\r\n  }\r\n})\r\nconst style = computed(() => {\r\n  return {\r\n    width: toCssSize(props.width),\r\n    height: toCssSize(props.height),\r\n  }\r\n})\r\nconst toolbarVertical = computed(() => {\r\n  const [layout] = props.toolbarPlacement.split('-')\r\n\r\n  return layout === 'left' || layout === 'right'\r\n})\r\nconst toolbarFade = computed(() => {\r\n  return typeof props.toolbarFade === 'number' ? props.toolbarFade : props.toolbarFade ? 1500 : 0\r\n})\r\nconst toolbarClass = computed(() => {\r\n  return {\r\n    [nh.be('toolbar')]: true,\r\n    [nh.bem('toolbar', 'active')]: toolbarFade.value < 300 || toolbarActive.value,\r\n    [nh.bem('toolbar', props.toolbarPlacement)]: true,\r\n    [nh.bem('toolbar', 'vertical')]: toolbarVertical.value,\r\n  }\r\n})\r\nconst contentStyle = computed(() => {\r\n  return {\r\n    transform: `translate3d(${currentLeft.value}px, ${currentTop.value}px, 0) scale(${zoom.value})`,\r\n  }\r\n})\r\nconst transitionStyle = computed(() => {\r\n  return {\r\n    transform: `scaleX(${flipX.value ? -1 : 1}) scaleY(${flipY.value ? -1 : 1}) rotate(${\r\n      rotate.value\r\n    }deg)`,\r\n  }\r\n})\r\nconst allActions = computed(() => {\r\n  const map = new Map<string, ViewerToolbarAction>()\r\n  const actions: ViewerToolbarAction[][] = []\r\n\r\n  internalActions.concat(props.actions).forEach(action => {\r\n    if (action.name) {\r\n      map.set(action.name, action)\r\n    }\r\n  })\r\n\r\n  let layout: ViewerActionLayout\r\n\r\n  if (!props.actionLayout?.length) {\r\n    layout = [...viewerDefaultActionLayout]\r\n\r\n    if (props.actions.length) {\r\n      layout.push(props.actions.map(action => action.name))\r\n    }\r\n  } else {\r\n    layout = props.actionLayout\r\n  }\r\n\r\n  for (const names of layout) {\r\n    const group = names.map(name => map.get(name)!).filter(Boolean)\r\n\r\n    group.length && actions.push(group)\r\n  }\r\n\r\n  return actions\r\n})\r\n\r\ndefineExpose({\r\n  moving,\r\n  fullSupported,\r\n  state,\r\n  viewer,\r\n  container,\r\n  transition,\r\n  handleRotate,\r\n  toggleFlipHorizontal: toggleFlipX,\r\n  toggleFlipVertical: toggleFlipY,\r\n  handleZoom,\r\n  toggleFull,\r\n  handleReset,\r\n})\r\n\r\nonMounted(() => {\r\n  if (container.value) {\r\n    const rect = container.value.getBoundingClientRect()\r\n\r\n    zoomOrigin.x = rect.left + rect.width * 0.5\r\n    zoomOrigin.y = rect.top + rect.height * 0.5\r\n  }\r\n})\r\n\r\nfunction handleWheel(event: WheelEvent) {\r\n  event.stopPropagation()\r\n  event.preventDefault()\r\n\r\n  const sign = event.deltaY > 0 ? -1 : 1\r\n\r\n  zoomOrigin.x = event.clientX\r\n  zoomOrigin.y = event.clientY\r\n\r\n  emitEvent(props.onWheel, sign, state)\r\n  handleZoom(sign * props.zoomDelta)\r\n}\r\n\r\nfunction handleRotate(deg: number, emit = true) {\r\n  if (props.rotateDisabled) return\r\n\r\n  rotate.value += deg\r\n\r\n  if (props.noTransition && rotate.value % 360 === 0) {\r\n    rotate.value = 0\r\n  }\r\n\r\n  emit && emitEvent(props.onRotate, deg, state)\r\n\r\n  if (props.noTransition) {\r\n    nextTick(normalizeProps)\r\n  }\r\n}\r\n\r\nfunction toggleFlipX(target = !flipX.value, emit = true) {\r\n  if (props.flipDisabled) return\r\n\r\n  flipX.value = target\r\n  emit && emitEvent(props.onFlipX, target, state)\r\n}\r\n\r\nfunction toggleFlipY(target = !flipY.value, emit = true) {\r\n  if (props.flipDisabled) return\r\n\r\n  flipY.value = target\r\n  emit && emitEvent(props.onFlipY, target, state)\r\n}\r\n\r\nfunction handleZoom(ratio: number, emit = true) {\r\n  if (props.zoomDisabled || !container.value || moving.value) return\r\n\r\n  const containerRect = container.value.getBoundingClientRect()\r\n  const { x, y } = zoomOrigin\r\n  const { offsetWidth, offsetHeight } = container.value\r\n  const prevZoom = zoom.value\r\n\r\n  zoom.value = toFixed(boundRange(zoom.value + ratio, props.zoomMin, props.zoomMax), 5)\r\n\r\n  const delta = zoom.value / prevZoom - 1\r\n  const originX = delta * offsetWidth * 0.5\r\n  const originY = delta * offsetHeight * 0.5\r\n\r\n  if (!props.centerScale) {\r\n    currentLeft.value -= delta * (x - containerRect.left - currentLeft.value) - originX\r\n    currentTop.value -= delta * (y - containerRect.top - currentTop.value) - originY\r\n  }\r\n\r\n  emit && emitEvent(props.onZoom, zoom.value, state)\r\n}\r\n\r\nasync function toggleFull(isFull = !full.value, emit = true) {\r\n  isFull ? await enterFull() : await exitFull()\r\n\r\n  emit && emitEvent(props.onFull, isFull, state)\r\n}\r\n\r\nfunction handleReset(emit = true) {\r\n  currentTop.value = 0\r\n  currentLeft.value = 0\r\n  rotate.value = 0\r\n  flipX.value = false\r\n  flipY.value = false\r\n  zoom.value = 1\r\n\r\n  emit && emitEvent(props.onReset, state)\r\n}\r\n\r\nfunction normalizeProps() {\r\n  if (props.noTransition) {\r\n    if (rotate.value % 360 === 0) {\r\n      rotate.value = 0\r\n    }\r\n\r\n    return\r\n  }\r\n\r\n  const queue: Array<() => void> = []\r\n\r\n  if (rotate.value % 360 === 0) {\r\n    queue.push(\r\n      () => {\r\n        if (transition.value) {\r\n          transition.value.style.transitionDuration = '0ms'\r\n        }\r\n      },\r\n      () => {\r\n        rotate.value = 0\r\n      },\r\n      () => {\r\n        if (transition.value) {\r\n          transition.value.style.transitionDuration = ''\r\n        }\r\n      },\r\n    )\r\n  }\r\n\r\n  const run = () => {\r\n    queue.shift()?.()\r\n    queue.length && requestAnimationFrame(run)\r\n  }\r\n\r\n  run()\r\n}\r\n\r\nfunction handleEnterToolbar() {\r\n  clearTimeout(timer.toolbarFade)\r\n  toolbarActive.value = true\r\n}\r\n\r\nfunction handleLeaveToolbar() {\r\n  clearTimeout(timer.toolbarFade)\r\n\r\n  if (toolbarFade.value >= 300) {\r\n    timer.toolbarFade = setTimeout(() => {\r\n      toolbarActive.value = false\r\n    }, toolbarFade.value)\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"viewer\"\r\n    :class=\"className\"\r\n    tabindex=\"0\"\r\n    :style=\"style\"\r\n  >\r\n    <div ref=\"container\" :class=\"nh.be('container')\" @wheel=\"handleWheel\">\r\n      <div :class=\"nh.be('content')\" :style=\"contentStyle\">\r\n        <div\r\n          ref=\"transition\"\r\n          :class=\"nh.be('transition')\"\r\n          :style=\"transitionStyle\"\r\n          @transitionend=\"normalizeProps\"\r\n        >\r\n          <slot :state=\"state\"></slot>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div\r\n      :class=\"toolbarClass\"\r\n      role=\"toolbar\"\r\n      @mouseenter=\"handleEnterToolbar\"\r\n      @mouseleave=\"handleLeaveToolbar\"\r\n    >\r\n      <template v-for=\"(group, index) in allActions\" :key=\"index\">\r\n        <template v-for=\"action in group\" :key=\"action.name\">\r\n          <template v-if=\"!getActionProp(action, 'hidden')\">\r\n            <button\r\n              type=\"button\"\r\n              :class=\"[\r\n                {\r\n                  [nh.be('action')]: true,\r\n                  [nh.bem('action', 'disabled')]: getActionProp(action, 'disabled'),\r\n                },\r\n                getActionProp(action, 'class'),\r\n              ]\"\r\n              :title=\"getActionProp(action, 'title')\"\r\n              @click.stop=\"action.process(state)\"\r\n            >\r\n              <slot :name=\"`action-${action.name}`\" :state=\"state\">\r\n                <Renderer\r\n                  v-if=\"action.iconRenderer\"\r\n                  :renderer=\"action.iconRenderer\"\r\n                  :data=\"state\"\r\n                ></Renderer>\r\n                <Icon\r\n                  v-else-if=\"action.icon\"\r\n                  :icon=\"action.icon\"\r\n                  :style=\"getActionProp(action, 'iconStyle')\"\r\n                  :scale=\"getActionProp(action, 'iconScale') || 1\"\r\n                ></Icon>\r\n                <template v-else>\r\n                  {{ action.name }}\r\n                </template>\r\n              </slot>\r\n            </button>\r\n          </template>\r\n        </template>\r\n        <Divider\r\n          v-if=\"index !== allActions.length - 1\"\r\n          inherit\r\n          :vertical=\"!toolbarVertical\"\r\n        ></Divider>\r\n      </template>\r\n    </div>\r\n  </div>\r\n</template>\r\n","import { booleanProp, booleanStringProp, buildProps, eventProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { ViewerProps } from '@/components/viewer'\r\nimport type {\r\n  ImageGroupSlots,\r\n  ImageObjectFit,\r\n  ImageSkeletonProps,\r\n  ImageSlots,\r\n  ImageViewerSlots,\r\n} from './symbol'\r\n\r\nexport const imageProps = buildProps({\r\n  src: String,\r\n  fallbackSrc: String,\r\n  alt: String,\r\n  fit: String as PropType<ImageObjectFit>,\r\n  width: [String, Number],\r\n  height: [String, Number],\r\n  imgAttrs: Object as PropType<Record<string, any>>,\r\n  lazy: booleanProp,\r\n  root: [String, Object, Function] as PropType<unknown>,\r\n  rootMargin: String,\r\n  preview: booleanProp,\r\n  skeleton: {\r\n    type: [Boolean, Object] as PropType<boolean | ImageSkeletonProps>,\r\n    default: null,\r\n  },\r\n  placeholder: String,\r\n  errorTip: String,\r\n  radius: Number,\r\n  border: booleanStringProp,\r\n  previewSrc: String,\r\n  viewerTransfer: booleanStringProp,\r\n  viewerProps: Object as PropType<ViewerProps>,\r\n  slots: Object as PropType<ImageSlots>,\r\n  onLoad: eventProp<(event: Event) => void>(),\r\n  onError: eventProp<(event: Event) => void>(),\r\n  onPreview: eventProp<(src: string) => void>(),\r\n})\r\n\r\nexport type ImageProps = ExtractPropTypes<typeof imageProps>\r\nexport type ImageCProps = ConfigurableProps<ExtractPropTypes<typeof imageProps>, 'src'>\r\n\r\nexport const imageGroupProps = buildProps({\r\n  showAll: booleanProp,\r\n  preview: booleanProp,\r\n  viewerTransfer: booleanStringProp,\r\n  slots: Object as PropType<ImageGroupSlots>,\r\n  onPreview: eventProp<(src: string, srcList: string[]) => void>(),\r\n})\r\n\r\nexport type ImageGroupProps = ExtractPropTypes<typeof imageGroupProps>\r\nexport type ImageGroupCProps = ConfigurableProps<ExtractPropTypes<typeof imageGroupProps>>\r\n\r\nexport const imageViewerProps = buildProps({\r\n  active: booleanProp,\r\n  index: Number,\r\n  srcList: [String, Array] as PropType<string | string[]>,\r\n  transfer: booleanStringProp,\r\n  viewerProps: Object as PropType<ViewerProps>,\r\n  slots: Object as PropType<ImageViewerSlots>,\r\n  onToggle: eventProp<(active: boolean) => void>(),\r\n  onChange: eventProp<(index: number, src: string) => void>(),\r\n  onPrev: eventProp<(index: number, src: string) => void>(),\r\n  onNext: eventProp<(index: number, src: string) => void>(),\r\n  onClose: eventProp(),\r\n  onShow: eventProp(),\r\n  onHide: eventProp(),\r\n})\r\n\r\nexport type ImageViewerProps = ExtractPropTypes<typeof imageViewerProps>\r\nexport type ImageViewerCProps = ConfigurableProps<ExtractPropTypes<typeof imageViewerProps>, 'srcs'>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Masker } from '@/components/masker'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { Viewer } from '@/components/viewer'\r\n\r\nimport { computed, ref, watch } from 'vue'\r\n\r\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { boundRange, ensureArray, isDefined } from '@vexip-ui/utils'\r\nimport { imageViewerProps } from './props'\r\n\r\nimport type { ImageViewerSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'ImageViewer' })\r\n\r\nconst _props = defineProps(imageViewerProps)\r\nconst props = useProps('imageViewer', _props, {\r\n  active: false,\r\n  index: 0,\r\n  srcList: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  transfer: false,\r\n  viewerProps: () => ({}),\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:active', 'update:index'])\r\n\r\ndefineSlots<ImageViewerSlots>()\r\n\r\nconst nh = useNameHelper('image-viewer')\r\nconst icons = useIcons()\r\n\r\nconst currentActive = ref(props.active)\r\nconst currentIndex = ref(props.index)\r\n\r\nconst viewer = ref<InstanceType<typeof Viewer>>()\r\n\r\nconst className = computed(() => {\r\n  return [nh.b(), nh.ns('image-vars'), props.inherit && nh.bm('inherit')]\r\n})\r\nconst srcArray = computed(() => ensureArray(isDefined(props.srcList) ? props.srcList : ''))\r\nconst prevDisabled = computed(() => currentIndex.value <= 0)\r\nconst nextDisabled = computed(() => currentIndex.value >= srcArray.value.length - 1)\r\n\r\nwatch(\r\n  () => props.active,\r\n  value => {\r\n    currentActive.value = value\r\n  },\r\n)\r\nwatch(\r\n  () => props.index,\r\n  value => {\r\n    currentIndex.value = value\r\n  },\r\n)\r\nwatch(() => srcArray.value.length, verifyIndex)\r\n\r\ndefineExpose({\r\n  currentActive,\r\n  currentIndex,\r\n  prevDisabled,\r\n  nextDisabled,\r\n  viewer,\r\n})\r\n\r\nfunction setActive(active: boolean) {\r\n  if (currentActive.value === active) return\r\n\r\n  currentActive.value = active\r\n\r\n  emit('update:active', active)\r\n  emitEvent(props.onToggle, active)\r\n}\r\n\r\nfunction verifyIndex() {\r\n  currentIndex.value = boundRange(currentIndex.value, 0, srcArray.value.length - 1)\r\n}\r\n\r\nfunction handleChange() {\r\n  const value = currentIndex.value\r\n\r\n  viewer.value?.handleReset()\r\n  emit('update:index', value)\r\n  emitEvent(props.onChange, value, srcArray.value[value])\r\n}\r\n\r\nfunction handlePrev() {\r\n  if (prevDisabled.value) return\r\n\r\n  const prev = currentIndex.value\r\n\r\n  currentIndex.value--\r\n  verifyIndex()\r\n  currentIndex.value !== prev && handleChange()\r\n  emitEvent(props.onPrev, currentIndex.value, srcArray.value[currentIndex.value])\r\n}\r\n\r\nfunction handleNext() {\r\n  if (nextDisabled.value) return\r\n\r\n  const prev = currentIndex.value\r\n\r\n  currentIndex.value++\r\n  verifyIndex()\r\n  currentIndex.value !== prev && handleChange()\r\n  emitEvent(props.onNext, currentIndex.value, srcArray.value[currentIndex.value])\r\n}\r\n\r\nfunction handleClose() {\r\n  setActive(false)\r\n  emitEvent(props.onClose)\r\n}\r\n\r\nfunction handleShow() {\r\n  emitEvent(props.onShow)\r\n}\r\n\r\nfunction handleHide() {\r\n  emitEvent(props.onHide)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <Masker\r\n    v-slot=\"{ show }\"\r\n    :active=\"currentActive\"\r\n    :inherit=\"props.inherit\"\r\n    :class=\"className\"\r\n    closable\r\n    auto-remove\r\n    :transfer=\"props.transfer\"\r\n    @show=\"handleShow\"\r\n    @hide=\"handleHide\"\r\n    @toggle=\"setActive\"\r\n  >\r\n    <div v-show=\"show\" :class=\"nh.be('wrapper')\">\r\n      <Viewer v-bind=\"props.viewerProps\" ref=\"viewer\">\r\n        <slot :src=\"srcArray[currentIndex]\">\r\n          <Renderer :renderer=\"props.slots.default\" :data=\"{ src: srcArray[currentIndex] }\">\r\n            <img :src=\"srcArray[currentIndex]\" />\r\n          </Renderer>\r\n        </slot>\r\n      </Viewer>\r\n      <template v-if=\"srcArray.length > 1\">\r\n        <button\r\n          type=\"button\"\r\n          :class=\"[nh.be('prev'), prevDisabled && nh.bem('prev', 'disabled')]\"\r\n          @click.stop=\"handlePrev\"\r\n        >\r\n          <slot name=\"prev\" :disabled=\"prevDisabled\">\r\n            <Renderer :renderer=\"props.slots.prev\" :data=\"{ disabled: prevDisabled }\">\r\n              <div :class=\"nh.be('prev-handler')\">\r\n                <Icon\r\n                  v-bind=\"icons.angleLeft\"\r\n                  :scale=\"+(icons.angleLeft.scale || 1) * 1.4\"\r\n                  label=\"prev\"\r\n                ></Icon>\r\n              </div>\r\n            </Renderer>\r\n          </slot>\r\n        </button>\r\n        <button\r\n          type=\"button\"\r\n          :class=\"[nh.be('next'), nextDisabled && nh.bem('next', 'disabled')]\"\r\n          @click.stop=\"handleNext\"\r\n        >\r\n          <slot name=\"next\" :disabled=\"nextDisabled\">\r\n            <Renderer :renderer=\"props.slots.next\" :data=\"{ disabled: nextDisabled }\">\r\n              <div :class=\"nh.be('next-handler')\">\r\n                <Icon\r\n                  v-bind=\"icons.angleRight\"\r\n                  :scale=\"+(icons.angleRight.scale || 1) * 1.4\"\r\n                  label=\"next\"\r\n                ></Icon>\r\n              </div>\r\n            </Renderer>\r\n          </slot>\r\n        </button>\r\n      </template>\r\n      <button type=\"button\" :class=\"nh.be('close')\" @click.stop=\"handleClose\">\r\n        <slot name=\"close\">\r\n          <Renderer :renderer=\"props.slots.close\">\r\n            <div :class=\"nh.be('close-handler')\">\r\n              <Icon\r\n                v-bind=\"icons.close\"\r\n                :scale=\"+(icons.close.scale || 1) * 1.4\"\r\n                label=\"close\"\r\n              ></Icon>\r\n            </div>\r\n          </Renderer>\r\n        </slot>\r\n      </button>\r\n    </div>\r\n  </Masker>\r\n</template>\r\n","import { booleanProp, booleanStringProp, buildProps, iconProp, sizeProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\n\r\nexport const skeletonProps = buildProps({\r\n  size: sizeProp,\r\n  width: [Number, String],\r\n  height: [Number, String],\r\n  repeat: Number,\r\n  tag: String,\r\n  activated: booleanProp,\r\n  image: booleanProp,\r\n  imageIcon: iconProp,\r\n  iconScale: Number,\r\n  round: booleanProp,\r\n  circle: booleanProp,\r\n  block: booleanProp,\r\n  spread: Number,\r\n  loading: booleanProp,\r\n})\r\n\r\nexport type SkeletonProps = ExtractPropTypes<typeof skeletonProps>\r\nexport type SkeletonCProps = ConfigurableProps<SkeletonProps>\r\n\r\nexport const skeletonGroupProps = buildProps({\r\n  size: sizeProp,\r\n  tag: booleanStringProp,\r\n  itemTag: String,\r\n  activated: booleanProp,\r\n  round: booleanProp,\r\n  circle: booleanProp,\r\n  block: booleanProp,\r\n  loading: booleanProp,\r\n})\r\n\r\nexport type SkeletonGroupProps = ExtractPropTypes<typeof skeletonGroupProps>\r\nexport type SkeletonGroupCProps = ConfigurableProps<SkeletonGroupProps>\r\n","import type { InjectionKey } from 'vue'\r\nimport type { ComponentSize } from '@vexip-ui/config'\r\n\r\nexport interface GroupState {\r\n  size: ComponentSize,\r\n  itemTag: string,\r\n  activated: boolean,\r\n  round: boolean,\r\n  circle: boolean,\r\n  block: boolean,\r\n  loading: boolean,\r\n}\r\n\r\nexport const GROUP_STATE = '__VXP_SKELETON_GROUP_STATE' as unknown as InjectionKey<GroupState>\r\n","import { Icon } from '@/components/icon'\r\n\r\nimport { computed, defineComponent, inject, renderSlot } from 'vue'\r\n\r\nimport { createIconProp, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { skeletonProps } from './props'\r\nimport { GROUP_STATE } from './symbol'\r\n\r\nexport default defineComponent({\r\n  name: 'Skeleton',\r\n  inheritAttrs: false,\r\n  props: skeletonProps,\r\n  setup(_props, { attrs, slots }) {\r\n    const props = useProps('skeleton', _props, {\r\n      size: null,\r\n      width: null,\r\n      height: null,\r\n      repeat: {\r\n        default: 1,\r\n        validator: (value: number) => value > 0,\r\n      },\r\n      tag: 'div',\r\n      activated: null,\r\n      image: false,\r\n      imageIcon: createIconProp(),\r\n      iconScale: 4,\r\n      round: null,\r\n      circle: null,\r\n      block: null,\r\n      spread: 0,\r\n      loading: null,\r\n    })\r\n\r\n    const groupState = inject(GROUP_STATE, {} as any)\r\n\r\n    const nh = useNameHelper('skeleton')\r\n    const icons = useIcons()\r\n\r\n    const activated = computed(() => {\r\n      return props.activated ?? groupState.activated ?? false\r\n    })\r\n    const round = computed(() => {\r\n      return props.round ?? groupState.round ?? false\r\n    })\r\n    const circle = computed(() => {\r\n      return props.circle ?? groupState.circle ?? false\r\n    })\r\n    const block = computed(() => {\r\n      return props.block ?? groupState.block ?? false\r\n    })\r\n    const loading = computed(() => {\r\n      return props.loading ?? groupState.loading ?? true\r\n    })\r\n    const tag = computed(() => {\r\n      return props.tag || groupState.itemTag || 'div'\r\n    })\r\n    const className = computed(() => {\r\n      return {\r\n        [nh.b()]: true,\r\n        [nh.bs('vars')]: true,\r\n        [nh.bm('inherit')]: Object.keys(groupState).length || props.inherit,\r\n        [nh.bm(props.size)]: props.size ?? groupState?.size,\r\n        [nh.bm('block')]: block.value,\r\n        [nh.bm('image')]: props.image,\r\n        [nh.bm('round')]: round.value && !circle.value,\r\n        [nh.bm('circle')]: circle.value,\r\n        [nh.bm('activated')]: activated.value,\r\n      }\r\n    })\r\n    const style = computed(() => {\r\n      const style: Record<string, string> = {}\r\n\r\n      if (props.width !== null) {\r\n        style[nh.cv('width')] = parseSize(props.width)\r\n      }\r\n\r\n      if (props.height !== null) {\r\n        style[nh.cv('height')] = parseSize(props.height)\r\n      }\r\n\r\n      if (props.spread) {\r\n        style[nh.cv('spread')] = parseSize(props.spread)\r\n      }\r\n\r\n      return style\r\n    })\r\n\r\n    function parseSize(value: string | number) {\r\n      if (typeof value === 'number') {\r\n        return `${value}px`\r\n      }\r\n\r\n      value = value.trim()\r\n\r\n      if (/\\d$/.test(value)) {\r\n        return `${value}px`\r\n      }\r\n\r\n      return value\r\n    }\r\n\r\n    function renderSkeleton() {\r\n      const Wrapper = tag.value || 'div'\r\n\r\n      return (\r\n        <Wrapper\r\n          {...attrs}\r\n          class={[className.value, attrs.class]}\r\n          style={[style.value, attrs.style]}\r\n        >\r\n          {props.image ? (\r\n            <Icon\r\n              {...icons.value.image}\r\n              icon={props.imageIcon || icons.value.image.icon}\r\n              scale={props.iconScale}\r\n            ></Icon>\r\n          ) : null}\r\n        </Wrapper>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      if (!loading.value) {\r\n        return renderSlot(slots, 'default')\r\n      }\r\n\r\n      if (props.repeat > 1) {\r\n        return Array.from({ length: props.repeat }, () => renderSkeleton())\r\n      }\r\n\r\n      return renderSkeleton()\r\n    }\r\n  },\r\n})\r\n","import type { InjectionKey } from 'vue'\r\nimport type { ClassType, StyleType } from '@vexip-ui/config'\r\nimport type { SkeletonProps } from '@/components/skeleton'\r\n\r\nexport type ImageObjectFit = 'fill' | 'contain' | 'cover' | 'none' | 'scale-down'\r\nexport type ImageSkeletonProps = Pick<\r\n  SkeletonProps,\r\n  'tag' | 'activated' | 'iconScale' | 'imageIcon'\r\n> & {\r\n  class?: ClassType,\r\n  StyleType?: StyleType,\r\n}\r\n\r\nexport interface ImageState {\r\n  src: string,\r\n  index: number,\r\n  total: number,\r\n}\r\n\r\nexport interface GroupState {\r\n  showAll: boolean,\r\n  preview: boolean,\r\n  increaseItem: (item: ImageState) => void,\r\n  decreaseItem: (item: ImageState) => void,\r\n  handlePreview: (item: ImageState) => void,\r\n}\r\n\r\nexport interface ImageSlots {\r\n  placeholder?: () => any,\r\n  error?: () => any,\r\n  preview?: (params: { src: string }) => any,\r\n}\r\n\r\nexport interface ImageGroupSlots {\r\n  /**\r\n   * @internal\r\n   */\r\n  default?: () => any,\r\n  preview?: (params: { src: string }) => any,\r\n}\r\n\r\nexport interface ImageViewerSlots {\r\n  default?: (params: { src: string }) => any,\r\n  prev?: (params: { disabled: boolean }) => any,\r\n  next?: (params: { disabled: boolean }) => any,\r\n  close?: () => any,\r\n}\r\n\r\nexport const GROUP_STATE = '__VXP_IMAGE_GROUP_STATE' as unknown as InjectionKey<GroupState>\r\n\r\nexport const objectFitValues = Object.freeze<ImageObjectFit[]>([\r\n  'fill',\r\n  'contain',\r\n  'cover',\r\n  'none',\r\n  'scale-down',\r\n])\r\n","<script setup lang=\"ts\">\r\nimport { ImageViewer } from '@/components/image-viewer'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { Skeleton } from '@/components/skeleton'\r\n\r\nimport { computed, inject, onBeforeUnmount, reactive, ref, watch, watchEffect } from 'vue'\r\n\r\nimport { emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useIntersection } from '@vexip-ui/hooks'\r\nimport { isClient, supportImgLoading, toCssSize } from '@vexip-ui/utils'\r\nimport { imageProps } from './props'\r\nimport { GROUP_STATE, objectFitValues } from './symbol'\r\n\r\nimport type { ImageSlots, ImageState } from './symbol'\r\n\r\nconst useImgLoading = supportImgLoading()\r\n\r\ndefineOptions({ name: 'Image' })\r\n\r\nconst _props = defineProps(imageProps)\r\nconst props = useProps('image', _props, {\r\n  src: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  fallbackSrc: '',\r\n  alt: '',\r\n  fit: {\r\n    default: 'cover',\r\n    validator: value => objectFitValues.includes(value),\r\n  },\r\n  width: '',\r\n  height: '',\r\n  imgAttrs: () => ({}),\r\n  lazy: false,\r\n  root: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  rootMargin: '',\r\n  preview: false,\r\n  skeleton: false,\r\n  placeholder: '',\r\n  errorTip: '',\r\n  radius: 0,\r\n  border: false,\r\n  previewSrc: '',\r\n  viewerTransfer: null,\r\n  viewerProps: () => ({}),\r\n  slots: () => ({}),\r\n})\r\n\r\nconst slots = defineSlots<ImageSlots>()\r\n\r\nconst groupState = inject(GROUP_STATE, null)\r\n\r\nconst nh = useNameHelper('image')\r\nconst locale = useLocale('image')\r\n\r\nconst showImg = ref(useImgLoading)\r\nconst loading = ref(showImg.value)\r\nconst currentSrc = ref('')\r\nconst loadFail = ref(false)\r\nconst fallbackFail = ref(false)\r\nconst viewerActive = ref(false)\r\nconst hidden = ref(false)\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nconst showError = computed(() => {\r\n  return loadFail.value && (!props.fallbackSrc || fallbackFail.value)\r\n})\r\nconst hasPreview = computed(() => !groupState && props.preview)\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('border')]: props.border,\r\n      [nh.bm('loading')]: loading.value,\r\n      [nh.bm('error')]: showError.value,\r\n      [nh.bm('preview')]: groupState?.preview || hasPreview.value,\r\n    },\r\n  ]\r\n})\r\nconst style = computed(() => {\r\n  const style: Record<string, string> = {\r\n    width: toCssSize(props.width),\r\n    height: toCssSize(props.height),\r\n    [nh.cv('fit')]: props.fit,\r\n    [nh.cv('radius')]: props.radius ? `${props.radius}px` : '',\r\n  }\r\n\r\n  if (props.border && typeof props.border === 'string') {\r\n    style[nh.cv('b-color')] = props.border\r\n  }\r\n\r\n  return style\r\n})\r\nconst imageSrc = computed(() => props.src || (props.imgAttrs?.src as string))\r\nconst imgLoading = computed(() => {\r\n  return hidden.value || (useImgLoading && props.lazy) ? 'lazy' : undefined\r\n})\r\nconst skeletonProps = computed(() => {\r\n  return typeof props.skeleton === 'object'\r\n    ? Object.assign({ activated: true }, props.skeleton)\r\n    : { activated: true }\r\n})\r\n\r\nwatch(imageSrc, value => {\r\n  loading.value = showImg.value\r\n  currentSrc.value = value\r\n  loadFail.value = false\r\n  fallbackFail.value = false\r\n})\r\nwatch(\r\n  () => props.fallbackSrc,\r\n  value => {\r\n    fallbackFail.value = false\r\n\r\n    if (loadFail.value) {\r\n      loading.value = showImg.value\r\n      currentSrc.value = value\r\n    }\r\n  },\r\n)\r\n\r\ncurrentSrc.value = imageSrc.value\r\n\r\nconst state: ImageState = reactive({\r\n  src: computed(() => props.previewSrc || currentSrc.value),\r\n  index: 0,\r\n  total: 0,\r\n})\r\n\r\nif (groupState) {\r\n  groupState.increaseItem(state)\r\n\r\n  const stopWatch = watchEffect(() => {\r\n    hidden.value = !groupState.showAll && state.index > 0\r\n  })\r\n\r\n  onBeforeUnmount(() => {\r\n    stopWatch()\r\n    groupState.decreaseItem(state)\r\n  })\r\n}\r\n\r\nif (!useImgLoading) {\r\n  let disconnect: (() => void) | undefined\r\n\r\n  const stopWatch = watchEffect(() => {\r\n    disconnect?.()\r\n    disconnect = undefined\r\n\r\n    if (!isClient) return\r\n\r\n    const root =\r\n      typeof props.root === 'string' ? document.querySelector(props.root) : (props.root as Element)\r\n\r\n    if (props.lazy) {\r\n      disconnect = useIntersection({\r\n        root: typeof root === 'object' ? root : document.documentElement,\r\n        rootMargin: props.rootMargin,\r\n        target: wrapper,\r\n        handler: () => {\r\n          disconnect?.()\r\n          disconnect = undefined\r\n          showImg.value = true\r\n          loading.value = true\r\n        },\r\n      }).disconnect\r\n    }\r\n  })\r\n\r\n  onBeforeUnmount(() => {\r\n    stopWatch()\r\n    disconnect?.()\r\n  })\r\n}\r\n\r\ndefineExpose({\r\n  loading,\r\n  fallbackFail,\r\n  viewerActive,\r\n  hidden,\r\n  wrapper,\r\n})\r\n\r\nfunction handleLoad(event: Event) {\r\n  loading.value = false\r\n\r\n  if (!props.fallbackSrc || currentSrc.value !== props.fallbackSrc) {\r\n    emitEvent(props.onLoad, event)\r\n  }\r\n}\r\n\r\nfunction handleError(event: Event) {\r\n  if (props.fallbackSrc) {\r\n    if (currentSrc.value === props.fallbackSrc) {\r\n      loading.value = false\r\n      fallbackFail.value = true\r\n\r\n      return\r\n    }\r\n\r\n    currentSrc.value = props.fallbackSrc\r\n  } else {\r\n    loading.value = false\r\n  }\r\n\r\n  loadFail.value = true\r\n  emitEvent(props.onError, event)\r\n}\r\n\r\nfunction handlePreview() {\r\n  if (!groupState) {\r\n    if (props.preview) {\r\n      viewerActive.value = true\r\n    }\r\n\r\n    emitEvent(props.onPreview, props.previewSrc || currentSrc.value)\r\n    return\r\n  }\r\n\r\n  groupState.handlePreview(state)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    v-show=\"!hidden\"\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"none\"\r\n    :style=\"style\"\r\n  >\r\n    <slot v-if=\"loading\" name=\"placeholder\">\r\n      <Renderer :renderer=\"props.slots.placeholder\">\r\n        <Skeleton\r\n          v-if=\"props.skeleton\"\r\n          v-bind=\"skeletonProps\"\r\n          :class=\"nh.be('skeleton')\"\r\n          image\r\n        ></Skeleton>\r\n        <template v-else>\r\n          <span :class=\"nh.be('placeholder')\">\r\n            {{ props.placeholder || locale.placeholder }}\r\n          </span>\r\n        </template>\r\n      </Renderer>\r\n    </slot>\r\n    <slot v-else-if=\"showError\" name=\"error\">\r\n      <Renderer :renderer=\"props.slots.error\">\r\n        <span :class=\"nh.be('error')\">\r\n          {{ props.errorTip || props.alt || locale.error }}\r\n        </span>\r\n      </Renderer>\r\n    </slot>\r\n    <img\r\n      v-if=\"showImg && !showError\"\r\n      v-bind=\"props.imgAttrs\"\r\n      :class=\"nh.be('img')\"\r\n      :src=\"currentSrc\"\r\n      :alt=\"props.alt\"\r\n      :width=\"props.width || undefined\"\r\n      :height=\"props.height || undefined\"\r\n      :loading=\"imgLoading\"\r\n      :aria-label=\"props.alt\"\r\n      @load=\"handleLoad\"\r\n      @error=\"handleError\"\r\n      @click=\"handlePreview\"\r\n    />\r\n    <ImageViewer\r\n      v-if=\"hasPreview\"\r\n      v-bind=\"viewerProps\"\r\n      v-model:active=\"viewerActive\"\r\n      :src-list=\"props.previewSrc || currentSrc\"\r\n      :transfer=\"props.viewerTransfer\"\r\n    >\r\n      <template v-if=\"slots.preview || props.slots.preview\" #default=\"{ src }\">\r\n        <slot name=\"preview\" :src=\"src\">\r\n          <Renderer :renderer=\"props.slots.preview\" :data=\"{ src }\"></Renderer>\r\n        </slot>\r\n      </template>\r\n    </ImageViewer>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { ImageViewer } from '@/components/image-viewer'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, provide, reactive, ref, toRef } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { debounceMinor } from '@vexip-ui/utils'\r\nimport { imageGroupProps } from './props'\r\nimport { GROUP_STATE } from './symbol'\r\n\r\nimport type { ImageGroupSlots, ImageState } from './symbol'\r\n\r\ndefineOptions({ name: 'ImageGroup' })\r\n\r\nconst _props = defineProps(imageGroupProps)\r\nconst props = useProps('imageGroup', _props, {\r\n  showAll: false,\r\n  preview: false,\r\n  viewerTransfer: null,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst slots = defineSlots<ImageGroupSlots>()\r\n\r\nconst nh = useNameHelper('image-group')\r\n\r\nconst currentActive = ref(false)\r\nconst currentIndex = ref(0)\r\nconst imageStates = reactive(new Set<ImageState>())\r\n\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.ns('image-vars'),\r\n    {\r\n      [nh.bm('preview')]: props.preview,\r\n    },\r\n  ]\r\n})\r\nconst srcList = computed(() => Array.from(imageStates).map(state => state.src))\r\n\r\nconst refreshIndex = debounceMinor(() => {\r\n  const total = imageStates.size\r\n\r\n  Array.from(imageStates).forEach((item, index) => {\r\n    item.index = index\r\n    item.total = total\r\n  })\r\n})\r\n\r\nprovide(\r\n  GROUP_STATE,\r\n  reactive({\r\n    showAll: toRef(props, 'showAll'),\r\n    preview: toRef(props, 'preview'),\r\n    increaseItem,\r\n    decreaseItem,\r\n    handlePreview,\r\n  }),\r\n)\r\n\r\ndefineExpose({ currentActive, currentIndex })\r\n\r\nfunction increaseItem(item: ImageState) {\r\n  imageStates.add(item)\r\n  refreshIndex()\r\n}\r\n\r\nfunction decreaseItem(item: ImageState) {\r\n  imageStates.delete(item)\r\n  refreshIndex()\r\n}\r\n\r\nfunction handlePreview(item: ImageState) {\r\n  currentIndex.value = item.index\r\n  currentActive.value = true\r\n\r\n  emitEvent(props.onPreview, item.src, Array.from(srcList.value))\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"className\">\r\n    <slot></slot>\r\n    <ImageViewer\r\n      v-if=\"props.preview\"\r\n      v-model:active=\"currentActive\"\r\n      v-model:index=\"currentIndex\"\r\n      :src-list=\"srcList\"\r\n      :transfer=\"props.viewerTransfer\"\r\n    >\r\n      <template v-if=\"slots.preview || props.slots.preview\" #default=\"{ src }\">\r\n        <slot name=\"preview\" :src=\"src\">\r\n          <Renderer :renderer=\"props.slots.preview\" :data=\"{ src }\"></Renderer>\r\n        </slot>\r\n      </template>\r\n    </ImageViewer>\r\n  </div>\r\n</template>\r\n","import { booleanProp, booleanStringProp, buildProps, eventProp, localeProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { BreakPoint } from '@/components/grid'\r\nimport type { MenuOptions } from '@/components/menu'\r\nimport type {\r\n  LayoutConfig,\r\n  LayoutFooterLink,\r\n  LayoutHeaderAction,\r\n  LayoutInnerClass,\r\n  LayoutMediaJudger,\r\n  LayoutMenuProps,\r\n  LayoutSignType,\r\n  LayoutUser,\r\n} from './symbol'\r\n\r\nconst breakpointProp = {\r\n  type: [String, Boolean, Function] as PropType<\r\n    boolean | BreakPoint | LayoutMediaJudger | (string & {})\r\n  >,\r\n  default: null,\r\n}\r\n\r\nexport const layoutProps = buildProps({\r\n  locale: localeProp('layout'),\r\n  noAside: booleanProp,\r\n  footer: booleanProp,\r\n  tag: String,\r\n  menus: Object as PropType<MenuOptions[]>,\r\n  menuProps: Object as PropType<LayoutMenuProps>,\r\n  logo: String,\r\n  signName: String,\r\n  config: Array as PropType<LayoutConfig[]>,\r\n  user: Object as PropType<LayoutUser>,\r\n  actions: Array as PropType<LayoutHeaderAction[]>,\r\n  expanded: booleanProp,\r\n  reduced: booleanProp,\r\n  avatarCircle: booleanProp,\r\n  signType: String as PropType<LayoutSignType>,\r\n  headerFixed: breakpointProp,\r\n  asideFixed: breakpointProp,\r\n  copyright: String,\r\n  links: Array as PropType<LayoutFooterLink[]>,\r\n  colors: Array as PropType<string[]>,\r\n  color: String,\r\n  miniHeaderSign: breakpointProp,\r\n  verticalLinks: breakpointProp,\r\n  darkMode: booleanProp,\r\n  fixedMain: booleanProp,\r\n  fitWindow: booleanProp,\r\n  innerClasses: Object as PropType<LayoutInnerClass>,\r\n  noHeader: booleanProp,\r\n  noMasker: booleanProp,\r\n  onExpandedChange: eventProp<(expanded: boolean) => void>(),\r\n  onReducedChange: eventProp<(reduced: boolean) => void>(),\r\n  onSignClick: eventProp<(event: MouseEvent) => void>(),\r\n  onMenuSelect: eventProp<(label: string, meta: any) => void>(),\r\n  onUserAction: eventProp<(label: string, meta: any) => void>(),\r\n  onNavChange: eventProp<(type: LayoutSignType) => void>(),\r\n  onColorChange: eventProp<(color: string) => void>(),\r\n  onToggleTheme: eventProp<(isDark: boolean) => void>(),\r\n  onContentResize: eventProp<() => void>(),\r\n})\r\n\r\nexport type LayoutProps = ExtractPropTypes<typeof layoutProps>\r\nexport type LayoutCProps = ConfigurableProps<LayoutProps, 'menus'>\r\n\r\nexport const layoutAsideProps = buildProps({\r\n  tag: String,\r\n  expanded: booleanProp,\r\n  reduced: booleanProp,\r\n  menus: Array as PropType<MenuOptions[]>,\r\n  menuProps: Object as PropType<LayoutMenuProps>,\r\n  logo: String,\r\n  signName: String,\r\n  fixed: booleanStringProp,\r\n  signType: String as PropType<LayoutSignType>,\r\n  onExpandedChange: eventProp<(expanded: boolean) => void>(),\r\n  onReducedChange: eventProp<(reduced: boolean) => void>(),\r\n  onSignClick: eventProp<(event: MouseEvent) => void>(),\r\n  onMenuSelect: eventProp<(label: string, meta: any) => void>(),\r\n})\r\n\r\nexport type LayoutAsideProps = ExtractPropTypes<typeof layoutAsideProps>\r\nexport type LayoutAsideCProps = ConfigurableProps<LayoutAsideProps, 'menus'>\r\n\r\nexport const layoutHeaderProps = buildProps({\r\n  locale: localeProp('layout'),\r\n  tag: String,\r\n  logo: String,\r\n  signName: String,\r\n  user: Object as PropType<LayoutUser>,\r\n  userDropped: booleanProp,\r\n  avatarCircle: booleanProp,\r\n  config: Array as PropType<LayoutConfig[]>,\r\n  actions: Array as PropType<LayoutHeaderAction[]>,\r\n  signType: String as PropType<LayoutSignType>,\r\n  colors: Array as PropType<string[]>,\r\n  color: String,\r\n  menus: Object as PropType<MenuOptions[]>,\r\n  menuProps: Object as PropType<LayoutMenuProps>,\r\n  darkMode: booleanProp,\r\n  onNavChange: eventProp<(type: LayoutSignType) => void>(),\r\n  onColorChange: eventProp<(color: string) => void>(),\r\n  onUserAction: eventProp<(label: string, meta: any) => void>(),\r\n  onSignClick: eventProp<(event: MouseEvent) => void>(),\r\n  onDroppedChange: eventProp<(target: boolean) => void>(),\r\n  onExpandedChange: eventProp<(expanded: boolean) => void>(),\r\n  onReducedChange: eventProp<(reduced: boolean) => void>(),\r\n  onMenuSelect: eventProp<(label: string, meta: any) => void>(),\r\n  onToggleTheme: eventProp<(isDark: boolean) => void>(),\r\n})\r\n\r\nexport type LayoutHeaderProps = ExtractPropTypes<typeof layoutHeaderProps>\r\nexport type LayoutHeaderCProps = ConfigurableProps<LayoutHeaderProps, 'user' | 'menus'>\r\n\r\nexport const layoutMainProps = buildProps({\r\n  tag: String,\r\n  fixed: booleanProp,\r\n})\r\n\r\nexport type LayoutMainProps = ExtractPropTypes<typeof layoutMainProps>\r\nexport type LayoutMainCProps = ConfigurableProps<LayoutMainProps>\r\n\r\nexport const layoutFooterProps = buildProps({\r\n  tag: String,\r\n  copyright: String,\r\n  links: Array as PropType<LayoutFooterLink[]>,\r\n  verticalLinks: booleanStringProp,\r\n})\r\n\r\nexport type LayoutFooterProps = ExtractPropTypes<typeof layoutFooterProps>\r\nexport type LayoutFooterCProps = ConfigurableProps<LayoutFooterProps>\r\n","import type { ComponentPublicInstance, InjectionKey } from 'vue'\r\nimport type { Router } from 'vue-router'\r\nimport type { IconMinorProps } from '@/components/icon'\r\nimport type { MenuExposed, MenuGroupType, MenuMarkerType } from '@/components/menu'\r\nimport type { NativeScrollExposed } from '@/components/native-scroll'\r\nimport type { ClassType } from '@vexip-ui/config'\r\nimport type { BreakPoint } from '@/components/grid'\r\n\r\nexport type LayoutSignType = 'aside' | 'header'\r\nexport type LayoutConfig = 'nav' | 'color' | 'theme'\r\nexport type LayoutSection =\r\n  | 'wrapper'\r\n  | 'section'\r\n  | 'header'\r\n  | 'headerLeft'\r\n  | 'headerMain'\r\n  | 'headerRight'\r\n  | 'headerUser'\r\n  | 'sidebar'\r\n  | 'aside'\r\n  | 'asideTop'\r\n  | 'asideMain'\r\n  | 'asideBottom'\r\n  | 'expandHandler'\r\n  | 'main'\r\n  | 'footer'\r\n  | 'footerLinks'\r\n  | 'copyright'\r\n  | 'scrollbar'\r\n\r\nexport type LayoutInnerClass = Partial<Record<LayoutSection, ClassType>>\r\nexport type LayoutMediaJudger = (breakpoint: BreakPoint) => boolean\r\n\r\nexport interface LayoutMenuProps {\r\n  active?: string,\r\n  accordion?: boolean,\r\n  markerType?: MenuMarkerType,\r\n  groupType?: MenuGroupType,\r\n  tooltipReverse?: boolean,\r\n  router?: Router,\r\n  manualRoute?: boolean,\r\n  onExpand?: (label: string, meta: Record<string, any>) => void,\r\n  onReduce?: (label: string, meta: Record<string, any>) => void,\r\n}\r\n\r\nexport interface LayoutHeaderAction {\r\n  label: string,\r\n  icon?: Record<string, any>,\r\n  iconProps?: IconMinorProps,\r\n  name?: string,\r\n  disabled?: boolean,\r\n  divided?: boolean,\r\n  hidden?: boolean,\r\n  meta?: Record<string, any>,\r\n}\r\n\r\nexport interface LayoutUser {\r\n  name: string,\r\n  email?: string,\r\n  avatar?: string | Record<string, any>,\r\n}\r\n\r\nexport interface LayoutFooterLink {\r\n  name: string,\r\n  subname?: string,\r\n  icon?: Record<string, any>,\r\n  iconProps?: IconMinorProps,\r\n  to?: string,\r\n  target?: string,\r\n  children?: Array<Omit<LayoutFooterLink, 'children'>>,\r\n}\r\n\r\nexport interface LayoutState {\r\n  isLayout: boolean,\r\n  locked: boolean,\r\n  affixed: boolean,\r\n  scrollY: number,\r\n  affixMatched: boolean,\r\n  expandMatched: boolean,\r\n  useExpand: boolean,\r\n  expanded: boolean,\r\n  reduced: boolean,\r\n  navConfig: boolean,\r\n  classes: LayoutInnerClass,\r\n  changeInLock: (doChange: () => void) => void,\r\n}\r\n\r\nexport interface LayoutSlotParams {\r\n  expanded: boolean,\r\n  reduced: boolean,\r\n  toggleExpanded: (expanded?: boolean) => void,\r\n  toggleReduced: (reduced: boolean) => void,\r\n}\r\n\r\nexport interface LayoutHeaderSlotParams extends LayoutSlotParams {\r\n  handleColorChange: (color: string) => void,\r\n  toggleUserDropped: (dropped?: boolean) => void,\r\n}\r\n\r\nexport interface LayoutExposed extends ComponentPublicInstance {\r\n  scroll?: NativeScrollExposed,\r\n  menu?: MenuExposed,\r\n  toggleExpanded: (expanded?: boolean) => void,\r\n  toggleReduced: (reduced?: boolean) => void,\r\n  expandMenuByLabel: (label: string) => void,\r\n}\r\n\r\nexport interface LayoutHeaderExposed extends ComponentPublicInstance {\r\n  menu?: MenuExposed,\r\n  toggleExpanded: (expanded?: boolean) => void,\r\n  toggleReduced: (reduced?: boolean) => void,\r\n  expandMenuByLabel: (label: string) => void,\r\n  toggleUserDropped: (dropped: boolean) => void,\r\n}\r\n\r\nexport interface LayoutMainExposed extends ComponentPublicInstance {}\r\n\r\nexport interface LayoutAsideExposed extends ComponentPublicInstance {\r\n  menu?: MenuExposed,\r\n  toggleExpanded: (expanded?: boolean) => void,\r\n  toggleReduced: (reduced?: boolean) => void,\r\n  expandMenuByLabel: (label: string) => void,\r\n}\r\n\r\nexport const LAYOUT_STATE = '___VXP_LAYOUT_STATE' as unknown as InjectionKey<LayoutState>\r\n","import { currentBreakPoint } from '@/components/grid'\r\n\r\nimport { computed, inject, onBeforeUnmount, onMounted, onUpdated, reactive, ref, watch } from 'vue'\r\n\r\nimport { adjustAlpha, isClient, mixColor, noop, parseColorToRgba, toFixed } from '@vexip-ui/utils'\r\nimport { LAYOUT_STATE } from './symbol'\r\n\r\nimport type { Ref } from 'vue'\r\nimport type { Color } from '@vexip-ui/utils'\r\nimport type { BreakPoint } from '@/components/grid'\r\nimport type { LayoutMediaJudger, LayoutState } from './symbol'\r\n\r\nconst rootEl = isClient ? document.documentElement : undefined\r\nconst rootStyle = rootEl && getComputedStyle(rootEl)\r\n\r\nexport function computeSeriesColors(value: Color) {\r\n  if (!rootEl || !rootStyle) return\r\n\r\n  const colors: Record<string, string[]> = {\r\n    light: [],\r\n    opacity: [],\r\n    dark: [],\r\n  }\r\n  const black = parseColorToRgba(\r\n    rootStyle.getPropertyValue('--vxp-color-black') || { r: 0, g: 0, b: 0, a: 1 },\r\n  )\r\n  const white = parseColorToRgba(\r\n    rootStyle.getPropertyValue('--vxp-color-white') || { r: 255, g: 255, b: 255, a: 1 },\r\n  )\r\n  const style = rootEl.style\r\n\r\n  for (let i = 1; i < 10; ++i) {\r\n    const light = mixColor(white, value, i * 0.1).toString()\r\n    const opacity = adjustAlpha(value, toFixed(1 - i * 0.1, 1)).toString()\r\n\r\n    style.setProperty(`--vxp-color-primary-light-${i}`, light)\r\n    style.setProperty(`--vxp-color-primary-opacity-${i}`, opacity)\r\n\r\n    colors.light.push(light)\r\n    colors.opacity.push(opacity)\r\n  }\r\n\r\n  for (let i = 1; i < 3; ++i) {\r\n    const dark = mixColor(black, value, i * 0.1).toString()\r\n\r\n    style.setProperty(`--vxp-color-primary-dark-${i}`, dark)\r\n    colors.dark.push(dark)\r\n  }\r\n\r\n  style.setProperty('--vxp-color-primary-base', `${value}`)\r\n\r\n  return colors\r\n}\r\n\r\nexport function useLayoutState() {\r\n  return inject(\r\n    LAYOUT_STATE,\r\n    reactive({\r\n      isLayout: false,\r\n      locked: false,\r\n      affixed: false,\r\n      scrollY: 0,\r\n      affixMatched: false,\r\n      expandMatched: false,\r\n      useExpand: false,\r\n      expanded: false,\r\n      reduced: false,\r\n      navConfig: false,\r\n      classes: Object.freeze({}),\r\n      changeInLock: noop,\r\n    }) as LayoutState,\r\n  )\r\n}\r\n\r\nconst breakPoints = Object.freeze<BreakPoint[]>(['xs', 'sm', 'md', 'lg', 'xl', 'xxl'])\r\n\r\nexport function useMediaQuery(query: Ref<boolean | string | LayoutMediaJudger>) {\r\n  const matched = ref(false)\r\n  const updateTrigger = ref(0)\r\n\r\n  const computedStyle = isClient && getComputedStyle(document.documentElement)\r\n  const computedQuery = computed(() => {\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n    updateTrigger.value\r\n\r\n    if (typeof query.value !== 'function' && breakPoints.includes(query.value as any)) {\r\n      const usedQuery = query.value === 'xs' ? 'sm' : query.value\r\n\r\n      if (usedQuery === currentBreakPoint.value) return true\r\n\r\n      const media =\r\n        computedStyle && computedStyle.getPropertyValue(`--vxp-break-point-${usedQuery}`).trim()\r\n\r\n      return media && `only screen and ${media}`\r\n    }\r\n\r\n    return query.value\r\n  })\r\n\r\n  let isMounted = false\r\n  let mediaQuery: MediaQueryList | undefined\r\n\r\n  const update = () => {\r\n    if (typeof computedQuery.value === 'boolean') {\r\n      matched.value = computedQuery.value\r\n      return\r\n    }\r\n\r\n    if (!computedQuery.value || computedQuery.value === 'min') {\r\n      matched.value = false\r\n      return\r\n    }\r\n\r\n    if (computedQuery.value === 'max') {\r\n      matched.value = true\r\n      return\r\n    }\r\n\r\n    if (typeof computedQuery.value === 'function') {\r\n      matched.value = computedQuery.value(currentBreakPoint.value)\r\n      return\r\n    }\r\n\r\n    if (isMounted) {\r\n      mediaQuery = matchMedia(computedQuery.value)\r\n      mediaQuery?.addEventListener('change', update)\r\n    }\r\n\r\n    matched.value = mediaQuery!.matches\r\n  }\r\n\r\n  watch(computedQuery, () => {\r\n    update()\r\n  })\r\n\r\n  onMounted(() => {\r\n    ++updateTrigger.value\r\n    isMounted = true\r\n    update()\r\n  })\r\n\r\n  onBeforeUnmount(() => {\r\n    isMounted = false\r\n    mediaQuery?.removeEventListener('change', update)\r\n    mediaQuery = undefined\r\n  })\r\n\r\n  return matched\r\n}\r\n\r\nexport function useUpdateCounter() {\r\n  const counter = ref(0)\r\n\r\n  onMounted(() => {\r\n    counter.value++\r\n  })\r\n  onUpdated(() => {\r\n    counter.value++\r\n  })\r\n\r\n  return counter\r\n}\r\n","import { computed, defineComponent } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { layoutMainProps } from './props'\r\nimport { useLayoutState } from './helper'\r\n\r\nexport default defineComponent({\r\n  name: 'LayoutMain',\r\n  props: layoutMainProps,\r\n  setup(_props, { slots }) {\r\n    const props = useProps('layoutMain', _props, {\r\n      tag: 'main',\r\n      fixed: false,\r\n    })\r\n\r\n    const nh = useNameHelper('layout')\r\n    const state = useLayoutState()\r\n\r\n    const className = computed(() => {\r\n      return [nh.be('main'), props.fixed && nh.bem('main', 'fixed'), state.classes.main]\r\n    })\r\n\r\n    return () => {\r\n      const CustomTag = (props.tag || 'main') as any\r\n\r\n      return <CustomTag class={className.value}>{slots.default?.()}</CustomTag>\r\n    }\r\n  },\r\n})\r\n","import { booleanProp, booleanStringProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { RouteLocationRaw, Router } from 'vue-router'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { IconMinorProps } from '@/components/icon'\r\nimport type { MenuGroupType, MenuItemSlots, MenuMarkerType, MenuOptions, MenuSlots } from './symbol'\r\n\r\nexport const menuProps = buildProps({\r\n  active: String,\r\n  accordion: booleanProp,\r\n  markerType: String as PropType<MenuMarkerType>,\r\n  reduced: booleanProp,\r\n  horizontal: booleanProp,\r\n  transfer: booleanStringProp,\r\n  trigger: String as PropType<'hover' | 'click'>,\r\n  groupType: String as PropType<MenuGroupType>,\r\n  tooltipReverse: booleanProp,\r\n  options: Array as PropType<MenuOptions[]>,\r\n  router: Object as PropType<Router>,\r\n  manualRoute: booleanProp,\r\n  indent: [String, Number],\r\n  arrow: iconProp,\r\n  slots: Object as PropType<MenuSlots>,\r\n  onSelect: eventProp<(label: string, meta: any) => void>(),\r\n  onExpand: eventProp<(label: string, meta: any) => void>(),\r\n  onReduce: eventProp<(label: string, meta: any) => void>(),\r\n})\r\n\r\nexport type MenuProps = ExtractPropTypes<typeof menuProps>\r\nexport type MenuCProps = ConfigurableProps<MenuProps>\r\n\r\nexport const menuItemProps = buildProps({\r\n  label: String,\r\n  icon: iconProp,\r\n  iconProps: Object as PropType<IconMinorProps>,\r\n  disabled: booleanProp,\r\n  transfer: booleanStringProp,\r\n  trigger: String as PropType<'hover' | 'click'>,\r\n  transitionName: String,\r\n  meta: Object,\r\n  children: Array as PropType<MenuOptions[]>,\r\n  route: [String, Object] as PropType<RouteLocationRaw>,\r\n  arrow: iconProp,\r\n  slots: Object as PropType<MenuItemSlots>,\r\n  onSelect: eventProp(),\r\n})\r\n\r\nexport type MenuItemProps = ExtractPropTypes<typeof menuItemProps>\r\nexport type MenuItemCProps = ConfigurableProps<MenuItemProps, 'children'>\r\n\r\nexport const menuGroupProps = buildProps({\r\n  label: String,\r\n  children: Array as PropType<MenuOptions[]>,\r\n})\r\n\r\nexport type MenuGroupProps = ExtractPropTypes<typeof menuGroupProps>\r\n","import type { ComponentPublicInstance, InjectionKey, VNode } from 'vue'\r\nimport type { RouteLocationRaw } from 'vue-router'\r\nimport type { IconMinorProps } from '@/components/icon'\r\n\r\nexport type MenuMarkerType = 'top' | 'right' | 'bottom' | 'left' | 'none'\r\nexport type MenuGroupType = 'collapse' | 'dropdown'\r\n\r\nexport interface MenuOptions {\r\n  label: string,\r\n  icon?: Record<string, any> | (() => any),\r\n  iconProps?: IconMinorProps,\r\n  name?: string | (() => string),\r\n  disabled?: boolean,\r\n  group?: boolean,\r\n  meta?: Record<string, any>,\r\n  route?: RouteLocationRaw,\r\n  children?: MenuOptions[],\r\n}\r\n\r\nexport interface MenuItemState {\r\n  el: Readonly<HTMLElement | null | undefined>,\r\n  label: Readonly<string>,\r\n  indent: Readonly<number>,\r\n  groupExpanded: boolean,\r\n  showGroup: Readonly<boolean>,\r\n  isUsePopper: Readonly<boolean>,\r\n  parentState: MenuItemState | null,\r\n  transfer: Readonly<boolean | string>,\r\n  cachedExpanded: boolean,\r\n  updateSonSelected(selected: boolean, upstream?: boolean): void,\r\n  toggleGroupExpanded(expanded: boolean, upward?: boolean): void,\r\n  handleMouseEnter(): void,\r\n  handleMouseLeave(): void,\r\n}\r\n\r\nexport interface MenuGroupState {\r\n  indent: number,\r\n}\r\n\r\nexport interface MenuState {\r\n  horizontal: boolean,\r\n  accordion: boolean,\r\n  groupType: MenuGroupType,\r\n  tooltipReverse: boolean,\r\n  currentActive: string,\r\n  isReduced: boolean,\r\n  transfer: boolean | string,\r\n  trigger: 'hover' | 'click',\r\n  markerType: MenuMarkerType,\r\n  arrow: Record<string, any> | (() => any),\r\n  handleSelect(label: string, meta: Record<string, any>, route?: RouteLocationRaw): void,\r\n  handleExpand(label: string, expanded: boolean, meta: Record<string, any>): void,\r\n  increaseItem(state: MenuItemState): void,\r\n  decreaseItem(state: MenuItemState): void,\r\n  doForEachItem(cb: (item: MenuItemState) => void): void,\r\n  renderItemArrow: (params: MenuArrowSlotParams, renderDefault: () => VNode) => void,\r\n}\r\n\r\nexport interface MenuArrowSlotParams {\r\n  groupExpanded: boolean,\r\n  sonSelected: boolean,\r\n}\r\n\r\nexport interface MenuSlots {\r\n  /**\r\n   * @internal\r\n   */\r\n  default?: () => any,\r\n  arrow?: (params: MenuArrowSlotParams) => any,\r\n}\r\n\r\nexport interface MenuItemSlots {\r\n  /**\r\n   * @internal\r\n   */\r\n  default?: () => any,\r\n  /**\r\n   * @internal\r\n   */\r\n  icon?: () => any,\r\n  /**\r\n   * @internal\r\n   */\r\n  group?: () => any,\r\n  arrow?: (params: MenuArrowSlotParams) => any,\r\n}\r\n\r\nexport interface MenuExposed extends ComponentPublicInstance {\r\n  expandItemByLabel: (label: string) => void,\r\n}\r\n\r\nexport interface MenuItemExposed extends ComponentPublicInstance {\r\n  groupExpanded: boolean,\r\n  isGroup: boolean,\r\n  showGroup: boolean,\r\n  isUsePopper: boolean,\r\n  handleSelect: () => void,\r\n  handleMouseEnter: () => void,\r\n  handleMouseLeave: () => void,\r\n}\r\n\r\nexport const MENU_ITEM_STATE = '__VXP_MENU_ITEM_STATE' as unknown as InjectionKey<MenuItemState>\r\nexport const MENU_GROUP_STATE = '__VXP_MENU_GROUP_STATE' as unknown as InjectionKey<MenuGroupState>\r\nexport const MENU_STATE = '__VXP_MENU_STATE' as unknown as InjectionKey<MenuState>\r\n","import { CollapseTransition } from '@/components/collapse-transition'\r\nimport { Icon } from '@/components/icon'\r\nimport { Popper } from '@/components/popper'\r\nimport { Tooltip } from '@/components/tooltip'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport {\r\n  computed,\r\n  defineAsyncComponent,\r\n  defineComponent,\r\n  inject,\r\n  nextTick,\r\n  onBeforeUnmount,\r\n  // onMounted,\r\n  provide,\r\n  reactive,\r\n  ref,\r\n  renderSlot,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport {\r\n  createIconProp,\r\n  emitEvent,\r\n  useHoverDelay,\r\n  useIcons,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { useClickOutside, usePopper, useRtl, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { callIfFunc } from '@vexip-ui/utils'\r\nimport { menuItemProps } from './props'\r\nimport { MENU_GROUP_STATE, MENU_ITEM_STATE, MENU_STATE } from './symbol'\r\n\r\n// For types build\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nimport type { RouteLocationRaw } from 'vue-router'\r\nimport type { PopperExposed } from '@/components/popper'\r\nimport type { Placement } from '@vexip-ui/hooks'\r\nimport type { MenuOptions } from './symbol'\r\n\r\nconst MenuGroup = defineAsyncComponent(() => import('./menu-group'))\r\n\r\nconst MenuItem = defineComponent({\r\n  name: 'MenuItem',\r\n  props: menuItemProps,\r\n  emits: [],\r\n  setup(_props, { slots, expose }) {\r\n    const props = useProps('menuItem', _props, {\r\n      label: {\r\n        default: null,\r\n        static: true,\r\n      },\r\n      icon: createIconProp(),\r\n      iconProps: null,\r\n      disabled: false,\r\n      transfer: null,\r\n      trigger: null,\r\n      transitionName: null,\r\n      meta: null,\r\n      children: {\r\n        default: () => [],\r\n        static: true,\r\n      },\r\n      route: null,\r\n      arrow: null,\r\n      slots: () => ({}),\r\n    })\r\n\r\n    const menuState = inject(MENU_STATE, null)\r\n    const parentItemState = inject(MENU_ITEM_STATE, null)\r\n    const groupState = inject(MENU_GROUP_STATE, null)\r\n\r\n    const nh = useNameHelper('menu')\r\n    const icons = useIcons()\r\n    const hoverDelay = useHoverDelay()\r\n\r\n    const { isRtl } = useRtl()\r\n\r\n    const baseClass = nh.be('item')\r\n    const placement = ref<Placement>(isRtl.value ? 'left-start' : 'right-start')\r\n    const groupExpanded = ref(false)\r\n    const selected = ref(false)\r\n    const sonSelected = ref(false)\r\n    const popperShow = ref(false)\r\n\r\n    const indent = computed(() => (parentItemState?.indent ?? 0) + 1)\r\n    const propTransfer = computed(() => props.transfer ?? menuState?.transfer ?? false)\r\n    const inTransfer = computed(() => (parentItemState ? parentItemState.transfer : false))\r\n    const transfer = computed(() => !inTransfer.value && propTransfer.value)\r\n    const markerType = computed(() => menuState?.markerType || 'right')\r\n\r\n    const wrapper = useClickOutside(handleClickOutside)\r\n    const popper = ref<PopperExposed>()\r\n    const { reference, transferTo, updatePopper } = usePopper({\r\n      placement,\r\n      transfer,\r\n      wrapper,\r\n      popper: computed(() => popper.value?.wrapper),\r\n      shift: { crossAxis: true },\r\n    })\r\n\r\n    const isGroup = computed(() => !!(slots.group || props.children?.length))\r\n    const showGroup = computed(() => isGroup.value && groupExpanded.value)\r\n    const className = computed(() => {\r\n      return {\r\n        [baseClass]: true,\r\n        [`${baseClass}--disabled`]: props.disabled,\r\n        [`${baseClass}--group-visible`]: showGroup.value,\r\n        [`${baseClass}--selected`]: selected.value,\r\n        [`${baseClass}--no-icon`]: !props.icon,\r\n        [`${baseClass}--son-selected`]: sonSelected.value,\r\n      }\r\n    })\r\n    const labelStyle = computed(() => {\r\n      if (menuState?.horizontal || parentItemState?.isUsePopper) {\r\n        return {}\r\n      }\r\n\r\n      const indentWidth = nh.gcv('indent-width')\r\n      const multiplier =\r\n        indent.value + (menuState?.isReduced ? 0 : (groupState?.indent ?? 0)) * 0.25\r\n\r\n      return {\r\n        paddingInlineStart:\r\n          parentItemState && parentItemState.isUsePopper\r\n            ? undefined\r\n            : `calc(${indentWidth} * ${multiplier})`,\r\n      }\r\n    })\r\n    const isUsePopper = computed(() => {\r\n      return (\r\n        (menuState && (menuState.horizontal || menuState.groupType === 'dropdown')) ||\r\n        (isGroup.value && menuState?.isReduced && !parentItemState) ||\r\n        !!parentItemState?.isUsePopper\r\n      )\r\n    })\r\n    const tooltipDisabled = computed(() => {\r\n      return (\r\n        isGroup.value || !!(parentItemState?.isUsePopper || (menuState && !menuState.isReduced))\r\n      )\r\n    })\r\n    const tooltipReverse = computed(() => !!menuState?.tooltipReverse)\r\n    const isHorizontal = computed(() => menuState?.horizontal && !parentItemState)\r\n    const transition = computed(() => {\r\n      return (props.transitionName ?? isHorizontal.value) ? nh.ns('drop') : nh.ns('zoom')\r\n    })\r\n    const dropTrigger = computed(() => props.trigger || menuState?.trigger || 'hover')\r\n\r\n    const itemState = reactive({\r\n      el: wrapper,\r\n      label: toRef(props, 'label'),\r\n      indent,\r\n      groupExpanded,\r\n      showGroup,\r\n      isUsePopper,\r\n      parentState: parentItemState,\r\n      transfer: computed(() => inTransfer.value || propTransfer.value),\r\n      cachedExpanded: groupExpanded.value,\r\n      updateSonSelected,\r\n      toggleGroupExpanded,\r\n      handleMouseEnter,\r\n      handleMouseLeave,\r\n    })\r\n\r\n    provide(MENU_ITEM_STATE, itemState)\r\n\r\n    watch(\r\n      showGroup,\r\n      value => {\r\n        if (value && isUsePopper.value) {\r\n          popperShow.value = true\r\n          updatePopper()\r\n        }\r\n      },\r\n      { immediate: true },\r\n    )\r\n    watch(selected, value => {\r\n      if (value) {\r\n        emitEvent(props.onSelect)\r\n      }\r\n\r\n      menuState?.doForEachItem(item => item.updateSonSelected(false, false))\r\n      value &&\r\n        nextTick(() => {\r\n          parentItemState?.updateSonSelected(value)\r\n        })\r\n    })\r\n    watch(groupExpanded, expanded => {\r\n      if (typeof menuState?.handleExpand === 'function') {\r\n        menuState.handleExpand(props.label, expanded, props.meta || {})\r\n      }\r\n    })\r\n    watch(\r\n      isHorizontal,\r\n      value => {\r\n        placement.value = value ? 'bottom' : isRtl.value ? 'left-start' : 'right-start'\r\n      },\r\n      { immediate: true },\r\n    )\r\n\r\n    if (menuState) {\r\n      watch(\r\n        [() => props.label, () => menuState.currentActive],\r\n        () => {\r\n          selected.value = props.label === menuState.currentActive\r\n        },\r\n        { immediate: true },\r\n      )\r\n\r\n      if (typeof menuState.increaseItem === 'function') {\r\n        menuState.increaseItem(itemState)\r\n      }\r\n    }\r\n\r\n    onBeforeUnmount(() => {\r\n      if (typeof menuState?.decreaseItem === 'function') {\r\n        menuState.decreaseItem(itemState)\r\n      }\r\n    })\r\n\r\n    expose({\r\n      groupExpanded,\r\n      isGroup,\r\n      showGroup,\r\n      isUsePopper,\r\n      handleSelect,\r\n      handleMouseEnter,\r\n      handleMouseLeave,\r\n    })\r\n\r\n    function updateSonSelected(selected: boolean, upstream = true) {\r\n      sonSelected.value = selected\r\n      upstream && parentItemState?.updateSonSelected(selected)\r\n    }\r\n\r\n    const { timer } = useSetTimeout()\r\n\r\n    function handleSelect() {\r\n      clearTimeout(timer.hover)\r\n\r\n      if (props.disabled) return\r\n\r\n      if (isGroup.value) {\r\n        if (isUsePopper.value && dropTrigger.value !== 'click') return\r\n\r\n        menuState?.doForEachItem(item => {\r\n          if (menuState.accordion) {\r\n            item.groupExpanded = false\r\n          }\r\n        })\r\n        groupExpanded.value = !groupExpanded.value\r\n      } else {\r\n        if (isUsePopper.value) {\r\n          toggleGroupExpanded(false, true)\r\n        }\r\n\r\n        if (menuState) {\r\n          menuState.handleSelect(props.label, props.meta || {}, props.route)\r\n        }\r\n\r\n        selected.value = true\r\n      }\r\n    }\r\n\r\n    function toggleGroupExpanded(expanded: boolean, upward = false) {\r\n      clearTimeout(timer.hover)\r\n\r\n      menuState?.doForEachItem(item => {\r\n        if (menuState.accordion) {\r\n          item.groupExpanded = false\r\n        }\r\n      })\r\n      groupExpanded.value = expanded\r\n\r\n      if (upward && typeof parentItemState?.toggleGroupExpanded === 'function') {\r\n        parentItemState.toggleGroupExpanded(expanded, upward)\r\n      }\r\n    }\r\n\r\n    let mouseInList = false\r\n    let reproduce = false\r\n\r\n    function handleMouseEnter() {\r\n      clearTimeout(timer.hover)\r\n\r\n      if (mouseInList || !isUsePopper.value || dropTrigger.value !== 'hover') return\r\n\r\n      if (!groupExpanded.value && popperShow.value) {\r\n        reproduce = true\r\n        return\r\n      }\r\n\r\n      if (typeof parentItemState?.handleMouseEnter === 'function') {\r\n        parentItemState.handleMouseEnter()\r\n      }\r\n\r\n      if (props.disabled || !isGroup.value) return\r\n\r\n      timer.hover = setTimeout(() => {\r\n        groupExpanded.value = true\r\n      }, hoverDelay.value)\r\n    }\r\n\r\n    function handleMouseLeave() {\r\n      clearTimeout(timer.hover)\r\n\r\n      if (mouseInList || !popperShow.value || !isUsePopper.value || dropTrigger.value !== 'hover') {\r\n        return\r\n      }\r\n\r\n      if (typeof parentItemState?.handleMouseLeave === 'function') {\r\n        parentItemState.handleMouseLeave()\r\n      }\r\n\r\n      if (props.disabled || !isGroup.value) return\r\n\r\n      timer.hover = setTimeout(() => {\r\n        groupExpanded.value = false\r\n      }, hoverDelay.value)\r\n    }\r\n\r\n    function handleClickOutside() {\r\n      if (isUsePopper.value && dropTrigger.value === 'click') {\r\n        nextTick(() => {\r\n          groupExpanded.value = false\r\n        })\r\n      }\r\n    }\r\n\r\n    function handlePopperHide() {\r\n      popperShow.value = false\r\n      groupExpanded.value = false\r\n\r\n      if (reproduce) {\r\n        reproduce = false\r\n\r\n        if (typeof parentItemState?.handleMouseEnter === 'function') {\r\n          parentItemState.handleMouseEnter()\r\n        }\r\n\r\n        if (props.disabled || !isGroup.value) return\r\n\r\n        groupExpanded.value = true\r\n      }\r\n    }\r\n\r\n    function handleKeySelect(event: KeyboardEvent) {\r\n      const key = event.code || event.key\r\n\r\n      if (key === 'Enter' || key === 'NumpadEnter') {\r\n        event.stopPropagation()\r\n        handleSelect()\r\n      } else if (key === 'Space') {\r\n        event.stopPropagation()\r\n        event.preventDefault()\r\n        handleSelect()\r\n      }\r\n    }\r\n\r\n    function renderChildren() {\r\n      if (!props.children?.length) {\r\n        return null\r\n      }\r\n\r\n      const renderItem = (item: MenuOptions) => (\r\n        <MenuItem\r\n          label={item.label}\r\n          icon={item.icon}\r\n          icon-props={item.iconProps}\r\n          disabled={item.disabled}\r\n          children={item.children}\r\n          route={item.route}\r\n          meta={item.meta}\r\n        >\r\n          {item.name ? callIfFunc(item.name) : item.label}\r\n        </MenuItem>\r\n      )\r\n\r\n      return props.children.map(child => {\r\n        if (child.group) {\r\n          return (\r\n            <MenuGroup key={child.label} label={child.name ? callIfFunc(child.name) : child.label}>\r\n              {child.children?.map(renderItem)}\r\n            </MenuGroup>\r\n          )\r\n        }\r\n\r\n        return renderItem(child)\r\n      })\r\n    }\r\n\r\n    function renderArrow() {\r\n      const params = { groupExpanded: groupExpanded.value, sonSelected: sonSelected.value }\r\n      const icon = props.arrow || menuState?.arrow || icons.value.angleDown.icon\r\n      const renderDefault = () => (\r\n        <Renderer renderer={props.slots.arrow} data={params}>\r\n          <Icon\r\n            {...icons.value.angleDown}\r\n            icon={icon}\r\n            class={{\r\n              [nh.be('arrow')]: true,\r\n              [nh.bem('arrow', 'visible')]: groupExpanded.value,\r\n              [nh.bem('arrow', 'son-selected')]: sonSelected.value,\r\n            }}\r\n          ></Icon>\r\n        </Renderer>\r\n      )\r\n\r\n      return menuState ? menuState.renderItemArrow(params, renderDefault) : renderDefault()\r\n    }\r\n\r\n    function renderLabel() {\r\n      return (\r\n        <Tooltip\r\n          placement={isRtl.value ? 'left' : 'right'}\r\n          reverse={tooltipReverse.value}\r\n          shift\r\n          transfer\r\n          disabled={tooltipDisabled.value}\r\n        >\r\n          {{\r\n            trigger: () => (\r\n              <div\r\n                ref={reference}\r\n                class={{\r\n                  [nh.be('label')]: true,\r\n                  [nh.bem('label', `marker-${markerType.value}`)]: true,\r\n                  [nh.bem('label', 'in-popper')]: parentItemState?.isUsePopper,\r\n                }}\r\n                role={'menuitem'}\r\n                tabindex={0}\r\n                aria-disabled={props.disabled ? 'true' : undefined}\r\n                style={labelStyle.value}\r\n                onClick={handleSelect}\r\n                onKeydown={handleKeySelect}\r\n                onMouseenter={handleMouseEnter}\r\n                onMouseleave={handleMouseLeave}\r\n              >\r\n                {(slots.icon || props.icon) && (\r\n                  <div class={nh.be('icon')}>\r\n                    {slots.icon ? (\r\n                      renderSlot(slots, 'icon')\r\n                    ) : (\r\n                      <Icon {...props.iconProps} icon={props.icon}></Icon>\r\n                    )}\r\n                  </div>\r\n                )}\r\n                <span\r\n                  class={{\r\n                    [nh.be('title')]: true,\r\n                    [nh.bem('title', 'in-group')]: !isHorizontal.value && isGroup.value,\r\n                  }}\r\n                >\r\n                  {slots.default ? renderSlot(slots, 'default') : props.label}\r\n                </span>\r\n                {isGroup.value &&\r\n                  renderSlot(\r\n                    slots,\r\n                    'arrow',\r\n                    { groupExpanded: groupExpanded.value, sonSelected: sonSelected.value },\r\n                    () => [renderArrow()],\r\n                  )}\r\n              </div>\r\n            ),\r\n            default: () => (\r\n              <span class={nh.be('tooltip-title')}>\r\n                {slots.default ? renderSlot(slots, 'default') : props.label}\r\n              </span>\r\n            ),\r\n          }}\r\n        </Tooltip>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      return (\r\n        <li ref={wrapper} class={className.value} role={'none'}>\r\n          {renderLabel()}\r\n          <CollapseTransition appear>\r\n            {isGroup.value && !isUsePopper.value && (\r\n              <ul v-show={showGroup.value} class={nh.be('list')}>\r\n                {slots.group ? renderSlot(slots, 'group') : renderChildren()}\r\n              </ul>\r\n            )}\r\n          </CollapseTransition>\r\n          {isGroup.value && isUsePopper.value && (\r\n            <Popper\r\n              ref={popper}\r\n              class={[\r\n                nh.be('popper'),\r\n                nh.bs('vars'),\r\n                isHorizontal.value && nh.bem('popper', 'drop'),\r\n              ]}\r\n              visible={popperShow.value && showGroup.value}\r\n              alive={!transferTo.value || popperShow.value}\r\n              to={transferTo.value}\r\n              transition={transition.value}\r\n              onAfterLeave={handlePopperHide}\r\n              onMouseenter={() => ((mouseInList = true), handleMouseEnter())}\r\n              onMouseleave={() => ((mouseInList = false), handleMouseLeave())}\r\n            >\r\n              <ul class={nh.be('list')}>\r\n                {slots.group ? renderSlot(slots, 'group') : renderChildren()}\r\n              </ul>\r\n            </Popper>\r\n          )}\r\n        </li>\r\n      )\r\n    }\r\n  },\r\n})\r\n\r\n// eslint-disable-next-line vue/require-direct-export\r\nexport default MenuItem\r\n","import { MenuItem } from '@/components/menu-item'\r\n\r\nimport { computed, defineComponent, inject, provide, reactive, ref, renderSlot } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { callIfFunc } from '@vexip-ui/utils'\r\nimport { MENU_GROUP_STATE, MENU_ITEM_STATE, MENU_STATE } from './symbol'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { MenuOptions } from './symbol'\r\n\r\nconst MenuGroup = defineComponent({\r\n  name: 'MenuGroup',\r\n  props: {\r\n    label: String,\r\n    children: Array as PropType<MenuOptions[]>,\r\n  },\r\n  setup(_props, { slots }) {\r\n    const props = useProps('menuGroup', _props, {\r\n      label: {\r\n        default: '',\r\n        static: true,\r\n      },\r\n      children: {\r\n        default: () => [],\r\n        static: true,\r\n      },\r\n    })\r\n\r\n    const menuState = inject(MENU_STATE, null)\r\n    const parentItemState = inject(MENU_ITEM_STATE, null)\r\n\r\n    const nh = useNameHelper('menu-group')\r\n    const menuNh = useNameHelper('menu')\r\n    const indent = ref(1)\r\n\r\n    if (parentItemState) {\r\n      indent.value = parentItemState.indent + 1\r\n    }\r\n\r\n    const titleStyle = computed(() => {\r\n      return {\r\n        paddingLeft: parentItemState?.isUsePopper\r\n          ? undefined\r\n          : `calc(${menuNh.gcv('indent-width')} * ${indent.value})`,\r\n      }\r\n    })\r\n    const onlyShowSlot = computed(() => {\r\n      return menuState?.horizontal && !parentItemState\r\n    })\r\n\r\n    provide(MENU_GROUP_STATE, reactive({ indent }))\r\n\r\n    function renderChildren() {\r\n      return renderSlot(slots, 'default', {}, () => {\r\n        if (!props.children?.length) {\r\n          return []\r\n        }\r\n\r\n        const renderItem = (item: MenuOptions) => (\r\n          <MenuItem\r\n            label={item.label}\r\n            icon={item.icon}\r\n            icon-props={item.iconProps}\r\n            disabled={item.disabled}\r\n            children={item.children}\r\n            route={item.route}\r\n            meta={item.meta}\r\n          >\r\n            {item.name ? callIfFunc(item.name) : item.label}\r\n          </MenuItem>\r\n        )\r\n\r\n        return props.children.map(child => {\r\n          if (child.group) {\r\n            return (\r\n              <MenuGroup\r\n                key={child.label}\r\n                label={child.name ? callIfFunc(child.name) : child.label}\r\n              >\r\n                {child.children?.map(renderItem)}\r\n              </MenuGroup>\r\n            )\r\n          }\r\n\r\n          return renderItem(child)\r\n        })\r\n      })\r\n    }\r\n\r\n    return () => {\r\n      if (onlyShowSlot.value) {\r\n        return slots.default?.()\r\n      }\r\n\r\n      return (\r\n        <li class={nh.b()}>\r\n          <div class={nh.be('label')}>\r\n            <span class={nh.be('title')} style={titleStyle.value}>\r\n              {slots.label ? slots.label() : props.label}\r\n            </span>\r\n          </div>\r\n          <ul class={nh.be('list')}>{renderChildren()}</ul>\r\n        </li>\r\n      )\r\n    }\r\n  },\r\n})\r\n\r\n// eslint-disable-next-line vue/require-direct-export\r\nexport default MenuGroup\r\n","import { Icon } from '@/components/icon'\r\nimport { MenuItem } from '@/components/menu-item'\r\nimport { Popper } from '@/components/popper'\r\n\r\nimport { computed, defineComponent, inject, nextTick, provide, reactive, ref, watch } from 'vue'\r\n\r\nimport { useHoverDelay, useIcons, useNameHelper } from '@vexip-ui/config'\r\nimport { useClickOutside, usePopper, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { callIfFunc } from '@vexip-ui/utils'\r\nimport { MENU_ITEM_STATE, MENU_STATE } from './symbol'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { PopperExposed } from '@/components/popper'\r\nimport type { MenuOptions } from './symbol'\r\n\r\nexport default defineComponent({\r\n  name: 'MenuRest',\r\n  props: {\r\n    menus: {\r\n      type: Array as PropType<MenuOptions[]>,\r\n      default: () => [],\r\n    },\r\n  },\r\n  setup(props) {\r\n    const menuState = inject(MENU_STATE, null)\r\n\r\n    const nh = useNameHelper('menu')\r\n    const icons = useIcons()\r\n    const hoverDelay = useHoverDelay()\r\n\r\n    const groupExpanded = ref(false)\r\n    const sonSelected = ref(false)\r\n    const popperShow = ref(false)\r\n\r\n    const transfer = computed(() => menuState?.transfer ?? false)\r\n    const dropTrigger = computed(() => menuState?.trigger || 'hover')\r\n\r\n    const wrapper = useClickOutside(handleClickOutside)\r\n    const popper = ref<PopperExposed>()\r\n    const { reference, transferTo, updatePopper } = usePopper({\r\n      placement: ref('bottom'),\r\n      transfer,\r\n      wrapper,\r\n      popper: computed(() => popper.value?.wrapper),\r\n    })\r\n\r\n    const itemState = reactive({\r\n      el: wrapper,\r\n      label: '',\r\n      indent: 1,\r\n      groupExpanded,\r\n      showGroup: groupExpanded,\r\n      isUsePopper: true,\r\n      parentState: null,\r\n      transfer,\r\n      cachedExpanded: false,\r\n      updateSonSelected,\r\n      toggleGroupExpanded,\r\n      handleMouseEnter,\r\n      handleMouseLeave,\r\n    })\r\n\r\n    provide(MENU_ITEM_STATE, itemState)\r\n\r\n    watch(groupExpanded, value => {\r\n      if (value) {\r\n        popperShow.value = true\r\n        updatePopper()\r\n      }\r\n    })\r\n\r\n    function updateSonSelected(selected: boolean) {\r\n      sonSelected.value = selected\r\n    }\r\n\r\n    function toggleGroupExpanded(expanded: boolean) {\r\n      groupExpanded.value = expanded\r\n    }\r\n\r\n    const { timer } = useSetTimeout()\r\n\r\n    let mouseInList = false\r\n    let reproduce = false\r\n\r\n    function handleMouseEnter() {\r\n      clearTimeout(timer.hover)\r\n\r\n      if (mouseInList || dropTrigger.value !== 'hover') return\r\n\r\n      if (!groupExpanded.value && popperShow.value) {\r\n        reproduce = true\r\n        return\r\n      }\r\n\r\n      timer.hover = setTimeout(() => {\r\n        groupExpanded.value = true\r\n      }, hoverDelay.value)\r\n    }\r\n\r\n    function handleMouseLeave() {\r\n      clearTimeout(timer.hover)\r\n\r\n      if (mouseInList || !popperShow.value || dropTrigger.value !== 'hover') return\r\n\r\n      timer.hover = setTimeout(() => {\r\n        groupExpanded.value = false\r\n      }, hoverDelay.value)\r\n    }\r\n\r\n    function handleClick() {\r\n      if (dropTrigger.value === 'click') {\r\n        groupExpanded.value = true\r\n      }\r\n    }\r\n\r\n    function handleClickOutside() {\r\n      if (dropTrigger.value === 'click') {\r\n        nextTick(() => {\r\n          groupExpanded.value = false\r\n        })\r\n      }\r\n    }\r\n\r\n    function handlePopperHide() {\r\n      popperShow.value = false\r\n      groupExpanded.value = false\r\n\r\n      if (reproduce) {\r\n        reproduce = false\r\n        groupExpanded.value = true\r\n      }\r\n    }\r\n\r\n    function renderMenuItems() {\r\n      if (!props.menus?.length) {\r\n        return null\r\n      }\r\n\r\n      return props.menus.map(item => (\r\n        <MenuItem\r\n          key={item.label}\r\n          label={item.label}\r\n          icon={item.icon}\r\n          icon-props={item.iconProps}\r\n          disabled={item.disabled}\r\n          children={item.children}\r\n          route={item.route}\r\n          meta={item.meta}\r\n        >\r\n          {item.name ? callIfFunc(item.name) : item.label}\r\n        </MenuItem>\r\n      ))\r\n    }\r\n\r\n    return () => {\r\n      return (\r\n        <div\r\n          ref={wrapper}\r\n          class={nh.be('rest')}\r\n          onMouseenter={handleMouseEnter}\r\n          onMouseleave={handleMouseLeave}\r\n        >\r\n          <div\r\n            ref={reference}\r\n            class={[nh.be('rest-handler'), sonSelected.value && nh.bem('rest-handler', 'selected')]}\r\n            onClick={handleClick}\r\n          >\r\n            <Icon {...icons.value.ellipsis}></Icon>\r\n          </div>\r\n          <Popper\r\n            ref={popper}\r\n            class={[nh.be('popper'), nh.bs('vars'), nh.bem('popper', 'drop')]}\r\n            visible={popperShow.value && groupExpanded.value}\r\n            alive={!transferTo.value || popperShow.value}\r\n            to={transferTo.value}\r\n            transition={nh.ns('drop')}\r\n            onAfterLeave={handlePopperHide}\r\n            onMouseenter={() => ((mouseInList = true), handleMouseEnter())}\r\n            onMouseleave={() => ((mouseInList = false), handleMouseLeave())}\r\n          >\r\n            <ul class={[nh.be('list'), nh.bem('list', 'theme')]}>{renderMenuItems()}</ul>\r\n          </Popper>\r\n        </div>\r\n      )\r\n    }\r\n  },\r\n})\r\n","import { MenuItem } from '@/components/menu-item'\r\nimport { MenuGroup } from '@/components/menu-group'\r\nimport { Overflow } from '@/components/overflow'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  nextTick,\r\n  onMounted,\r\n  provide,\r\n  reactive,\r\n  ref,\r\n  renderSlot,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { callIfFunc, isDefined } from '@vexip-ui/utils'\r\nimport MenuRest from './menu-rest'\r\nimport { menuProps } from './props'\r\nimport { MENU_STATE } from './symbol'\r\n\r\nimport type { VNode } from 'vue'\r\nimport type { RouteLocationRaw, RouteRecordRaw } from 'vue-router'\r\nimport type {\r\n  MenuArrowSlotParams,\r\n  MenuItemState,\r\n  MenuMarkerType,\r\n  MenuOptions,\r\n  MenuState,\r\n} from './symbol'\r\n\r\nconst menuMarkerTypes = Object.freeze<MenuMarkerType[]>(['top', 'right', 'bottom', 'left', 'none'])\r\n\r\nexport default defineComponent({\r\n  name: 'Menu',\r\n  props: menuProps,\r\n  emits: ['update:active'],\r\n  setup(_props, { slots, emit, expose }) {\r\n    const props = useProps('menu', _props, {\r\n      active: {\r\n        default: null,\r\n        static: true,\r\n      },\r\n      accordion: false,\r\n      markerType: {\r\n        default: 'right',\r\n        validator: value => menuMarkerTypes.includes(value),\r\n      },\r\n      reduced: false,\r\n      horizontal: false,\r\n      transfer: false,\r\n      trigger: 'hover',\r\n      groupType: {\r\n        default: 'collapse',\r\n        validator: value => ['collapse', 'dropdown'].includes(value),\r\n      },\r\n      tooltipReverse: null,\r\n      options: {\r\n        default: () => [],\r\n        static: true,\r\n      },\r\n      router: null,\r\n      manualRoute: false,\r\n      indent: null,\r\n      arrow: null,\r\n      slots: () => ({}),\r\n    })\r\n\r\n    const nh = useNameHelper('menu')\r\n    const menuItemSet = new Set<MenuItemState>()\r\n    const currentActive = ref(props.active)\r\n    const isReduced = ref(false)\r\n\r\n    const wrapper = ref<HTMLElement>()\r\n    const rest = ref<InstanceType<typeof MenuRest>>()\r\n\r\n    const markerType = computed(() => {\r\n      if (props.horizontal && (props.markerType === 'left' || props.markerType === 'right')) {\r\n        return 'bottom'\r\n      } else if (\r\n        !props.horizontal &&\r\n        (props.markerType === 'top' || props.markerType === 'bottom')\r\n      ) {\r\n        return 'right'\r\n      } else {\r\n        return props.markerType ?? (props.horizontal ? 'bottom' : 'right')\r\n      }\r\n    })\r\n    const className = computed(() => {\r\n      return [\r\n        nh.b(),\r\n        nh.bs('vars'),\r\n        nh.bm(`marker-${markerType.value}`),\r\n        {\r\n          [nh.bm('inherit')]: props.inherit,\r\n          [nh.bm('reduced')]: isReduced.value,\r\n          [nh.bm('dropdown')]: props.groupType === 'dropdown',\r\n          [nh.bm('horizontal')]: props.horizontal,\r\n        },\r\n      ]\r\n    })\r\n    const style = computed(() => {\r\n      const style: Record<string, string> = {}\r\n\r\n      if (isDefined(props.indent)) {\r\n        style[nh.cv('indent-width')] =\r\n          typeof props.indent === 'number' ? `${props.indent}px` : props.indent\r\n      }\r\n\r\n      return style\r\n    })\r\n    const menus = computed(() => {\r\n      if (props.options?.length) {\r\n        return props.options\r\n      }\r\n\r\n      const routes = props.router?.options.routes\r\n\r\n      if (!routes?.length) {\r\n        return []\r\n      }\r\n\r\n      return parseRoutesToMenus(routes)\r\n    })\r\n    const currentRoute = computed(() => props.router?.currentRoute.value)\r\n\r\n    provide<MenuState>(\r\n      MENU_STATE,\r\n      reactive({\r\n        currentActive,\r\n        isReduced,\r\n        horizontal: toRef(props, 'horizontal'),\r\n        accordion: toRef(props, 'accordion'),\r\n        groupType: toRef(props, 'groupType'),\r\n        tooltipReverse: toRef(props, 'tooltipReverse'),\r\n        transfer: toRef(props, 'transfer'),\r\n        trigger: toRef(props, 'trigger'),\r\n        markerType,\r\n        arrow: toRef(props, 'arrow'),\r\n        handleSelect,\r\n        handleExpand,\r\n        increaseItem,\r\n        decreaseItem,\r\n        doForEachItem,\r\n        renderItemArrow,\r\n      }),\r\n    )\r\n\r\n    watch(\r\n      () => props.active,\r\n      value => {\r\n        if (value !== currentActive.value) {\r\n          currentActive.value = value\r\n        }\r\n      },\r\n    )\r\n    watch(\r\n      () => props.reduced,\r\n      value => {\r\n        if (props.horizontal) return\r\n\r\n        if (value) {\r\n          handleMenuReduce()\r\n        } else {\r\n          handleMenuExpand()\r\n        }\r\n      },\r\n    )\r\n    watch(currentRoute, value => {\r\n      if (!props.manualRoute && value) {\r\n        currentActive.value = (value.meta?.label as string) ?? value.path\r\n      }\r\n    })\r\n\r\n    onMounted(() => {\r\n      nextTick(() => {\r\n        if (!props.horizontal && props.reduced) handleMenuReduce()\r\n      })\r\n\r\n      if (props.router && !props.manualRoute && !currentActive.value) {\r\n        const route = currentRoute.value\r\n\r\n        if (route) {\r\n          currentActive.value = (route.meta?.label as string) ?? currentRoute.value.path\r\n        }\r\n      }\r\n    })\r\n\r\n    expose({ expandItemByLabel })\r\n\r\n    function parseRoutesToMenus(routes: Readonly<RouteRecordRaw[]>) {\r\n      const root: MenuOptions = { label: '', children: [] }\r\n      const loop = Array.from(routes).map(route => ({ parent: root, route }))\r\n\r\n      while (loop.length) {\r\n        const { parent, route } = loop.shift()!\r\n        const routeMeta = (route.meta || {}) as any\r\n\r\n        if (routeMeta.menu === false) {\r\n          continue\r\n        }\r\n\r\n        const options = {\r\n          ...routeMeta,\r\n          route,\r\n          label: routeMeta.label || route.path,\r\n          name: routeMeta.name || route.name,\r\n        } as MenuOptions\r\n\r\n        if (!parent.children) {\r\n          parent.children = []\r\n        }\r\n\r\n        parent.children.push(options)\r\n\r\n        if (route.children) {\r\n          loop.push(...route.children.map(route => ({ parent: options, route })))\r\n        }\r\n      }\r\n\r\n      return root.children!\r\n    }\r\n\r\n    function increaseItem(state: MenuItemState) {\r\n      menuItemSet.add(state)\r\n    }\r\n\r\n    function decreaseItem(state: MenuItemState) {\r\n      menuItemSet.delete(state)\r\n    }\r\n\r\n    function doForEachItem(cb: (item: MenuItemState) => void) {\r\n      for (const item of menuItemSet) {\r\n        cb(item)\r\n      }\r\n    }\r\n\r\n    function handleSelect(label: string, meta: Record<string, any>, route?: RouteLocationRaw) {\r\n      if (currentActive.value !== label) {\r\n        currentActive.value = label\r\n\r\n        emit('update:active', label)\r\n        emitEvent(props.onSelect, label, meta)\r\n\r\n        if (!props.manualRoute && props.router && route) {\r\n          props.router.push(route)\r\n        }\r\n      }\r\n    }\r\n\r\n    function handleExpand(label: string, expanded: boolean, meta: Record<string, any>) {\r\n      if (expanded) {\r\n        emitEvent(props.onExpand, label, meta)\r\n      } else {\r\n        emitEvent(props.onReduce, label, meta)\r\n      }\r\n    }\r\n\r\n    function handleMenuReduce() {\r\n      if (props.horizontal) return\r\n\r\n      let firstExpandedItem: MenuItemState | null = null\r\n\r\n      for (const item of menuItemSet) {\r\n        item.cachedExpanded = item.showGroup\r\n\r\n        if (!firstExpandedItem && item.showGroup) {\r\n          firstExpandedItem = item\r\n        }\r\n\r\n        item.toggleGroupExpanded(false)\r\n      }\r\n\r\n      isReduced.value = true\r\n    }\r\n\r\n    function handleMenuExpand() {\r\n      if (props.horizontal) return\r\n\r\n      isReduced.value = false\r\n\r\n      if (wrapper.value) {\r\n        const el = wrapper.value\r\n        const callback = () => {\r\n          requestAnimationFrame(() => {\r\n            el.removeEventListener('transitionend', callback)\r\n\r\n            const selectedItem = Array.from(menuItemSet).find(\r\n              item => item.label === currentActive.value,\r\n            )\r\n\r\n            requestAnimationFrame(() => {\r\n              requestAnimationFrame(() => {\r\n                for (const item of menuItemSet) {\r\n                  item.groupExpanded = item.cachedExpanded\r\n                }\r\n\r\n                if (selectedItem) {\r\n                  let parent = selectedItem.parentState\r\n\r\n                  while (parent) {\r\n                    parent.groupExpanded = true\r\n                    parent = parent.parentState\r\n                  }\r\n                }\r\n              })\r\n            })\r\n          })\r\n        }\r\n\r\n        el.addEventListener('transitionend', callback)\r\n      }\r\n    }\r\n\r\n    function expandItemByLabel(label: string) {\r\n      for (const item of menuItemSet) {\r\n        if (item.label === label) {\r\n          item.toggleGroupExpanded(true, true)\r\n        }\r\n      }\r\n    }\r\n\r\n    function renderItemArrow(params: MenuArrowSlotParams, renderDefault: () => VNode) {\r\n      return renderSlot(slots, 'arrow', { ...params }, () => [\r\n        <Renderer renderer={props.slots.arrow} data={params}>\r\n          {renderDefault()}\r\n        </Renderer>,\r\n      ])\r\n    }\r\n\r\n    function renderMenuItem(item: MenuOptions) {\r\n      return (\r\n        <MenuItem\r\n          label={item.label}\r\n          icon={item.icon}\r\n          icon-props={item.iconProps}\r\n          disabled={item.disabled}\r\n          children={item.children}\r\n          route={item.route}\r\n          meta={item.meta}\r\n        >\r\n          {item.name ? callIfFunc(item.name) : item.label}\r\n        </MenuItem>\r\n      )\r\n    }\r\n\r\n    function renderMenus() {\r\n      return menus.value.map(menu =>\r\n        menu.group ? (\r\n          <MenuGroup key={menu.label} label={menu.name ? callIfFunc(menu.name) : menu.label}>\r\n            {menu.children?.length ? menu.children.map(renderMenuItem) : null}\r\n          </MenuGroup>\r\n        ) : (\r\n          renderMenuItem(menu)\r\n        ),\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      return (\r\n        <ul ref={wrapper} class={className.value} role={'menu'} tabindex={-1} style={style.value}>\r\n          {renderSlot(slots, 'default', {}, () => {\r\n            return props.horizontal\r\n              ? [\r\n                <Overflow class={nh.be('overflow')} inherit key={0}>\r\n                  {{\r\n                    default: renderMenus,\r\n                    counter: ({ count }: { count: number }) => (\r\n                      <MenuRest ref={rest} menus={menus.value.slice(-count)}></MenuRest>\r\n                    ),\r\n                  }}\r\n                </Overflow>,\r\n              ]\r\n              : renderMenus()\r\n          })}\r\n        </ul>\r\n      )\r\n    }\r\n  },\r\n})\r\n","import { booleanProp, buildProps, eventProp, iconProp, sizeProp, stateProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { SwitchSlots } from './symbol'\r\n\r\nexport const switchProps = buildProps({\r\n  size: sizeProp,\r\n  state: stateProp,\r\n  value: booleanProp,\r\n  disabled: booleanProp,\r\n  openColor: String,\r\n  closeColor: String,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  openIcon: iconProp,\r\n  closeIcon: iconProp,\r\n  openText: String,\r\n  closeText: String,\r\n  onBeforeChange: Function as PropType<(checked: boolean) => unknown>,\r\n  rectangle: booleanProp,\r\n  name: String,\r\n  slots: Object as PropType<SwitchSlots>,\r\n  onChange: eventProp<(value: boolean) => void>(),\r\n})\r\n\r\nexport type SwitchProps = ExtractPropTypes<typeof switchProps>\r\nexport type SwitchCProps = ConfigurableProps<SwitchProps, never, 'onBeforeChange'>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { useFieldStore } from '@/components/form'\r\n\r\nimport { computed, ref, watch } from 'vue'\r\n\r\nimport {\r\n  createIconProp,\r\n  createSizeProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { isPromise } from '@vexip-ui/utils'\r\nimport { switchProps } from './props'\r\n\r\nimport type { SwitchSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'Switch' })\r\n\r\nconst {\r\n  idFor,\r\n  labelId,\r\n  state,\r\n  disabled,\r\n  loading,\r\n  size,\r\n  validateField,\r\n  getFieldValue,\r\n  setFieldValue,\r\n} = useFieldStore<boolean>(() => input.value?.focus())\r\n\r\nconst _props = defineProps(switchProps)\r\nconst props = useProps('switch', _props, {\r\n  size: createSizeProp(size),\r\n  state: createStateProp(state),\r\n  value: {\r\n    default: () => getFieldValue(),\r\n    static: true,\r\n  },\r\n  disabled: () => disabled.value,\r\n  openColor: '',\r\n  closeColor: '',\r\n  loading: () => loading.value,\r\n  loadingIcon: createIconProp(),\r\n  loadingEffect: null,\r\n  openIcon: createIconProp(),\r\n  closeIcon: createIconProp(),\r\n  openText: '',\r\n  closeText: '',\r\n  onBeforeChange: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  rectangle: false,\r\n  name: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:value'])\r\n\r\ndefineSlots<SwitchSlots>()\r\n\r\nconst nh = useNameHelper('switch')\r\nconst icons = useIcons()\r\nconst currentValue = ref(props.value)\r\n\r\nconst input = ref<HTMLInputElement>()\r\n\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('open')]: currentValue.value,\r\n      [nh.bm(props.size)]: props.size !== 'default',\r\n      [nh.bm(props.state)]: props.state !== 'default',\r\n      [nh.bm('disabled')]: props.disabled,\r\n      [nh.bm('loading')]: props.loading,\r\n      [nh.bm('rectangle')]: props.rectangle,\r\n    },\r\n  ]\r\n})\r\nconst style = computed(() => {\r\n  return {\r\n    backgroundColor: currentValue.value ? props.openColor : props.closeColor,\r\n  }\r\n})\r\nconst signalStyle = computed(() => {\r\n  return {\r\n    color: currentValue.value ? props.openColor : props.closeColor,\r\n  }\r\n})\r\nconst isDisabled = computed(() => {\r\n  return props.disabled || props.loading\r\n})\r\n\r\nwatch(\r\n  () => props.value,\r\n  value => {\r\n    currentValue.value = value\r\n  },\r\n)\r\n\r\ndefineExpose({\r\n  idFor,\r\n  labelId,\r\n  currentValue,\r\n  input,\r\n  focus: (options?: FocusOptions) => input.value?.focus(options),\r\n  blur: () => input.value?.blur(),\r\n})\r\n\r\nasync function handleChange(checked = !currentValue.value) {\r\n  if (checked === currentValue.value) return\r\n\r\n  let result: unknown = true\r\n\r\n  if (typeof props.onBeforeChange === 'function') {\r\n    result = props.onBeforeChange(checked)\r\n\r\n    if (isPromise(result)) {\r\n      result = await result\r\n    }\r\n  }\r\n\r\n  if (result !== false) {\r\n    currentValue.value = checked\r\n\r\n    emit('update:value', checked)\r\n    setFieldValue(checked)\r\n    emitEvent(props.onChange, checked)\r\n    validateField()\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <label\r\n    :id=\"idFor\"\r\n    :class=\"className\"\r\n    role=\"switch\"\r\n    :aria-checked=\"currentValue\"\r\n    :aria-disabled=\"isDisabled\"\r\n    :aria-labelledby=\"labelId\"\r\n    :style=\"style\"\r\n  >\r\n    <input\r\n      ref=\"input\"\r\n      type=\"checkbox\"\r\n      :class=\"nh.be('input')\"\r\n      :checked=\"currentValue\"\r\n      :disabled=\"isDisabled\"\r\n      :name=\"props.name\"\r\n      @submit.prevent\r\n      @change=\"handleChange()\"\r\n      @click.stop\r\n    />\r\n    <span :class=\"nh.be('placeholder')\" aria-hidden>\r\n      <span :class=\"nh.be('open-text')\">\r\n        <slot name=\"open\">\r\n          <Renderer :renderer=\"props.slots.open\">{{ props.openText }}</Renderer>\r\n        </slot>\r\n      </span>\r\n      <span :class=\"nh.be('close-text')\">\r\n        <slot name=\"close\">\r\n          <Renderer :renderer=\"props.slots.open\">{{ props.closeText }}</Renderer>\r\n        </slot>\r\n      </span>\r\n    </span>\r\n    <span :class=\"nh.be('signal')\" :style=\"signalStyle\">\r\n      <slot v-if=\"props.loading\" name=\"loading\">\r\n        <Renderer :renderer=\"props.slots.loading\">\r\n          <Icon\r\n            v-bind=\"icons.loading\"\r\n            :effect=\"props.loadingEffect || icons.loading.effect\"\r\n            :icon=\"props.loadingIcon || icons.loading.icon\"\r\n            label=\"loading\"\r\n          ></Icon>\r\n        </Renderer>\r\n      </slot>\r\n      <slot v-else name=\"icon\" :value=\"currentValue\">\r\n        <Renderer :renderer=\"props.slots.icon\" :data=\"{ value: currentValue }\">\r\n          <Icon v-if=\"currentValue && props.openIcon\" :icon=\"props.openIcon\"></Icon>\r\n          <Icon v-else-if=\"!currentValue && props.closeIcon\" :icon=\"props.closeIcon\"></Icon>\r\n        </Renderer>\r\n      </slot>\r\n    </span>\r\n    <span :class=\"nh.be('label')\">\r\n      <span v-if=\"currentValue\" :class=\"nh.be('open-text')\">\r\n        <slot name=\"open\">\r\n          <Renderer :renderer=\"props.slots.open\">{{ props.openText }}</Renderer>\r\n        </slot>\r\n      </span>\r\n      <span v-else :class=\"nh.be('close-text')\">\r\n        <slot name=\"close\">\r\n          <Renderer :renderer=\"props.slots.open\">{{ props.closeText }}</Renderer>\r\n        </slot>\r\n      </span>\r\n    </span>\r\n  </label>\r\n</template>\r\n","import { Avatar } from '@/components/avatar'\r\nimport { Dropdown } from '@/components/dropdown'\r\nimport { DropdownList } from '@/components/dropdown-list'\r\nimport { DropdownItem } from '@/components/dropdown-item'\r\nimport { Icon } from '@/components/icon'\r\nimport { Menu } from '@/components/menu'\r\nimport { Switch } from '@/components/switch'\r\n\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  onBeforeMount,\r\n  onMounted,\r\n  reactive,\r\n  ref,\r\n  renderSlot,\r\n  shallowReadonly,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useMounted, useRtl } from '@vexip-ui/hooks'\r\nimport { isClient } from '@vexip-ui/utils'\r\nimport { layoutHeaderProps } from './props'\r\nimport { computeSeriesColors, useLayoutState } from './helper'\r\n\r\nimport type { MenuExposed } from '@/components/menu'\r\nimport type { LayoutConfig, LayoutHeaderAction, LayoutSignType } from './symbol'\r\n\r\nexport default defineComponent({\r\n  name: 'LayoutHeader',\r\n  props: layoutHeaderProps,\r\n  emits: ['update:sign-type', 'update:color', 'update:user-dropped', 'update:dark-mode'],\r\n  setup(_props, { slots, emit, expose }) {\r\n    const props = useProps('layoutHeader', _props, {\r\n      locale: null,\r\n      tag: 'header',\r\n      logo: '',\r\n      signName: '',\r\n      user: {\r\n        default: () => ({ name: '' }),\r\n        static: true,\r\n      },\r\n      userDropped: false,\r\n      avatarCircle: false,\r\n      config: () => ['nav', 'theme', 'color'] as LayoutConfig[],\r\n      actions: () => [],\r\n      signType: 'aside',\r\n      colors: () => ['#339af0', '#f03e3e', '#be4bdb', '#7950f2', '#1b9e44', '#f76707'],\r\n      color: '',\r\n      menus: {\r\n        default: () => [],\r\n        static: true,\r\n      },\r\n      menuProps: null,\r\n      darkMode: null,\r\n    })\r\n\r\n    const nh = useNameHelper('layout')\r\n    const icons = useIcons()\r\n    const locale = useLocale('layout', toRef(props, 'locale'))\r\n    const layoutState = useLayoutState()\r\n    const currentSignType = ref<LayoutSignType>(props.signType)\r\n    const currentUserDropped = ref(props.userDropped)\r\n\r\n    const menu = ref<MenuExposed>()\r\n\r\n    const { isRtl } = useRtl()\r\n    const { isMounted } = useMounted()\r\n\r\n    const rootEl = computed(() => {\r\n      // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n      isMounted.value\r\n      return isClient ? document.documentElement : null\r\n    })\r\n    const currentColor = ref(props.color || getBaseColor() || props.colors?.[0])\r\n    const isDark = ref(false)\r\n\r\n    const className = computed(() => {\r\n      return [\r\n        nh.be('header'),\r\n        {\r\n          [nh.bs('vars')]: !layoutState.isLayout,\r\n          [nh.bem('header', 'inherit')]: layoutState.isLayout || props.inherit,\r\n          [nh.bem('header', 'away')]: !layoutState.affixMatched,\r\n          [nh.bem('header', 'affixed')]: layoutState.affixed,\r\n        },\r\n        layoutState.classes.header,\r\n      ]\r\n    })\r\n    const userActions = computed(() => {\r\n      if (!props.actions?.length) {\r\n        return [\r\n          {\r\n            label: 'signOut',\r\n            name: locale.value.signOut,\r\n            icon: icons.value.signOut.icon,\r\n            iconProps: icons.value.signOut,\r\n          },\r\n        ] as LayoutHeaderAction[]\r\n      }\r\n\r\n      return props.actions.filter(action => !action.hidden)\r\n    })\r\n    const hasLeft = computed(() => {\r\n      return !!(props.logo || props.signName || slots.left)\r\n    })\r\n    const hasMenu = computed(() => {\r\n      return !!(props.menus?.length || props.menuProps?.router)\r\n    })\r\n\r\n    const slotParams = shallowReadonly(\r\n      reactive({\r\n        expanded: toRef(layoutState, 'expanded'),\r\n        reduced: toRef(layoutState, 'reduced'),\r\n        toggleExpanded,\r\n        toggleReduced,\r\n        handleColorChange,\r\n        toggleUserDropped,\r\n      }),\r\n    )\r\n\r\n    expose({ menu, toggleExpanded, toggleReduced, expandMenuByLabel, toggleUserDropped })\r\n\r\n    watch(\r\n      () => props.signType,\r\n      value => {\r\n        currentSignType.value = value\r\n      },\r\n    )\r\n    watch(\r\n      () => props.userDropped,\r\n      value => {\r\n        currentUserDropped.value = value\r\n      },\r\n    )\r\n    watch(currentColor, computeSeriesColors)\r\n    watch(\r\n      () => props.darkMode,\r\n      value => {\r\n        isDark.value = value ?? rootEl.value?.classList.contains('dark') ?? false\r\n      },\r\n      { immediate: true },\r\n    )\r\n\r\n    onMounted(() => {\r\n      toggleTheme(isDark.value)\r\n    })\r\n\r\n    onBeforeMount(() => {\r\n      watch(\r\n        () => props.color,\r\n        value => {\r\n          currentColor.value = value || getBaseColor() || props.colors?.[0]\r\n        },\r\n        { immediate: true },\r\n      )\r\n\r\n      computeSeriesColors(currentColor.value)\r\n    })\r\n\r\n    function getBaseColor() {\r\n      if (rootEl.value) {\r\n        return getComputedStyle(rootEl.value).getPropertyValue('--vxp-color-primary-base')\r\n      }\r\n\r\n      return '#339af0'\r\n    }\r\n\r\n    function handleUserActionSelect(label: string, meta: Record<string, any>) {\r\n      emitEvent(props.onUserAction, label, meta)\r\n    }\r\n\r\n    function handleSignTypeChange(type: LayoutSignType) {\r\n      layoutState.changeInLock(() => {\r\n        currentSignType.value = type\r\n\r\n        emit('update:sign-type', type)\r\n        emitEvent(props.onNavChange, type)\r\n      })\r\n    }\r\n\r\n    function toggleExpanded(expanded = !layoutState.expanded) {\r\n      layoutState.expanded = expanded\r\n\r\n      emitEvent(props.onExpandedChange, expanded)\r\n    }\r\n\r\n    function toggleReduced(reduced = !layoutState.reduced) {\r\n      layoutState.reduced = reduced\r\n\r\n      emitEvent(props.onReducedChange, reduced)\r\n    }\r\n\r\n    function handleColorChange(color: string) {\r\n      currentColor.value = color\r\n\r\n      emit('update:color', color)\r\n      emitEvent(props.onColorChange, color)\r\n    }\r\n\r\n    function handleSignClick(event: MouseEvent) {\r\n      emitEvent(props.onSignClick, event)\r\n    }\r\n\r\n    function toggleUserDropped(dropped = !currentUserDropped.value) {\r\n      currentUserDropped.value = dropped\r\n\r\n      emit('update:user-dropped', dropped)\r\n      emitEvent(props.onDroppedChange, dropped)\r\n    }\r\n\r\n    function handleMenuSelect(label: string, meta: Record<string, any>) {\r\n      toggleUserDropped(false)\r\n      emitEvent(props.onMenuSelect, label, meta)\r\n    }\r\n\r\n    function expandMenuByLabel(label: string) {\r\n      menu.value?.expandItemByLabel(label)\r\n    }\r\n\r\n    function toggleTheme(darkMode: boolean) {\r\n      isDark.value = darkMode\r\n\r\n      emit('update:dark-mode', darkMode)\r\n      emitEvent(props.onToggleTheme, darkMode)\r\n\r\n      if (!isClient) return\r\n\r\n      requestAnimationFrame(() => {\r\n        if (rootEl.value) {\r\n          if (darkMode) {\r\n            rootEl.value.classList.add('dark')\r\n          } else {\r\n            rootEl.value.classList.remove('dark')\r\n          }\r\n        }\r\n      })\r\n    }\r\n\r\n    function renderCheck() {\r\n      return <Icon {...icons.value.check}></Icon>\r\n    }\r\n\r\n    function renderLayoutConfig() {\r\n      return (\r\n        <div class={nh.be('config-unit')}>\r\n          <div\r\n            class={[nh.be('brief-block'), nh.bem('brief-block', 'aside')]}\r\n            onClick={() => handleSignTypeChange('aside')}\r\n          >\r\n            {currentSignType.value === 'aside' && renderCheck()}\r\n          </div>\r\n          <div class={nh.be('brief-block')} onClick={() => handleSignTypeChange('header')}>\r\n            {currentSignType.value === 'header' && renderCheck()}\r\n          </div>\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderThemeConfig() {\r\n      return (\r\n        <div class={nh.be('config-unit')}>\r\n          <Switch\r\n            value={isDark.value}\r\n            class={[nh.be('theme-mode'), isDark.value && nh.bem('theme-mode', 'dark')]}\r\n            aria-label={'theme'}\r\n            onChange={toggleTheme}\r\n          >\r\n            {{\r\n              icon: () =>\r\n                isDark.value ? (\r\n                  <Icon {...icons.value.dark}></Icon>\r\n                ) : (\r\n                  <Icon {...icons.value.light}></Icon>\r\n                ),\r\n            }}\r\n          </Switch>\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderColorConfig() {\r\n      if (!props.colors?.length) {\r\n        return null\r\n      }\r\n\r\n      return (\r\n        <div class={nh.be('config-unit')}>\r\n          {props.colors.map(color => (\r\n            <div\r\n              key={color}\r\n              class={nh.be('major-color')}\r\n              style={{\r\n                backgroundColor: color,\r\n              }}\r\n              onClick={() => handleColorChange(color)}\r\n            >\r\n              {currentColor.value === color && renderCheck()}\r\n            </div>\r\n          ))}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderUserAvatar() {\r\n      if (slots.avatar) {\r\n        return renderSlot(slots, 'avatar', slotParams)\r\n      }\r\n\r\n      if (typeof props.user?.avatar === 'string') {\r\n        return (\r\n          <Avatar\r\n            src={props.user.avatar}\r\n            circle={props.avatarCircle}\r\n            onClick={() => toggleUserDropped()}\r\n          >\r\n            {{\r\n              icon: () => <Icon {...icons.value.user}></Icon>,\r\n            }}\r\n          </Avatar>\r\n        )\r\n      }\r\n\r\n      return (\r\n        <Avatar circle={props.avatarCircle} onClick={() => toggleUserDropped()}>\r\n          {{\r\n            icon: () => (\r\n              <Icon {...icons.value.user} icon={props.user.avatar || icons.value.user.icon}></Icon>\r\n            ),\r\n          }}\r\n        </Avatar>\r\n      )\r\n    }\r\n\r\n    function renderUserDrop() {\r\n      return (\r\n        <DropdownList>\r\n          {props.user?.name && (\r\n            <li class={nh.be('user-profile')}>\r\n              <span class={nh.be('user-name')}>{props.user.name}</span>\r\n              {props.user.email && <span class={nh.be('user-email')}>{props.user.email}</span>}\r\n            </li>\r\n          )}\r\n          {props.config?.length ? renderConfigs() : null}\r\n          {userActions.value.map(action => (\r\n            <DropdownItem\r\n              key={action.label}\r\n              class={nh.be('user-action')}\r\n              label={action.label}\r\n              disabled={action.disabled}\r\n              divided={action.divided}\r\n              onSelect={() => handleUserActionSelect(action.label, action.meta || {})}\r\n            >\r\n              {action.icon && (\r\n                <Icon\r\n                  {...action.iconProps}\r\n                  icon={action.icon}\r\n                  style={{ marginRight: '6px' }}\r\n                ></Icon>\r\n              )}\r\n              {action.name || action.label}\r\n            </DropdownItem>\r\n          ))}\r\n        </DropdownList>\r\n      )\r\n    }\r\n\r\n    function renderConfigs() {\r\n      return (\r\n        <li class={nh.be('config')}>\r\n          {props.config.includes('nav') &&\r\n            layoutState.navConfig && [\r\n            <div key={1} class={nh.be('config-label')}>\r\n              {locale.value.signType}\r\n            </div>,\r\n            renderLayoutConfig(),\r\n          ]}\r\n          {props.config.includes('theme') && [\r\n            <div key={2} class={nh.be('config-label')}>\r\n              {locale.value.themeMode}\r\n            </div>,\r\n            renderThemeConfig(),\r\n          ]}\r\n          {props.config.includes('color') && [\r\n            <div key={3} class={nh.be('config-label')}>\r\n              {locale.value.majorColor}\r\n            </div>,\r\n            renderColorConfig(),\r\n          ]}\r\n        </li>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      const CustomTag = (props.tag || 'header') as any\r\n\r\n      return (\r\n        <CustomTag class={className.value}>\r\n          {hasLeft.value && (\r\n            <div class={[nh.be('header-left'), layoutState.classes.headerLeft]}>\r\n              {slots.left ? (\r\n                renderSlot(slots, 'left', slotParams)\r\n              ) : props.signType === 'header' ? (\r\n                <div class={nh.be('sign')} onClick={handleSignClick}>\r\n                  {props.logo && (\r\n                    <div class={nh.be('logo')}>\r\n                      <img src={props.logo} alt={'Logo'} />\r\n                    </div>\r\n                  )}\r\n                  {props.signName && <span class={nh.be('sign-name')}>{props.signName}</span>}\r\n                </div>\r\n              ) : null}\r\n            </div>\r\n          )}\r\n          <div class={[nh.be('header-main'), layoutState.classes.headerMain]}>\r\n            {slots.default ? (\r\n              renderSlot(slots, 'default', slotParams)\r\n            ) : hasMenu.value ? (\r\n              <Menu\r\n                ref={menu}\r\n                {...(props.menuProps || {})}\r\n                horizontal\r\n                transfer\r\n                options={props.menus}\r\n                onSelect={handleMenuSelect}\r\n              ></Menu>\r\n            ) : null}\r\n          </div>\r\n          {slots.right && (\r\n            <div class={[nh.be('header-right'), layoutState.classes.headerRight]}>\r\n              {renderSlot(slots, 'right', slotParams)}\r\n            </div>\r\n          )}\r\n          {slots.user ? (\r\n            renderSlot(slots, 'user', slotParams)\r\n          ) : (\r\n            <Dropdown\r\n              class={[nh.be('user'), layoutState.classes.headerUser]}\r\n              transfer\r\n              placement={isRtl.value ? 'bottom-start' : 'bottom-end'}\r\n              visible={currentUserDropped.value}\r\n              trigger={'custom'}\r\n              onClickOutside={() => toggleUserDropped(false)}\r\n            >\r\n              {{\r\n                default: renderUserAvatar,\r\n                drop: renderUserDrop,\r\n              }}\r\n            </Dropdown>\r\n          )}\r\n        </CustomTag>\r\n      )\r\n    }\r\n  },\r\n})\r\n","import { booleanProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { LinkerType } from './symbol'\r\n\r\nexport const linkerProps = buildProps({\r\n  to: String,\r\n  type: String as PropType<LinkerType>,\r\n  icon: iconProp,\r\n  underline: booleanProp,\r\n  disabled: booleanProp,\r\n  target: String,\r\n  onClick: eventProp<(event: MouseEvent) => void>(),\r\n})\r\n\r\nexport type LinkerProps = ExtractPropTypes<typeof linkerProps>\r\nexport type LinkerCProps = ConfigurableProps<LinkerProps, 'to'>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\n\r\nimport { computed } from 'vue'\r\n\r\nimport { createIconProp, emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { linkerProps } from './props'\r\n\r\nimport type { LinkerType } from './symbol'\r\n\r\nconst linkerTypes = Object.freeze<LinkerType[]>([\r\n  'default',\r\n  'primary',\r\n  'success',\r\n  'error',\r\n  'warning',\r\n  'info',\r\n])\r\n\r\ndefineOptions({ name: 'Linker' })\r\n\r\nconst _props = defineProps(linkerProps)\r\nconst props = useProps('linker', _props, {\r\n  to: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  type: {\r\n    default: 'default' as LinkerType,\r\n    validator: (value: LinkerType) => linkerTypes.includes(value),\r\n  },\r\n  icon: createIconProp(),\r\n  underline: false,\r\n  disabled: false,\r\n  target: '_blank',\r\n})\r\n\r\nconst nh = useNameHelper('linker')\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm(props.type)]: props.type !== 'default',\r\n    [nh.bm('disabled')]: props.disabled,\r\n    [nh.bm('underline')]: props.underline,\r\n  }\r\n})\r\n\r\nfunction handleClick(event: MouseEvent) {\r\n  if (props.disabled) {\r\n    event.preventDefault()\r\n  }\r\n\r\n  emitEvent(props.onClick, event)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <a\r\n    :class=\"className\"\r\n    :href=\"props.to\"\r\n    tabindex=\"0\"\r\n    :target=\"props.target\"\r\n    @click=\"handleClick\"\r\n  >\r\n    <slot name=\"icon\">\r\n      <Icon v-if=\"props.icon\" :class=\"nh.be('icon')\" :icon=\"props.icon\"></Icon>\r\n    </slot>\r\n    <slot></slot>\r\n  </a>\r\n</template>\r\n","import { Icon } from '@/components/icon'\r\nimport { Linker } from '@/components/linker'\r\n\r\nimport { computed, defineComponent, renderSlot, toRef } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { layoutFooterProps } from './props'\r\nimport { useLayoutState, useMediaQuery } from './helper'\r\n\r\nexport default defineComponent({\r\n  name: 'LayoutFooter',\r\n  props: layoutFooterProps,\r\n  setup(_props, { slots }) {\r\n    const props = useProps('layoutFooter', _props, {\r\n      tag: 'footer',\r\n      copyright: '',\r\n      links: () => [],\r\n      verticalLinks: 'md',\r\n    })\r\n\r\n    const nh = useNameHelper('layout')\r\n    const layoutState = useLayoutState()\r\n    const horizontalMatched = useMediaQuery(toRef(props, 'verticalLinks'))\r\n\r\n    const className = computed(() => {\r\n      return [\r\n        nh.be('footer'),\r\n        {\r\n          [nh.bs('vars')]: !layoutState.isLayout,\r\n          [nh.bem('footer', 'inherit')]: layoutState.isLayout || props.inherit,\r\n        },\r\n        layoutState.classes.footer,\r\n      ]\r\n    })\r\n\r\n    function renderLinks() {\r\n      if (!props.links?.length) {\r\n        return <div role={'none'} aria-hidden style={'display: none'}></div>\r\n      }\r\n\r\n      return (\r\n        <div\r\n          class={[\r\n            nh.be('links'),\r\n            !horizontalMatched.value && nh.bem('links', 'vertical'),\r\n            layoutState.classes.footerLinks,\r\n          ]}\r\n        >\r\n          <div class={nh.be('links-row')}>\r\n            {props.links.map((group, index) => (\r\n              <div\r\n                key={index}\r\n                class={[\r\n                  nh.be('link-group'),\r\n                  !horizontalMatched.value && nh.bem('link-group', 'vertical'),\r\n                ]}\r\n              >\r\n                <div class={[nh.be('link-name'), nh.bem('link-name', 'group')]}>\r\n                  {group.to ? (\r\n                    <Linker icon={group.icon} to={group.to} target={group.target}>\r\n                      {group.name}\r\n                    </Linker>\r\n                  ) : (\r\n                    [group.icon && <Icon icon={group.icon}></Icon>, group.name]\r\n                  )}\r\n                  {group.subname && <div class={nh.be('link-subname')}>{`- ${group.subname}`}</div>}\r\n                </div>\r\n                {group.children?.length\r\n                  ? group.children.map((link, index) => (\r\n                    <div key={index} class={nh.be('link')}>\r\n                      <Linker icon={link.icon} to={link.to} target={link.target}>\r\n                        {link.name}\r\n                      </Linker>\r\n                      {link.subname && (\r\n                        <div class={nh.be('link-subname')}>{`- ${link.subname}`}</div>\r\n                      )}\r\n                    </div>\r\n                  ))\r\n                  : null}\r\n              </div>\r\n            ))}\r\n          </div>\r\n        </div>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      const CustomTag = (props.tag || 'footer') as any\r\n\r\n      return (\r\n        <CustomTag class={className.value}>\r\n          {slots.links ? renderSlot(slots, 'links') : renderLinks()}\r\n          <div class={[nh.be('copyright'), layoutState.classes.copyright]}>\r\n            {slots.copyright ? slots.copyright() : props.copyright}\r\n          </div>\r\n        </CustomTag>\r\n      )\r\n    }\r\n  },\r\n})\r\n","import { Icon } from '@/components/icon'\r\nimport { Menu } from '@/components/menu'\r\nimport { NativeScroll } from '@/components/native-scroll'\r\n\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  reactive,\r\n  ref,\r\n  renderSlot,\r\n  shallowReadonly,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { layoutAsideProps } from './props'\r\nimport { useLayoutState, useMediaQuery, useUpdateCounter } from './helper'\r\n\r\nimport type { MenuExposed } from '@/components/menu'\r\n\r\nexport default defineComponent({\r\n  name: 'LayoutAside',\r\n  props: layoutAsideProps,\r\n  emits: ['update:reduced', 'update:expanded'],\r\n  setup(_props, { slots, emit, expose }) {\r\n    const props = useProps('layoutAside', _props, {\r\n      tag: 'aside',\r\n      expanded: false,\r\n      reduced: false,\r\n      menus: {\r\n        default: () => [],\r\n        static: true,\r\n      },\r\n      menuProps: null,\r\n      logo: '',\r\n      signName: '',\r\n      fixed: 'lg',\r\n      signType: 'aside',\r\n    })\r\n\r\n    const nh = useNameHelper('layout')\r\n    const icons = useIcons()\r\n\r\n    const layoutState = useLayoutState()\r\n    const currentReduced = ref(props.reduced)\r\n    const currentExpanded = ref(props.expanded)\r\n    const scrollHeight = ref('100%')\r\n\r\n    const matched = useMediaQuery(toRef(props, 'fixed'))\r\n    const counter = useUpdateCounter()\r\n\r\n    const top = ref<HTMLElement>()\r\n    const bottom = ref<HTMLElement>()\r\n    const menu = ref<MenuExposed>()\r\n\r\n    const className = computed(() => {\r\n      return [\r\n        nh.be('aside'),\r\n        {\r\n          [nh.bs('vars')]: !layoutState.isLayout,\r\n          [nh.bem('aside', 'inherit')]: layoutState.isLayout || props.inherit,\r\n          [nh.bem('aside', 'fixed')]: matched.value,\r\n          [nh.bem('aside', 'expanded')]: currentExpanded.value,\r\n          [nh.bem('aside', 'reduced')]: currentReduced.value,\r\n          [nh.bem('aside', 'no-sign')]: props.signType !== 'aside',\r\n        },\r\n        layoutState.classes.aside,\r\n      ]\r\n    })\r\n    const hasTop = computed(() => {\r\n      return !!(props.logo || props.signName || slots.top)\r\n    })\r\n    const hasMenu = computed(() => {\r\n      return !!(props.menus?.length || props.menuProps?.router)\r\n    })\r\n\r\n    const slotParams = shallowReadonly(\r\n      reactive({\r\n        expanded: currentExpanded,\r\n        reduced: currentReduced,\r\n        toggleExpanded,\r\n        toggleReduced,\r\n      }),\r\n    )\r\n\r\n    expose({ menu, toggleExpanded, toggleReduced, expandMenuByLabel })\r\n\r\n    watch(\r\n      () => props.reduced,\r\n      value => {\r\n        currentReduced.value = value\r\n      },\r\n    )\r\n    watch(\r\n      () => props.expanded,\r\n      value => {\r\n        currentExpanded.value = value\r\n      },\r\n    )\r\n    watch(\r\n      matched,\r\n      value => {\r\n        layoutState.useExpand = !value\r\n        value && toggleExpanded(false)\r\n      },\r\n      { immediate: true },\r\n    )\r\n    watch(counter, () => computeScrollHeight)\r\n\r\n    function computeScrollHeight() {\r\n      let topHeight = 0\r\n      let bottomHeight = 0\r\n\r\n      if (top.value) {\r\n        topHeight = top.value.offsetHeight\r\n      }\r\n\r\n      if (bottom.value) {\r\n        bottomHeight = bottom.value.offsetHeight\r\n      }\r\n\r\n      if (topHeight || bottomHeight) {\r\n        scrollHeight.value = `calc(100% - ${topHeight + bottomHeight}px)`\r\n      } else {\r\n        scrollHeight.value = '100%'\r\n      }\r\n    }\r\n\r\n    function toggleExpanded(expanded = !currentExpanded.value) {\r\n      currentExpanded.value = expanded\r\n\r\n      emit('update:expanded', expanded)\r\n      emitEvent(props.onExpandedChange, expanded)\r\n    }\r\n\r\n    function toggleReduced(reduced = !currentReduced.value) {\r\n      currentReduced.value = reduced\r\n\r\n      emit('update:reduced', reduced)\r\n      emitEvent(props.onReducedChange, reduced)\r\n    }\r\n\r\n    function handleSignClick(event: MouseEvent) {\r\n      emitEvent(props.onSignClick, event)\r\n    }\r\n\r\n    function handleMenuSelect(label: string, meta: Record<string, any>) {\r\n      emitEvent(props.onMenuSelect, label, meta)\r\n    }\r\n\r\n    function expandMenuByLabel(label: string) {\r\n      menu.value?.expandItemByLabel(label)\r\n    }\r\n\r\n    return () => {\r\n      const CustomTag = (props.tag || 'aside') as any\r\n\r\n      return (\r\n        <CustomTag class={className.value}>\r\n          {hasTop.value && (\r\n            <div ref={top} class={[nh.be('aside-top'), layoutState.classes.asideTop]}>\r\n              {slots.top ? (\r\n                renderSlot(slots, 'top', slotParams)\r\n              ) : (\r\n                <div class={nh.be('sign')} onClick={handleSignClick}>\r\n                  {props.logo && (\r\n                    <div class={nh.be('logo')}>\r\n                      <img src={props.logo} alt={'Logo'} />\r\n                    </div>\r\n                  )}\r\n                  {props.signName && <span class={nh.be('sign-name')}>{props.signName}</span>}\r\n                </div>\r\n              )}\r\n            </div>\r\n          )}\r\n          <NativeScroll\r\n            class={[nh.be('aside-main'), layoutState.classes.main]}\r\n            use-y-bar\r\n            observe-deep\r\n            height={scrollHeight.value}\r\n          >\r\n            {slots.default ? (\r\n              renderSlot(slots, 'default', slotParams)\r\n            ) : hasMenu.value ? (\r\n              <Menu\r\n                ref={menu}\r\n                {...(props.menuProps || {})}\r\n                transfer\r\n                options={props.menus}\r\n                reduced={currentReduced.value}\r\n                onSelect={handleMenuSelect}\r\n              ></Menu>\r\n            ) : null}\r\n          </NativeScroll>\r\n          <div ref={bottom} class={[nh.be('aside-bottom'), layoutState.classes.asideBottom]}>\r\n            {slots.bottom ? (\r\n              renderSlot(slots, 'bottom', slotParams)\r\n            ) : (\r\n              <div class={nh.be('reduce-handler')} onClick={() => toggleReduced()}>\r\n                {currentReduced.value ? (\r\n                  <Icon {...icons.value.indent}></Icon>\r\n                ) : (\r\n                  <Icon {...icons.value.outdent}></Icon>\r\n                )}\r\n              </div>\r\n            )}\r\n          </div>\r\n          <div\r\n            class={[nh.be('expand-handler'), layoutState.classes.expandHandler]}\r\n            onClick={() => toggleExpanded()}\r\n          >\r\n            {slots.expand ? (\r\n              renderSlot(slots, 'expand', slotParams)\r\n            ) : (\r\n              <Icon {...icons.value.angleRight}></Icon>\r\n            )}\r\n          </div>\r\n        </CustomTag>\r\n      )\r\n    }\r\n  },\r\n})\r\n","import { Masker } from '@/components/masker'\r\nimport { NativeScroll } from '@/components/native-scroll'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  provide,\r\n  reactive,\r\n  ref,\r\n  renderSlot,\r\n  shallowReadonly,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\r\nimport { createSlotRender, useMounted } from '@vexip-ui/hooks'\r\nimport { getYBorder, isClient, runQueueFrame } from '@vexip-ui/utils'\r\nimport LayoutMain from './layout-main'\r\nimport LayoutHeader from './layout-header'\r\nimport LayoutFooter from './layout-footer'\r\nimport LayoutAside from './layout-aside'\r\nimport { layoutProps } from './props'\r\nimport { useMediaQuery } from './helper'\r\nimport { LAYOUT_STATE } from './symbol'\r\n\r\nimport type { NativeScrollExposed } from '@/components/native-scroll'\r\nimport type {\r\n  LayoutAsideExposed,\r\n  LayoutConfig,\r\n  LayoutHeaderExposed,\r\n  LayoutSignType,\r\n} from './symbol'\r\n\r\nexport default defineComponent({\r\n  name: 'Layout',\r\n  props: layoutProps,\r\n  emits: [\r\n    'update:expanded',\r\n    'update:reduced',\r\n    'update:sign-type',\r\n    'update:color',\r\n    'update:dark-mode',\r\n  ],\r\n  setup(_props, { slots, emit, expose }) {\r\n    const props = useProps('layout', _props, {\r\n      locale: null,\r\n      noAside: false,\r\n      footer: false,\r\n      tag: 'section',\r\n      menus: {\r\n        default: () => [],\r\n        static: true,\r\n      },\r\n      menuProps: null,\r\n      logo: '',\r\n      signName: '',\r\n      config: () => ['nav', 'theme', 'color'] as LayoutConfig[],\r\n      user: null,\r\n      actions: () => [],\r\n      expanded: false,\r\n      reduced: false,\r\n      avatarCircle: false,\r\n      signType: 'aside',\r\n      headerFixed: 'lg',\r\n      asideFixed: 'lg',\r\n      copyright: '',\r\n      links: () => [],\r\n      colors: () => ['#339af0', '#f03e3e', '#be4bdb', '#7950f2', '#1b9e44', '#f76707'],\r\n      color: '',\r\n      miniHeaderSign: 'lg',\r\n      verticalLinks: 'md',\r\n      darkMode: null,\r\n      fixedMain: false,\r\n      fitWindow: false,\r\n      innerClasses: () => ({}),\r\n      noHeader: false,\r\n      noMasker: false,\r\n    })\r\n\r\n    const nh = useNameHelper('layout')\r\n    const locked = ref(false)\r\n    // const asideActive = ref(!props.noAside)\r\n    const asideExpanded = ref(props.expanded)\r\n    const asideReduced = ref(props.reduced)\r\n    const currentSignType = ref<LayoutSignType>(props.signType)\r\n    const userDropped = ref(false)\r\n    const currentColor = ref(props.color)\r\n\r\n    const { isMounted } = useMounted('frame')\r\n\r\n    const section = ref<HTMLElement>()\r\n    const scroll = ref<NativeScrollExposed>()\r\n    const header = ref<LayoutHeaderExposed>()\r\n    const aside = ref<LayoutAsideExposed>()\r\n\r\n    const affixMatched = useMediaQuery(toRef(props, 'headerFixed'))\r\n    const expandMatched = useMediaQuery(toRef(props, 'asideFixed'))\r\n    const signNameMatched = useMediaQuery(toRef(props, 'miniHeaderSign'))\r\n\r\n    const state = reactive({\r\n      isLayout: true,\r\n      locked: computed(() => locked.value),\r\n      affixed: false,\r\n      scrollY: 0,\r\n      affixMatched,\r\n      expandMatched,\r\n      useExpand: false,\r\n      expanded: asideExpanded,\r\n      reduced: asideReduced,\r\n      navConfig: computed(() => !props.noAside),\r\n      classes: toRef(props, 'innerClasses'),\r\n      changeInLock,\r\n    })\r\n\r\n    const isHeaderMain = computed(() => !props.noHeader && currentSignType.value === 'header')\r\n    const className = computed(() => {\r\n      return [\r\n        nh.b(),\r\n        nh.bs('vars'),\r\n        {\r\n          [nh.bm('inherit')]: props.inherit,\r\n          [nh.bm('no-aside')]: props.noAside,\r\n          [nh.bm('no-header')]: props.noHeader,\r\n          [nh.bm('header-main')]: isHeaderMain.value,\r\n          [nh.bm('locked')]: !isMounted.value || locked.value,\r\n          [nh.bm('fit-window')]: props.fitWindow,\r\n        },\r\n      ]\r\n    })\r\n    const rootEl = computed(() => {\r\n      return isClient && isMounted.value ? document.documentElement : null\r\n    })\r\n    const signInHeader = computed(() => {\r\n      return props.noAside || isHeaderMain.value || state.useExpand\r\n    })\r\n    const menu = computed(() => aside.value?.menu || header.value?.menu)\r\n    const isDark = ref(props.darkMode)\r\n    const viewHeight = ref('100%')\r\n\r\n    const style = computed(() => {\r\n      return {\r\n        [nh.cv('view-height')]: props.fitWindow ? '100vh' : viewHeight.value,\r\n      }\r\n    })\r\n\r\n    const getIndex = useZIndex()\r\n    const zIndex = ref(asideExpanded.value ? getIndex() : 0)\r\n\r\n    const slotParams = shallowReadonly(\r\n      reactive({\r\n        expanded: asideExpanded,\r\n        reduced: asideReduced,\r\n        toggleExpanded,\r\n        toggleReduced,\r\n      }),\r\n    )\r\n\r\n    provide(LAYOUT_STATE, state)\r\n\r\n    expose({ scroll, menu, toggleExpanded, toggleReduced, expandMenuByLabel })\r\n\r\n    watch(affixMatched, value => {\r\n      state.affixed = !value && state.scrollY >= 50\r\n    })\r\n    watch(\r\n      () => props.expanded,\r\n      value => {\r\n        asideExpanded.value = value\r\n      },\r\n    )\r\n    watch(asideExpanded, value => {\r\n      if (state.useExpand && value) {\r\n        zIndex.value = getIndex()\r\n      }\r\n    })\r\n    watch(\r\n      () => props.reduced,\r\n      value => {\r\n        asideReduced.value = value\r\n      },\r\n    )\r\n    // watch(\r\n    //   () => props.noAside,\r\n    //   value => {\r\n    //     changeInLock(() => (asideActive.value = value))\r\n    //   }\r\n    // )\r\n    watch(currentSignType, value => {\r\n      emit('update:sign-type', value)\r\n      emitEvent(props.onNavChange, value)\r\n    })\r\n    watch(\r\n      () => props.color,\r\n      value => {\r\n        currentColor.value = value || props.colors?.[0] || getBaseColor()\r\n      },\r\n    )\r\n    watch(currentColor, value => {\r\n      emit('update:color', value)\r\n      emitEvent(props.onColorChange, value)\r\n    })\r\n    watch(\r\n      () => props.darkMode,\r\n      value => {\r\n        isDark.value = value\r\n      },\r\n    )\r\n\r\n    function getBaseColor() {\r\n      if (rootEl.value) {\r\n        return getComputedStyle(rootEl.value).getPropertyValue('--vxp-color-primary-base')\r\n      }\r\n\r\n      return '#339af0'\r\n    }\r\n\r\n    function toggleExpanded(expanded = !asideReduced.value) {\r\n      asideExpanded.value = expanded\r\n\r\n      emit('update:expanded', expanded)\r\n      emitEvent(props.onExpandedChange, expanded)\r\n    }\r\n\r\n    function toggleReduced(reduced = !asideReduced.value) {\r\n      asideReduced.value = reduced\r\n\r\n      emit('update:reduced', reduced)\r\n      emitEvent(props.onReducedChange, reduced)\r\n    }\r\n\r\n    function handleSignClick(event: MouseEvent) {\r\n      emitEvent(props.onSignClick, event)\r\n    }\r\n\r\n    function handleMenuSelect(label: string, meta: Record<string, any>) {\r\n      emitEvent(props.onMenuSelect, label, meta)\r\n    }\r\n\r\n    function handleToggleTheme(isDark: boolean) {\r\n      emit('update:dark-mode', isDark)\r\n      emitEvent(props.onToggleTheme, isDark)\r\n    }\r\n\r\n    function handleUserAction(label: string, meta: Record<string, any>) {\r\n      emitEvent(props.onUserAction, label, meta)\r\n    }\r\n\r\n    function expandMenuByLabel(label: string) {\r\n      menu.value?.expandItemByLabel(label)\r\n    }\r\n\r\n    function handleResize() {\r\n      if (scroll.value?.$el) {\r\n        viewHeight.value = `${scroll.value.$el.offsetHeight - getYBorder(scroll.value.$el)}px`\r\n      }\r\n\r\n      emitEvent(props.onContentResize)\r\n    }\r\n\r\n    let cancelChange: (() => void) | undefined\r\n\r\n    function changeInLock(doChange: () => void) {\r\n      cancelChange?.()\r\n      cancelChange = runQueueFrame([\r\n        () => (locked.value = true),\r\n        doChange,\r\n        () => (locked.value = false),\r\n      ])\r\n    }\r\n\r\n    function stopAndPrevent(event: Event) {\r\n      event.stopPropagation()\r\n      event.preventDefault()\r\n    }\r\n\r\n    function renderSign() {\r\n      if (!props.logo && !props.signName && !slots.sign) {\r\n        return null\r\n      }\r\n\r\n      if (slots.sign) {\r\n        return renderSlot(slots, 'sign', slotParams)\r\n      }\r\n\r\n      const showSignName = props.signName && !(signInHeader.value && !signNameMatched.value)\r\n\r\n      return (\r\n        <div\r\n          class={[nh.be('sign'), !showSignName && nh.bem('sign', 'logo-only')]}\r\n          onClick={handleSignClick}\r\n        >\r\n          {[\r\n            props.logo && (\r\n              <div class={nh.be('logo')}>\r\n                <img src={props.logo} alt={'Logo'} />\r\n              </div>\r\n            ),\r\n            showSignName && <span class={nh.be('sign-name')}>{props.signName}</span>,\r\n          ]}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderHeader() {\r\n      if (props.noHeader) {\r\n        return <header role={'none'} aria-hidden style={'display: none'}></header>\r\n      }\r\n\r\n      if (slots.header) {\r\n        return renderSlot(slots, 'header', slotParams)\r\n      }\r\n\r\n      return (\r\n        <LayoutHeader\r\n          ref={header}\r\n          v-model:sign-type={currentSignType.value}\r\n          v-model:user-dropped={userDropped.value}\r\n          v-model:color={currentColor.value}\r\n          v-model:dark-mode={isDark.value}\r\n          inherit\r\n          locale={props.locale}\r\n          user={props.user}\r\n          actions={props.actions}\r\n          config={props.config}\r\n          avatar-circle={props.avatarCircle}\r\n          menus={props.noAside ? props.menus : []}\r\n          menu-props={props.noAside ? props.menuProps : null}\r\n          colors={props.colors}\r\n          onUserAction={handleUserAction}\r\n          onExpandedChange={toggleExpanded}\r\n          onReducedChange={toggleReduced}\r\n          onMenuSelect={handleMenuSelect}\r\n          onToggleTheme={handleToggleTheme}\r\n          {...{\r\n            onWheel: stopAndPrevent,\r\n            onMousemove: stopAndPrevent,\r\n          }}\r\n        >\r\n          {{\r\n            left: createSlotRender(slots, ['header-left', 'headerLeft'], () =>\r\n              signInHeader.value ? renderSign() : null,\r\n            ),\r\n            default: createSlotRender(slots, ['header-main', 'headerMain']),\r\n            right: createSlotRender(slots, ['header-right', 'headerRight']),\r\n            user: createSlotRender(slots, ['header-user', 'headerUser']),\r\n            avatar: createSlotRender(slots, ['header-avatar', 'headerAvatar']),\r\n          }}\r\n        </LayoutHeader>\r\n      )\r\n    }\r\n\r\n    function renderAside() {\r\n      if (props.noAside) {\r\n        return <div role={'none'} aria-hidden style={'display: none'}></div>\r\n      }\r\n\r\n      return (\r\n        <div\r\n          class={[\r\n            nh.be('sidebar'),\r\n            !expandMatched.value && nh.bem('sidebar', 'away'),\r\n            props.innerClasses.sidebar,\r\n          ]}\r\n          style={{ zIndex: state.useExpand ? zIndex.value + 1 : undefined }}\r\n          onWheel={stopAndPrevent}\r\n          onMousemove={stopAndPrevent}\r\n        >\r\n          {slots.aside ? (\r\n            renderSlot(slots, 'aside', slotParams)\r\n          ) : (\r\n            <LayoutAside\r\n              ref={aside}\r\n              v-model:expanded={asideExpanded.value}\r\n              v-model:reduced={asideReduced.value}\r\n              inherit\r\n              sign-type={isHeaderMain.value ? 'header' : 'aside'}\r\n              menus={props.menus}\r\n              menu-props={props.menuProps}\r\n              fixed={props.asideFixed}\r\n              onExpandedChange={toggleExpanded}\r\n              onReducedChange={toggleReduced}\r\n              onMenuSelect={handleMenuSelect}\r\n            >\r\n              {{\r\n                top: createSlotRender(slots, ['aside-top', 'asideTop'], () =>\r\n                  !signInHeader.value ? renderSign() : null,\r\n                ),\r\n                default: createSlotRender(slots, ['aside-main', 'asideMain']),\r\n                bottom: createSlotRender(slots, ['aside-bottom', 'asideBottom']),\r\n                expand: createSlotRender(slots, ['aside-expand', 'asideExpand']),\r\n              }}\r\n            </LayoutAside>\r\n          )}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderMain() {\r\n      if (slots.default) {\r\n        return renderSlot(slots, 'default', slotParams)\r\n      }\r\n\r\n      return (\r\n        <LayoutMain fixed={props.fixedMain}>\r\n          {{\r\n            default: createSlotRender(slots, ['main']),\r\n          }}\r\n        </LayoutMain>\r\n      )\r\n    }\r\n\r\n    function renderFooter() {\r\n      if (slots.footer) {\r\n        return renderSlot(slots, 'footer', slotParams)\r\n      }\r\n\r\n      return (\r\n        <LayoutFooter\r\n          inherit\r\n          copyright={props.copyright}\r\n          links={props.links}\r\n          vertical-links={props.verticalLinks}\r\n        >\r\n          {{\r\n            links: createSlotRender(slots, ['footer-links', 'footerLinks']),\r\n            copyright: createSlotRender(slots, ['footer-copyright', 'footerCopyright']),\r\n          }}\r\n        </LayoutFooter>\r\n      )\r\n    }\r\n\r\n    function renderMasker() {\r\n      if (props.noMasker || !state.useExpand) return null\r\n\r\n      if (slots.masker) {\r\n        return renderSlot(slots, 'masker', slotParams)\r\n      }\r\n\r\n      return (\r\n        <Masker\r\n          v-model:active={asideExpanded.value}\r\n          class={nh.be('masker')}\r\n          inner\r\n          closable\r\n          auto-remove\r\n          transfer={false}\r\n          style={{ zIndex: zIndex.value }}\r\n          onToggle={toggleExpanded}\r\n        ></Masker>\r\n      )\r\n    }\r\n\r\n    function renderWrapper() {\r\n      const CustomTag = (props.tag || 'section') as any\r\n\r\n      return (\r\n        <CustomTag\r\n          class={[\r\n            nh.be('wrapper'),\r\n            props.fixedMain && nh.bem('wrapper', 'fixed'),\r\n            props.innerClasses.wrapper,\r\n          ]}\r\n        >\r\n          {isHeaderMain.value && renderHeader()}\r\n          {renderAside()}\r\n          <section\r\n            ref={section}\r\n            class={[\r\n              nh.be('section'),\r\n              {\r\n                [nh.bem('section', 'away')]: expandMatched.value,\r\n                [nh.bem('section', 'reduced')]: asideReduced.value,\r\n                [nh.bem('section', 'locked')]: locked.value,\r\n                [nh.bem('section', 'fixed')]: props.fixedMain,\r\n              },\r\n              props.innerClasses.section,\r\n            ]}\r\n          >\r\n            {!isHeaderMain.value && renderHeader()}\r\n            {renderMain()}\r\n            {props.footer && renderFooter()}\r\n          </section>\r\n          {renderMasker()}\r\n        </CustomTag>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      if (props.fitWindow) {\r\n        return (\r\n          <section class={className.value} style={style.value}>\r\n            <ResizeObserver throttle onResize={handleResize}>\r\n              {renderWrapper()}\r\n            </ResizeObserver>\r\n          </section>\r\n        )\r\n      }\r\n\r\n      return (\r\n        <NativeScroll\r\n          ref={scroll}\r\n          class={className.value}\r\n          inherit={props.inherit}\r\n          use-y-bar\r\n          observe-deep\r\n          bar-class={[nh.be('scrollbar'), props.innerClasses.scrollbar]}\r\n          style={style.value}\r\n          onResize={handleResize}\r\n        >\r\n          {renderWrapper()}\r\n        </NativeScroll>\r\n      )\r\n    }\r\n  },\r\n})\r\n","<script setup lang=\"ts\">\r\nimport { computed, onBeforeUnmount, ref } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { useRtl } from '@vexip-ui/hooks'\r\nimport { boundRange } from '@vexip-ui/utils'\r\n\r\nimport type { LoadingOptions, LoadingPosition, LoadingState } from './symbol'\r\n\r\ndefineOptions({ name: 'Loading' })\r\n\r\nconst nh = useNameHelper('loading')\r\nconst { isRtl } = useRtl()\r\nconst visible = ref(false)\r\nconst strokeWidth = ref(2)\r\nconst state = ref<LoadingState>('default')\r\nconst position = ref<LoadingPosition>('top')\r\nconst percent = ref(0)\r\n\r\nlet maxPercent = 95\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm(state.value)]: state.value !== 'default',\r\n  }\r\n})\r\n\r\nconst style = computed(() => {\r\n  return {\r\n    [position.value]: '0',\r\n    height: `${strokeWidth.value}px`,\r\n  }\r\n})\r\n\r\nconst fillerStyle = computed(() => {\r\n  return {\r\n    transform: `translateX(${((isRtl.value ? -1 : 1) * (percent.value - 100)) / 2}%) scaleX(${\r\n      percent.value / 100\r\n    })`,\r\n  }\r\n})\r\n\r\nlet timer: ReturnType<typeof setTimeout>\r\nlet interval: ReturnType<typeof setInterval>\r\nlet rafId: ReturnType<typeof requestAnimationFrame>\r\n\r\ndefineExpose({ visible, percent, startLoading })\r\n\r\nonBeforeUnmount(() => {\r\n  clearTimeout(timer)\r\n  clearInterval(interval)\r\n  cancelAnimationFrame(rafId)\r\n})\r\n\r\nfunction startLoading(options: LoadingOptions) {\r\n  if (percent.value === 100) {\r\n    clearTimeout(timer)\r\n\r\n    visible.value = false\r\n    percent.value = 0\r\n    state.value = 'default'\r\n    strokeWidth.value = 2\r\n    position.value = 'top'\r\n  }\r\n\r\n  clearInterval(interval)\r\n\r\n  const setLoading = () => {\r\n    percent.value = boundRange(options.percent, 0, 100)\r\n    state.value = options.state ?? state.value\r\n    strokeWidth.value = boundRange(options.strokeWidth ?? 2, 1, 10)\r\n    position.value = options.position ?? position.value\r\n    maxPercent = boundRange(options.maxPercent ?? 95, percent.value, 95)\r\n\r\n    if (percent.value === 100) {\r\n      timer = setTimeout(() => {\r\n        visible.value = false\r\n      }, 500)\r\n    } else {\r\n      interval = setInterval(() => {\r\n        percent.value += Math.floor(Math.random() * 3 + 1)\r\n\r\n        if (percent.value >= maxPercent) {\r\n          percent.value = maxPercent\r\n          clearInterval(interval)\r\n        }\r\n      }, 500)\r\n    }\r\n  }\r\n\r\n  maxPercent = 95\r\n\r\n  rafId = requestAnimationFrame(() => {\r\n    if (visible.value) {\r\n      setLoading()\r\n    } else {\r\n      visible.value = true\r\n      rafId = requestAnimationFrame(setLoading)\r\n    }\r\n  })\r\n}\r\n</script>\r\n\r\n<template>\r\n  <Transition :name=\"nh.ns('fade')\" appear>\r\n    <div\r\n      v-show=\"visible\"\r\n      :class=\"className\"\r\n      role=\"progressbar\"\r\n      :style=\"style\"\r\n      :aria-valuenow=\"percent\"\r\n      aria-valuemin=\"0\"\r\n      aria-valuemax=\"100\"\r\n    >\r\n      <div :class=\"nh.be('filler')\" :style=\"fillerStyle\"></div>\r\n    </div>\r\n  </Transition>\r\n</template>\r\n","import { createApp, createVNode, render } from 'vue'\r\n\r\nimport Component from './loading.vue'\r\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\r\nimport { destroyObject, isClient } from '@vexip-ui/utils'\r\n\r\nimport type { App, MaybeRef } from 'vue'\r\nimport type { MaybeInstance } from '@vexip-ui/hooks'\r\nimport type { LoadingInstance, LoadingOptions, LoadingState } from './symbol'\r\n\r\nexport type { LoadingState, LoadingOptions }\r\n\r\ntype InitLoadingOptions = Omit<LoadingOptions, 'percent'>\r\n\r\nexport class LoadingManager {\r\n  name: string\r\n  defaults: InitLoadingOptions\r\n\r\n  private _mountedApp: App<unknown> | null\r\n  private _instance: LoadingInstance | null\r\n  private _innerApp: App<unknown> | null\r\n  private _container: HTMLElement | null\r\n  private _wrapper: HTMLElement | SVGElement | null\r\n  private _mountedEl: HTMLElement | null\r\n\r\n  constructor(options: InitLoadingOptions = {}) {\r\n    this._mountedApp = null\r\n    this._instance = null\r\n    this._innerApp = null\r\n    this._container = null\r\n    this._wrapper = null\r\n    this._mountedEl = null\r\n    this.name = 'Loading'\r\n    this.defaults = {}\r\n\r\n    this.config(options)\r\n  }\r\n\r\n  open(percent: number): void\r\n  open(options: LoadingOptions): void\r\n  open(options: number | LoadingOptions) {\r\n    if (!isClient) return\r\n\r\n    if (typeof options === 'number') {\r\n      options = { percent: options }\r\n    }\r\n\r\n    this._getInstance()!.startLoading({ ...this.defaults, ...options })\r\n  }\r\n\r\n  close() {\r\n    this.open(100)\r\n  }\r\n\r\n  config(options: InitLoadingOptions) {\r\n    this.defaults = { ...this.defaults, ...options }\r\n  }\r\n\r\n  clone() {\r\n    const manager = new LoadingManager(this.defaults)\r\n\r\n    manager._mountedApp = this._mountedApp\r\n\r\n    return manager\r\n  }\r\n\r\n  destroy() {\r\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\r\n    this._innerApp?.unmount()\r\n    this._container && render(null, this._container)\r\n    destroyObject(this)\r\n  }\r\n\r\n  isDestroyed() {\r\n    return false\r\n  }\r\n\r\n  install(app: App, options: InitLoadingOptions & { property?: string } = {}) {\r\n    const { property, ...others } = options\r\n\r\n    this.config(others)\r\n    this._mountedApp = app\r\n\r\n    if (property || !app.config.globalProperties.$loading) {\r\n      app.config.globalProperties[property || '$loading'] = this\r\n    }\r\n  }\r\n\r\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\r\n    if (!isClient) return\r\n\r\n    const el = unrefElement(target)\r\n\r\n    if (el) {\r\n      this._wrapper = el\r\n\r\n      if (this._instance) {\r\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\r\n      } else {\r\n        this._getInstance()\r\n      }\r\n    }\r\n  }\r\n\r\n  private _getInstance() {\r\n    if (!this._instance && isClient) {\r\n      if (!this._mountedApp) {\r\n        console.warn('[vexip-ui:Loading]: App missing, the plugin maybe not installed.')\r\n\r\n        this._container = document.createElement('div')\r\n        this._innerApp = createApp(Component)\r\n        this._instance = this._innerApp.mount(this._container) as LoadingInstance\r\n      } else {\r\n        const vnode = createVNode(Component, null, null)\r\n\r\n        this._container = document.createElement('div')\r\n        vnode.appContext = this._mountedApp._context\r\n\r\n        render(vnode, this._container)\r\n\r\n        this._instance = proxyExposed<LoadingInstance>(vnode)\r\n      }\r\n\r\n      this._mountedEl = this._container.firstElementChild as HTMLElement\r\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\r\n    }\r\n\r\n    return this._instance\r\n  }\r\n}\r\n\r\nexport const Loading = new LoadingManager()\r\n","import type { InjectionKey } from 'vue'\r\n\r\nexport type Key = string | number\r\nexport type PopupPlacement =\r\n  | 'top-right'\r\n  | 'top-center'\r\n  | 'top-left'\r\n  | 'bottom-right'\r\n  | 'bottom-center'\r\n  | 'bottom-left'\r\n\r\nexport interface PopupItemState extends Record<string, unknown> {\r\n  key: Key,\r\n  content: string,\r\n  closable: boolean,\r\n  height: number,\r\n  visible: boolean,\r\n  verticalPosition: number,\r\n  type?: string,\r\n  className?: any,\r\n  style?: any,\r\n  icon?: Record<string, any> | (() => any),\r\n  iconColor?: string,\r\n  onOpen: (key: Key) => void,\r\n  onClose: (result: boolean) => void,\r\n  onEnter: () => void,\r\n  onLeave: () => void,\r\n}\r\n\r\nexport const DELETE_HANDLER = '__VXP_POPUP_DELETE_HANDLER' as unknown as InjectionKey<\r\n  (key: Key) => void\r\n>\r\n\r\nexport const popupPlacements = Object.freeze<PopupPlacement[]>([\r\n  'top-right',\r\n  'top-center',\r\n  'top-left',\r\n  'bottom-right',\r\n  'bottom-center',\r\n  'bottom-left',\r\n])\r\n","<script setup lang=\"ts\">\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, inject, nextTick, onMounted, ref } from 'vue'\r\n\r\nimport { classProp, useNameHelper, useZIndex } from '@vexip-ui/config'\r\nimport { noop } from '@vexip-ui/utils'\r\nimport { DELETE_HANDLER } from './symbol'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { PopupItemState } from './symbol'\r\n\r\ndefineOptions({ name: 'PopupItem' })\r\n\r\nconst props = defineProps({\r\n  state: {\r\n    type: Object as PropType<PopupItemState>,\r\n    default: () => ({}),\r\n  },\r\n  transitionName: {\r\n    type: String,\r\n    default: null,\r\n  },\r\n  innerClass: {\r\n    type: classProp,\r\n    default: null,\r\n  },\r\n})\r\n\r\nconst emit = defineEmits(['enter', 'leave'])\r\n\r\nconst handleDelete = inject(DELETE_HANDLER, noop)\r\nconst nh = useNameHelper('popup')\r\nconst getIndex = useZIndex()\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nconst transition = computed(() => props.transitionName || nh.ns('popup-top'))\r\n\r\nonMounted(() => {\r\n  nextTick(() => {\r\n    const state = props.state\r\n\r\n    if (state && wrapper.value) {\r\n      state.height = wrapper.value.offsetHeight\r\n    }\r\n  })\r\n})\r\n</script>\r\n\r\n<template>\r\n  <Transition appear :name=\"transition\" @after-leave=\"handleDelete(state.key)\">\r\n    <div\r\n      v-show=\"state.visible\"\r\n      ref=\"wrapper\"\r\n      :class=\"nh.be('item')\"\r\n      :style=\"{ zIndex: getIndex() }\"\r\n      :vxp-index=\"state.key\"\r\n      @pointerenter=\"emit('enter')\"\r\n      @pointerleave=\"emit('leave')\"\r\n    >\r\n      <div :class=\"[nh.be('item-inner'), innerClass]\">\r\n        <slot :item=\"state\">\r\n          <Renderer\r\n            v-if=\"typeof state.renderer === 'function'\"\r\n            :renderer=\"state.renderer\"\r\n          ></Renderer>\r\n          <template v-else>\r\n            {{ state.content }}\r\n          </template>\r\n        </slot>\r\n      </div>\r\n    </div>\r\n  </Transition>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed, provide, reactive, ref, watch } from 'vue'\r\n\r\nimport PopupItem from './popup-item.vue'\r\nimport { classProp, useNameHelper } from '@vexip-ui/config'\r\nimport { getGlobalCount, isFunction, noop } from '@vexip-ui/utils'\r\nimport { DELETE_HANDLER, popupPlacements } from './symbol'\r\n\r\nimport type { CSSProperties } from 'vue'\r\nimport type { Key, PopupItemState, PopupPlacement } from './symbol'\r\n\r\ntype QueueState =\r\n  | {\r\n    type: 'add',\r\n    param: Record<string, unknown>,\r\n  }\r\n  | {\r\n    type: 'clear',\r\n    param: Key,\r\n  }\r\n\r\ndefineOptions({ name: 'Popup' })\r\n\r\nconst props = defineProps({\r\n  transitionName: {\r\n    type: String,\r\n    default: null,\r\n  },\r\n  innerClass: {\r\n    type: classProp,\r\n    default: null,\r\n  },\r\n  placement: {\r\n    default: 'top-right' as PopupPlacement,\r\n    validator: (value: PopupPlacement) => popupPlacements.includes(value),\r\n  },\r\n  startOffset: {\r\n    type: Number,\r\n    default: 30,\r\n  },\r\n  itemGap: {\r\n    type: Number,\r\n    default: 16,\r\n  },\r\n})\r\n\r\ndefineSlots<{ item: (item: any) => any }>()\r\n\r\nconst nh = useNameHelper('popup')\r\nconst items = ref<PopupItemState[]>([])\r\nconst queue: QueueState[] = []\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nlet pending = false\r\n\r\nconst placementArray = computed(() => {\r\n  return props.placement.split('-') as ['top' | 'bottom', 'right' | 'center' | 'left']\r\n})\r\nconst transition = computed(() => props.transitionName || nh.ns('popup-top'))\r\n\r\nwatch(\r\n  () => props.startOffset,\r\n  (value, prevValue) => {\r\n    items.value.forEach(item => {\r\n      item.verticalPosition += value - prevValue\r\n    })\r\n  },\r\n)\r\n\r\nprovide(DELETE_HANDLER, deleteItem)\r\n\r\ndefineExpose({\r\n  items,\r\n  wrapper,\r\n  add,\r\n  remove,\r\n  has,\r\n  find,\r\n  clear,\r\n})\r\n\r\nfunction getItemStyle(item: PopupItemState) {\r\n  const verticalStyle = placementArray.value[0]\r\n  const style: CSSProperties = { [verticalStyle]: `${item.verticalPosition}px` }\r\n  const zIndex = parseInt(item.zIndex as string)\r\n\r\n  if (!Number.isNaN(zIndex)) {\r\n    style.zIndex = zIndex\r\n  }\r\n\r\n  return style\r\n}\r\n\r\nfunction add(options: Record<string, any>) {\r\n  return new Promise<Key>(resolve => {\r\n    const onOpen = isFunction(options.onOpen) ? options.onOpen : noop\r\n\r\n    options.onOpen = (key: Key) => {\r\n      resolve(key)\r\n      onOpen()\r\n    }\r\n\r\n    queue.push({\r\n      type: 'add',\r\n      param: options,\r\n    })\r\n\r\n    if (!pending) {\r\n      pending = true\r\n      queueOut()\r\n    }\r\n  })\r\n}\r\n\r\nfunction remove(key: Key) {\r\n  return new Promise<boolean>(resolve => {\r\n    const item = find(key)\r\n\r\n    if (!item) return resolve(false)\r\n\r\n    const onClose = isFunction(item.onClose) ? item.onClose : noop\r\n\r\n    item.onClose = (result: boolean) => {\r\n      resolve(result)\r\n      onClose(result)\r\n    }\r\n\r\n    queue.push({\r\n      type: 'clear',\r\n      param: key,\r\n    })\r\n\r\n    if (!pending) {\r\n      pending = true\r\n      queueOut()\r\n    }\r\n  })\r\n}\r\n\r\nfunction queueOut() {\r\n  if (queue.length) {\r\n    const state = queue.shift()!\r\n\r\n    if (state.type === 'add') {\r\n      renderItem(state.param)\r\n    } else {\r\n      removeItem(state.param)\r\n    }\r\n\r\n    requestAnimationFrame(queueOut)\r\n  } else {\r\n    pending = false\r\n  }\r\n}\r\n\r\nfunction renderItem(options: Record<string, any>) {\r\n  let item = options.key ? find(options.key as Key) : null\r\n\r\n  if (!item?.visible) {\r\n    const index = getGlobalCount()\r\n    const key = (options.key as Key) ?? nh.bs(`${index}`)\r\n\r\n    let currentVertical = props.startOffset\r\n\r\n    items.value.forEach(existingItem => {\r\n      if (existingItem.visible) {\r\n        currentVertical += existingItem.height + props.itemGap\r\n      }\r\n    })\r\n\r\n    item = reactive(\r\n      Object.assign(\r\n        {\r\n          key,\r\n          content: '',\r\n          closable: false,\r\n          onOpen: noop,\r\n          onClose: noop,\r\n          onEnter: noop,\r\n          onLeave: noop,\r\n        },\r\n        options,\r\n        {\r\n          height: 0,\r\n          visible: true,\r\n          verticalPosition: currentVertical,\r\n        },\r\n      ),\r\n    )\r\n\r\n    items.value.push(item)\r\n  }\r\n\r\n  // 使用 options 上的回调以防止重复 key 时指向不正确\r\n  isFunction(options.onOpen) && options.onOpen(item.key)\r\n}\r\n\r\nfunction removeItem(key: Key) {\r\n  const index = items.value.findIndex(item => item.key === key)\r\n\r\n  if (~index) {\r\n    const item = items.value[index]\r\n    const removeHeight = item.height\r\n\r\n    item.visible = false\r\n\r\n    for (let i = index + 1, len = items.value.length; i < len; ++i) {\r\n      items.value[i].verticalPosition -= removeHeight + props.itemGap\r\n    }\r\n\r\n    // 关闭回调\r\n    isFunction(item.onClose) && item.onClose(true)\r\n  }\r\n}\r\n\r\nfunction deleteItem(key: Key) {\r\n  const index = items.value.findIndex(item => item.key === key)\r\n\r\n  if (~index) {\r\n    items.value.splice(index, 1)\r\n  }\r\n}\r\n\r\nfunction has(key: Key) {\r\n  return !~items.value.findIndex(item => item.key === key)\r\n}\r\n\r\nfunction find(key: Key) {\r\n  return items.value.find(item => item.key === key)\r\n}\r\n\r\nfunction clear() {\r\n  queue.length = 0\r\n  items.value = []\r\n}\r\n\r\nfunction enterItem(item: PopupItemState) {\r\n  isFunction(item.onEnter) && item.onEnter()\r\n}\r\n\r\nfunction leaveItem(item: PopupItemState) {\r\n  isFunction(item.onLeave) && item.onLeave()\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"[nh.b(), nh.bm(placement)]\">\r\n    <PopupItem\r\n      v-for=\"item in items\"\r\n      :key=\"item.key\"\r\n      :state=\"item\"\r\n      :transition-name=\"transition\"\r\n      :inner-class=\"innerClass\"\r\n      :style=\"getItemStyle(item)\"\r\n      @enter=\"enterItem(item)\"\r\n      @leave=\"leaveItem(item)\"\r\n    >\r\n      <template #default=\"{ item: itemData }\">\r\n        <slot name=\"item\" :item=\"itemData\"></slot>\r\n      </template>\r\n    </PopupItem>\r\n  </div>\r\n</template>\r\n","import type { ComponentPublicInstance } from 'vue'\r\n\r\nexport type Key = string | number\r\nexport type MessageType = 'primary' | 'info' | 'success' | 'warning' | 'error'\r\nexport type MessagePlacement = 'top' | 'bottom'\r\n\r\nexport interface MessageOptions extends Record<string, any> {\r\n  content?: string,\r\n  key?: Key,\r\n  icon?: Record<string, any> | (() => any),\r\n  iconColor?: string,\r\n  type?: MessageType | null,\r\n  duration?: number,\r\n  className?: string | Record<string, any>,\r\n  style?: string | Record<string, any>,\r\n  zIndex?: number,\r\n  background?: boolean | string,\r\n  color?: boolean | string,\r\n  closable?: boolean,\r\n  parseHtml?: boolean,\r\n  liveOnEnter?: boolean,\r\n  renderer?: () => any,\r\n}\r\n\r\nexport interface MessageConfig {\r\n  placement?: MessagePlacement,\r\n  startOffset?: number,\r\n  itemGap?: number,\r\n}\r\n\r\nexport interface MessageInstance extends ComponentPublicInstance {\r\n  add: (options: MessageOptions) => void,\r\n  remove: (key: string | number) => void,\r\n  clear: () => void,\r\n  config: (config: MessageConfig) => void,\r\n}\r\n\r\nexport const effectiveTypes = Object.freeze(['primary', 'info', 'success', 'warning', 'error'])\r\n// For a11n\r\nexport const assertiveTypes = Object.freeze(['success', 'warning', 'error'])\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { Popup } from '@/components/popup'\r\n\r\nimport { computed, reactive, ref } from 'vue'\r\n\r\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\r\nimport { assertiveTypes, effectiveTypes } from './symbol'\r\n\r\nimport type { Key, MessageConfig, MessagePlacement } from './symbol'\r\n\r\ndefineOptions({ name: 'Message' })\r\n\r\nconst nh = useNameHelper('message')\r\nconst icons = useIcons()\r\n\r\nconst predefinedIcons = computed(() => ({\r\n  primary: icons.value.info,\r\n  info: icons.value.info,\r\n  success: icons.value.success,\r\n  warning: icons.value.warning,\r\n  error: icons.value.error,\r\n}))\r\n\r\nconst placement = ref<MessagePlacement>('top')\r\nconst startOffset = ref(30)\r\nconst itemGap = ref(16)\r\nconst popup = ref<InstanceType<typeof Popup>>()\r\n\r\nconst placementCenter = computed(() => `${placement.value}-center` as const)\r\n\r\nasync function add(options: Record<string, any>) {\r\n  if (popup.value) {\r\n    await popup.value.add(options)\r\n  }\r\n}\r\n\r\nasync function remove(key: Key) {\r\n  return !!popup.value && (await popup.value.remove(key))\r\n}\r\n\r\nfunction config(config: MessageConfig) {\r\n  placement.value = config.placement || placement.value\r\n  startOffset.value = config.startOffset || startOffset.value\r\n  itemGap.value = config.itemGap || itemGap.value\r\n}\r\n\r\nfunction clear() {\r\n  popup.value && popup.value.clear()\r\n}\r\n\r\ndefineExpose(\r\n  reactive({\r\n    popup,\r\n    add,\r\n    remove,\r\n    clear,\r\n    config,\r\n  }),\r\n)\r\n</script>\r\n\r\n<template>\r\n  <!-- eslint-disable vue/no-v-html -->\r\n  <Popup\r\n    ref=\"popup\"\r\n    :class=\"nh.b()\"\r\n    :transition-name=\"nh.ns(`popup-${placement}`)\"\r\n    :placement=\"placementCenter\"\r\n    :start-offset=\"startOffset\"\r\n    :item-gap=\"itemGap\"\r\n  >\r\n    <template #item=\"{ item }: { item: import('./symbol').MessageOptions }\">\r\n      <div\r\n        :class=\"[\r\n          {\r\n            [nh.be('item')]: true,\r\n            [nh.bs('vars')]: true,\r\n            [nh.bem('item', item.type!)]: item.type && effectiveTypes.includes(item.type),\r\n            [nh.bem('item', 'background')]: item.background,\r\n            [nh.bem('item', 'color')]: item.background && item.color,\r\n            [nh.bem('item', 'color-only')]: !item.background && item.color,\r\n            [nh.bem('item', 'has-icon')]: item.icon,\r\n            [nh.bem('item', 'closable')]: item.closable\r\n          },\r\n          item.className\r\n        ]\"\r\n        role=\"alert\"\r\n        :style=\"[\r\n          {\r\n            color: typeof item.color === 'string' ? item.color : undefined,\r\n            backgroundColor: typeof item.background === 'string' ? item.background : undefined\r\n          },\r\n          item.style || {}\r\n        ]\"\r\n        aria-atomic=\"true\"\r\n        :aria-live=\"item.type && assertiveTypes.includes(item.type) ? 'assertive' : 'polite'\"\r\n      >\r\n        <div :class=\"nh.be('wrapper')\">\r\n          <div\r\n            v-if=\"item.icon || (item.type && effectiveTypes.includes(item.type))\"\r\n            :class=\"nh.be('icon')\"\r\n            :style=\"{ color: item.iconColor }\"\r\n          >\r\n            <Icon\r\n              v-if=\"item.icon\"\r\n              :icon=\"item.icon\"\r\n              :style=\"[{ color: item.iconColor }, (item.icon as any).style]\"\r\n            ></Icon>\r\n            <Icon\r\n              v-else\r\n              v-bind=\"predefinedIcons[item.type!]\"\r\n              :style=\"{ color: item.iconColor }\"\r\n            ></Icon>\r\n          </div>\r\n          <Renderer\r\n            v-if=\"typeof item.renderer === 'function'\"\r\n            :renderer=\"item.renderer\"\r\n            :data=\"item\"\r\n          ></Renderer>\r\n          <template v-else>\r\n            <div v-if=\"item.parseHtml\" :class=\"nh.be('content')\" v-html=\"item.content\"></div>\r\n            <div v-else :class=\"nh.be('content')\">\r\n              {{ item.content || '' }}\r\n            </div>\r\n          </template>\r\n        </div>\r\n        <button\r\n          v-if=\"item.closable\"\r\n          type=\"button\"\r\n          :class=\"nh.be('close')\"\r\n          @click=\"remove(item.key!)\"\r\n        >\r\n          <Icon v-bind=\"icons.close\" label=\"close\"></Icon>\r\n        </button>\r\n      </div>\r\n    </template>\r\n  </Popup>\r\n</template>\r\n","import { createApp, createVNode, markRaw, render } from 'vue'\r\n\r\nimport Component from './message.vue'\r\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\r\nimport { destroyObject, isClient, isNull, noop, toNumber } from '@vexip-ui/utils'\r\n\r\nimport type { App, MaybeRef } from 'vue'\r\nimport type { MaybeInstance } from '@vexip-ui/hooks'\r\nimport type {\r\n  Key,\r\n  MessageConfig,\r\n  MessageInstance,\r\n  MessageOptions,\r\n  MessagePlacement,\r\n  MessageType,\r\n} from './symbol'\r\n\r\nexport type { MessageConfig, MessageType, MessagePlacement, MessageOptions }\r\n\r\ntype FuzzyOptions = string | MessageOptions\r\ntype ManagerOptions = { duration?: number } & MessageConfig & Record<string, unknown>\r\n\r\ninterface AipMethod {\r\n  (options: MessageOptions): () => void,\r\n  (content: string, duration?: number): () => void,\r\n  /** @internal */\r\n  (options: FuzzyOptions, duration?: number): () => void,\r\n}\r\n\r\nconst placementWhiteList: MessagePlacement[] = ['top', 'bottom']\r\n\r\nlet count = 1\r\n\r\nfunction getKey() {\r\n  return `message-${count++}`\r\n}\r\n\r\nexport class MessageManager {\r\n  name: string\r\n  defaults: Record<string, unknown>\r\n\r\n  open: AipMethod\r\n  primary: AipMethod\r\n  info: AipMethod\r\n  success: AipMethod\r\n  warning: AipMethod\r\n  error: AipMethod\r\n\r\n  private _mountedApp: App<unknown> | null\r\n  private _instance: MessageInstance | null\r\n  private _innerApp: App<unknown> | null\r\n  private _container: HTMLElement | null\r\n  private _wrapper: HTMLElement | SVGElement | null\r\n  private _mountedEl: HTMLElement | null\r\n  private _installed: boolean\r\n  private _configRecord: MessageConfig | null\r\n\r\n  constructor(options: ManagerOptions = {}) {\r\n    options = {\r\n      ...options,\r\n      duration: options.duration ? toNumber(options.duration) : 3000,\r\n    }\r\n\r\n    this._mountedApp = null\r\n    this._instance = null\r\n    this._innerApp = null\r\n    this._container = null\r\n    this._wrapper = null\r\n    this._mountedEl = null\r\n    this._installed = false\r\n    this._configRecord = null\r\n    this.name = 'Message'\r\n    this.defaults = {}\r\n\r\n    this.config(options)\r\n\r\n    this.open = (content: FuzzyOptions, duration?: number) => {\r\n      return this._open(null, content, duration)\r\n    }\r\n\r\n    this.primary = (content: FuzzyOptions, duration?: number) => {\r\n      return this._open('primary', content, duration)\r\n    }\r\n\r\n    this.info = (content: FuzzyOptions, duration?: number) => {\r\n      return this._open('info', content, duration)\r\n    }\r\n\r\n    this.success = (content: FuzzyOptions, duration?: number) => {\r\n      return this._open('success', content, duration)\r\n    }\r\n\r\n    this.warning = (content: FuzzyOptions, duration?: number) => {\r\n      return this._open('warning', content, duration)\r\n    }\r\n\r\n    this.error = (content: FuzzyOptions, duration?: number) => {\r\n      return this._open('error', content, duration)\r\n    }\r\n  }\r\n\r\n  judge(state: boolean, success: string, error: string, duration?: number): void\r\n  judge(state: boolean, success: MessageOptions, error: string, duration?: number): void\r\n  judge(state: boolean, success: string, error: MessageOptions, duration?: number): void\r\n  judge(state: boolean, success: MessageOptions, error: MessageOptions): void\r\n  judge(\r\n    state: boolean,\r\n    success: string | MessageOptions,\r\n    error: string | MessageOptions,\r\n    duration?: number,\r\n  ) {\r\n    if (state) {\r\n      this.success(success, duration)\r\n    } else {\r\n      this.error(error, duration)\r\n    }\r\n  }\r\n\r\n  close(key: Key) {\r\n    if (isNull(key)) {\r\n      this.clear()\r\n    } else {\r\n      this._getInstance()?.remove(key)\r\n    }\r\n  }\r\n\r\n  config({ placement, startOffset, itemGap, ...others }: MessageConfig & MessageOptions) {\r\n    this._configRecord = { placement, startOffset, itemGap }\r\n    this.defaults = { ...this.defaults, ...others }\r\n\r\n    if (this._installed) {\r\n      const instance = this._getInstance()\r\n\r\n      if (instance) {\r\n        if (placement) {\r\n          instance.config({\r\n            placement: placementWhiteList.includes(placement) ? placement : placementWhiteList[0],\r\n          })\r\n        }\r\n\r\n        instance.config({ startOffset, itemGap })\r\n      }\r\n    }\r\n  }\r\n\r\n  clone() {\r\n    const manager = new MessageManager(this.defaults)\r\n\r\n    manager._mountedApp = this._mountedApp\r\n    manager._configRecord = this._configRecord\r\n    manager._installed = this._installed\r\n\r\n    return manager\r\n  }\r\n\r\n  clear() {\r\n    this._getInstance()?.clear()\r\n  }\r\n\r\n  destroy() {\r\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\r\n    this._innerApp?.unmount()\r\n    this._container && render(null, this._container)\r\n    destroyObject(this)\r\n  }\r\n\r\n  isDestroyed() {\r\n    return false\r\n  }\r\n\r\n  install(app: App, options: ManagerOptions & { property?: string } = {}) {\r\n    const { property, ...others } = options\r\n\r\n    this._mountedApp = app\r\n    this._installed = true\r\n    this.config(others)\r\n\r\n    if (property || !app.config.globalProperties.$message) {\r\n      app.config.globalProperties[property || '$message'] = this\r\n    }\r\n  }\r\n\r\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\r\n    if (!isClient) return\r\n\r\n    const el = unrefElement(target)\r\n\r\n    if (el) {\r\n      this._wrapper = el\r\n\r\n      if (this._instance) {\r\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\r\n      } else {\r\n        this._getInstance()\r\n      }\r\n    }\r\n  }\r\n\r\n  private _getInstance() {\r\n    if (!this._instance && isClient) {\r\n      if (!this._mountedApp) {\r\n        console.warn('[vexip-ui:Message]: App missing, the plugin maybe not installed.')\r\n\r\n        this._container = document.createElement('div')\r\n        this._innerApp = createApp(Component)\r\n        this._instance = this._innerApp.mount(this._container) as MessageInstance\r\n      } else {\r\n        const vnode = createVNode(Component, null, null)\r\n\r\n        this._container = document.createElement('div')\r\n        vnode.appContext = this._mountedApp._context\r\n\r\n        render(vnode, this._container)\r\n\r\n        this._instance = proxyExposed<MessageInstance>(vnode)\r\n      }\r\n\r\n      this._mountedEl = this._container.firstElementChild as HTMLElement\r\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\r\n    }\r\n\r\n    return this._instance\r\n  }\r\n\r\n  private _open(type: null | MessageType, content: FuzzyOptions, _duration?: number) {\r\n    if (!isClient) {\r\n      return noop\r\n    }\r\n\r\n    const options = typeof content === 'string' ? { content, duration: _duration } : content\r\n\r\n    const key = options.key ?? getKey()\r\n    const message = this._getInstance()!\r\n\r\n    let timer: ReturnType<typeof setTimeout>\r\n\r\n    const userCloseFn = options.onClose\r\n    const onClose = () => {\r\n      clearTimeout(timer)\r\n\r\n      if (typeof userCloseFn === 'function') {\r\n        return userCloseFn()\r\n      }\r\n    }\r\n\r\n    const userEnterFn = options.onEnter\r\n    const onEnter = () => {\r\n      if (options.liveOnEnter) {\r\n        clearTimeout(timer)\r\n      }\r\n\r\n      if (typeof userEnterFn === 'function') {\r\n        return userEnterFn()\r\n      }\r\n    }\r\n\r\n    const userLeaveFn = options.onLeave\r\n    const onLeave = () => {\r\n      if (options.liveOnEnter) {\r\n        clearTimeout(timer)\r\n        setDelayClose()\r\n      }\r\n\r\n      if (typeof userLeaveFn === 'function') {\r\n        return userLeaveFn()\r\n      }\r\n    }\r\n\r\n    const item: MessageOptions = {\r\n      ...this.defaults,\r\n      ...options,\r\n      key,\r\n      type: type ?? options.type,\r\n      onClose,\r\n      onEnter,\r\n      onLeave,\r\n    }\r\n\r\n    if (item.icon && typeof item.icon !== 'function') {\r\n      item.icon = markRaw(item.icon)\r\n    }\r\n\r\n    message.add(item)\r\n    setDelayClose()\r\n\r\n    function setDelayClose() {\r\n      const duration = typeof item.duration === 'number' ? item.duration : 3000\r\n\r\n      if (duration >= 500) {\r\n        timer = setTimeout(() => {\r\n          message.remove(key)\r\n        }, duration)\r\n      }\r\n    }\r\n\r\n    return () => {\r\n      clearTimeout(timer)\r\n      message.remove(key)\r\n    }\r\n  }\r\n}\r\n\r\nexport const Message = new MessageManager()\r\n","import type { ComponentPublicInstance } from 'vue'\r\n\r\nexport type Key = string | number\r\nexport type NoticeType = 'primary' | 'info' | 'success' | 'warning' | 'error'\r\nexport type NoticePlacement = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'\r\n\r\nexport interface NoticeOptions extends Record<string, any> {\r\n  title?: string,\r\n  content?: string,\r\n  key?: Key,\r\n  icon?: Record<string, any> | (() => any),\r\n  iconColor?: string,\r\n  type?: NoticeType | null,\r\n  duration?: number,\r\n  className?: string | Record<string, any>,\r\n  style?: string | Record<string, any>,\r\n  zIndex?: number,\r\n  background?: boolean | string,\r\n  color?: boolean | string,\r\n  closable?: boolean,\r\n  parseHtml?: boolean,\r\n  liveOnEnter?: boolean,\r\n  renderer?: () => any,\r\n}\r\n\r\nexport interface NoticeConfig {\r\n  placement?: NoticePlacement,\r\n  startOffset?: number,\r\n  itemGap?: number,\r\n}\r\n\r\nexport interface NoticeInstance extends ComponentPublicInstance {\r\n  add: (options: NoticeOptions) => void,\r\n  remove: (key: string | number) => void,\r\n  clear: () => void,\r\n  config: (config: NoticeConfig) => void,\r\n}\r\n\r\nexport const effectiveTypes = Object.freeze(['primary', 'info', 'success', 'warning', 'error'])\r\n// For a11n\r\nexport const assertiveTypes = Object.freeze(['success', 'warning', 'error'])\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { Popup } from '@/components/popup'\r\n\r\nimport { computed, reactive, ref } from 'vue'\r\n\r\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\r\nimport { assertiveTypes, effectiveTypes } from './symbol'\r\n\r\nimport type { Key, NoticeConfig, NoticePlacement } from './symbol'\r\n\r\ndefineOptions({ name: 'Notice' })\r\n\r\nconst nh = useNameHelper('notice')\r\nconst icons = useIcons()\r\n\r\nconst predefinedIcons = computed(() => ({\r\n  primary: icons.value.info,\r\n  info: icons.value.info,\r\n  success: icons.value.success,\r\n  warning: icons.value.warning,\r\n  error: icons.value.error,\r\n}))\r\n\r\nconst placement = ref<NoticePlacement>('top-right')\r\nconst startOffset = ref(30)\r\nconst itemGap = ref(16)\r\nconst popup = ref<InstanceType<typeof Popup>>()\r\n\r\nasync function add(options: Record<string, any>) {\r\n  if (popup.value) {\r\n    await popup.value.add(options)\r\n  }\r\n}\r\n\r\nasync function remove(key: Key) {\r\n  return !!popup.value && (await popup.value.remove(key))\r\n}\r\n\r\nfunction clear() {\r\n  popup.value && popup.value.clear()\r\n}\r\n\r\nfunction config(config: NoticeConfig) {\r\n  placement.value = config.placement || placement.value\r\n  startOffset.value = config.startOffset || startOffset.value\r\n  itemGap.value = config.itemGap || itemGap.value\r\n}\r\n\r\ndefineExpose(\r\n  reactive({\r\n    popup,\r\n    add,\r\n    remove,\r\n    clear,\r\n    config,\r\n  }),\r\n)\r\n</script>\r\n\r\n<template>\r\n  <!-- eslint-disable vue/no-v-html -->\r\n  <Popup\r\n    ref=\"popup\"\r\n    :class=\"nh.b()\"\r\n    :transition-name=\"nh.ns(`popup-${placement.split('-')[1]}`)\"\r\n    :placement=\"placement\"\r\n    :start-offset=\"startOffset\"\r\n    :item-gap=\"itemGap\"\r\n  >\r\n    <template #item=\"{ item }: { item: import('./symbol').NoticeOptions }\">\r\n      <div\r\n        :class=\"[\r\n          {\r\n            [nh.be('item')]: true,\r\n            [nh.bs('vars')]: true,\r\n            [nh.bem('item', 'title-only')]: !item.content && typeof item.renderer !== 'function',\r\n            [nh.bem('item', 'has-icon')]: item.icon,\r\n            [nh.bem('item', 'content-only')]: !item.title,\r\n            [nh.bem('item', item.type!)]: item.type && effectiveTypes.includes(item.type),\r\n            [nh.bem('item', 'background')]: item.background,\r\n            [nh.bem('item', 'color')]: item.background && item.color,\r\n            [nh.bem('item', 'color-only')]: !item.background && item.color,\r\n            [nh.bem('item', 'marker')]: item.marker\r\n          },\r\n          item.className\r\n        ]\"\r\n        role=\"alert\"\r\n        :style=\"[\r\n          {\r\n            color: typeof item.color === 'string' ? item.color : undefined,\r\n            backgroundColor: typeof item.background === 'string' ? item.background : undefined\r\n          },\r\n          item.style || {}\r\n        ]\"\r\n        aria-atomic=\"true\"\r\n        :aria-live=\"item.type && assertiveTypes.includes(item.type) ? 'assertive' : 'polite'\"\r\n      >\r\n        <div\r\n          v-if=\"item.icon || (item.type && effectiveTypes.includes(item.type))\"\r\n          :class=\"nh.be('icon')\"\r\n          :style=\"{ color: item.iconColor }\"\r\n        >\r\n          <Icon\r\n            v-if=\"item.icon\"\r\n            :icon=\"item.icon\"\r\n            :scale=\"!item.content && typeof item.renderer !== 'function' ? 1 : 2\"\r\n            :style=\"[{ color: item.iconColor }, (item.icon as any).style]\"\r\n          ></Icon>\r\n          <Icon\r\n            v-else\r\n            v-bind=\"predefinedIcons[item.type!]\"\r\n            :scale=\"!item.content && typeof item.renderer !== 'function' ? 1 : 2\"\r\n            :style=\"{ color: item.iconColor }\"\r\n          ></Icon>\r\n        </div>\r\n        <div :class=\"nh.be('wrapper')\">\r\n          <Renderer\r\n            v-if=\"typeof item.renderer === 'function'\"\r\n            :renderer=\"item.renderer\"\r\n            :data=\"item\"\r\n          ></Renderer>\r\n          <template v-else>\r\n            <template v-if=\"item.title\">\r\n              <div\r\n                v-if=\"item.parseHtml\"\r\n                :class=\"nh.be('title')\"\r\n                :style=\"{\r\n                  color: typeof item.titleColor === 'string' ? item.titleColor : undefined\r\n                }\"\r\n                v-html=\"item.title\"\r\n              ></div>\r\n              <div\r\n                v-else\r\n                :class=\"nh.be('title')\"\r\n                :style=\"{\r\n                  color: typeof item.titleColor === 'string' ? item.titleColor : undefined\r\n                }\"\r\n              >\r\n                {{ item.title || '' }}\r\n              </div>\r\n            </template>\r\n            <template v-if=\"item.content\">\r\n              <div v-if=\"item.parseHtml\" :class=\"nh.be('content')\" v-html=\"item.content\"></div>\r\n              <div v-else :class=\"nh.be('content')\">\r\n                {{ item.content || '' }}\r\n              </div>\r\n            </template>\r\n          </template>\r\n        </div>\r\n        <button\r\n          v-if=\"item.closable\"\r\n          type=\"button\"\r\n          :class=\"nh.be('close')\"\r\n          @click=\"remove(item.key!)\"\r\n        >\r\n          <Icon v-bind=\"icons.close\" label=\"close\"></Icon>\r\n        </button>\r\n      </div>\r\n    </template>\r\n  </Popup>\r\n</template>\r\n","import { createApp, createVNode, markRaw, render } from 'vue'\r\n\r\nimport Component from './notice.vue'\r\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\r\nimport { destroyObject, isClient, isNull, isObject, noop, toNumber } from '@vexip-ui/utils'\r\n\r\nimport type { App, MaybeRef } from 'vue'\r\nimport type { MaybeInstance } from '@vexip-ui/hooks'\r\nimport type {\r\n  Key,\r\n  NoticeConfig,\r\n  NoticeInstance,\r\n  NoticeOptions,\r\n  NoticePlacement,\r\n  NoticeType,\r\n} from './symbol'\r\n\r\nexport type { NoticeConfig, NoticeType, NoticePlacement, NoticeOptions }\r\n\r\ntype FuzzyOptions = string | NoticeOptions\r\ntype ManagerOptions = { marker?: boolean, duration?: number } & NoticeConfig &\r\n  Record<string, unknown>\r\n\r\ninterface AipMethod {\r\n  (options: NoticeOptions): () => void,\r\n  (title: string, duration?: number): () => void,\r\n  (title: string, content: string, duration?: number): () => void,\r\n  /** @internal */\r\n  (options: FuzzyOptions, duration?: number): () => void,\r\n}\r\n\r\nconst placementWhiteList: NoticePlacement[] = [\r\n  'top-right',\r\n  'top-left',\r\n  'bottom-right',\r\n  'bottom-left',\r\n]\r\n\r\nlet count = 1\r\n\r\nfunction getKey() {\r\n  return `notice-${count++}`\r\n}\r\n\r\nexport class NoticeManager {\r\n  name: string\r\n  defaults: Record<string, unknown>\r\n\r\n  open: AipMethod\r\n  primary: AipMethod\r\n  info: AipMethod\r\n  success: AipMethod\r\n  warning: AipMethod\r\n  error: AipMethod\r\n\r\n  private _mountedApp: App<unknown> | null\r\n  private _instance: NoticeInstance | null\r\n  private _innerApp: App<unknown> | null\r\n  private _container: HTMLElement | null\r\n  private _wrapper: HTMLElement | SVGElement | null\r\n  private _mountedEl: HTMLElement | null\r\n  private _installed: boolean\r\n  private _configRecord: NoticeConfig | null\r\n\r\n  constructor(options: ManagerOptions = {}) {\r\n    options = {\r\n      ...options,\r\n      marker: !!options.marker,\r\n      duration: options.duration ? toNumber(options.duration) : 4000,\r\n    }\r\n\r\n    this._mountedApp = null\r\n    this._instance = null\r\n    this._innerApp = null\r\n    this._container = null\r\n    this._wrapper = null\r\n    this._mountedEl = null\r\n    this._installed = false\r\n    this._configRecord = null\r\n    this.name = 'Notice'\r\n    this.defaults = {}\r\n\r\n    this.config(options)\r\n\r\n    this.open = (title: FuzzyOptions, content?: string | number, duration?: number) => {\r\n      return this._open(null, title, content, duration)\r\n    }\r\n\r\n    this.primary = (title: FuzzyOptions, content?: string | number, duration?: number) => {\r\n      return this._open('primary', title, content, duration)\r\n    }\r\n\r\n    this.info = (title: FuzzyOptions, content?: string | number, duration?: number) => {\r\n      return this._open('info', title, content, duration)\r\n    }\r\n\r\n    this.success = (title: FuzzyOptions, content?: string | number, duration?: number) => {\r\n      return this._open('success', title, content, duration)\r\n    }\r\n\r\n    this.warning = (title: FuzzyOptions, content?: string | number, duration?: number) => {\r\n      return this._open('warning', title, content, duration)\r\n    }\r\n\r\n    this.error = (title: FuzzyOptions, content?: string | number, duration?: number) => {\r\n      return this._open('error', title, content, duration)\r\n    }\r\n  }\r\n\r\n  judge(state: boolean, success: string, error: string, duration?: number): void\r\n  judge(state: boolean, success: NoticeOptions, error: string, duration?: number): void\r\n  judge(state: boolean, success: string, error: NoticeOptions, duration?: number): void\r\n  judge(state: boolean, success: NoticeOptions, error: NoticeOptions): void\r\n  judge(\r\n    state: boolean,\r\n    success: string | NoticeOptions,\r\n    error: string | NoticeOptions,\r\n    duration?: number,\r\n  ) {\r\n    if (state) {\r\n      this.success(success, duration)\r\n    } else {\r\n      this.error(error, duration)\r\n    }\r\n  }\r\n\r\n  close(key: Key) {\r\n    if (isNull(key)) {\r\n      this.clear()\r\n    } else {\r\n      this._getInstance()?.remove(key)\r\n    }\r\n  }\r\n\r\n  config({ placement, startOffset, itemGap, ...others }: NoticeConfig & NoticeOptions) {\r\n    this._configRecord = { placement, startOffset, itemGap }\r\n    this.defaults = { ...this.defaults, ...others }\r\n\r\n    if (this._installed) {\r\n      const instance = this._getInstance()\r\n\r\n      if (instance) {\r\n        if (placement) {\r\n          instance.config({\r\n            placement: placementWhiteList.includes(placement) ? placement : placementWhiteList[0],\r\n          })\r\n        }\r\n\r\n        instance.config({ startOffset, itemGap })\r\n      }\r\n    }\r\n  }\r\n\r\n  clone() {\r\n    const manager = new NoticeManager(this.defaults)\r\n\r\n    manager._mountedApp = this._mountedApp\r\n    manager._configRecord = this._configRecord\r\n    manager._installed = this._installed\r\n\r\n    return manager\r\n  }\r\n\r\n  clear() {\r\n    this._getInstance()?.clear()\r\n  }\r\n\r\n  destroy() {\r\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\r\n    this._innerApp?.unmount()\r\n    this._container && render(null, this._container)\r\n    destroyObject(this)\r\n  }\r\n\r\n  isDestroyed() {\r\n    return false\r\n  }\r\n\r\n  install(app: App, options: ManagerOptions & { property?: string } = {}) {\r\n    const { property, ...others } = options\r\n\r\n    this._mountedApp = app\r\n    this._installed = true\r\n    this.config({ ...this._configRecord, ...others })\r\n\r\n    if (property || !app.config.globalProperties.$notice) {\r\n      app.config.globalProperties[property || '$notice'] = this\r\n    }\r\n  }\r\n\r\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\r\n    if (!isClient) return\r\n\r\n    const el = unrefElement(target)\r\n\r\n    if (el) {\r\n      this._wrapper = el\r\n\r\n      if (this._instance) {\r\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\r\n      } else {\r\n        this._getInstance()\r\n      }\r\n    }\r\n  }\r\n\r\n  private _getInstance() {\r\n    if (!this._instance && isClient) {\r\n      if (!this._mountedApp) {\r\n        console.warn('[vexip-ui:Notice]: App missing, the plugin maybe not installed.')\r\n\r\n        this._container = document.createElement('div')\r\n        this._innerApp = createApp(Component)\r\n        this._instance = this._innerApp.mount(this._container) as NoticeInstance\r\n      } else {\r\n        const vnode = createVNode(Component, null, null)\r\n\r\n        this._container = document.createElement('div')\r\n        vnode.appContext = this._mountedApp._context\r\n\r\n        render(vnode, this._container)\r\n\r\n        this._instance = proxyExposed<NoticeInstance>(vnode)\r\n      }\r\n\r\n      this._mountedEl = this._container.firstElementChild as HTMLElement\r\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\r\n    }\r\n\r\n    return this._instance\r\n  }\r\n\r\n  private _open(\r\n    type: null | NoticeType,\r\n    title: FuzzyOptions,\r\n    content?: string | number,\r\n    _duration?: number,\r\n  ) {\r\n    if (!isClient) {\r\n      return noop\r\n    }\r\n\r\n    let options: NoticeOptions\r\n\r\n    if (isObject(title)) {\r\n      options = title\r\n    } else {\r\n      if (typeof content === 'number') {\r\n        options = { title, duration: content }\r\n      } else if (!content) {\r\n        options = { title, duration: _duration }\r\n      } else {\r\n        options = { title, content, duration: _duration }\r\n      }\r\n    }\r\n\r\n    const key = options.key ?? getKey()\r\n    const notice = this._getInstance()!\r\n\r\n    let timer: ReturnType<typeof setTimeout>\r\n\r\n    const userCloseFn = options.onClose\r\n    const onClose = () => {\r\n      clearTimeout(timer)\r\n\r\n      if (typeof userCloseFn === 'function') {\r\n        return userCloseFn()\r\n      }\r\n    }\r\n\r\n    const userEnterFn = options.onEnter\r\n    const onEnter = () => {\r\n      if (options.liveOnEnter) {\r\n        clearTimeout(timer)\r\n      }\r\n\r\n      if (typeof userEnterFn === 'function') {\r\n        return userEnterFn()\r\n      }\r\n    }\r\n\r\n    const userLeaveFn = options.onLeave\r\n    const onLeave = () => {\r\n      if (options.liveOnEnter) {\r\n        clearTimeout(timer)\r\n        setDelayClose()\r\n      }\r\n\r\n      if (typeof userLeaveFn === 'function') {\r\n        return userLeaveFn()\r\n      }\r\n    }\r\n\r\n    const item: NoticeOptions = {\r\n      ...this.defaults,\r\n      ...options,\r\n      key,\r\n      type: type ?? options.type,\r\n      onClose,\r\n      onEnter,\r\n      onLeave,\r\n    }\r\n\r\n    if (item.icon && typeof item.icon !== 'function') {\r\n      item.icon = markRaw(item.icon)\r\n    }\r\n\r\n    notice.add(item)\r\n    setDelayClose()\r\n\r\n    function setDelayClose() {\r\n      const duration = typeof item.duration === 'number' ? item.duration : 4000\r\n\r\n      if (duration >= 500) {\r\n        timer = setTimeout(() => {\r\n          notice.remove(key)\r\n        }, duration)\r\n      }\r\n    }\r\n\r\n    return () => {\r\n      clearTimeout(timer)\r\n      notice.remove(key)\r\n    }\r\n  }\r\n}\r\n\r\nexport const Notice = new NoticeManager()\r\n","<script setup lang=\"ts\">\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { optionGroupProps } from './props'\r\n\r\ndefineOptions({ name: 'OptionGroup' })\r\n\r\ndefineProps(optionGroupProps)\r\n\r\nconst nh = useNameHelper('option-group')\r\n</script>\r\n\r\n<template>\r\n  <li\r\n    :class=\"{\r\n      [nh.b()]: true,\r\n      [nh.ns('option-vars')]: true,\r\n      [nh.bm('divided')]: divided\r\n    }\"\r\n  >\r\n    <div :class=\"nh.be('label')\">\r\n      <slot name=\"label\">\r\n        {{ label }}\r\n      </slot>\r\n    </div>\r\n    <ul :class=\"nh.be('list')\">\r\n      <slot></slot>\r\n    </ul>\r\n  </li>\r\n</template>\r\n","import { booleanProp, buildProps, eventProp, localeProp, sizeProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { PaginationPlugin, PaginationSlots } from './symbol'\r\n\r\nexport const paginationProps = buildProps({\r\n  size: sizeProp,\r\n  locale: localeProp('pagination'),\r\n  total: Number,\r\n  noBorder: booleanProp,\r\n  background: booleanProp,\r\n  pageSize: Number,\r\n  sizeOptions: Array as PropType<number[]>,\r\n  itemCount: Number,\r\n  active: Number,\r\n  disabled: booleanProp,\r\n  disableItem: Function as PropType<(page: number) => boolean>,\r\n  turnPageCount: Number,\r\n  itemUnit: String,\r\n  plugins: Array as PropType<(PaginationPlugin | undefined | null)[]>,\r\n  noTitle: booleanProp,\r\n  itemTag: String,\r\n  listTag: String,\r\n  slots: Object as PropType<PaginationSlots>,\r\n  onChange: eventProp<(page: number) => void>(),\r\n  onPageSizeChange: eventProp<(size: number) => void>(),\r\n})\r\n\r\nexport type PaginationProps = ExtractPropTypes<typeof paginationProps>\r\nexport type PaginationCProps = ConfigurableProps<PaginationProps, 'total'>\r\n","import { Icon } from '@/components/icon'\r\nimport { NumberInput } from '@/components/number-input'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { Select } from '@/components/select'\r\n\r\nimport {\r\n  Transition,\r\n  computed,\r\n  defineComponent,\r\n  nextTick,\r\n  onMounted,\r\n  onUpdated,\r\n  reactive,\r\n  ref,\r\n  renderSlot,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport {\r\n  createSizeProp,\r\n  emitEvent,\r\n  getCountWord,\r\n  getCountWordOnly,\r\n  useIcons,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { createSlotRender, useModifier, useRtl } from '@vexip-ui/hooks'\r\nimport { boundRange, decide, isClient, isNull, range } from '@vexip-ui/utils'\r\nimport { paginationProps } from './props'\r\n\r\nconst enum PaginationMode {\r\n  LEFT = 'left',\r\n  CENTER = 'center',\r\n  RIGHT = 'right',\r\n}\r\n\r\nexport default defineComponent({\r\n  name: 'Pagination',\r\n  props: paginationProps,\r\n  emits: ['update:active', 'update:page-size'],\r\n  setup(_props, { slots, emit, expose }) {\r\n    const props = useProps('pagination', _props, {\r\n      size: createSizeProp(),\r\n      locale: null,\r\n      total: {\r\n        default: 0,\r\n        validator: value => value >= 0,\r\n        static: true,\r\n      },\r\n      noBorder: false,\r\n      background: false,\r\n      pageSize: {\r\n        default: 10,\r\n        validator: value => value > 0,\r\n      },\r\n      sizeOptions: () => [10, 20, 50, 100],\r\n      itemCount: {\r\n        default: 7,\r\n        validator: value => Number.isInteger(value) && value > 6,\r\n      },\r\n      active: {\r\n        default: 1,\r\n        validator: value => value > 0,\r\n        static: true,\r\n      },\r\n      disabled: false,\r\n      disableItem: {\r\n        default: () => false,\r\n        isFunc: true,\r\n      },\r\n      turnPageCount: 5,\r\n      itemUnit: null,\r\n      plugins: {\r\n        default: () => [],\r\n        validator: value => Array.isArray(value),\r\n      },\r\n      noTitle: false,\r\n      itemTag: 'li',\r\n      listTag: null,\r\n      slots: () => ({}),\r\n    })\r\n\r\n    const { isRtl } = useRtl()\r\n    const nh = useNameHelper('pagination')\r\n    const icons = useIcons()\r\n    const midPagers = ref<number[]>([])\r\n    const currentActive = ref(props.active)\r\n    const currentPageSize = ref(props.pageSize)\r\n    const mode = ref(PaginationMode.LEFT)\r\n    const inPrevEllipsis = ref(false)\r\n    const inNextEllipsis = ref(false)\r\n    const jumpValue = ref(props.active)\r\n    const itemElList = reactive<HTMLElement[]>([])\r\n\r\n    const locale = useLocale('pagination', toRef(props, 'locale'))\r\n\r\n    const { target: wrapper } = useModifier({\r\n      passive: false,\r\n      onKeyDown: (event, modifier) => {\r\n        if (props.disabled) return\r\n\r\n        decide(\r\n          [\r\n            [\r\n              () => modifier.up || modifier.down || modifier.left || modifier.right,\r\n              () => {\r\n                const sign = modifier.up || modifier.left ? -1 : 1\r\n\r\n                if (isClient && document.activeElement) {\r\n                  const index = itemElList.findIndex(el => el === document.activeElement)\r\n\r\n                  if (!~index) return\r\n\r\n                  const target = itemElList[boundRange(index + sign, 0, itemElList.length - 1)]\r\n\r\n                  target.focus()\r\n                }\r\n              },\r\n            ],\r\n            [\r\n              () => modifier.enter || modifier.space,\r\n              () => {\r\n                if (document && document.activeElement) {\r\n                  const index = itemElList.findIndex(el => el === document.activeElement)\r\n\r\n                  if (!~index) {\r\n                    const activeClass = nh.bem('item', 'active')\r\n                    const activeEl = itemElList.find(el => el.classList.contains(activeClass))\r\n\r\n                    activeEl?.focus()\r\n                  }\r\n                }\r\n              },\r\n            ],\r\n          ],\r\n          {\r\n            beforeMatchAny: () => event.preventDefault(),\r\n            afterMatchAny: modifier.resetAll,\r\n          },\r\n        )\r\n      },\r\n    })\r\n\r\n    const className = computed(() => {\r\n      return {\r\n        [nh.b()]: true,\r\n        [nh.bs('vars')]: true,\r\n        [nh.bm('inherit')]: props.inherit,\r\n        [nh.bm(props.size)]: props.size !== 'default',\r\n        [nh.bm('background')]: props.background,\r\n        [nh.bm('no-border')]: props.noBorder,\r\n        [nh.bm('disabled')]: props.disabled,\r\n      }\r\n    })\r\n    const pagerCount = computed(() => {\r\n      return Math.ceil(props.total / (currentPageSize.value || 1)) || 1\r\n    })\r\n    const useEllipsis = computed(() => pagerCount.value > props.itemCount)\r\n    const disabledPrev = computed(() => {\r\n      const count = queryEnabledActive(1, 1)\r\n\r\n      return count >= pagerCount.value || currentActive.value === count\r\n    })\r\n    const disabledNext = computed(() => {\r\n      const count = queryEnabledActive(pagerCount.value, -1)\r\n\r\n      return count <= 1 || currentActive.value === count\r\n    })\r\n    const prevTurnPageTitle = computed(() => {\r\n      return `${locale.value.prev} ${getCountWord(locale.value.page, props.turnPageCount)}`\r\n    })\r\n    const nextTurnPageTitle = computed(() => {\r\n      return `${locale.value.next} ${getCountWord(locale.value.page, props.turnPageCount)}`\r\n    })\r\n    const prevEllipsisTarget = computed(() => {\r\n      if (!useEllipsis.value) return 0\r\n\r\n      let active = queryEnabledActive(currentActive.value - props.turnPageCount, -1)\r\n\r\n      if (active < 1) {\r\n        active = queryEnabledActive(1, 1)\r\n\r\n        if (active >= currentActive.value) return 0\r\n      }\r\n\r\n      return active\r\n    })\r\n    const nextEllipsisTarget = computed(() => {\r\n      if (!useEllipsis.value) return 0\r\n\r\n      let active = queryEnabledActive(currentActive.value + props.turnPageCount, 1)\r\n\r\n      if (active > pagerCount.value) {\r\n        active = queryEnabledActive(pagerCount.value, -1)\r\n\r\n        if (active <= currentActive.value) return 0\r\n      }\r\n\r\n      return active\r\n    })\r\n    const sizeObjectOptions = computed(() => {\r\n      return props.sizeOptions.map(size => {\r\n        return {\r\n          value: size,\r\n          label: `${size} ${locale.value.perPage}`,\r\n        }\r\n      })\r\n    })\r\n    const pluginOrders = computed(() => {\r\n      const plugins = props.plugins\r\n      const pagerPosition = plugins.findIndex(isNull)\r\n\r\n      return {\r\n        total: plugins.findIndex(p => p === 'total') - pagerPosition,\r\n        size: plugins.findIndex(p => p === 'size') - pagerPosition,\r\n        jump: plugins.findIndex(p => p === 'jump') - pagerPosition,\r\n      }\r\n    })\r\n    const jumpInputWidth = computed(() => {\r\n      if (!props.plugins.includes('jump')) return 0\r\n\r\n      let pageCount = 0\r\n\r\n      if (props.plugins.includes('size')) {\r\n        pageCount = Math.ceil(props.total / (Math.min(...props.sizeOptions) || 10))\r\n      } else {\r\n        pageCount = Math.ceil(props.total / (props.pageSize || 10))\r\n      }\r\n\r\n      return pageCount.toString().length * 10 + 30\r\n    })\r\n\r\n    watch(\r\n      () => props.active,\r\n      value => {\r\n        changeActive(value, false)\r\n      },\r\n    )\r\n    watch(() => props.itemCount, computePagers)\r\n    watch(pagerCount, computePagers)\r\n    watch(\r\n      () => props.pageSize,\r\n      value => {\r\n        currentPageSize.value = value\r\n      },\r\n    )\r\n    watch(currentPageSize, (value, prevValue) => {\r\n      emit('update:page-size', value)\r\n      emitEvent(props.onPageSizeChange, value)\r\n\r\n      // 按当前页的第一条数据计算新的页码\r\n      const anchor = Math.ceil((prevValue * (currentActive.value - 1) + 1) / value)\r\n\r\n      let active = queryEnabledActive(anchor, 1)\r\n\r\n      if (active > pagerCount.value) {\r\n        active = queryEnabledActive(anchor - 1, -1)\r\n\r\n        if (active < 1) active = 0\r\n      }\r\n\r\n      currentActive.value = active\r\n      computePagers()\r\n    })\r\n\r\n    expose({ changeActive, handlePrev, handleNext })\r\n\r\n    onMounted(() => {\r\n      nextTick(computePagers)\r\n    })\r\n\r\n    onUpdated(() => {\r\n      if (!wrapper.value) return\r\n\r\n      itemElList.length = 0\r\n      itemElList.push(\r\n        ...Array.from(\r\n          wrapper.value.querySelectorAll<HTMLElement>(\r\n            `${nh.cbe('item')}:not(${nh.cbem('item', 'disabled')})`,\r\n          ),\r\n        ),\r\n      )\r\n    })\r\n\r\n    function queryEnabledActive(active: number, step: number) {\r\n      step = step / Math.abs(step)\r\n\r\n      while (props.disableItem(active)) {\r\n        active += step\r\n\r\n        if (active < 1 || active > pagerCount.value) break\r\n      }\r\n\r\n      return active\r\n    }\r\n\r\n    function handleChange(value: number) {\r\n      if (currentActive.value === value) return\r\n\r\n      currentActive.value = value\r\n      jumpValue.value = value\r\n\r\n      computePagers()\r\n      emit('update:active', value)\r\n      emitEvent(props.onChange, value)\r\n    }\r\n\r\n    function changeActive(active: number, focus = true) {\r\n      active = parseInt(active.toString())\r\n\r\n      if (props.disabled || active < 1 || active > pagerCount.value || props.disableItem(active)) {\r\n        return\r\n      }\r\n\r\n      handleChange(active)\r\n\r\n      if (isClient && focus) {\r\n        const activeEl = itemElList.find(el => el === document.activeElement)\r\n\r\n        activeEl?.blur()\r\n        nextTick(() => {\r\n          itemElList.find(el => el.tabIndex >= 0)?.focus()\r\n        })\r\n      }\r\n    }\r\n\r\n    function handlePrev() {\r\n      if (!disabledPrev.value && !props.disabled) {\r\n        const active = queryEnabledActive(currentActive.value - 1, -1)\r\n\r\n        if (active >= 1) changeActive(active)\r\n      }\r\n    }\r\n\r\n    function handleNext() {\r\n      if (!disabledNext.value && !props.disabled) {\r\n        const active = queryEnabledActive(currentActive.value + 1, 1)\r\n\r\n        if (active <= pagerCount.value) changeActive(active)\r\n      }\r\n    }\r\n\r\n    function computePagers() {\r\n      let pagers: number[]\r\n\r\n      if (pagerCount.value <= props.itemCount) {\r\n        // 未超过最大值，显示所有页号\r\n        pagers = range(pagerCount.value)\r\n      } else {\r\n        const numberCount = props.itemCount - 2 // 显示为数字的页号\r\n        const criticalCount = Math.ceil(props.itemCount / 2) // 切换模式的关键计数\r\n\r\n        if (currentActive.value < criticalCount) {\r\n          // 出现后侧一个省略号，前侧连续\r\n          pagers = range(numberCount)\r\n          pagers.push(pagerCount.value)\r\n\r\n          mode.value = PaginationMode.LEFT\r\n        } else if (currentActive.value <= pagerCount.value - criticalCount) {\r\n          // 出现两个省略号，中间连续\r\n          let count = numberCount - 2\r\n\r\n          // 保持中间数字的页号数目为单数\r\n          if (count % 2 === 0) {\r\n            count -= 1\r\n          }\r\n\r\n          pagers = range(count, currentActive.value - (count - 1) / 2) // 同 Math.floor(count / 2)\r\n          pagers.unshift(1)\r\n          pagers.push(pagerCount.value)\r\n\r\n          mode.value = PaginationMode.CENTER\r\n        } else {\r\n          // 出现前侧一个省略号，后侧连续\r\n          pagers = range(numberCount, pagerCount.value - numberCount + 1)\r\n          pagers.unshift(1)\r\n\r\n          mode.value = PaginationMode.RIGHT\r\n        }\r\n      }\r\n\r\n      if (pagers.length === 1) {\r\n        midPagers.value = []\r\n      }\r\n\r\n      midPagers.value = pagers.slice(1, -1)\r\n    }\r\n\r\n    function enterPrevEllipsis() {\r\n      inPrevEllipsis.value = true\r\n    }\r\n\r\n    function leavePrevEllipsis() {\r\n      inPrevEllipsis.value = false\r\n    }\r\n\r\n    function clickPrevEllipsis() {\r\n      if (!props.disabled && prevEllipsisTarget.value) {\r\n        changeActive(prevEllipsisTarget.value)\r\n      }\r\n    }\r\n\r\n    function enterNextEllipsis() {\r\n      inNextEllipsis.value = true\r\n    }\r\n\r\n    function leaveNextEllipsis() {\r\n      inNextEllipsis.value = false\r\n    }\r\n\r\n    function clickNextEllipsis() {\r\n      if (!props.disabled && nextEllipsisTarget.value) {\r\n        changeActive(nextEllipsisTarget.value)\r\n      }\r\n    }\r\n\r\n    function handleJumpPage(active: number) {\r\n      active = Math.max(Math.min(parseInt(active.toString()), pagerCount.value), 1)\r\n\r\n      const originActive = active\r\n\r\n      if (active !== currentActive.value) {\r\n        const step = active > currentActive.value ? 1 : -1\r\n\r\n        active = queryEnabledActive(originActive, step)\r\n\r\n        if (step > 0 ? active > pagerCount.value : active < 1) {\r\n          active = queryEnabledActive(originActive, -step)\r\n\r\n          if (step > 0 ? active < 1 : active > pagerCount.value) {\r\n            active = 0\r\n          }\r\n        }\r\n\r\n        handleChange(active)\r\n      }\r\n\r\n      nextTick(() => {\r\n        jumpValue.value = currentActive.value\r\n      })\r\n    }\r\n\r\n    function renderPrev(Tag: any) {\r\n      const disabled = props.disabled || disabledPrev.value\r\n      const arrow = isRtl.value ? icons.value.angleRight : icons.value.angleLeft\r\n\r\n      return (\r\n        <Tag\r\n          ref={el => el && !disabledPrev.value && itemElList.push(el as any)}\r\n          class={[\r\n            nh.be('item'),\r\n            nh.bem('item', 'prev'),\r\n            disabled ? nh.bem('item', 'disabled') : '',\r\n          ]}\r\n          title={props.noTitle ? undefined : locale.value.prevPage}\r\n          role={'menuitem'}\r\n          tabindex={'-1'}\r\n          aria-label={locale.value.prevPage}\r\n          aria-hidden={disabled ? 'true' : undefined}\r\n          onClick={handlePrev}\r\n          onKeydownEnter={handlePrev}\r\n          onKeydownSpace={handlePrev}\r\n        >\r\n          {renderSlot(slots, 'prev', { disabled }, () => [\r\n            <Renderer renderer={props.slots.prev} data={{ disabled }}>\r\n              <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\r\n            </Renderer>,\r\n          ])}\r\n        </Tag>\r\n      )\r\n    }\r\n\r\n    function renderNext(Tag: any) {\r\n      const disabled = props.disabled || disabledNext.value\r\n      const arrow = isRtl.value ? icons.value.angleLeft : icons.value.angleRight\r\n\r\n      return (\r\n        <Tag\r\n          ref={el => el && !disabledNext.value && itemElList.push(el as any)}\r\n          class={[\r\n            nh.be('item'),\r\n            nh.bem('item', 'next'),\r\n            disabled ? nh.bem('item', 'disabled') : '',\r\n          ]}\r\n          title={props.noTitle ? undefined : locale.value.nextPage}\r\n          role={'menuitem'}\r\n          tabindex={'-1'}\r\n          aria-label={locale.value.nextPage}\r\n          aria-hidden={disabled ? 'true' : undefined}\r\n          onClick={handleNext}\r\n          onKeydownEnter={handleNext}\r\n          onKeydownSpace={handleNext}\r\n        >\r\n          {renderSlot(slots, 'next', { disabled }, () => [\r\n            <Renderer renderer={props.slots.next} data={{ disabled }}>\r\n              <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\r\n            </Renderer>,\r\n          ])}\r\n        </Tag>\r\n      )\r\n    }\r\n\r\n    function renderPrevEllipsis(Tag: any) {\r\n      if (!useEllipsis.value || mode.value === PaginationMode.LEFT) return null\r\n\r\n      const disabled = props.disabled || !prevEllipsisTarget.value\r\n\r\n      return (\r\n        <Tag\r\n          ref={el => el && prevEllipsisTarget.value && itemElList.push(el as any)}\r\n          class={{\r\n            [nh.be('item')]: true,\r\n            [nh.bem('item', 'more')]: true,\r\n            [nh.bem('item', 'disabled')]: disabled,\r\n          }}\r\n          title={props.noTitle ? undefined : prevTurnPageTitle.value}\r\n          role={'menuitem'}\r\n          tabindex={'-1'}\r\n          aria-label={prevTurnPageTitle.value}\r\n          onClick={clickPrevEllipsis}\r\n          onKeydownEnter={clickPrevEllipsis}\r\n          onKeydownSpace={clickPrevEllipsis}\r\n          onMouseenter={enterPrevEllipsis}\r\n          onMouseleave={leavePrevEllipsis}\r\n        >\r\n          {createSlotRender(slots, ['prev-jump', 'prevJump'], () => {\r\n            const arrow = isRtl.value ? icons.value.anglesRight : icons.value.anglesLeft\r\n\r\n            return (\r\n              <Transition name={nh.ns('fade')}>\r\n                {!disabled && inPrevEllipsis.value ? (\r\n                  <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\r\n                ) : (\r\n                  <Icon\r\n                    {...icons.value.ellipsis}\r\n                    scale={+(icons.value.ellipsis.scale || 1)}\r\n                    style={'position: absolute'}\r\n                  ></Icon>\r\n                )}\r\n              </Transition>\r\n            )\r\n          })({ disabled, entered: inPrevEllipsis.value })}\r\n        </Tag>\r\n      )\r\n    }\r\n\r\n    function renderNextEllipsis(Tag: any) {\r\n      if (!useEllipsis.value || mode.value === PaginationMode.RIGHT) return null\r\n\r\n      const disabled = props.disabled || !nextEllipsisTarget.value\r\n\r\n      return (\r\n        <Tag\r\n          ref={el => el && nextEllipsisTarget.value && itemElList.push(el as any)}\r\n          class={{\r\n            [nh.be('item')]: true,\r\n            [nh.bem('item', 'more')]: true,\r\n            [nh.bem('item', 'disabled')]: disabled,\r\n          }}\r\n          title={props.noTitle ? undefined : nextTurnPageTitle.value}\r\n          role={'menuitem'}\r\n          tabindex={'-1'}\r\n          aria-label={nextTurnPageTitle.value}\r\n          onClick={clickNextEllipsis}\r\n          onKeydownEnter={clickNextEllipsis}\r\n          onKeydownSpace={clickNextEllipsis}\r\n          onMouseenter={enterNextEllipsis}\r\n          onMouseleave={leaveNextEllipsis}\r\n        >\r\n          {createSlotRender(slots, ['next-jump', 'nextJump'], () => {\r\n            const arrow = isRtl.value ? icons.value.anglesLeft : icons.value.anglesRight\r\n\r\n            return (\r\n              <Transition name={nh.ns('fade')}>\r\n                {!disabled && inNextEllipsis.value ? (\r\n                  <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\r\n                ) : (\r\n                  <Icon\r\n                    {...icons.value.ellipsis}\r\n                    scale={+(icons.value.ellipsis.scale || 1)}\r\n                    style={'position: absolute'}\r\n                  ></Icon>\r\n                )}\r\n              </Transition>\r\n            )\r\n          })({ disabled: !nextEllipsisTarget.value, entered: inNextEllipsis.value })}\r\n        </Tag>\r\n      )\r\n    }\r\n\r\n    function renderItem(Tag: any, page: number) {\r\n      const disabled = props.disabled || props.disableItem(page)\r\n      const active = currentActive.value === page\r\n\r\n      return (\r\n        <Tag\r\n          ref={el => el && itemElList.push(el as any)}\r\n          class={{\r\n            [nh.be('item')]: true,\r\n            [nh.bem('item', 'disabled')]: disabled,\r\n            [nh.bem('item', 'active')]: active,\r\n          }}\r\n          title={props.noTitle ? undefined : page}\r\n          role={'menuitemradio'}\r\n          tabindex={active ? '0' : '-1'}\r\n          aria-posinset={page}\r\n          aria-setsize={pagerCount.value}\r\n          aria-disabled={disabled ? 'true' : undefined}\r\n          onClick={() => changeActive(page)}\r\n          onKeydownEnter={() => changeActive(page)}\r\n          onKeydownSpace={() => changeActive(page)}\r\n        >\r\n          {renderSlot(slots, 'item', { page, disabled, active }, () => [\r\n            <Renderer renderer={props.slots.item} data={{ page, disabled, active }}>\r\n              {page}\r\n            </Renderer>,\r\n          ])}\r\n        </Tag>\r\n      )\r\n    }\r\n\r\n    function renderTotalPlugin() {\r\n      if (!props.plugins.includes('total')) return null\r\n\r\n      return (\r\n        <div\r\n          class={[nh.be('total'), pluginOrders.value.total < 0 && nh.bem('total', 'prefix')]}\r\n          style={{ order: pluginOrders.value.total }}\r\n        >\r\n          {`${locale.value.total} ${getCountWord(\r\n            props.itemUnit ?? locale.value.itemUnit,\r\n            props.total,\r\n          )}`}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderSizePlugin() {\r\n      if (!props.plugins.includes('size')) return null\r\n\r\n      return (\r\n        <div\r\n          class={[nh.be('size'), pluginOrders.value.size < 0 && nh.bem('size', 'prefix')]}\r\n          style={{ order: pluginOrders.value.size }}\r\n        >\r\n          <Select\r\n            v-model:value={currentPageSize.value}\r\n            inherit\r\n            class={nh.be('size-select')}\r\n            options={sizeObjectOptions.value}\r\n            filter={false}\r\n            multiple={false}\r\n            clearable={false}\r\n          ></Select>\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderJumpPlugin() {\r\n      if (!props.plugins.includes('jump')) return null\r\n\r\n      return (\r\n        <div\r\n          class={[nh.be('jump'), pluginOrders.value.jump < 0 && nh.bem('jump', 'prefix')]}\r\n          style={{ order: pluginOrders.value.jump }}\r\n        >\r\n          {locale.value.jumpTo}\r\n          <NumberInput\r\n            v-model:value={jumpValue.value}\r\n            inherit\r\n            class={nh.be('jump-input')}\r\n            clearable={false}\r\n            sync={false}\r\n            style={{ width: `${jumpInputWidth.value}px` }}\r\n            onChange={handleJumpPage}\r\n          ></NumberInput>\r\n          {getCountWordOnly(locale.value.page, 1)}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      const ItemTag = props.itemTag || 'li'\r\n      const ListTag = (props.listTag as any) || (ItemTag === 'li' ? 'ul' : 'div')\r\n\r\n      return (\r\n        <div class={className.value}>\r\n          <ListTag\r\n            ref={wrapper}\r\n            class={nh.be('list')}\r\n            role={'menubar'}\r\n            aria-label={'Pagination'}\r\n            aria-disabled={props.disabled ? 'true' : undefined}\r\n          >\r\n            {renderPrev(ItemTag)}\r\n            {renderItem(ItemTag, 1)}\r\n            {renderPrevEllipsis(ItemTag)}\r\n            {midPagers.value.map(page => renderItem(ItemTag, page))}\r\n            {renderNextEllipsis(ItemTag)}\r\n            {pagerCount.value > 1 && renderItem(ItemTag, pagerCount.value)}\r\n            {renderNext(ItemTag)}\r\n          </ListTag>\r\n          {renderTotalPlugin()}\r\n          {renderSizePlugin()}\r\n          {renderJumpPlugin()}\r\n        </div>\r\n      )\r\n    }\r\n  },\r\n})\r\n","import { booleanProp, buildProps, stateProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { ProgressInfoType, ProgressSlots, ProgressStrokeColor } from './symbol'\r\n\r\nexport const progressProps = buildProps({\r\n  percentage: Number,\r\n  state: stateProp,\r\n  strokeWidth: Number,\r\n  infoType: String as PropType<ProgressInfoType>,\r\n  precision: Number,\r\n  activated: booleanProp,\r\n  strokeColor: [String, Array, Function] as PropType<ProgressStrokeColor>,\r\n  slots: Object as PropType<ProgressSlots>,\r\n})\r\n\r\nexport type ProgressProps = ExtractPropTypes<typeof progressProps>\r\nexport type ProgressCProps = ConfigurableProps<ProgressProps, 'percentage'>\r\n","export type ProgressInfoType =\r\n  | 'outside'\r\n  | 'inside'\r\n  | 'bubble'\r\n  | 'bubble-top'\r\n  | 'bubble-bottom'\r\n  | 'none'\r\n\r\nexport type ProgressStrokeColor =\r\n  | string\r\n  | [string, string]\r\n  | ((percentage: number) => string | [string, string])\r\n\r\nexport interface ProgressSlots {\r\n  default?: () => any,\r\n}\r\n\r\nexport const infoTypes = Object.freeze<ProgressInfoType[]>([\r\n  'outside',\r\n  'inside',\r\n  'bubble',\r\n  'bubble-top',\r\n  'bubble-bottom',\r\n  'none',\r\n])\r\n","<script setup lang=\"ts\">\r\nimport { Bubble } from '@/components/bubble'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed } from 'vue'\r\n\r\nimport { createStateProp, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { callIfFunc, toFixed } from '@vexip-ui/utils'\r\nimport { progressProps } from './props'\r\nimport { infoTypes } from './symbol'\r\n\r\nimport type { CSSProperties } from 'vue'\r\n\r\ndefineOptions({ name: 'Progress' })\r\n\r\nconst _props = defineProps(progressProps)\r\nconst props = useProps('progress', _props, {\r\n  percentage: {\r\n    default: 0,\r\n    validator: value => value >= 0 && value <= 100,\r\n    static: true,\r\n  },\r\n  state: createStateProp(),\r\n  strokeWidth: 8,\r\n  infoType: {\r\n    default: 'outside',\r\n    validator: value => infoTypes.includes(value),\r\n  },\r\n  precision: 2,\r\n  activated: false,\r\n  strokeColor: {\r\n    default: null,\r\n    validator: value => !(Array.isArray(value) && (!value[0] || !value[1])),\r\n  },\r\n  slots: () => ({}),\r\n})\r\n\r\nconst nh = useNameHelper('progress')\r\n\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    nh.bm(`info-${props.infoType}`),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm(props.state)]: props.state !== 'default',\r\n      [nh.bm('activated')]: props.activated,\r\n    },\r\n  ]\r\n})\r\nconst style = computed(() => {\r\n  return { [nh.cv('percentage')]: props.percentage }\r\n})\r\nconst trackStyle = computed(() => {\r\n  return {\r\n    height: `${props.strokeWidth}px`,\r\n    borderRadius: `${props.strokeWidth}px`,\r\n  }\r\n})\r\nconst fillerStyle = computed(() => {\r\n  const style: CSSProperties = {\r\n    borderRadius: `${props.strokeWidth}px`,\r\n  }\r\n\r\n  const strokeColor = callIfFunc(props.strokeColor, props.percentage)\r\n\r\n  if (typeof strokeColor === 'string') {\r\n    style.backgroundColor = strokeColor\r\n  } else if (Array.isArray(strokeColor)) {\r\n    style.backgroundImage = `linear-gradient(to right, ${strokeColor[0]} 0%, ${strokeColor[1]} 100%)`\r\n  }\r\n\r\n  return style\r\n})\r\nconst useBubble = computed(() => {\r\n  return props.infoType.includes('bubble')\r\n})\r\nconst bubbleType = computed(() => {\r\n  if (useBubble.value) {\r\n    return props.infoType.split('-').pop() === 'bottom' ? 'bottom' : 'top'\r\n  }\r\n\r\n  return 'top'\r\n})\r\nconst bubbleStyle = computed(() => {\r\n  if (!useBubble.value) return {}\r\n\r\n  const type = bubbleType.value === 'top' ? 'bottom' : 'top'\r\n\r\n  return {\r\n    [type]: `${props.strokeWidth}px`,\r\n  }\r\n})\r\nconst percentValue = computed(() => toFixed(props.percentage, props.precision))\r\n\r\ndefineExpose({ percentValue })\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :class=\"className\"\r\n    :style=\"style\"\r\n    role=\"progressbar\"\r\n    :aria-valuenow=\"percentValue\"\r\n    :aria-valuetext=\"`${percentValue}%`\"\r\n    aria-valuemin=\"0\"\r\n    aria-valuemax=\"100\"\r\n  >\r\n    <div :class=\"nh.be('track')\" :style=\"trackStyle\">\r\n      <div :class=\"nh.be('filler')\" :style=\"fillerStyle\"></div>\r\n      <div v-if=\"props.infoType === 'inside'\" :class=\"nh.be('info')\">\r\n        <slot>\r\n          <Renderer :renderer=\"props.slots.default\">\r\n            <span :class=\"nh.be('percentage')\">\r\n              {{ `${percentValue}%` }}\r\n            </span>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n    </div>\r\n    <div v-if=\"useBubble\" :class=\"nh.be('reference')\">\r\n      <Bubble\r\n        inherit\r\n        :class=\"nh.be('bubble')\"\r\n        :style=\"bubbleStyle\"\r\n        :placement=\"bubbleType\"\r\n        :content-class=\"nh.be('info')\"\r\n      >\r\n        <slot>\r\n          <Renderer :renderer=\"props.slots.default\">\r\n            <span :class=\"nh.be('percentage')\">\r\n              {{ `${percentValue}%` }}\r\n            </span>\r\n          </Renderer>\r\n        </slot>\r\n      </Bubble>\r\n    </div>\r\n    <div v-else-if=\"props.infoType === 'outside'\" :class=\"nh.be('info')\">\r\n      <slot>\r\n        <Renderer :renderer=\"props.slots.default\">\r\n          <span :class=\"nh.be('percentage')\">\r\n            {{ `${percentValue}%` }}\r\n          </span>\r\n        </Renderer>\r\n      </slot>\r\n    </div>\r\n  </div>\r\n</template>\r\n","import {\r\n  booleanProp,\r\n  buildProps,\r\n  classProp,\r\n  eventProp,\r\n  iconProp,\r\n  sizeProp,\r\n  stateProp,\r\n  valueProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\r\nimport type { ChangeEvent, RadioGroupShape, RadioRawOption, RadioShape } from './symbol'\r\n\r\nexport const radioProps = buildProps({\r\n  size: sizeProp,\r\n  state: stateProp,\r\n  value: valueProp,\r\n  label: valueProp,\r\n  labelClass: classProp,\r\n  disabled: booleanProp,\r\n  tabIndex: [String, Number],\r\n  loading: booleanProp,\r\n  loadingLock: booleanProp,\r\n  name: String,\r\n  shape: String as PropType<RadioShape>,\r\n  onChange: eventProp<EventListener<ChangeEvent>>(),\r\n})\r\n\r\nexport type RadioProps = ExtractPropTypes<typeof radioProps>\r\nexport type RadioCProps = ConfigurableProps<RadioProps>\r\n\r\nexport const radioGroupProps = buildProps({\r\n  size: sizeProp,\r\n  state: stateProp,\r\n  value: valueProp,\r\n  vertical: booleanProp,\r\n  disabled: booleanProp,\r\n  options: Array as PropType<RadioRawOption[]>,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingLock: booleanProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  shape: String as PropType<RadioGroupShape>,\r\n  onChange: eventProp<EventListener<ChangeEvent>>(),\r\n})\r\n\r\nexport type RadioGroupProps = ExtractPropTypes<typeof radioGroupProps>\r\nexport type RadioGroupCProps = ConfigurableProps<RadioGroupProps>\r\n","import type { InjectionKey, Ref } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ComponentSize, ComponentState } from '@vexip-ui/config'\r\n\r\nexport type RadioShape = 'default' | 'border' | 'button'\r\nexport type RadioGroupShape = RadioShape | 'button-group'\r\n\r\nexport type RadioRawOption =\r\n  | string\r\n  | {\r\n    label: string | number | boolean,\r\n    content?: string,\r\n    disabled?: boolean,\r\n  }\r\n\r\nexport interface GroupState {\r\n  currentValue: string | number | boolean,\r\n  size: ComponentSize,\r\n  state: ComponentState,\r\n  disabled: boolean,\r\n  loading: boolean,\r\n  loadingIcon: Record<string, any>,\r\n  loadingLock: boolean,\r\n  loadingEffect: IconEffect,\r\n  shape: RadioGroupShape,\r\n  updateValue(value: string | number | boolean): void,\r\n  registerInput(input: Ref<HTMLElement | null | undefined>): void,\r\n  unregisterInput(input: Ref<HTMLElement | null | undefined>): void,\r\n}\r\n\r\nexport type ChangeEvent = (value: string | number | boolean) => void\r\n\r\nexport const GROUP_STATE = '__VXP_RADIO_GROUP_STATE' as unknown as InjectionKey<GroupState>\r\n\r\nexport const radioShapes = Object.freeze<RadioShape[]>(['default', 'border', 'button'])\r\nexport const radioGroupShapes = Object.freeze<RadioGroupShape[]>([...radioShapes, 'button-group'])\r\n","<script setup lang=\"ts\">\r\nimport { CollapseTransition } from '@/components/collapse-transition'\r\nimport { Icon } from '@/components/icon'\r\n\r\nimport { computed, inject, onBeforeUnmount, onMounted, ref, watch } from 'vue'\r\n\r\nimport {\r\n  createSizeProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { radioProps } from './props'\r\nimport { GROUP_STATE, radioShapes } from './symbol'\r\n\r\nimport type { ChangeEvent } from './symbol'\r\n\r\ndefineOptions({ name: 'Radio' })\r\n\r\nconst _props = defineProps(radioProps)\r\nconst props = useProps('radio', _props, {\r\n  size: createSizeProp(),\r\n  state: createStateProp(),\r\n  value: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  label: {\r\n    default: null,\r\n    static: true,\r\n    required: true,\r\n  },\r\n  labelClass: null,\r\n  disabled: false,\r\n  tabIndex: 0,\r\n  loading: false,\r\n  loadingLock: false,\r\n  name: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n  shape: {\r\n    default: 'default',\r\n    validator: value => radioShapes.includes(value),\r\n  },\r\n})\r\n\r\nconst emit = defineEmits(['update:value'])\r\n\r\ndefineSlots<{ default: () => any, extra: () => any }>()\r\n\r\nconst groupState = inject(GROUP_STATE, null)\r\n\r\nconst nh = useNameHelper('radio')\r\nconst icons = useIcons()\r\nconst currentValue = ref(props.value)\r\n\r\nconst input = ref<HTMLInputElement>()\r\n\r\nconst size = computed(() => groupState?.size || props.size)\r\nconst state = computed(() => groupState?.state || props.state)\r\nconst isDisabled = computed(() => groupState?.disabled || props.disabled)\r\nconst isLoading = computed(() => groupState?.loading || props.loading)\r\nconst loadingIcon = computed(() => groupState?.loadingIcon)\r\nconst isLoadingLock = computed(() => groupState?.loadingLock || false)\r\nconst loadingEffect = computed(() => groupState?.loadingEffect || '')\r\nconst shape = computed(() => groupState?.shape || props.shape)\r\nconst readonly = computed(() => isLoading.value && isLoadingLock.value)\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('checked')]: currentValue.value === props.label,\r\n      [nh.bm('disabled')]: isDisabled.value,\r\n      [nh.bm('readonly')]: readonly.value,\r\n      [nh.bm('loading')]: isLoading.value,\r\n      [nh.bm(size.value)]: size.value !== 'default',\r\n      [nh.bm(state.value)]: state.value !== 'default',\r\n      [nh.bm(shape.value)]: shape.value !== 'default' && shape.value !== 'button-group',\r\n    },\r\n  ]\r\n})\r\nconst isButton = computed(() => shape.value === 'button' || shape.value === 'button-group')\r\n\r\nwatch(\r\n  () => props.value,\r\n  value => {\r\n    currentValue.value = value\r\n  },\r\n)\r\n\r\nif (groupState) {\r\n  currentValue.value = groupState.currentValue\r\n\r\n  watch(() => groupState.currentValue, emitChange)\r\n\r\n  onMounted(() => {\r\n    groupState.registerInput(input)\r\n  })\r\n\r\n  onBeforeUnmount(() => {\r\n    groupState.unregisterInput(input)\r\n  })\r\n}\r\n\r\ndefineExpose({ currentValue, input })\r\n\r\nfunction emitChange(value: string | number | boolean) {\r\n  if (currentValue.value === value) return\r\n\r\n  currentValue.value = value\r\n\r\n  emit('update:value', value)\r\n  emitEvent(props.onChange as ChangeEvent, value)\r\n}\r\n\r\nfunction handleChange() {\r\n  if (isDisabled.value || readonly.value) {\r\n    return\r\n  }\r\n\r\n  emitChange(props.label)\r\n\r\n  if (groupState && currentValue.value === props.label) {\r\n    groupState.updateValue(currentValue.value)\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <label :class=\"className\">\r\n    <input\r\n      ref=\"input\"\r\n      type=\"radio\"\r\n      :class=\"nh.be('input')\"\r\n      :checked=\"currentValue === props.label\"\r\n      :disabled=\"isDisabled || readonly\"\r\n      :tabindex=\"props.tabIndex\"\r\n      :name=\"props.name\"\r\n      @submit.prevent\r\n      @change=\"handleChange\"\r\n      @click.stop\r\n    />\r\n    <span :class=\"[nh.be('signal'), isLoading && nh.bem('signal', 'active')]\"></span>\r\n    <span :class=\"[nh.be('label'), props.labelClass]\">\r\n      <CollapseTransition\r\n        v-if=\"isButton\"\r\n        appear\r\n        horizontal\r\n        fade-effect\r\n      >\r\n        <div v-if=\"isLoading\" :class=\"nh.be('loading')\">\r\n          <Icon\r\n            v-bind=\"icons.loading\"\r\n            :effect=\"loadingEffect || icons.loading.effect\"\r\n            :icon=\"loadingIcon || icons.loading.icon\"\r\n            label=\"loading\"\r\n          ></Icon>\r\n        </div>\r\n      </CollapseTransition>\r\n      <slot>{{ props.label }}</slot>\r\n      <span :class=\"nh.be('extra')\" @click.capture.prevent>\r\n        <slot name=\"extra\"></slot>\r\n      </span>\r\n    </span>\r\n  </label>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Radio } from '@/components/radio'\r\nimport { useFieldStore } from '@/components/form'\r\n\r\nimport { computed, provide, reactive, ref, toRef, watch } from 'vue'\r\n\r\nimport {\r\n  createIconProp,\r\n  createSizeProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { debounceMinor, isClient, isObject } from '@vexip-ui/utils'\r\nimport { radioGroupProps } from './props'\r\nimport { GROUP_STATE, radioGroupShapes } from './symbol'\r\n\r\nimport type { Ref } from 'vue'\r\nimport type { ChangeEvent } from './symbol'\r\n\r\ndefineOptions({ name: 'RadioGroup' })\r\n\r\nconst {\r\n  idFor,\r\n  labelId,\r\n  state,\r\n  disabled,\r\n  loading,\r\n  size,\r\n  validateField,\r\n  getFieldValue,\r\n  setFieldValue,\r\n} = useFieldStore<string | number | boolean>(focus)\r\n\r\nconst _props = defineProps(radioGroupProps)\r\nconst props = useProps('radioGroup', _props, {\r\n  size: createSizeProp(size),\r\n  state: createStateProp(state),\r\n  value: {\r\n    default: () => getFieldValue(),\r\n    static: true,\r\n  },\r\n  vertical: false,\r\n  disabled: () => disabled.value,\r\n  options: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  loading: () => loading.value,\r\n  loadingIcon: createIconProp(),\r\n  loadingLock: false,\r\n  loadingEffect: null,\r\n  shape: {\r\n    default: 'default',\r\n    validator: value => radioGroupShapes.includes(value),\r\n  },\r\n})\r\n\r\nconst emit = defineEmits(['update:value'])\r\n\r\nconst nh = useNameHelper('radio-group')\r\nconst currentValue = ref(props.value)\r\nconst inputSet = new Set<Ref<HTMLElement | null | undefined>>()\r\n\r\nconst readonly = computed(() => props.loading && props.loadingLock)\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.ns('radio-vars'),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('vertical')]: props.vertical,\r\n      [nh.bm('disabled')]: props.disabled,\r\n      [nh.bm('readonly')]: readonly.value,\r\n      [nh.bm('loading')]: props.loading,\r\n      [nh.bm(props.size)]: props.size !== 'default',\r\n      [nh.bm(props.state)]: props.state !== 'default',\r\n      [nh.bm(props.shape)]: props.shape !== 'default',\r\n    },\r\n  ]\r\n})\r\n\r\nconst groupState = reactive({\r\n  currentValue,\r\n  size: toRef(props, 'size'),\r\n  state: toRef(props, 'state'),\r\n  disabled: toRef(props, 'disabled'),\r\n  loading: toRef(props, 'loading'),\r\n  loadingIcon: toRef(props, 'loadingIcon'),\r\n  loadingLock: toRef(props, 'loadingLock'),\r\n  loadingEffect: toRef(props, 'loadingEffect'),\r\n  shape: toRef(props, 'shape'),\r\n  updateValue: debounceMinor(updateValue),\r\n  registerInput,\r\n  unregisterInput,\r\n})\r\n\r\n// 此处直接定义 reactive 会出现类型推断错误，存疑？\r\nprovide(GROUP_STATE, groupState)\r\n\r\nwatch(\r\n  () => props.value,\r\n  value => {\r\n    currentValue.value = value\r\n  },\r\n)\r\n\r\ndefineExpose({\r\n  idFor,\r\n  focus,\r\n  blur: () => {\r\n    for (const input of inputSet) {\r\n      input.value?.blur()\r\n    }\r\n  },\r\n})\r\n\r\nfunction updateValue(value: string | number | boolean) {\r\n  if (currentValue.value !== value) {\r\n    currentValue.value = value\r\n\r\n    emit('update:value', value)\r\n    setFieldValue(value)\r\n    emitEvent(props.onChange as ChangeEvent, value)\r\n    validateField()\r\n  }\r\n}\r\n\r\nfunction registerInput(input: Ref<HTMLElement | null | undefined>) {\r\n  inputSet.add(input)\r\n}\r\n\r\nfunction unregisterInput(input: Ref<HTMLElement | null | undefined>) {\r\n  inputSet.delete(input)\r\n}\r\n\r\nfunction focus(options?: FocusOptions) {\r\n  const input = Array.from(inputSet)[0]?.value\r\n\r\n  if (isClient && input && document.activeElement !== input) {\r\n    input.focus(options)\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :id=\"idFor\"\r\n    :class=\"className\"\r\n    role=\"radiogroup\"\r\n    :aria-orientation=\"vertical ? 'vertical' : 'horizontal'\"\r\n    :aria-labelledby=\"labelId\"\r\n  >\r\n    <slot>\r\n      <template v-for=\"item in props.options\" :key=\"item\">\r\n        <Radio\r\n          v-if=\"isObject(item)\"\r\n          inherit\r\n          :label=\"item.label\"\r\n          :disabled=\"item.disabled\"\r\n        >\r\n          {{ item.content || item.label }}\r\n        </Radio>\r\n        <Radio v-else inherit :label=\"item\">\r\n          {{ item }}\r\n        </Radio>\r\n      </template>\r\n    </slot>\r\n  </div>\r\n</template>\r\n","import { buildProps, iconProp, sizeProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { ResultSlots, ResultType } from './symbol'\r\n\r\nexport const resultProps = buildProps({\r\n  title: String,\r\n  size: sizeProp,\r\n  type: String as PropType<ResultType>,\r\n  icon: iconProp,\r\n  iconColor: String,\r\n  description: String,\r\n  slots: Object as PropType<ResultSlots>,\r\n})\r\n\r\nexport type ResultProps = ExtractPropTypes<typeof resultProps>\r\nexport type ResultCProps = ConfigurableProps<ExtractPropTypes<typeof resultProps>>\r\n","export type ResultType = 'primary' | 'info' | 'success' | 'warning' | 'error'\r\n\r\nexport interface ResultSlots {\r\n  icon?: () => any,\r\n  title?: () => any,\r\n  description?: () => any,\r\n  extra?: () => any,\r\n}\r\n\r\nexport const resultTypes = Object.freeze<ResultType[]>([\r\n  'primary',\r\n  'info',\r\n  'success',\r\n  'warning',\r\n  'error',\r\n])\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed } from 'vue'\r\n\r\nimport { createIconProp, createSizeProp, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { resultProps } from './props'\r\nimport { resultTypes } from './symbol'\r\n\r\nimport type { ResultSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'Result' })\r\n\r\nconst _props = defineProps(resultProps)\r\nconst props = useProps('result', _props, {\r\n  title: '',\r\n  size: createSizeProp(),\r\n  type: {\r\n    default: 'primary',\r\n    validator: value => resultTypes.includes(value),\r\n  },\r\n  icon: createIconProp(),\r\n  iconColor: '',\r\n  description: '',\r\n  slots: () => ({}),\r\n})\r\n\r\nconst slots = defineSlots<ResultSlots>()\r\n\r\nconst nh = useNameHelper('result')\r\nconst icons = useIcons()\r\n\r\nconst predefinedIcons = computed(() => ({\r\n  primary: icons.value.info,\r\n  info: icons.value.info,\r\n  success: icons.value.success,\r\n  warning: icons.value.warning,\r\n  error: icons.value.error,\r\n}))\r\n\r\nconst iconComp = computed(() => {\r\n  return props.icon ? { icon: props.icon } : predefinedIcons.value[props.type]\r\n})\r\nconst hasTitle = computed(() => !!(slots.title || props.title || props.slots.title))\r\nconst hasIcon = computed(() => !!(slots.icon || props.type || props.icon || props.slots.icon))\r\nconst hasDescription = computed(\r\n  () => !!(slots.description || props.description || props.slots.description),\r\n)\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm(props.type)]: props.type,\r\n    [nh.bm(props.size)]: props.size !== 'default',\r\n  }\r\n})\r\nconst style = computed(() => {\r\n  if (props.iconColor) {\r\n    return nh.cvm({\r\n      'icon-color': props.iconColor,\r\n    })\r\n  }\r\n\r\n  return {}\r\n})\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"className\" :style=\"style\">\r\n    <div v-if=\"hasIcon\" :class=\"nh.be('icon')\">\r\n      <slot name=\"icon\">\r\n        <Renderer :renderer=\"props.slots.icon\">\r\n          <Icon v-bind=\"iconComp\" :class=\"nh.be('icon')\" :style=\"{ color: props.iconColor }\"></Icon>\r\n        </Renderer>\r\n      </slot>\r\n    </div>\r\n    <div v-if=\"hasTitle\" :class=\"nh.be('title')\">\r\n      <slot name=\"title\">\r\n        <Renderer :renderer=\"props.slots.title\">\r\n          {{ props.title }}\r\n        </Renderer>\r\n      </slot>\r\n    </div>\r\n    <div v-if=\"hasDescription\" :class=\"nh.be('description')\">\r\n      <slot name=\"description\">\r\n        <Renderer :renderer=\"props.slots.description\">\r\n          {{ props.description }}\r\n        </Renderer>\r\n      </slot>\r\n    </div>\r\n    <div v-if=\"slots.extra || props.slots.extra\" :class=\"nh.be('extra')\">\r\n      <slot name=\"extra\">\r\n        <Renderer :renderer=\"props.slots.extra\"></Renderer>\r\n      </slot>\r\n    </div>\r\n  </div>\r\n</template>\r\n","import { defineComponent, h, provide, renderSlot } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { skeletonGroupProps } from './props'\r\nimport { GROUP_STATE } from './symbol'\r\n\r\nexport default defineComponent({\r\n  name: 'SkeletonGroup',\r\n  props: skeletonGroupProps,\r\n  setup(_props, { slots }) {\r\n    const props = useProps('skeletonGroup', _props, {\r\n      size: null,\r\n      tag: false,\r\n      itemTag: null,\r\n      activated: false,\r\n      round: false,\r\n      circle: false,\r\n      block: false,\r\n      loading: true,\r\n    })\r\n\r\n    const nh = useNameHelper('skeletonGroup')\r\n\r\n    provide(GROUP_STATE, props)\r\n\r\n    return () => {\r\n      if (props.tag) {\r\n        return h(\r\n          typeof props.tag === 'string' ? props.tag : 'div',\r\n          {\r\n            class: [nh.b(), props.inherit && nh.bm('inherit')],\r\n            role: 'group',\r\n          },\r\n          {\r\n            default: () => slots.default?.(),\r\n          },\r\n        )\r\n      }\r\n\r\n      return renderSlot(slots, 'default')\r\n    }\r\n  },\r\n})\r\n","<script setup lang=\"ts\">\r\nimport { Tooltip } from '@/components/tooltip'\r\n\r\nimport { computed, ref } from 'vue'\r\n\r\nimport { useHoverDelay, useNameHelper } from '@vexip-ui/config'\r\nimport { useModifier, useSetTimeout } from '@vexip-ui/hooks'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { TooltipExposed } from '@/components/tooltip'\r\nimport type { SliderTipProps } from './symbol'\r\n\r\ndefineOptions({ name: 'SliderTrigger' })\r\n\r\nconst props = defineProps({\r\n  value: {\r\n    type: Number,\r\n    default: 0,\r\n  },\r\n  tipTransfer: {\r\n    type: [Boolean, String],\r\n    default: false,\r\n  },\r\n  hideTip: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  vertical: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  min: {\r\n    type: Number,\r\n    default: 0,\r\n  },\r\n  max: {\r\n    type: Number,\r\n    default: 100,\r\n  },\r\n  disabled: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  loading: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  reverse: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  sliding: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  tipHover: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  tipProps: {\r\n    type: Object as PropType<SliderTipProps>,\r\n    default: () => ({}),\r\n  },\r\n})\r\n\r\nconst emit = defineEmits(['key-minus', 'key-plus'])\r\n\r\ndefineSlots<{ default: () => any, tip: () => any }>()\r\n\r\nconst nh = useNameHelper('slider')\r\nconst hoverDelay = useHoverDelay()\r\n\r\nconst isTipShow = ref(false)\r\n\r\nconst tooltip = ref<(InstanceType<typeof Tooltip> & TooltipExposed) | null>(null)\r\nconst handler = ref<HTMLElement>()\r\n\r\nconst { timer } = useSetTimeout()\r\nconst { target: wrapper } = useModifier({\r\n  passive: false,\r\n  onKeyDown: (event, modifier) => {\r\n    if (modifier.up || modifier.down || modifier.left || modifier.right) {\r\n      disableEvent(event)\r\n\r\n      const extraType = event.ctrlKey\r\n        ? 'ctrl'\r\n        : event.shiftKey\r\n          ? 'shift'\r\n          : event.altKey\r\n            ? 'alt'\r\n            : undefined\r\n\r\n      if (modifier.up || modifier.left) {\r\n        emit('key-minus', extraType)\r\n      } else {\r\n        emit('key-plus', extraType)\r\n      }\r\n    }\r\n  },\r\n})\r\n\r\nconst tipClass = computed(() => [nh.be('tip'), props.tipProps?.tipClass])\r\n\r\ndefineExpose({ updateTooltip, focus, blur })\r\n\r\nfunction showTooltip() {\r\n  clearTimeout(timer.hover)\r\n\r\n  if (!props.disabled) {\r\n    timer.hover = setTimeout(() => {\r\n      isTipShow.value = true\r\n    }, hoverDelay.value)\r\n  }\r\n}\r\n\r\nfunction hideTooltip() {\r\n  clearTimeout(timer.hover)\r\n\r\n  timer.hover = setTimeout(() => {\r\n    isTipShow.value = false\r\n  }, hoverDelay.value)\r\n}\r\n\r\nfunction disableEvent<E extends Event>(event: E) {\r\n  if (event.cancelable) {\r\n    event.stopPropagation()\r\n    event.preventDefault()\r\n  }\r\n}\r\n\r\nfunction updateTooltip() {\r\n  if (tooltip.value) {\r\n    tooltip.value.updatePopper()\r\n  }\r\n}\r\n\r\nfunction focus(options?: FocusOptions) {\r\n  handler.value?.focus(options)\r\n}\r\n\r\nfunction blur() {\r\n  handler.value?.blur()\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"nh.be('trigger')\"\r\n    tabindex=\"-1\"\r\n    @touchstart=\"disableEvent\"\r\n  >\r\n    <Tooltip\r\n      ref=\"tooltip\"\r\n      :placement=\"vertical ? 'right' : 'top'\"\r\n      v-bind=\"tipProps\"\r\n      trigger=\"custom\"\r\n      :transfer=\"tipTransfer\"\r\n      :visible=\"isTipShow || sliding\"\r\n      :tip-class=\"tipClass\"\r\n      :disabled=\"hideTip\"\r\n      :no-hover=\"!tipHover\"\r\n      @tip-enter=\"showTooltip\"\r\n      @tip-leave=\"hideTooltip\"\r\n    >\r\n      <template #trigger>\r\n        <div\r\n          ref=\"handler\"\r\n          :class=\"{\r\n            [nh.be('button')]: true,\r\n            [nh.bem('button', 'loading')]: loading,\r\n            [nh.bem('button', 'sliding')]: sliding\r\n          }\"\r\n          role=\"slider\"\r\n          tabindex=\"0\"\r\n          :aria-valuenow=\"value\"\r\n          :aria-valuemin=\"min\"\r\n          :aria-valuemax=\"max\"\r\n          :aria-disabled=\"disabled\"\r\n          @mouseenter=\"showTooltip\"\r\n          @mouseleave=\"hideTooltip\"\r\n        >\r\n          <slot>\r\n            <div :class=\"nh.be('handler')\"></div>\r\n          </slot>\r\n        </div>\r\n      </template>\r\n      <slot name=\"tip\">\r\n        {{ value }}\r\n      </slot>\r\n    </Tooltip>\r\n  </div>\r\n</template>\r\n","import { booleanProp, booleanStringProp, buildProps, eventProp, stateProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { SliderRawMarkers, SliderSlots, SliderTipProps } from './symbol'\r\n\r\nexport const sliderProps = buildProps({\r\n  state: stateProp,\r\n  value: [Number, Array] as PropType<number | number[]>,\r\n  min: Number,\r\n  max: Number,\r\n  step: Number,\r\n  vertical: booleanProp,\r\n  hideTip: booleanProp,\r\n  tipTransfer: booleanStringProp,\r\n  disabled: booleanProp,\r\n  loading: booleanProp,\r\n  loadingLock: booleanProp,\r\n  reverse: booleanProp,\r\n  range: booleanProp,\r\n  markers: [Object, Array] as PropType<SliderRawMarkers>,\r\n  markerOnly: booleanProp,\r\n  tipHover: booleanProp,\r\n  flipMarker: booleanProp,\r\n  triggerFade: booleanProp,\r\n  tipProps: Object as PropType<SliderTipProps>,\r\n  sync: booleanProp,\r\n  rangeDraggable: booleanProp,\r\n  slots: Object as PropType<SliderSlots>,\r\n  onChange: eventProp<(value: number | number[]) => void>(),\r\n  onInput: eventProp<(value: number | number[]) => void>(),\r\n})\r\n\r\nexport type SliderProps = ExtractPropTypes<typeof sliderProps>\r\nexport type SliderCProps = ConfigurableProps<SliderProps>\r\n","<script setup lang=\"ts\">\r\nimport { Renderer } from '@/components/renderer'\r\nimport { useFieldStore } from '@/components/form'\r\n\r\nimport { computed, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\r\n\r\nimport SliderTrigger from './slider-trigger.vue'\r\nimport {\r\n  createStateProp,\r\n  emitEvent,\r\n  useHoverDelay,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { useMoving, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { decimalLength, throttle, toFixed } from '@vexip-ui/utils'\r\nimport { sliderProps } from './props'\r\n\r\nimport type { SliderMarker, SliderSlots } from './symbol'\r\n\r\nconst enum TriggerType {\r\n  START = 0,\r\n  END = 1,\r\n}\r\n\r\ndefineOptions({ name: 'Slider' })\r\n\r\nconst { idFor, state, labelId, disabled, loading, validateField, getFieldValue, setFieldValue } =\r\n  useFieldStore<number | number[]>(focus)\r\n\r\nconst _props = defineProps(sliderProps)\r\nconst props = useProps('slider', _props, {\r\n  state: createStateProp(state),\r\n  value: {\r\n    default: () => getFieldValue() ?? 0,\r\n    static: true,\r\n  },\r\n  min: 0,\r\n  max: 100,\r\n  step: {\r\n    default: 1,\r\n    validator: value => value > 0,\r\n  },\r\n  vertical: false,\r\n  hideTip: false,\r\n  tipTransfer: null,\r\n  disabled: () => disabled.value,\r\n  loading: () => loading.value,\r\n  loadingLock: false,\r\n  reverse: false,\r\n  range: false,\r\n  markers: null,\r\n  markerOnly: false,\r\n  tipHover: false,\r\n  flipMarker: false,\r\n  triggerFade: false,\r\n  tipProps: () => ({}),\r\n  sync: false,\r\n  rangeDraggable: false,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:value'])\r\n\r\nconst slots = defineSlots<SliderSlots>()\r\n\r\nconst nh = useNameHelper('slider')\r\nconst hoverDelay = useHoverDelay()\r\n\r\nconst { timer } = useSetTimeout()\r\n\r\nconst stepOneValue = ref([0, 0]) // 按每 step 为 1 的 value\r\nconst sliding = ref([false, false])\r\nconst triggerType = ref(TriggerType.END)\r\nconst hovered = ref(false)\r\nconst triggerShow = ref(false)\r\n\r\nconst track = ref<HTMLElement>()\r\nconst startTrigger = ref<InstanceType<typeof SliderTrigger>>()\r\nconst endTrigger = ref<InstanceType<typeof SliderTrigger>>()\r\n\r\nconst markerList = computed(() => {\r\n  const markers = props.markers\r\n  const list: { value: number, marker: SliderMarker }[] = []\r\n\r\n  if (!markers) return list\r\n\r\n  if (Array.isArray(markers)) {\r\n    for (const raw of markers) {\r\n      const { value, ...marker } = typeof raw === 'number' ? { value: raw } : raw\r\n\r\n      if (!Number.isNaN(value)) {\r\n        list.push({ value, marker })\r\n      }\r\n    }\r\n  } else {\r\n    for (const value of Object.keys(markers)) {\r\n      const number = parseFloat(value)\r\n      const marker = markers[value]\r\n\r\n      if (!Number.isNaN(number)) {\r\n        list.push({\r\n          value: number,\r\n          marker: typeof marker === 'string' ? { label: marker } : marker,\r\n        })\r\n      }\r\n    }\r\n  }\r\n\r\n  return list.sort((prev, next) => prev.value - next.value)\r\n})\r\nconst hasMarkerLabel = computed(() => !!markerList.value.find(({ marker }) => marker.label))\r\nconst readonly = computed(() => props.loading && props.loadingLock)\r\nconst canDragRange = computed(() => props.range && props.rangeDraggable)\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm(props.state)]: props.state !== 'default',\r\n    [nh.bm('vertical')]: props.vertical,\r\n    [nh.bm('sliding')]: sliding.value[1] || sliding.value[0],\r\n    [nh.bm('disabled')]: props.disabled,\r\n    [nh.bm('readonly')]: readonly.value,\r\n    [nh.bm('loading')]: props.loading,\r\n    [nh.bm('reverse')]: props.reverse,\r\n    [nh.bm('with-marker')]: hasMarkerLabel.value,\r\n    [nh.bm('flip-marker')]: props.flipMarker,\r\n    [nh.bm('hide-trigger')]: props.triggerFade && !triggerShow.value,\r\n    [nh.bm('range-draggable')]: canDragRange.value,\r\n  }\r\n})\r\nconst stepDigit = computed(() => decimalLength(props.step))\r\n// 按每 step 为 1 算的最小值\r\nconst stepOneMin = computed(() => Math.ceil(Math.min(props.min, props.max) / props.step))\r\n// 按每 step 为 1 算的最大值\r\nconst stepOneMax = computed(() => Math.floor(Math.max(props.min, props.max) / props.step))\r\nconst truthValue = computed(() => {\r\n  return [\r\n    toFixed(stepOneValue.value[0] * props.step, stepDigit.value),\r\n    toFixed(stepOneValue.value[1] * props.step, stepDigit.value),\r\n  ]\r\n})\r\nconst stepOneTotal = computed(() => stepOneMax.value - stepOneMin.value || 1)\r\nconst triggerPercent = computed(() => {\r\n  return [toPercent(stepOneValue.value[0]), toPercent(stepOneValue.value[1])]\r\n})\r\nconst fillerStyle = computed(() => {\r\n  const { vertical, reverse } = props\r\n\r\n  return {\r\n    [vertical ? (reverse ? 'bottom' : 'top') : reverse ? 'right' : 'left']:\r\n      `${Math.min(triggerPercent.value[0], triggerPercent.value[1])}%`,\r\n    [vertical ? 'height' : 'width']:\r\n      `${Math.abs(triggerPercent.value[0] - triggerPercent.value[1])}%`,\r\n  }\r\n})\r\nconst startTriggerStyle = computed(() => {\r\n  const { vertical, reverse } = props\r\n\r\n  return {\r\n    [reverse ? 'bottom' : 'top']: vertical ? `${triggerPercent.value[0]}%` : '50%',\r\n    [reverse ? 'right' : 'left']: vertical ? '50%' : `${triggerPercent.value[0]}%`,\r\n    zIndex: triggerType.value === TriggerType.START ? 1 : undefined,\r\n    transform: `translate(${reverse ? '' : '-'}50%, ${reverse ? '' : '-'}50%)`,\r\n  }\r\n})\r\nconst endTriggerStyle = computed(() => {\r\n  const { vertical, reverse } = props\r\n\r\n  return {\r\n    [reverse ? 'bottom' : 'top']: vertical ? `${triggerPercent.value[1]}%` : '50%',\r\n    [reverse ? 'right' : 'left']: vertical ? '50%' : `${triggerPercent.value[1]}%`,\r\n    zIndex: triggerType.value === TriggerType.END ? 1 : undefined,\r\n    transform: `translate(${reverse ? '' : '-'}50%, ${reverse ? '' : '-'}50%)`,\r\n  }\r\n})\r\nconst isDisabled = computed(() => props.disabled || readonly.value)\r\n\r\nconst commonSlotParams = shallowReadonly(\r\n  reactive({\r\n    values: truthValue,\r\n    sliding: sliding,\r\n    percent: triggerPercent,\r\n    disabled: toRef(props, 'disabled'),\r\n    loading: toRef(props, 'loading'),\r\n  }),\r\n)\r\n\r\nconst { target: filler } = useMoving({\r\n  disabled: computed(() => !canDragRange.value || isDisabled.value),\r\n  onStart: (state, event) => {\r\n    if (!track.value || event.button > 0) {\r\n      return false\r\n    }\r\n\r\n    clearTimeout(timer.sliding)\r\n    event.stopPropagation()\r\n    event.preventDefault()\r\n\r\n    trackRect = track.value.getBoundingClientRect()\r\n    state.startValue = stepOneValue.value[TriggerType.START]\r\n    state.endValue = stepOneValue.value[TriggerType.END]\r\n    state.valueDiff = (state.endValue as number) - (state.startValue as number)\r\n  },\r\n  onMove: (state, event) => {\r\n    if (!trackRect) {\r\n      return\r\n    }\r\n\r\n    event.preventDefault()\r\n\r\n    const vertical = props.vertical\r\n    const reverse = props.reverse\r\n    const delta = vertical ? state.deltaY : state.deltaX\r\n\r\n    for (let i = 0; i < 2; ++i) {\r\n      const type = i ? TriggerType.END : TriggerType.START\r\n      stepOneValue.value[type] =\r\n        (reverse ? -1 : 1) *\r\n          (delta / trackRect[vertical ? 'height' : 'width']) *\r\n          stepOneTotal.value +\r\n        Number(state[i ? 'endValue' : 'startValue'])\r\n    }\r\n\r\n    verifyValue()\r\n\r\n    if (stepOneValue.value[TriggerType.START] === stepOneMin.value) {\r\n      stepOneValue.value[TriggerType.END] =\r\n        stepOneValue.value[TriggerType.START] + (state.valueDiff as number)\r\n    } else if (stepOneValue.value[TriggerType.END] === stepOneMax.value) {\r\n      stepOneValue.value[TriggerType.START] =\r\n        stepOneValue.value[TriggerType.END] - (state.valueDiff as number)\r\n    }\r\n\r\n    emitChange('input')\r\n  },\r\n  onEnd: () => emitChange(),\r\n})\r\n\r\nparseValue(props.value)\r\nverifyValue()\r\n\r\nlet lastValue: number | number[] = props.range\r\n  ? truthValue.value[0] > truthValue.value[1]\r\n    ? [truthValue.value[1], truthValue.value[0]]\r\n    : [truthValue.value[0], truthValue.value[1]]\r\n  : truthValue.value[1]\r\nlet lastInputValue: number | number[] = Array.isArray(lastValue) ? [...lastValue] : lastValue\r\n\r\nwatch(\r\n  () => props.value,\r\n  value => {\r\n    if (isEqualValue(lastValue, value)) {\r\n      return\r\n    }\r\n\r\n    parseValue(value)\r\n    verifyValue()\r\n  },\r\n)\r\nwatch(\r\n  () => props.step,\r\n  () => {\r\n    parseValue(props.value)\r\n    verifyValue()\r\n  },\r\n)\r\n\r\ndefineExpose({\r\n  idFor,\r\n  sliding,\r\n  track,\r\n  startTrigger,\r\n  endTrigger,\r\n  isValueInRange,\r\n  focus,\r\n  blur,\r\n})\r\n\r\nfunction toPercent(value: string | number) {\r\n  return ((parseFloat(value as string) - stepOneMin.value) / stepOneTotal.value) * 100\r\n}\r\n\r\nfunction parseValue(value: number | number[]) {\r\n  if (props.range) {\r\n    const values = Array.isArray(value) ? value : [value, 100]\r\n\r\n    stepOneValue.value = [values[0] / props.step, values[1] / props.step]\r\n  } else {\r\n    stepOneValue.value = [stepOneMin.value, (Array.isArray(value) ? value[0] : value) / props.step]\r\n  }\r\n}\r\n\r\nfunction verifyValue() {\r\n  stepOneValue.value = stepOneValue.value.map(value => {\r\n    let computedValue = Math.max(stepOneMin.value, Math.min(stepOneMax.value, Math.round(value)))\r\n\r\n    if (props.markerOnly && markerList.value.length) {\r\n      let nearest = Infinity\r\n      let nearestMarker = 0\r\n\r\n      for (const { value } of markerList.value) {\r\n        const delta = Math.abs(computedValue * props.step - value)\r\n\r\n        if (nearest > delta) {\r\n          nearest = delta\r\n          nearestMarker = value\r\n        }\r\n      }\r\n\r\n      computedValue = nearestMarker / props.step\r\n    }\r\n\r\n    return computedValue\r\n  })\r\n}\r\n\r\nfunction setTriggerFade() {\r\n  if (hovered.value || sliding.value[0] || sliding.value[1]) return\r\n\r\n  triggerShow.value = false\r\n}\r\n\r\nfunction handlePointerEnter() {\r\n  clearTimeout(timer.hover)\r\n\r\n  timer.hover = setTimeout(() => {\r\n    hovered.value = true\r\n    triggerShow.value = true\r\n  }, hoverDelay.value)\r\n}\r\n\r\nfunction handlePointerLeave() {\r\n  clearTimeout(timer.hover)\r\n\r\n  timer.hover = setTimeout(() => {\r\n    hovered.value = false\r\n    setTriggerFade()\r\n  }, hoverDelay.value)\r\n}\r\n\r\nfunction emitChange(type: 'change' | 'input' = 'change', sync = props.sync) {\r\n  const [start, end] = truthValue.value\r\n  const value = props.range ? (start > end ? [end, start] : [start, end]) : end\r\n\r\n  if (type === 'change') {\r\n    if (isEqualValue(lastValue, value)) return\r\n\r\n    lastValue = value\r\n\r\n    if (!sync) {\r\n      lastInputValue = value\r\n\r\n      emit('update:value', value)\r\n      setFieldValue(value)\r\n    }\r\n\r\n    emitEvent(props.onChange, value)\r\n\r\n    if (!sync) {\r\n      validateField()\r\n    }\r\n  } else {\r\n    if (isEqualValue(lastInputValue, value)) return\r\n\r\n    lastInputValue = value\r\n\r\n    if (sync) {\r\n      emit('update:value', value)\r\n      setFieldValue(value)\r\n    }\r\n\r\n    emitEvent(props.onInput, value)\r\n\r\n    if (sync) {\r\n      validateField()\r\n    }\r\n  }\r\n}\r\n\r\nlet trackRect: DOMRect | null = null\r\n\r\nfunction computePointedValue(event: PointerEvent) {\r\n  if (!trackRect) return\r\n\r\n  const vertical = props.vertical\r\n  const reverse = props.reverse\r\n  const client = vertical ? event.clientY : event.clientX\r\n\r\n  stepOneValue.value[triggerType.value] =\r\n    (reverse ? -1 : 1) *\r\n      ((client - trackRect[vertical ? (reverse ? 'bottom' : 'top') : reverse ? 'right' : 'left']) /\r\n        trackRect[vertical ? 'height' : 'width']) *\r\n      stepOneTotal.value +\r\n    stepOneMin.value\r\n}\r\n\r\nfunction isEqualValue(prev: number | number[], current: number | number[]) {\r\n  if (Array.isArray(prev) && Array.isArray(current)) {\r\n    return prev[0] === current[0] && prev[1] === current[1]\r\n  }\r\n\r\n  return prev === current\r\n}\r\n\r\nconst throttleMove = throttle((event: PointerEvent) => {\r\n  if (!trackRect || props.disabled) return\r\n\r\n  event.preventDefault()\r\n\r\n  computePointedValue(event)\r\n  verifyValue()\r\n\r\n  if (startTrigger.value) {\r\n    startTrigger.value.updateTooltip()\r\n  }\r\n\r\n  if (endTrigger.value) {\r\n    endTrigger.value.updateTooltip()\r\n  }\r\n\r\n  // const [start, end] = truthValue.value\r\n  // const value = props.range ? (start > end ? [end, start] : [start, end]) : end\r\n\r\n  // if (!isEqualValue(lastValue, value)) {\r\n  //   lastValue = value\r\n  //   emitEvent(props.onInput, value)\r\n  // }\r\n  emitChange('input')\r\n})\r\n\r\nfunction handleTrackDown(event: PointerEvent) {\r\n  if (!track.value || isDisabled.value) return\r\n\r\n  clearTimeout(timer.sliding)\r\n  event.stopPropagation()\r\n  event.preventDefault()\r\n\r\n  trackRect = track.value.getBoundingClientRect()\r\n\r\n  if (props.range) {\r\n    const { vertical, reverse } = props\r\n    const client = vertical ? event.clientY : event.clientX\r\n    const downPercent =\r\n      ((reverse\r\n        ? trackRect[vertical ? 'bottom' : 'right'] - client\r\n        : client - trackRect[vertical ? 'top' : 'left']) /\r\n        trackRect[vertical ? 'height' : 'width']) *\r\n      100\r\n\r\n    triggerType.value =\r\n      Math.abs(downPercent - triggerPercent.value[0]) <\r\n      Math.abs(downPercent - triggerPercent.value[1])\r\n        ? TriggerType.START\r\n        : TriggerType.END\r\n  } else {\r\n    triggerType.value = TriggerType.END\r\n  }\r\n\r\n  sliding.value[triggerType.value] = true\r\n  triggerShow.value = true\r\n\r\n  computePointedValue(event)\r\n  verifyValue()\r\n  emitChange('input')\r\n\r\n  document.addEventListener('pointermove', handleMove)\r\n  document.addEventListener('pointerup', handleMoveEnd)\r\n}\r\n\r\nfunction handleMove(event: PointerEvent) {\r\n  throttleMove(event)\r\n}\r\n\r\nfunction handleMoveEnd() {\r\n  trackRect = null\r\n\r\n  document.removeEventListener('pointermove', handleMove)\r\n  document.removeEventListener('pointerup', handleMoveEnd)\r\n\r\n  emitChange()\r\n\r\n  timer.sliding = setTimeout(() => {\r\n    sliding.value[triggerType.value] = false\r\n    setTriggerFade()\r\n  }, 250)\r\n}\r\n\r\nfunction disableEvent<E extends Event>(event: E) {\r\n  if (event.cancelable) {\r\n    event.stopPropagation()\r\n    event.preventDefault()\r\n  }\r\n}\r\n\r\nfunction getPointStyle(value: number | string) {\r\n  const { vertical, reverse } = props\r\n  value = toPercent(value)\r\n\r\n  return {\r\n    [reverse ? 'bottom' : 'top']: vertical ? `${value}%` : '50%',\r\n    [reverse ? 'right' : 'left']: vertical ? '50%' : `${value}%`,\r\n    transform: `translate(${reverse ? '' : '-'}50%, ${reverse ? '' : '-'}50%)`,\r\n  }\r\n}\r\n\r\nfunction getMarkerStyle(value: number | string) {\r\n  const { vertical, reverse } = props\r\n  value = toPercent(value)\r\n\r\n  return {\r\n    [reverse ? 'bottom' : 'top']: vertical ? `${value}%` : undefined,\r\n    [reverse ? 'right' : 'left']: vertical ? undefined : `${value}%`,\r\n    transform: `translate${vertical ? 'Y' : 'X'}(${reverse ? '' : '-'}50%)`,\r\n  }\r\n}\r\n\r\nfunction isValueInRange(value: number | string) {\r\n  const number = parseFloat(value as string)\r\n\r\n  if (Number.isNaN(number)) return false\r\n\r\n  if (props.range) {\r\n    const min = Math.min(truthValue.value[0], truthValue.value[1])\r\n    const max = Math.max(truthValue.value[0], truthValue.value[1])\r\n\r\n    return number >= min && number <= max\r\n  } else {\r\n    return number <= truthValue.value[1]\r\n  }\r\n}\r\n\r\nfunction adjustValue(type: TriggerType, delta: number, emitEvent = false) {\r\n  stepOneValue.value[type] += delta\r\n\r\n  verifyValue()\r\n  emitEvent && emitChange()\r\n}\r\n\r\nfunction handlePlus(type: TriggerType, extra: 'ctrl' | 'shift' | 'alt') {\r\n  if (isDisabled.value) return\r\n\r\n  if (props.markerOnly || extra === 'alt') {\r\n    if (!markerList.value.length) return\r\n\r\n    const value = truthValue.value[type]\r\n\r\n    for (const { value: markerValue } of markerList.value) {\r\n      if (markerValue > value) {\r\n        stepOneValue.value[type] = markerValue\r\n        break\r\n      }\r\n    }\r\n\r\n    emitChange()\r\n  } else {\r\n    adjustValue(type, extra === 'shift' ? 5 : extra === 'ctrl' ? 20 : 1, true)\r\n  }\r\n}\r\n\r\nfunction handleMinus(type: TriggerType, extra: 'ctrl' | 'shift' | 'alt') {\r\n  if (isDisabled.value) return\r\n\r\n  if (props.markerOnly || extra === 'alt') {\r\n    if (!markerList.value.length) return\r\n\r\n    const value = truthValue.value[type]\r\n\r\n    for (let i = markerList.value.length - 1; i >= 0; --i) {\r\n      const { value: markerValue } = markerList.value[i]\r\n\r\n      if (markerValue < value) {\r\n        stepOneValue.value[type] = markerValue\r\n        break\r\n      }\r\n    }\r\n\r\n    emitChange()\r\n  } else {\r\n    adjustValue(type, extra === 'shift' ? -5 : extra === 'ctrl' ? -20 : -1)\r\n  }\r\n}\r\n\r\nfunction focus(options?: FocusOptions) {\r\n  ;(startTrigger.value || endTrigger.value)?.focus(options)\r\n}\r\n\r\nfunction blur() {\r\n  ;(startTrigger.value || endTrigger.value)?.blur()\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :id=\"idFor\"\r\n    :class=\"className\"\r\n    tabindex=\"-1\"\r\n    role=\"group\"\r\n    :aria-labelledby=\"labelId\"\r\n    @pointerdown=\"handleTrackDown\"\r\n    @pointerenter=\"handlePointerEnter\"\r\n    @pointerleave=\"handlePointerLeave\"\r\n    @touchstart=\"disableEvent\"\r\n  >\r\n    <div :class=\"nh.be('container')\">\r\n      <div ref=\"track\" :class=\"nh.be('track')\"></div>\r\n      <slot name=\"filler\" v-bind=\"commonSlotParams\">\r\n        <Renderer :renderer=\"props.slots.filler\" :data=\"commonSlotParams\">\r\n          <div ref=\"filler\" :class=\"nh.be('filler')\" :style=\"fillerStyle\">\r\n            <div :class=\"nh.be('filler-inner')\"></div>\r\n          </div>\r\n        </Renderer>\r\n      </slot>\r\n      <template v-if=\"markerList.length\">\r\n        <div :class=\"nh.be('points')\">\r\n          <div\r\n            v-for=\"{ value, marker } in markerList\"\r\n            :key=\"value\"\r\n            :class=\"[nh.be('point'), isValueInRange(value) && nh.bem('point', 'in-range')]\"\r\n            :style=\"getPointStyle(value)\"\r\n          >\r\n            <slot\r\n              name=\"point\"\r\n              v-bind=\"commonSlotParams\"\r\n              :marker=\"marker\"\r\n              :marker-value=\"value\"\r\n              :in-range=\"isValueInRange(value)\"\r\n            >\r\n              <Renderer\r\n                :renderer=\"props.slots.point\"\r\n                :data=\"{\r\n                  ...commonSlotParams,\r\n                  marker,\r\n                  markerValue: value,\r\n                  inRange: isValueInRange(value)\r\n                }\"\r\n              >\r\n                <span :class=\"nh.be('dot')\"></span>\r\n              </Renderer>\r\n            </slot>\r\n          </div>\r\n        </div>\r\n        <div :class=\"nh.be('markers')\">\r\n          <template v-for=\"{ value, marker } in markerList\" :key=\"value\">\r\n            <div\r\n              v-bind=\"marker.attrs\"\r\n              :class=\"[nh.be('marker'), marker.class]\"\r\n              :style=\"[getMarkerStyle(value), marker.style as any]\"\r\n            >\r\n              <slot\r\n                name=\"marker\"\r\n                v-bind=\"commonSlotParams\"\r\n                :marker=\"marker\"\r\n                :marker-value=\"value\"\r\n                :in-range=\"isValueInRange(value)\"\r\n              >\r\n                <Renderer\r\n                  :renderer=\"props.slots.marker\"\r\n                  :data=\"{\r\n                    ...commonSlotParams,\r\n                    marker,\r\n                    markerValue: value,\r\n                    inRange: isValueInRange(value)\r\n                  }\"\r\n                >\r\n                  {{ marker.label }}\r\n                </Renderer>\r\n              </slot>\r\n            </div>\r\n          </template>\r\n        </div>\r\n      </template>\r\n      <SliderTrigger\r\n        v-if=\"props.range\"\r\n        ref=\"startTrigger\"\r\n        :value=\"truthValue[0]\"\r\n        :tip-transfer=\"props.tipTransfer\"\r\n        :hide-tip=\"props.hideTip\"\r\n        :vertical=\"props.vertical\"\r\n        :min=\"props.min\"\r\n        :max=\"props.max\"\r\n        :disabled=\"props.disabled\"\r\n        :loading=\"props.loading\"\r\n        :reverse=\"props.reverse\"\r\n        :sliding=\"sliding[0]\"\r\n        :tip-hover=\"props.tipHover\"\r\n        :style=\"startTriggerStyle\"\r\n        :tip-props=\"props.tipProps\"\r\n        @key-plus=\"handlePlus(0, $event)\"\r\n        @key-minus=\"handleMinus(0, $event)\"\r\n      >\r\n        <slot\r\n          v-if=\"slots.trigger || props.slots.trigger\"\r\n          name=\"trigger\"\r\n          type=\"start\"\r\n          :value=\"truthValue[0]\"\r\n          :sliding=\"sliding[0]\"\r\n          :percent=\"triggerPercent[0]\"\r\n          :disabled=\"props.disabled\"\r\n          :loading=\"props.loading\"\r\n        >\r\n          <Renderer\r\n            :renderer=\"props.slots.trigger\"\r\n            :data=\"{\r\n              type: 'start',\r\n              value: truthValue[0],\r\n              sliding: sliding[0],\r\n              percent: triggerPercent[0],\r\n              disabled: props.disabled,\r\n              loading: props.loading\r\n            }\"\r\n          ></Renderer>\r\n        </slot>\r\n        <template v-if=\"slots.tip || props.slots.tip\" #tip>\r\n          <slot\r\n            name=\"tip\"\r\n            type=\"start\"\r\n            :value=\"truthValue[0]\"\r\n            :sliding=\"sliding[0]\"\r\n            :percent=\"triggerPercent[0]\"\r\n            :disabled=\"props.disabled\"\r\n            :loading=\"props.loading\"\r\n          >\r\n            <Renderer\r\n              :renderer=\"props.slots.tip\"\r\n              :data=\"{\r\n                type: 'start',\r\n                value: truthValue[0],\r\n                sliding: sliding[0],\r\n                percent: triggerPercent[0],\r\n                disabled: props.disabled,\r\n                loading: props.loading\r\n              }\"\r\n            >\r\n              {{ truthValue[0] }}\r\n            </Renderer>\r\n          </slot>\r\n        </template>\r\n      </SliderTrigger>\r\n      <SliderTrigger\r\n        ref=\"endTrigger\"\r\n        :value=\"truthValue[1]\"\r\n        :tip-transfer=\"props.tipTransfer\"\r\n        :hide-tip=\"props.hideTip\"\r\n        :vertical=\"props.vertical\"\r\n        :min=\"props.min\"\r\n        :max=\"props.max\"\r\n        :disabled=\"props.disabled\"\r\n        :loading=\"props.loading\"\r\n        :reverse=\"props.reverse\"\r\n        :sliding=\"sliding[1]\"\r\n        :tip-hover=\"props.tipHover\"\r\n        :style=\"endTriggerStyle\"\r\n        :tip-props=\"props.tipProps\"\r\n        @key-plus=\"handlePlus(1, $event)\"\r\n        @key-minus=\"handleMinus(1, $event)\"\r\n      >\r\n        <slot\r\n          v-if=\"slots.trigger || props.slots.trigger\"\r\n          name=\"trigger\"\r\n          type=\"end\"\r\n          :value=\"truthValue[1]\"\r\n          :sliding=\"sliding[1]\"\r\n          :percent=\"triggerPercent[1]\"\r\n          :disabled=\"props.disabled\"\r\n          :loading=\"props.loading\"\r\n        >\r\n          <Renderer\r\n            :renderer=\"props.slots.trigger\"\r\n            :data=\"{\r\n              type: 'end',\r\n              value: truthValue[1],\r\n              sliding: sliding[1],\r\n              percent: triggerPercent[1],\r\n              disabled: props.disabled,\r\n              loading: props.loading\r\n            }\"\r\n          ></Renderer>\r\n        </slot>\r\n        <template v-if=\"slots.tip || props.slots.tip\" #tip>\r\n          <slot\r\n            name=\"tip\"\r\n            type=\"end\"\r\n            :value=\"truthValue[1]\"\r\n            :sliding=\"sliding[1]\"\r\n            :percent=\"triggerPercent[1]\"\r\n            :disabled=\"props.disabled\"\r\n            :loading=\"props.loading\"\r\n          >\r\n            <Renderer\r\n              :renderer=\"props.slots.tip\"\r\n              :data=\"{\r\n                type: 'end',\r\n                value: truthValue[1],\r\n                sliding: sliding[1],\r\n                percent: triggerPercent[1],\r\n                disabled: props.disabled,\r\n                loading: props.loading\r\n              }\"\r\n            >\r\n              {{ truthValue[1] }}\r\n            </Renderer>\r\n          </slot>\r\n        </template>\r\n      </SliderTrigger>\r\n    </div>\r\n  </div>\r\n</template>\r\n","import { booleanProp, buildProps, styleProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ComponentSize, ConfigurableProps } from '@vexip-ui/config'\r\nimport type { SpaceAlign, SpaceJustify } from './symbol'\r\n\r\nexport const spaceProps = buildProps({\r\n  vertical: booleanProp,\r\n  inline: booleanProp,\r\n  tag: String,\r\n  align: String as PropType<SpaceAlign>,\r\n  justify: String as PropType<SpaceJustify>,\r\n  noWrap: booleanProp,\r\n  size: [String, Number, Array] as PropType<ComponentSize | number | [number, number]>,\r\n  itemStyle: styleProp,\r\n  gapDisabled: booleanProp,\r\n})\r\n\r\nexport type SpaceProps = ExtractPropTypes<typeof spaceProps>\r\nexport type SpaceCProps = ConfigurableProps<SpaceProps>\r\n","import { computed, defineComponent, renderSlot } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { flatVNodes } from '@vexip-ui/hooks'\r\nimport { supportFlexGap } from '@vexip-ui/utils'\r\nimport { spaceProps } from './props'\r\n\r\nimport type { ClassType } from '@vexip-ui/config'\r\nimport type { SpaceAlign, SpaceJustify } from './symbol'\r\n\r\nconst justifyList = Object.freeze<SpaceJustify[]>([\r\n  'start',\r\n  'end',\r\n  'center',\r\n  'space-around',\r\n  'space-between',\r\n  'space-evenly',\r\n])\r\nconst alignList = Object.freeze<SpaceAlign[]>(['start', 'end', 'center', 'baseline', 'stretch'])\r\n\r\nconst useFlexGap = supportFlexGap()\r\n\r\nfunction parseFlexStyle(value: string) {\r\n  return value === 'start' || value === 'end' ? `flex-${value}` : value\r\n}\r\n\r\nexport default defineComponent({\r\n  name: 'Space',\r\n  props: spaceProps,\r\n  setup(_props, { slots }) {\r\n    const props = useProps('space', _props, {\r\n      vertical: false,\r\n      inline: false,\r\n      tag: 'div',\r\n      align: {\r\n        default: 'stretch',\r\n        validator: value => alignList.includes(value),\r\n      },\r\n      justify: {\r\n        default: 'start',\r\n        validator: value => justifyList.includes(value),\r\n      },\r\n      noWrap: false,\r\n      size: 'default',\r\n      itemStyle: null,\r\n      gapDisabled: !useFlexGap,\r\n    })\r\n\r\n    const nh = useNameHelper('space')\r\n    const varMap: Record<string, any> = {\r\n      h: `var(${nh.cv('h-gap')})`,\r\n      hh: `calc(var(${nh.cv('h-gap')}) * 0.5)`,\r\n      mhh: `calc(var(${nh.cv('h-gap')}) * -0.5)`,\r\n      v: `var(${nh.cv('v-gap')})`,\r\n      hv: `calc(var(${nh.cv('v-gap')}) * 0.5)`,\r\n      mhv: `calc(var(${nh.cv('v-gap')}) * -0.5)`,\r\n    }\r\n\r\n    const className = computed(() => {\r\n      const className: ClassType = {\r\n        [nh.b()]: true,\r\n        [nh.bs('vars')]: true,\r\n        [nh.bm('inherit')]: props.inherit,\r\n        [nh.bm('inline')]: props.inline,\r\n        [nh.bm('vertical')]: props.vertical,\r\n        [nh.bm('no-wrap')]: props.vertical || props.noWrap,\r\n        [nh.bm('no-gap')]: props.gapDisabled,\r\n      }\r\n\r\n      if (typeof props.size === 'string' && props.size !== 'default') {\r\n        className[nh.bm(props.size)] = true\r\n      }\r\n\r\n      return className\r\n    })\r\n    const style = computed(() => {\r\n      const { justify, align, size } = props\r\n\r\n      const style: Record<string, string> = {\r\n        alignItems: parseFlexStyle(align),\r\n        justifyContent: parseFlexStyle(justify),\r\n      }\r\n\r\n      if (typeof size !== 'string') {\r\n        const normalizedSize = Array.isArray(size) ? size : [size, size]\r\n\r\n        style[nh.cv('h-gap')] = `${normalizedSize[0]}px`\r\n        style[nh.cv('v-gap')] = `${normalizedSize[1]}px`\r\n      }\r\n\r\n      if (props.gapDisabled && !props.vertical) {\r\n        style.marginTop = varMap.mhv\r\n        style.marginBottom = varMap.mhv\r\n      }\r\n\r\n      return style\r\n    })\r\n\r\n    return () => {\r\n      const CustomTag = props.tag || ('div' as any)\r\n      const children = renderSlot(slots, 'default').children\r\n\r\n      if (!children?.length) {\r\n        return <CustomTag class={className.value} style={style.value}></CustomTag>\r\n      }\r\n\r\n      const vnodes = flatVNodes(children)\r\n      const lastIndex = vnodes.length - 1\r\n      const justify = props.justify\r\n      const justifySpace = justify.startsWith('space')\r\n      const notBetween = justify !== 'space-between'\r\n\r\n      return (\r\n        <CustomTag class={className.value} style={style.value}>\r\n          {vnodes.map((vnode, index) => (\r\n            <div\r\n              key={index}\r\n              class={nh.be('item')}\r\n              role={'none'}\r\n              style={[\r\n                props.itemStyle,\r\n                !props.gapDisabled\r\n                  ? ''\r\n                  : props.vertical\r\n                    ? {\r\n                      marginBottom: index !== lastIndex ? varMap.v : undefined,\r\n                    }\r\n                    : {\r\n                      paddingTop: varMap.hv,\r\n                      paddingBottom: varMap.hv,\r\n                      marginRight: justifySpace\r\n                        ? notBetween || index !== lastIndex\r\n                          ? varMap.hh\r\n                          : undefined\r\n                        : index !== lastIndex\r\n                          ? varMap.h\r\n                          : undefined,\r\n                      marginLeft: justifySpace\r\n                        ? notBetween || index !== 0\r\n                          ? varMap.hh\r\n                          : undefined\r\n                        : undefined,\r\n                    },\r\n              ]}\r\n            >\r\n              {vnode}\r\n            </div>\r\n          ))}\r\n        </CustomTag>\r\n      )\r\n    }\r\n  },\r\n})\r\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\n\r\nexport const splitProps = buildProps({\r\n  value: Number,\r\n  min: Number,\r\n  max: Number,\r\n  vertical: booleanProp,\r\n  noTransition: booleanProp,\r\n  lazy: booleanProp,\r\n  canFull: booleanProp,\r\n  onChange: eventProp<(value: number) => void>(),\r\n  onFull: eventProp<(type: 'top' | 'right' | 'bottom' | 'left') => void>(),\r\n  onReset: eventProp(),\r\n  onMoveStart: eventProp<(value: number) => void>(),\r\n  onMove: eventProp<(value: number) => void>(),\r\n  onMoveEnd: eventProp<(value: number) => void>(),\r\n})\r\n\r\nexport type SplitProps = ExtractPropTypes<typeof splitProps>\r\nexport type SplitCProps = ConfigurableProps<SplitProps>\r\n","<template>\r\n  <div ref=\"wrapper\" :class=\"className\" @transitionend=\"removeTransition\">\r\n    <div\r\n      :class=\"[nh.be('panel'), nh.bem('panel', props.vertical ? 'top' : 'left')]\"\r\n      :style=\"leftPaneStyle\"\r\n    >\r\n      <slot name=\"left\"></slot>\r\n    </div>\r\n    <div\r\n      :class=\"[nh.be('panel'), nh.bem('panel', props.vertical ? 'bottom' : 'right')]\"\r\n      :style=\"rightPaneStyle\"\r\n    >\r\n      <slot name=\"right\"></slot>\r\n    </div>\r\n    <div :class=\"nh.be('trigger')\" :style=\"triggerStyle\">\r\n      <div ref=\"handler\" :class=\"nh.be('handler')\">\r\n        <template v-if=\"props.canFull\">\r\n          <button\r\n            type=\"button\"\r\n            :class=\"[nh.be('button'), nh.bem('button', `${props.vertical ? 'top' : 'left'}-full`)]\"\r\n            @pointerdown.stop\r\n            @click.left=\"handleFull(-1)\"\r\n          >\r\n            <Icon v-bind=\"fullIcons[0]\" :scale=\"+(fullIcons[0].scale || 1) * 0.6\"></Icon>\r\n          </button>\r\n          <button\r\n            type=\"button\"\r\n            :class=\"[\r\n              nh.be('button'),\r\n              nh.bem('button', `${props.vertical ? 'bottom' : 'right'}-full`)\r\n            ]\"\r\n            @pointerdown.stop\r\n            @click.left=\"handleFull(1)\"\r\n          >\r\n            <Icon v-bind=\"fullIcons[1]\" :scale=\"+(fullIcons[1].scale || 1) * 0.6\"></Icon>\r\n          </button>\r\n        </template>\r\n        <template v-else>\r\n          <slot name=\"handler\">\r\n            <span v-for=\"n in 6\" :key=\"n\" :class=\"nh.be('pointer')\"></span>\r\n          </slot>\r\n        </template>\r\n      </div>\r\n    </div>\r\n    <div ref=\"guide\" :class=\"nh.be('guide')\"></div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\n\r\nimport { computed, defineComponent, ref, watch } from 'vue'\r\n\r\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useMoving } from '@vexip-ui/hooks'\r\nimport { splitProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'Split',\r\n  components: {\r\n    Icon,\r\n  },\r\n  props: splitProps,\r\n  emits: ['update:value'],\r\n  setup(_props, { emit }) {\r\n    const props = useProps('split', _props, {\r\n      value: {\r\n        default: 0.5,\r\n        validator: (value: number) => value > 0 && value < 1,\r\n        static: true,\r\n      },\r\n      min: 0.1,\r\n      max: 0.9,\r\n      vertical: false,\r\n      noTransition: false,\r\n      lazy: false,\r\n      canFull: false,\r\n    })\r\n\r\n    const nh = useNameHelper('split')\r\n    const icons = useIcons()\r\n    const currentValue = ref(props.value)\r\n    const currentFull = ref<0 | 1 | -1>(0)\r\n    const transition = ref(false)\r\n\r\n    const wrapper = ref<HTMLElement>()\r\n    const guide = ref<HTMLElement>()\r\n\r\n    const offset = computed(() => {\r\n      return props.vertical ? 'offsetHeight' : 'offsetWidth'\r\n    })\r\n    const position = computed<['top', 'bottom'] | ['left', 'right']>(() => {\r\n      return props.vertical ? ['top', 'bottom'] : ['left', 'right']\r\n    })\r\n\r\n    const { target: handler, moving } = useMoving({\r\n      lazy: true,\r\n      capture: false,\r\n      onStart: (state, event) => {\r\n        if (currentFull.value || !wrapper.value || event.button > 0) {\r\n          return false\r\n        }\r\n\r\n        const { min, max, vertical, lazy } = props\r\n        const outer = wrapper.value[offset.value]\r\n        const computedMin = min <= 1 ? min : min / outer\r\n        const computedMax = max <= 1 ? max : max / outer\r\n\r\n        state.outer = outer\r\n        state.min = computedMin\r\n        state.max = computedMax\r\n        state.vertical = vertical\r\n        state.splitLazy = lazy\r\n        state.start = currentValue.value * outer\r\n        state.target = currentValue.value\r\n\r\n        if (lazy && guide.value) {\r\n          guide.value.style[position.value[0]] = `${currentValue.value * 100}`\r\n          guide.value.style.display = 'block'\r\n        }\r\n\r\n        emitEvent(props.onMoveStart, currentValue.value)\r\n      },\r\n      onMove: state => {\r\n        const outer = state.outer as number\r\n        const min = state.min as number\r\n        const max = state.max as number\r\n        const delta = state.vertical ? state.deltaY : state.deltaX\r\n        const start = state.start as number\r\n        const value = Math.min(Math.max(min, (start + delta) / outer), max)\r\n\r\n        if (state.splitLazy) {\r\n          if (guide.value) {\r\n            guide.value.style[position.value[0]] = `${value * 100}%`\r\n          }\r\n\r\n          state.target = value\r\n        } else {\r\n          handleChange(value)\r\n        }\r\n\r\n        emitEvent(props.onMove, value)\r\n      },\r\n      onEnd: state => {\r\n        if (guide.value) {\r\n          guide.value.style.display = ''\r\n        }\r\n\r\n        if (state.splitLazy) {\r\n          const target = state.target as number\r\n\r\n          if (Math.abs(target - currentValue.value) > 0.01) {\r\n            setTransition()\r\n          }\r\n\r\n          handleChange(target)\r\n        }\r\n\r\n        emitEvent(props.onMoveEnd, currentValue.value)\r\n      },\r\n    })\r\n\r\n    const className = computed(() => {\r\n      let fullType = ''\r\n\r\n      if (currentFull.value) {\r\n        if (props.vertical) {\r\n          fullType = currentFull.value < 0 ? 'top' : 'bottom'\r\n        } else {\r\n          fullType = currentFull.value < 0 ? 'left' : 'right'\r\n        }\r\n      }\r\n\r\n      return {\r\n        [nh.b()]: true,\r\n        [nh.bs('vars')]: true,\r\n        [nh.bm('inherit')]: props.inherit,\r\n        [nh.bm(props.vertical ? 'vertical' : 'horizontal')]: true,\r\n        [nh.bm('moving')]: moving.value,\r\n        [nh.bm(`${fullType}-full`)]: !!fullType,\r\n        [nh.bm('transition')]: transition.value,\r\n      }\r\n    })\r\n    const leftPaneStyle = computed(() => {\r\n      return {\r\n        [position.value[1]]:\r\n          currentFull.value < 0\r\n            ? '0'\r\n            : currentFull.value > 0\r\n              ? '100%'\r\n              : `${(1 - currentValue.value) * 100}%`,\r\n      }\r\n    })\r\n    const rightPaneStyle = computed(() => {\r\n      return {\r\n        [position.value[0]]:\r\n          currentFull.value < 0\r\n            ? '100%'\r\n            : currentFull.value > 0\r\n              ? '0'\r\n              : `${currentValue.value * 100}%`,\r\n      }\r\n    })\r\n    const triggerStyle = computed(() => {\r\n      return {\r\n        [position.value[0]]:\r\n          currentFull.value < 0\r\n            ? '100%'\r\n            : currentFull.value > 0\r\n              ? '0'\r\n              : `calc(${currentValue.value * 100}% - var(${nh.cv('handler-size')}) * 0.5)`,\r\n      }\r\n    })\r\n    const fullIcons = computed(() => {\r\n      return props.vertical\r\n        ? [icons.value.angleDown, icons.value.angleUp]\r\n        : [icons.value.angleRight, icons.value.angleLeft]\r\n    })\r\n\r\n    watch(\r\n      () => props.value,\r\n      value => {\r\n        if (value.toFixed(5) !== currentValue.value.toFixed(5)) {\r\n          currentValue.value = value\r\n          setTransition()\r\n        }\r\n      },\r\n    )\r\n    watch(currentValue, value => {\r\n      if (guide.value) {\r\n        guide.value.style[position.value[0]] = `${value * 100}%`\r\n      }\r\n    })\r\n    watch(currentFull, value => {\r\n      setTransition()\r\n\r\n      if (value) {\r\n        let type: 'top' | 'right' | 'bottom' | 'left'\r\n\r\n        if (props.vertical) {\r\n          type = value < 0 ? 'top' : 'bottom'\r\n        } else {\r\n          type = value < 0 ? 'left' : 'right'\r\n        }\r\n\r\n        emitEvent(props.onFull, type)\r\n      } else {\r\n        emitEvent(props.onReset)\r\n      }\r\n    })\r\n\r\n    function setTransition() {\r\n      transition.value = !props.noTransition && !moving.value\r\n    }\r\n\r\n    function removeTransition() {\r\n      transition.value = false\r\n    }\r\n\r\n    function handleFull(type: 1 | -1) {\r\n      if (!props.canFull) {\r\n        return\r\n      }\r\n\r\n      if (currentFull.value) {\r\n        currentFull.value = 0\r\n      } else {\r\n        currentFull.value = type\r\n      }\r\n    }\r\n\r\n    function handleChange(value: number) {\r\n      if (value.toFixed(5) !== currentValue.value.toFixed(5)) {\r\n        currentValue.value = value\r\n\r\n        emitEvent(props.onChange, value)\r\n        emit('update:value', value)\r\n      }\r\n    }\r\n\r\n    return {\r\n      props,\r\n      nh,\r\n\r\n      className,\r\n      position,\r\n      leftPaneStyle,\r\n      rightPaneStyle,\r\n      triggerStyle,\r\n      fullIcons,\r\n\r\n      wrapper,\r\n      guide,\r\n      handler,\r\n\r\n      removeTransition,\r\n      handleFull,\r\n    }\r\n  },\r\n})\r\n</script>\r\n","<template>\r\n  <div ref=\"wrapper\" :class=\"className\" @transitionend=\"removeTransition\">\r\n    <div\r\n      :class=\"[nh.be('panel'), nh.bem('panel', props.vertical ? 'top' : 'left')]\"\r\n      :style=\"leftPaneStyle\"\r\n    >\r\n      <slot name=\"left\"></slot>\r\n    </div>\r\n    <div\r\n      :class=\"[nh.be('panel'), nh.bem('panel', props.vertical ? 'bottom' : 'right')]\"\r\n      :style=\"rightPaneStyle\"\r\n    >\r\n      <slot name=\"right\"></slot>\r\n    </div>\r\n    <div :class=\"nh.be('trigger')\" :style=\"triggerStyle\">\r\n      <div ref=\"handler\" :class=\"nh.be('handler')\">\r\n        <template v-if=\"props.canFull\">\r\n          <button\r\n            type=\"button\"\r\n            :class=\"[nh.be('button'), nh.bem('button', `${props.vertical ? 'top' : 'left'}-full`)]\"\r\n            @pointerdown.stop\r\n            @click.left=\"handleFull(-1)\"\r\n          >\r\n            <Icon v-bind=\"fullIcons[0]\" :scale=\"+(fullIcons[0].scale || 1) * 0.6\"></Icon>\r\n          </button>\r\n          <button\r\n            type=\"button\"\r\n            :class=\"[\r\n              nh.be('button'),\r\n              nh.bem('button', `${props.vertical ? 'bottom' : 'right'}-full`)\r\n            ]\"\r\n            @pointerdown.stop\r\n            @click.left=\"handleFull(1)\"\r\n          >\r\n            <Icon v-bind=\"fullIcons[1]\" :scale=\"+(fullIcons[1].scale || 1) * 0.6\"></Icon>\r\n          </button>\r\n        </template>\r\n        <template v-else>\r\n          <slot name=\"handler\">\r\n            <span v-for=\"n in 6\" :key=\"n\" :class=\"nh.be('pointer')\"></span>\r\n          </slot>\r\n        </template>\r\n      </div>\r\n    </div>\r\n    <div ref=\"guide\" :class=\"nh.be('guide')\"></div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\n\r\nimport { computed, defineComponent, ref, watch } from 'vue'\r\n\r\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useMoving } from '@vexip-ui/hooks'\r\nimport { splitProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'Split',\r\n  components: {\r\n    Icon,\r\n  },\r\n  props: splitProps,\r\n  emits: ['update:value'],\r\n  setup(_props, { emit }) {\r\n    const props = useProps('split', _props, {\r\n      value: {\r\n        default: 0.5,\r\n        validator: (value: number) => value > 0 && value < 1,\r\n        static: true,\r\n      },\r\n      min: 0.1,\r\n      max: 0.9,\r\n      vertical: false,\r\n      noTransition: false,\r\n      lazy: false,\r\n      canFull: false,\r\n    })\r\n\r\n    const nh = useNameHelper('split')\r\n    const icons = useIcons()\r\n    const currentValue = ref(props.value)\r\n    const currentFull = ref<0 | 1 | -1>(0)\r\n    const transition = ref(false)\r\n\r\n    const wrapper = ref<HTMLElement>()\r\n    const guide = ref<HTMLElement>()\r\n\r\n    const offset = computed(() => {\r\n      return props.vertical ? 'offsetHeight' : 'offsetWidth'\r\n    })\r\n    const position = computed<['top', 'bottom'] | ['left', 'right']>(() => {\r\n      return props.vertical ? ['top', 'bottom'] : ['left', 'right']\r\n    })\r\n\r\n    const { target: handler, moving } = useMoving({\r\n      lazy: true,\r\n      capture: false,\r\n      onStart: (state, event) => {\r\n        if (currentFull.value || !wrapper.value || event.button > 0) {\r\n          return false\r\n        }\r\n\r\n        const { min, max, vertical, lazy } = props\r\n        const outer = wrapper.value[offset.value]\r\n        const computedMin = min <= 1 ? min : min / outer\r\n        const computedMax = max <= 1 ? max : max / outer\r\n\r\n        state.outer = outer\r\n        state.min = computedMin\r\n        state.max = computedMax\r\n        state.vertical = vertical\r\n        state.splitLazy = lazy\r\n        state.start = currentValue.value * outer\r\n        state.target = currentValue.value\r\n\r\n        if (lazy && guide.value) {\r\n          guide.value.style[position.value[0]] = `${currentValue.value * 100}`\r\n          guide.value.style.display = 'block'\r\n        }\r\n\r\n        emitEvent(props.onMoveStart, currentValue.value)\r\n      },\r\n      onMove: state => {\r\n        const outer = state.outer as number\r\n        const min = state.min as number\r\n        const max = state.max as number\r\n        const delta = state.vertical ? state.deltaY : state.deltaX\r\n        const start = state.start as number\r\n        const value = Math.min(Math.max(min, (start + delta) / outer), max)\r\n\r\n        if (state.splitLazy) {\r\n          if (guide.value) {\r\n            guide.value.style[position.value[0]] = `${value * 100}%`\r\n          }\r\n\r\n          state.target = value\r\n        } else {\r\n          handleChange(value)\r\n        }\r\n\r\n        emitEvent(props.onMove, value)\r\n      },\r\n      onEnd: state => {\r\n        if (guide.value) {\r\n          guide.value.style.display = ''\r\n        }\r\n\r\n        if (state.splitLazy) {\r\n          const target = state.target as number\r\n\r\n          if (Math.abs(target - currentValue.value) > 0.01) {\r\n            setTransition()\r\n          }\r\n\r\n          handleChange(target)\r\n        }\r\n\r\n        emitEvent(props.onMoveEnd, currentValue.value)\r\n      },\r\n    })\r\n\r\n    const className = computed(() => {\r\n      let fullType = ''\r\n\r\n      if (currentFull.value) {\r\n        if (props.vertical) {\r\n          fullType = currentFull.value < 0 ? 'top' : 'bottom'\r\n        } else {\r\n          fullType = currentFull.value < 0 ? 'left' : 'right'\r\n        }\r\n      }\r\n\r\n      return {\r\n        [nh.b()]: true,\r\n        [nh.bs('vars')]: true,\r\n        [nh.bm('inherit')]: props.inherit,\r\n        [nh.bm(props.vertical ? 'vertical' : 'horizontal')]: true,\r\n        [nh.bm('moving')]: moving.value,\r\n        [nh.bm(`${fullType}-full`)]: !!fullType,\r\n        [nh.bm('transition')]: transition.value,\r\n      }\r\n    })\r\n    const leftPaneStyle = computed(() => {\r\n      return {\r\n        [position.value[1]]:\r\n          currentFull.value < 0\r\n            ? '0'\r\n            : currentFull.value > 0\r\n              ? '100%'\r\n              : `${(1 - currentValue.value) * 100}%`,\r\n      }\r\n    })\r\n    const rightPaneStyle = computed(() => {\r\n      return {\r\n        [position.value[0]]:\r\n          currentFull.value < 0\r\n            ? '100%'\r\n            : currentFull.value > 0\r\n              ? '0'\r\n              : `${currentValue.value * 100}%`,\r\n      }\r\n    })\r\n    const triggerStyle = computed(() => {\r\n      return {\r\n        [position.value[0]]:\r\n          currentFull.value < 0\r\n            ? '100%'\r\n            : currentFull.value > 0\r\n              ? '0'\r\n              : `calc(${currentValue.value * 100}% - var(${nh.cv('handler-size')}) * 0.5)`,\r\n      }\r\n    })\r\n    const fullIcons = computed(() => {\r\n      return props.vertical\r\n        ? [icons.value.angleDown, icons.value.angleUp]\r\n        : [icons.value.angleRight, icons.value.angleLeft]\r\n    })\r\n\r\n    watch(\r\n      () => props.value,\r\n      value => {\r\n        if (value.toFixed(5) !== currentValue.value.toFixed(5)) {\r\n          currentValue.value = value\r\n          setTransition()\r\n        }\r\n      },\r\n    )\r\n    watch(currentValue, value => {\r\n      if (guide.value) {\r\n        guide.value.style[position.value[0]] = `${value * 100}%`\r\n      }\r\n    })\r\n    watch(currentFull, value => {\r\n      setTransition()\r\n\r\n      if (value) {\r\n        let type: 'top' | 'right' | 'bottom' | 'left'\r\n\r\n        if (props.vertical) {\r\n          type = value < 0 ? 'top' : 'bottom'\r\n        } else {\r\n          type = value < 0 ? 'left' : 'right'\r\n        }\r\n\r\n        emitEvent(props.onFull, type)\r\n      } else {\r\n        emitEvent(props.onReset)\r\n      }\r\n    })\r\n\r\n    function setTransition() {\r\n      transition.value = !props.noTransition && !moving.value\r\n    }\r\n\r\n    function removeTransition() {\r\n      transition.value = false\r\n    }\r\n\r\n    function handleFull(type: 1 | -1) {\r\n      if (!props.canFull) {\r\n        return\r\n      }\r\n\r\n      if (currentFull.value) {\r\n        currentFull.value = 0\r\n      } else {\r\n        currentFull.value = type\r\n      }\r\n    }\r\n\r\n    function handleChange(value: number) {\r\n      if (value.toFixed(5) !== currentValue.value.toFixed(5)) {\r\n        currentValue.value = value\r\n\r\n        emitEvent(props.onChange, value)\r\n        emit('update:value', value)\r\n      }\r\n    }\r\n\r\n    return {\r\n      props,\r\n      nh,\r\n\r\n      className,\r\n      position,\r\n      leftPaneStyle,\r\n      rightPaneStyle,\r\n      triggerStyle,\r\n      fullIcons,\r\n\r\n      wrapper,\r\n      guide,\r\n      handler,\r\n\r\n      removeTransition,\r\n      handleFull,\r\n    }\r\n  },\r\n})\r\n</script>\r\n","import { booleanProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\r\nimport type {\r\n  ChangeEvent,\r\n  TabNavAlign,\r\n  TabNavOptions,\r\n  TabNavPlacement,\r\n  TabNavSlots,\r\n} from './symbol'\r\n\r\nexport const tabNavProps = buildProps({\r\n  active: [String, Number],\r\n  card: booleanProp,\r\n  options: Array as PropType<TabNavOptions[]>,\r\n  align: String as PropType<TabNavAlign>,\r\n  placement: String as PropType<TabNavPlacement>,\r\n  closable: booleanProp,\r\n  showAdd: booleanProp,\r\n  slots: Object as PropType<TabNavSlots>,\r\n  onChange: eventProp<EventListener<ChangeEvent>>(),\r\n  onAdd: eventProp(),\r\n  onClose: eventProp<EventListener<ChangeEvent>>(),\r\n})\r\n\r\nexport type TabNavProps = ExtractPropTypes<typeof tabNavProps>\r\nexport type TabNavCProps = ConfigurableProps<TabNavProps>\r\n\r\nexport const tabNavItemProps = buildProps({\r\n  label: [String, Number],\r\n  disabled: booleanProp,\r\n  icon: iconProp,\r\n  closable: booleanProp,\r\n  onToggle: eventProp<(active: boolean) => void>(),\r\n})\r\n\r\nexport type TabNavItemProps = ExtractPropTypes<typeof tabNavItemProps>\r\n","import type { InjectionKey } from 'vue'\r\n\r\nexport type TabNavAlign = 'left' | 'center' | 'right'\r\nexport type TabNavPlacement = 'top' | 'right' | 'bottom' | 'left'\r\n\r\nexport interface TabNavItemOptions {\r\n  label: string | number,\r\n  content?: string,\r\n  icon?: Record<string, any>,\r\n  disabled?: boolean,\r\n  closable?: boolean,\r\n  onToggle?: (active: boolean) => void,\r\n}\r\n\r\nexport type TabNavOptions = TabNavItemOptions | string | number\r\n\r\nexport interface ItemState {\r\n  el?: HTMLElement | null,\r\n  label: string | number,\r\n  index: number,\r\n  total: number,\r\n}\r\n\r\nexport interface TabNavState {\r\n  currentActive: string | number,\r\n  closable: boolean,\r\n  increaseItem: (item: ItemState) => void,\r\n  decreaseItem: (item: ItemState) => void,\r\n  handleActive: (label: string | number) => void,\r\n  handleClose: (label: string | number) => void,\r\n  refreshLabels: () => void,\r\n}\r\n\r\nexport type ChangeEvent = (label: string | number) => void\r\n\r\nexport interface TabNavSlots {\r\n  prefix?: () => any,\r\n  suffix?: () => any,\r\n  add?: () => any,\r\n  marker?: () => any,\r\n  /**\r\n   * @internal\r\n   */\r\n  default?: () => any,\r\n}\r\n\r\nexport const TAB_NAV_STATE = '__VXP_TAB_NAV_STATE' as unknown as InjectionKey<TabNavState>\r\n\r\nexport const trackStyleMap = Object.freeze({\r\n  top: ['left', 'width'],\r\n  right: ['top', 'height'],\r\n  bottom: ['left', 'width'],\r\n  left: ['top', 'height'],\r\n} as const)\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\n\r\nimport { computed, inject, onBeforeUnmount, reactive, ref, watch } from 'vue'\r\n\r\nimport { createIconProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { isDefined } from '@vexip-ui/utils'\r\nimport { tabNavItemProps } from './props'\r\nimport { TAB_NAV_STATE } from './symbol'\r\n\r\nimport type { ItemState } from './symbol'\r\n\r\ndefineOptions({ name: 'TabNavItem' })\r\n\r\nconst _props = defineProps(tabNavItemProps)\r\nconst props = useProps('tabNavItem', _props, {\r\n  label: {\r\n    static: true,\r\n    default: null,\r\n  },\r\n  disabled: false,\r\n  icon: createIconProp(),\r\n  closable: null,\r\n})\r\n\r\nconst tabNavState = inject(TAB_NAV_STATE, null)\r\n\r\nconst nh = useNameHelper('tab-nav')\r\nconst icons = useIcons()\r\nconst active = ref(false)\r\nconst currentLabel = ref(props.label)\r\nconst index = ref(0)\r\nconst total = ref(0)\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nconst contentClass = computed(() => {\r\n  const baseClass = nh.be('content')\r\n\r\n  return {\r\n    [baseClass]: true,\r\n    [`${baseClass}--disabled`]: props.disabled,\r\n    [`${baseClass}--active`]: !props.disabled && active.value,\r\n  }\r\n})\r\nconst isClosable = computed(() => {\r\n  if (isDefined(props.closable)) {\r\n    return props.closable\r\n  }\r\n\r\n  return tabNavState?.closable ?? false\r\n})\r\n\r\nwatch(\r\n  () => props.label,\r\n  value => {\r\n    currentLabel.value = value\r\n    tabNavState?.refreshLabels()\r\n  },\r\n)\r\nwatch(active, value => {\r\n  emitEvent(props.onToggle!, value)\r\n})\r\n\r\nif (tabNavState) {\r\n  const state: ItemState = reactive({\r\n    el: wrapper,\r\n    label: currentLabel,\r\n    index,\r\n    total,\r\n  })\r\n\r\n  watch(currentLabel, () => {\r\n    active.value = currentLabel.value === tabNavState.currentActive\r\n  })\r\n  watch(\r\n    () => tabNavState.currentActive,\r\n    value => {\r\n      active.value = currentLabel.value === value\r\n    },\r\n    { immediate: true },\r\n  )\r\n\r\n  tabNavState.increaseItem(state)\r\n\r\n  onBeforeUnmount(() => {\r\n    tabNavState.decreaseItem(state)\r\n  })\r\n}\r\n\r\nfunction handleSelect() {\r\n  if (props.disabled) {\r\n    return\r\n  }\r\n\r\n  tabNavState?.handleActive(currentLabel.value)\r\n}\r\n\r\nfunction handleClose() {\r\n  if (props.disabled) {\r\n    return\r\n  }\r\n\r\n  tabNavState?.handleClose(currentLabel.value)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <li ref=\"wrapper\" :class=\"nh.be('item')\" role=\"none\">\r\n    <div :class=\"nh.be('pad')\"></div>\r\n    <div\r\n      :class=\"contentClass\"\r\n      role=\"tab\"\r\n      tabindex=\"0\"\r\n      :aria-disabled=\"props.disabled\"\r\n      :aria-setsize=\"total || undefined\"\r\n      :aria-posinset=\"index || undefined\"\r\n      @click=\"handleSelect\"\r\n      @keydown.enter.stop=\"handleSelect\"\r\n    >\r\n      <Icon v-if=\"props.icon\" :class=\"nh.be('icon')\" :icon=\"props.icon\"></Icon>\r\n      <slot>\r\n        {{ props.label }}\r\n      </slot>\r\n      <button\r\n        v-if=\"isClosable\"\r\n        type=\"button\"\r\n        :class=\"nh.be('close')\"\r\n        @click.stop=\"handleClose\"\r\n      >\r\n        <Icon v-bind=\"icons.close\" label=\"close\"></Icon>\r\n      </button>\r\n    </div>\r\n  </li>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\nimport { Scroll } from '@/components/scroll'\r\nimport { TabNavItem } from '@/components/tab-nav-item'\r\n\r\nimport { computed, onMounted, provide, reactive, ref, toRef, watch } from 'vue'\r\n\r\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useDisplay } from '@vexip-ui/hooks'\r\nimport { debounceMinor, isNull } from '@vexip-ui/utils'\r\nimport { tabNavProps } from './props'\r\nimport { TAB_NAV_STATE, trackStyleMap } from './symbol'\r\n\r\nimport type { ChangeEvent, ItemState, TabNavSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'TabNav' })\r\n\r\nconst _props = defineProps(tabNavProps)\r\nconst props = useProps('tabNav', _props, {\r\n  active: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  card: false,\r\n  options: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  align: 'left',\r\n  placement: 'top',\r\n  closable: false,\r\n  showAdd: false,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:active'])\r\n\r\nconst slots = defineSlots<TabNavSlots>()\r\n\r\nconst nh = useNameHelper('tab-nav')\r\nconst icons = useIcons()\r\nconst currentActive = ref(props.active)\r\nconst markerPosition = ref(0)\r\nconst markerSize = ref(0)\r\nconst itemStates = new Set<ItemState>()\r\n\r\nconst wrapper = useDisplay(updateMarkerPosition)\r\nconst scroll = ref<InstanceType<typeof Scroll>>()\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm(`align-${props.align}`)]: true,\r\n    [nh.bm(props.placement)]: true,\r\n    [nh.bm('card')]: props.card,\r\n  }\r\n})\r\nconst markerStyle = computed(() => {\r\n  const [position, length] = trackStyleMap[props.placement]\r\n\r\n  return {\r\n    [position]: `${markerPosition.value}px`,\r\n    [length]: `${markerSize.value}px`,\r\n  }\r\n})\r\nconst items = computed(() => {\r\n  return props.options.map(item => {\r\n    if (typeof item === 'string' || typeof item === 'number') {\r\n      return { label: item }\r\n    }\r\n\r\n    return item\r\n  })\r\n})\r\nconst scrollMode = computed(() => {\r\n  return props.placement === 'top' || props.placement === 'bottom' ? 'horizontal-exact' : 'vertical'\r\n})\r\n\r\nconst refreshLabels = debounceMinor(() => {\r\n  const total = itemStates.size\r\n\r\n  Array.from(itemStates).forEach((item, index) => {\r\n    item.index = index + 1\r\n    item.total = total\r\n\r\n    if (isNull(item.label)) {\r\n      item.label = index + 1\r\n    }\r\n  })\r\n\r\n  if (itemStates.size >= 1 && isActiveEmpty()) {\r\n    currentActive.value = Array.from(itemStates)[0].label\r\n  }\r\n})\r\n\r\nprovide(\r\n  TAB_NAV_STATE,\r\n  reactive({\r\n    currentActive,\r\n    closable: toRef(props, 'closable'),\r\n    increaseItem,\r\n    decreaseItem,\r\n    handleActive,\r\n    handleClose,\r\n    refreshLabels,\r\n  }),\r\n)\r\n\r\nwatch(\r\n  () => props.active,\r\n  value => {\r\n    currentActive.value = value\r\n    updateMarkerPosition()\r\n  },\r\n)\r\nwatch(\r\n  () => props.placement,\r\n  () => {\r\n    requestAnimationFrame(updateMarkerPosition)\r\n  },\r\n)\r\n\r\nonMounted(updateMarkerPosition)\r\n\r\ndefineExpose({\r\n  items,\r\n  wrapper,\r\n  scroll,\r\n  updateMarkerPosition,\r\n  handleAdd,\r\n})\r\n\r\nfunction isActiveEmpty() {\r\n  return isNull(currentActive.value) || currentActive.value === ''\r\n}\r\n\r\nfunction increaseItem(item: ItemState) {\r\n  itemStates.add(item)\r\n  refreshLabels()\r\n}\r\n\r\nfunction decreaseItem(item: ItemState) {\r\n  itemStates.delete(item)\r\n  refreshLabels()\r\n}\r\n\r\nfunction handleActive(label: string | number) {\r\n  currentActive.value = label\r\n\r\n  updateMarkerPosition()\r\n  emit('update:active', label)\r\n  emitEvent(props.onChange as ChangeEvent, label)\r\n}\r\n\r\nfunction handleAdd() {\r\n  emitEvent(props.onAdd)\r\n}\r\n\r\nfunction handleClose(label: string | number) {\r\n  emitEvent(props.onClose as ChangeEvent, label)\r\n\r\n  requestAnimationFrame(updateMarkerPosition)\r\n}\r\n\r\nfunction updateMarkerPosition() {\r\n  const activeItem = Array.from(itemStates).find(item => item.label === currentActive.value)\r\n\r\n  if (activeItem?.el) {\r\n    if (props.placement === 'top' || props.placement === 'bottom') {\r\n      markerPosition.value = activeItem.el.offsetLeft\r\n      markerSize.value = activeItem.el.offsetWidth\r\n    } else {\r\n      markerPosition.value = activeItem.el.offsetTop\r\n      markerSize.value = activeItem.el.offsetHeight\r\n    }\r\n  } else {\r\n    markerPosition.value = 0\r\n    markerSize.value = 0\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div ref=\"wrapper\" :class=\"className\" tabindex=\"-1\">\r\n    <ResizeObserver :on-resize=\"updateMarkerPosition\">\r\n      <div :class=\"[nh.be('extra'), nh.bem('extra', 'prefix')]\">\r\n        <div v-if=\"slots.prefix || props.slots.prefix\" :class=\"nh.be('prefix')\">\r\n          <slot name=\"prefix\">\r\n            <Renderer :renderer=\"props.slots.prefix\"></Renderer>\r\n          </slot>\r\n        </div>\r\n      </div>\r\n    </ResizeObserver>\r\n    <Scroll\r\n      ref=\"scroll\"\r\n      :class=\"nh.be('scroll')\"\r\n      :mode=\"scrollMode\"\r\n      :delta-x=\"40\"\r\n      :delta-y=\"40\"\r\n      scroll-tag=\"ul\"\r\n      :scroll-class=\"nh.be('list')\"\r\n      :scroll-attrs=\"{ role: 'tablist' }\"\r\n    >\r\n      <slot>\r\n        <TabNavItem\r\n          v-for=\"item in items\"\r\n          :key=\"item.label\"\r\n          :label=\"item.label\"\r\n          :icon=\"item.icon\"\r\n          :disabled=\"item.disabled\"\r\n          :closable=\"item.closable\"\r\n          @toggle=\"item.onToggle\"\r\n        >\r\n          {{ item.content || item.label }}\r\n        </TabNavItem>\r\n      </slot>\r\n      <li v-if=\"props.showAdd || slots.add || props.slots.add\" :class=\"nh.be('item')\" role=\"none\">\r\n        <div :class=\"nh.be('pad')\"></div>\r\n        <button type=\"button\" :class=\"nh.be('add')\" @click=\"handleAdd\">\r\n          <slot name=\"add\">\r\n            <Renderer :renderer=\"props.slots.add\">\r\n              <Icon v-bind=\"icons.plus\" :scale=\"+(icons.plus.scale || 1) * 1.2\"></Icon>\r\n            </Renderer>\r\n          </slot>\r\n        </button>\r\n      </li>\r\n      <div\r\n        v-if=\"!props.card\"\r\n        :class=\"nh.be('track')\"\r\n        role=\"none\"\r\n        :style=\"markerStyle\"\r\n      >\r\n        <slot name=\"marker\">\r\n          <Renderer :renderer=\"props.slots.marker\">\r\n            <div :class=\"nh.be('marker')\"></div>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n    </Scroll>\r\n    <ResizeObserver :on-resize=\"updateMarkerPosition\">\r\n      <div :class=\"[nh.be('extra'), nh.bem('extra', 'suffix')]\">\r\n        <div v-if=\"slots.suffix || props.slots.suffix\" :class=\"nh.be('suffix')\">\r\n          <slot name=\"suffix\">\r\n            <Renderer :renderer=\"props.slots.suffix\"></Renderer>\r\n          </slot>\r\n        </div>\r\n      </div>\r\n    </ResizeObserver>\r\n  </div>\r\n</template>\r\n","import { tabNavItemProps, tabNavProps } from '@/components/tab-nav/props'\r\n\r\nimport { booleanProp, omitProps, wrapProps } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { TabsSlots } from './symbol'\r\n\r\nexport const tabsProps = wrapProps({\r\n  ...omitProps(tabNavProps, ['options']),\r\n  lazy: booleanProp,\r\n  lazyLoad: booleanProp,\r\n  slots: Object as PropType<TabsSlots>,\r\n})\r\n\r\nexport type TabsProps = ExtractPropTypes<typeof tabsProps>\r\nexport type TabsCProps = ConfigurableProps<TabsProps>\r\n\r\nexport const tabPanelProps = wrapProps({\r\n  ...tabNavItemProps,\r\n  lazy: booleanProp,\r\n  lazyLoad: booleanProp,\r\n  name: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n})\r\n\r\nexport type TabPanelProps = ExtractPropTypes<typeof tabPanelProps>\r\n","import type { InjectionKey } from 'vue'\r\nimport type { TabNavSlots } from '@/components/tab-nav'\r\n\r\nexport interface ItemState {\r\n  label: string | number,\r\n  name: string,\r\n  icon: Record<string, any>,\r\n  disabled: boolean,\r\n  closable?: boolean,\r\n  labelRenderer: null | ((data: { label: string | number }) => any),\r\n}\r\n\r\nexport interface TabsState {\r\n  currentActive: string | number,\r\n  lazy: boolean,\r\n  lazyLoad: boolean,\r\n  increaseItem: (item: ItemState) => void,\r\n  decreaseItem: (item: ItemState) => void,\r\n  handleActive: (label: string | number) => void,\r\n  refreshLabels: () => void,\r\n}\r\n\r\nexport interface TabsSlots extends TabNavSlots {}\r\n\r\nexport const TABS_STATE = '__VXP_TABS_STATE' as unknown as InjectionKey<TabsState>\r\n","<script setup lang=\"ts\">\r\nimport { computed, inject, onBeforeUnmount, reactive, ref, toRef, watch } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { tabPanelProps } from './props'\r\nimport { TABS_STATE } from './symbol'\r\n\r\nimport type { ItemState } from './symbol'\r\n\r\ndefineOptions({ name: 'TabPanel' })\r\n\r\nconst _props = defineProps(tabPanelProps)\r\nconst props = useProps('tabPanel', _props, {\r\n  lazy: null,\r\n  lazyLoad: null,\r\n})\r\n\r\nconst slots = defineSlots<{\r\n  default?: () => any,\r\n  label?: (params: { label: string | number }) => any,\r\n}>()\r\n\r\nconst tabsState = inject(TABS_STATE, null)\r\n\r\nconst nh = useNameHelper('tabs')\r\nconst active = ref(false)\r\nconst currentLabel = ref(props.label)\r\nconst loaded = ref(false)\r\n\r\nconst lazy = computed(() => props.lazy ?? tabsState?.lazy ?? false)\r\nconst lazyLoad = computed(() => props.lazyLoad ?? tabsState?.lazyLoad ?? false)\r\nconst className = computed(() => {\r\n  const baseClass = nh.be('panel')\r\n\r\n  return {\r\n    [baseClass]: true,\r\n    [`${baseClass}--disabled`]: props.disabled,\r\n    [`${baseClass}--lazy`]: lazy.value,\r\n    [`${baseClass}--active`]: !props.disabled && active.value,\r\n  }\r\n})\r\n\r\nwatch(\r\n  () => props.label,\r\n  value => {\r\n    currentLabel.value = value\r\n    tabsState?.refreshLabels()\r\n  },\r\n)\r\nwatch(active, value => {\r\n  emitEvent(props.onToggle!, value)\r\n})\r\n\r\nif (tabsState) {\r\n  const state = reactive({\r\n    label: currentLabel,\r\n    name: toRef(props, 'name'),\r\n    icon: toRef(props, 'icon'),\r\n    disabled: toRef(props, 'disabled'),\r\n    closable: toRef(props, 'closable'),\r\n    labelRenderer: null,\r\n  }) as ItemState\r\n\r\n  watch(\r\n    () => slots.label,\r\n    value => {\r\n      state.labelRenderer = value ? data => value(data) : null\r\n    },\r\n    { immediate: true },\r\n  )\r\n  watch(currentLabel, () => {\r\n    active.value = currentLabel.value === tabsState.currentActive\r\n  })\r\n  watch(\r\n    () => tabsState.currentActive,\r\n    value => {\r\n      active.value = currentLabel.value === value\r\n\r\n      if (!loaded.value && active.value) {\r\n        loaded.value = true\r\n      }\r\n    },\r\n    { immediate: true },\r\n  )\r\n\r\n  tabsState.increaseItem(state)\r\n\r\n  onBeforeUnmount(() => {\r\n    tabsState.decreaseItem(state)\r\n  })\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    v-if=\"!(lazy || (lazyLoad && !loaded)) || active\"\r\n    :class=\"className\"\r\n    role=\"tabpanel\"\r\n    :aria-hidden=\"!active\"\r\n  >\r\n    <slot></slot>\r\n  </div>\r\n</template>\r\n","import {\r\n  booleanProp,\r\n  buildProps,\r\n  classProp,\r\n  eventProp,\r\n  localeProp,\r\n  sizeProp,\r\n  styleProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ClassType, ConfigurableProps, StyleType } from '@vexip-ui/config'\r\nimport type { TooltipTheme } from '@/components/tooltip'\r\nimport type {\r\n  Accessor,\r\n  ColumnCellSpanFn,\r\n  ColumnRenderFn,\r\n  ColumnSummaryRenderFn,\r\n  Data,\r\n  DropType,\r\n  ExpandRenderFn,\r\n  FilterRenderFn,\r\n  HeadRenderFn,\r\n  SummaryCellSpanFn,\r\n  SummaryRenderFn,\r\n  TableCellPayload,\r\n  TableCellPropFn,\r\n  TableCellSpanFn,\r\n  TableColResizeType,\r\n  TableColumnRawOptions,\r\n  TableColumnType,\r\n  TableFilterOptions,\r\n  TableFilterProfile,\r\n  TableFootPayload,\r\n  TableFootPropFn,\r\n  TableHeadPayload,\r\n  TableHeadPropFn,\r\n  TableIcons,\r\n  TableKeyConfig,\r\n  TableRowPayload,\r\n  TableRowPropFn,\r\n  TableSlots,\r\n  TableSorterOptions,\r\n  TableSorterProfile,\r\n  TableSummaryOptions,\r\n  TableTextAlign,\r\n} from './symbol'\r\n\r\nexport const tableProps = buildProps({\r\n  locale: localeProp('table'),\r\n  columns: Array as PropType<TableColumnRawOptions[]>,\r\n  summaries: Array as PropType<TableSummaryOptions<any, any>[]>,\r\n  data: Array as PropType<Data[]>,\r\n  width: [Number, String],\r\n  height: Number,\r\n  minHeight: Number,\r\n  rowClass: [String, Object, Array, Function] as PropType<ClassType | TableRowPropFn<ClassType>>,\r\n  rowStyle: [String, Object, Array, Function] as PropType<StyleType | TableRowPropFn<StyleType>>,\r\n  rowAttrs: [Object, Function] as PropType<\r\n    Record<string, any> | TableRowPropFn<Record<string, any>>\r\n  >,\r\n  stripe: booleanProp,\r\n  border: booleanProp,\r\n  highlight: booleanProp,\r\n  useXBar: booleanProp,\r\n  useYBar: booleanProp,\r\n  barFade: Number,\r\n  rowDraggable: booleanProp,\r\n  rowHeight: Number,\r\n  rowMinHeight: Number,\r\n  virtual: booleanProp,\r\n  bufferCount: Number,\r\n  scrollClass: Object as PropType<{\r\n    horizontal?: ClassType,\r\n    major?: ClassType,\r\n    left?: ClassType,\r\n    right?: ClassType,\r\n  }>,\r\n  expandRenderer: Function as PropType<ExpandRenderFn>,\r\n  currentPage: Number,\r\n  pageSize: Number,\r\n  transparent: booleanProp,\r\n  tooltipTheme: String as PropType<TooltipTheme>,\r\n  tooltipWidth: [Number, String],\r\n  singleSorter: booleanProp,\r\n  singleFilter: booleanProp,\r\n  cellClass: [String, Object, Array, Function] as PropType<\r\n    ClassType | TableCellPropFn<any, ClassType>\r\n  >,\r\n  cellStyle: [String, Object, Array, Function] as PropType<\r\n    StyleType | TableCellPropFn<any, StyleType>\r\n  >,\r\n  cellAttrs: [Object, Function] as PropType<\r\n    Record<string, any> | TableCellPropFn<any, Record<string, any>>\r\n  >,\r\n  headClass: [String, Object, Array, Function] as PropType<ClassType | TableHeadPropFn<ClassType>>,\r\n  headStyle: [String, Object, Array, Function] as PropType<StyleType | TableHeadPropFn<StyleType>>,\r\n  headAttrs: [Object, Function] as PropType<\r\n    Record<string, any> | TableHeadPropFn<Record<string, any>>\r\n  >,\r\n  footClass: [String, Object, Array, Function] as PropType<ClassType | TableFootPropFn<ClassType>>,\r\n  footStyle: [String, Object, Array, Function] as PropType<StyleType | TableFootPropFn<StyleType>>,\r\n  footAttrs: [Object, Function] as PropType<\r\n    Record<string, any> | TableFootPropFn<Record<string, any>>\r\n  >,\r\n  customSorter: booleanProp,\r\n  customFilter: booleanProp,\r\n  keyConfig: Object as PropType<TableKeyConfig>,\r\n  disabledTree: booleanProp,\r\n  rowIndent: [String, Number],\r\n  noCascaded: booleanProp,\r\n  colResizable: {\r\n    type: [Boolean, String] as PropType<boolean | TableColResizeType>,\r\n    default: null,\r\n  },\r\n  cellSpan: Function as PropType<TableCellSpanFn>,\r\n  sidePadding: [Number, Array] as PropType<number | number[]>,\r\n  icons: Object as PropType<TableIcons>,\r\n  borderWidth: Number,\r\n  dataFilter: Function as PropType<(data: Data) => boolean>,\r\n  noTransition: booleanProp,\r\n  ellipsis: booleanProp,\r\n  slots: Object as PropType<TableSlots>,\r\n  onScroll:\r\n    eventProp<\r\n      (payload: { type: 'horizontal' | 'vertical', client: number, percent: number }) => void\r\n    >(),\r\n  onRowEnter: eventProp<(payload: TableRowPayload) => void>(),\r\n  onRowLeave: eventProp<(payload: TableRowPayload) => void>(),\r\n  onRowClick: eventProp<(payload: TableRowPayload) => void>(),\r\n  onRowDblclick: eventProp<(payload: TableRowPayload) => void>(),\r\n  onRowContextmenu: eventProp<(payload: TableRowPayload) => void>(),\r\n  onRowCheck: eventProp<(payload: TableRowPayload) => void>(),\r\n  onRowCheckAll: eventProp<(checked: boolean, partial: boolean) => void>(),\r\n  onRowExpand: eventProp<(payload: TableRowPayload) => void>(),\r\n  onRowTreeExpand: eventProp<(payload: TableRowPayload) => void>(),\r\n  onRowDragStart: eventProp<(row: Data, event: DragEvent) => void>(),\r\n  onRowDragOver: eventProp<(row: Data, event: DragEvent) => void>(),\r\n  onRowDrop: eventProp<(row: Data, type: DropType, event: DragEvent) => void>(),\r\n  onRowDragEnd: eventProp<(row: Data, allRows: Data[], event: DragEvent) => void>(),\r\n  onRowFilter: eventProp<(profiles: TableFilterProfile[], filteredRow: Data[]) => void>(),\r\n  onRowSort: eventProp<(profiles: TableSorterProfile[], sortedRow: Data[]) => void>(),\r\n  onCellEnter: eventProp<(payload: TableCellPayload) => void>(),\r\n  onCellLeave: eventProp<(payload: TableCellPayload) => void>(),\r\n  onCellClick: eventProp<(payload: TableCellPayload) => void>(),\r\n  onCellDblclick: eventProp<(payload: TableCellPayload) => void>(),\r\n  onCellContextmenu: eventProp<(payload: TableCellPayload) => void>(),\r\n  onHeadEnter: eventProp<(payload: TableHeadPayload) => void>(),\r\n  onHeadLeave: eventProp<(payload: TableHeadPayload) => void>(),\r\n  onHeadClick: eventProp<(payload: TableHeadPayload) => void>(),\r\n  onHeadDblclick: eventProp<(payload: TableHeadPayload) => void>(),\r\n  onHeadContextmenu: eventProp<(payload: TableHeadPayload) => void>(),\r\n  onColResizeStart: eventProp<(payload: TableHeadPayload) => void>(),\r\n  onColResizeMove: eventProp<(payload: TableHeadPayload) => void>(),\r\n  onColResizeEnd: eventProp<(payload: TableHeadPayload) => void>(),\r\n  onFootEnter: eventProp<(payload: TableFootPayload) => void>(),\r\n  onFootLeave: eventProp<(payload: TableFootPayload) => void>(),\r\n  onFootClick: eventProp<(payload: TableFootPayload) => void>(),\r\n  onFootDblclick: eventProp<(payload: TableFootPayload) => void>(),\r\n  onFootContextmenu: eventProp<(payload: TableFootPayload) => void>(),\r\n})\r\n\r\nexport type TableProps = ExtractPropTypes<typeof tableProps>\r\nexport type TableCProps = ConfigurableProps<\r\n  TableProps,\r\n  'columns' | 'data' | 'currentPage' | 'summaries'\r\n>\r\n\r\nexport const tableColumnProps = buildProps({\r\n  idKey: [Number, String],\r\n  name: String,\r\n  accessor: Function as PropType<Accessor>,\r\n  fixed: {\r\n    type: [Boolean, String] as PropType<boolean | 'left' | 'right'>,\r\n    default: null,\r\n  },\r\n  class: classProp,\r\n  style: styleProp,\r\n  attrs: Object,\r\n  type: String as PropType<TableColumnType>,\r\n  width: [Number, String] as PropType<number | `${number}%`>,\r\n  minWidth: Number,\r\n  maxWidth: Number,\r\n  filter: Object as PropType<TableFilterOptions<any, any>>,\r\n  sorter: {\r\n    type: [Boolean, Object] as PropType<boolean | TableSorterOptions<any>>,\r\n    default: null,\r\n  },\r\n  renderer: Function as PropType<ColumnRenderFn>,\r\n  headRenderer: Function as PropType<HeadRenderFn>,\r\n  filterRenderer: Function as PropType<FilterRenderFn>,\r\n  order: Number,\r\n  ellipsis: booleanProp,\r\n  checkboxSize: sizeProp,\r\n  selectionSize: sizeProp,\r\n  disableRow: Function as PropType<(data: Data) => boolean>,\r\n  truthIndex: booleanProp,\r\n  orderLabel: Function as PropType<(index: number) => string | number>,\r\n  meta: Object as PropType<any>,\r\n  textAlign: String as PropType<TableTextAlign>,\r\n  headSpan: Number,\r\n  cellSpan: Function as PropType<ColumnCellSpanFn>,\r\n  noSummary: booleanProp,\r\n  summaryRenderer: Function as PropType<ColumnSummaryRenderFn>,\r\n  indented: booleanProp,\r\n  formatter: Function as PropType<(value: any) => unknown>,\r\n  singleSelect: booleanProp,\r\n})\r\n\r\nexport type TableColumnProps = ExtractPropTypes<typeof tableColumnProps>\r\nexport type TableColumnCProps = ConfigurableProps<\r\n  TableColumnProps,\r\n  | 'idKey'\r\n  | 'name'\r\n  | 'accessor'\r\n  | 'fixed'\r\n  | 'type'\r\n  | 'renderer'\r\n  | 'headRenderer'\r\n  | 'order'\r\n  | 'headSpan'\r\n  | 'summaryRenderer'\r\n>\r\n\r\nexport const tableColumnGroupProps = buildProps({\r\n  name: String,\r\n  fixed: {\r\n    type: [Boolean, String] as PropType<boolean | 'left' | 'right'>,\r\n    default: null,\r\n  },\r\n  order: Number,\r\n  ellipsis: booleanProp,\r\n  textAlign: String as PropType<TableTextAlign>,\r\n  renderer: Function as PropType<() => any>,\r\n  children: Array as PropType<TableColumnRawOptions[]>,\r\n})\r\n\r\nexport type TableColumnGroupProps = ExtractPropTypes<typeof tableColumnGroupProps>\r\nexport type TableColumnGroupCProps = ConfigurableProps<TableColumnProps, 'name' | 'fixed' | 'order'>\r\n\r\nexport const tableSummaryProps = buildProps({\r\n  idKey: [Number, String],\r\n  name: String,\r\n  class: classProp,\r\n  style: styleProp,\r\n  attrs: Object,\r\n  cellSpan: Function as PropType<SummaryCellSpanFn>,\r\n  order: Number,\r\n  above: booleanProp,\r\n  meta: Object as PropType<any>,\r\n  renderer: Function as PropType<SummaryRenderFn>,\r\n})\r\n\r\nexport type TableSummaryProps = ExtractPropTypes<typeof tableSummaryProps>\r\nexport type TableSummaryCProps = ConfigurableProps<\r\n  TableSummaryProps,\r\n  'idKey' | 'name' | 'renderer' | 'colSpan' | 'order' | 'above'\r\n>\r\n","import type { InjectionKey, Slots } from 'vue'\r\nimport type { ClassType, ComponentSize, LocaleConfig, StyleType } from '@vexip-ui/config'\r\nimport type { BITree } from '@vexip-ui/utils'\r\nimport type { TooltipTheme } from '@/components/tooltip'\r\nimport type { TableStore } from './store'\r\n\r\nexport type Key = string | number | symbol\r\nexport type Data = any\r\n\r\nexport type MouseEventType = 'Enter' | 'Leave' | 'Click' | 'Dblclick' | 'Contextmenu'\r\nexport type MoveEventType = 'Start' | 'Move' | 'End'\r\n\r\nexport type TableIconName = 'filter' | 'asc' | 'desc' | 'dragger' | 'expand' | 'plus' | 'minus'\r\nexport type TableRowPropFn<P = any> = (data: Data, index: number) => P\r\nexport type TableRowDropType = 'before' | 'after' | 'inner'\r\nexport type TableTextAlign = 'left' | 'center' | 'right'\r\nexport type TableColumnType = 'order' | 'selection' | 'expand' | 'drag'\r\nexport type TableColResizeType = 'lazy' | 'responsive'\r\n\r\nexport type TableIcons = Partial<Record<TableIconName, Record<string, any> | (() => any)>>\r\n\r\nexport const enum DropType {\r\n  BEFORE = 'before',\r\n  INNER = 'inner',\r\n  AFTER = 'after',\r\n}\r\n\r\nexport interface CellSpanResult {\r\n  colSpan?: number,\r\n  rowSpan?: number,\r\n}\r\n\r\nexport interface TableKeyConfig {\r\n  id?: string,\r\n  children?: string,\r\n  checked?: string,\r\n  height?: string,\r\n  expanded?: string,\r\n  treeExpanded?: string,\r\n}\r\n\r\nexport interface TableSlots {\r\n  /**\r\n   * @internal\r\n   */\r\n  default?: () => any,\r\n  empty?: (params: { isFixed: boolean }) => any,\r\n}\r\n\r\nexport type Accessor<D = Data, Val extends string | number = string | number> = (\r\n  data: D,\r\n  index: number,\r\n) => Val\r\nexport type ExpandRenderFn<D = Data> = (data: {\r\n  /** @deprecated */\r\n  leftFixed: number,\r\n  /** @deprecated */\r\n  rightFixed: number,\r\n  row: D,\r\n  rowIndex: number,\r\n}) => any\r\nexport type ColumnCellSpanFn<D = Data> = (data: {\r\n  row: D,\r\n  index: number,\r\n  fixed?: 'left' | 'right',\r\n}) => CellSpanResult | void\r\nexport type SummaryCellSpanFn<D = Data, Val extends string | number = string | number> = (data: {\r\n  column: TableColumnOptions<D, Val>,\r\n  index: number,\r\n  fixed?: 'left' | 'right',\r\n}) => CellSpanResult | void\r\n\r\nexport type TableFilterOptions<D = Data, Val extends string | number = string | number> =\r\n  | {\r\n    able?: boolean,\r\n    custom?: false,\r\n    options?: (string | { value: Val, label?: string, active?: boolean })[],\r\n    multiple?: false,\r\n    active?: null | Val,\r\n    method?: null | ((active: Val, data: D) => boolean),\r\n    meta?: any,\r\n  }\r\n  | {\r\n    able?: boolean,\r\n    custom?: false,\r\n    options?: (string | { value: Val, label?: string, active?: boolean })[],\r\n    multiple: true,\r\n    active?: null | Val[],\r\n    method?: null | ((active: Val[], data: D) => boolean),\r\n    meta?: any,\r\n  }\r\n  | {\r\n    able?: boolean,\r\n    custom: true,\r\n    options?: never,\r\n    multiple?: false,\r\n    active?: null | Val | Val[],\r\n    method?: null | ((active: any, data: D) => boolean),\r\n    meta?: any,\r\n  }\r\n\r\nexport interface ParsedFilterOptions extends Omit<Required<TableFilterOptions>, 'options'> {\r\n  options: { value: string | number, label: string, active: boolean }[],\r\n}\r\n\r\nexport interface TableSorterOptions<D = Data> {\r\n  able?: boolean,\r\n  type?: null | 'asc' | 'desc',\r\n  order?: number, // 优先级\r\n  method?: null | ((prev: D, next: D) => number),\r\n}\r\n\r\nexport type ParsedTableSorterOptions = Required<TableSorterOptions>\r\n\r\nexport interface TableSummaryData {\r\n  sum: number,\r\n  min: number,\r\n  max: number,\r\n}\r\n\r\nexport type SummaryRenderFn<D = Data, Val extends string | number = string | number> = (data: {\r\n  column: TableColumnOptions<D, Val>,\r\n  index: number,\r\n  rows: D[],\r\n  meta: TableSummaryData,\r\n}) => any\r\n\r\nexport type ColumnSummaryRenderFn<\r\n  D = Data,\r\n  Val extends string | number = string | number,\r\n> = (data: {\r\n  column: TableColumnOptions<D, Val>,\r\n  index: number,\r\n  rows: D[],\r\n  meta: TableSummaryData,\r\n  summary: TableSummaryOptions<D, Val>,\r\n}) => any\r\n\r\nexport interface TableBaseColumn<D = Data, Val extends string | number = string | number> {\r\n  key: keyof D,\r\n  name?: string,\r\n  type?: never,\r\n  meta?: any,\r\n  fixed?: boolean | 'left' | 'right',\r\n  class?: ClassType,\r\n  style?: StyleType,\r\n  attrs?: Record<string, any>,\r\n  width?: number | `${number}%`,\r\n  minWidth?: number,\r\n  maxWidth?: number,\r\n  filter?: TableFilterOptions<D, Val>,\r\n  sorter?: boolean | TableSorterOptions<D>,\r\n  order?: number,\r\n  ellipsis?: boolean | null,\r\n  textAlign?: TableTextAlign,\r\n  headSpan?: number,\r\n  noSummary?: boolean,\r\n  indented?: boolean,\r\n  accessor?: Accessor<D, Val>,\r\n  formatter?: (value: Val) => unknown,\r\n  cellSpan?: ColumnCellSpanFn<D>,\r\n  renderer?: ColumnRenderFn<D, Val>,\r\n  headRenderer?: HeadRenderFn,\r\n  filterRenderer?: FilterRenderFn,\r\n  summaryRenderer?: ColumnSummaryRenderFn<D, Val>,\r\n}\r\n\r\nexport interface TableOrderColumn<D = Data, Val extends string | number = string | number>\r\n  extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer'> {\r\n  key?: keyof D,\r\n  type: 'order',\r\n  truthIndex?: boolean,\r\n  orderLabel?: (index: number) => string | number,\r\n}\r\n\r\nexport interface TableSelectionColumn<D = Data, Val extends string | number = string | number>\r\n  extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer' | 'headRenderer'> {\r\n  key?: keyof D,\r\n  type: 'selection',\r\n  /**\r\n   * @deprecated Use `selectionSize` instead.\r\n   */\r\n  checkboxSize?: ComponentSize,\r\n  selectionSize?: ComponentSize,\r\n  singleSelect?: boolean,\r\n  disableRow?: (data: Data) => boolean,\r\n}\r\n\r\nexport interface TableExpandColumn<D = Data, Val extends string | number = string | number>\r\n  extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer'> {\r\n  key?: keyof D,\r\n  type: 'expand',\r\n  disableRow?: (data: Data) => boolean,\r\n  renderer?: ExpandRenderFn<D>,\r\n}\r\n\r\nexport interface TableDragColumn<D = Data, Val extends string | number = string | number>\r\n  extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer'> {\r\n  key?: keyof D,\r\n  type: 'drag',\r\n  disableRow?: (data: Data) => boolean,\r\n}\r\n\r\nexport type TableTypeColumn<D = Data, Val extends string | number = string | number> =\r\n  | TableOrderColumn<D, Val>\r\n  | TableSelectionColumn<D, Val>\r\n  | TableExpandColumn<D, Val>\r\n  | TableDragColumn<D, Val>\r\nexport type TableColumnOptions<D = Data, Val extends string | number = string | number> =\r\n  | TableBaseColumn<D, Val>\r\n  | TableTypeColumn<D, Val>\r\n\r\nexport type ColumnWithKey<\r\n  D = Data,\r\n  Val extends string | number = string | number,\r\n> = TableColumnOptions<D, Val> & {\r\n  key: Key,\r\n  rowSpan: number,\r\n  /** @internal */\r\n  index: number,\r\n  /** @internal */\r\n  colIndex: number,\r\n  /** @internal */\r\n  first?: boolean,\r\n  /** @internal */\r\n  last?: boolean,\r\n}\r\n\r\nexport interface TableColumnGroupOptions {\r\n  name?: string,\r\n  fixed?: boolean | 'left' | 'right',\r\n  order?: number,\r\n  ellipsis?: boolean,\r\n  textAlign?: TableTextAlign,\r\n  renderer?: () => any,\r\n  children: TableColumnOptions<any, any>[],\r\n}\r\nexport interface ColumnGroupWithKey extends TableColumnGroupOptions {\r\n  key: Key,\r\n  headSpan: number,\r\n  rowSpan: number,\r\n  /** @internal */\r\n  colIndex: number,\r\n  /** @internal */\r\n  last?: boolean,\r\n}\r\n\r\nexport type ColumnRenderFn<D = Data, Val extends string | number = string | number> = (data: {\r\n  row: D,\r\n  rowIndex: number,\r\n  column: TableBaseColumn<D, Val>,\r\n  columnIndex: number,\r\n}) => any\r\nexport type HeadRenderFn<D = Data, Val extends string | number = string | number> = (data: {\r\n  column: TableColumnOptions<D, Val>,\r\n  index: number,\r\n}) => any\r\nexport type FilterRenderFn<D = Data, Val extends string | number = string | number> = (data: {\r\n  column: TableColumnOptions<D, Val>,\r\n  index: number,\r\n  filter: Required<TableFilterOptions<D, Val>>,\r\n  handleFilter: (active: any) => void,\r\n}) => any\r\n\r\nexport type TableCellSpanFn<D = Data, Val extends string | number = string | number> = (data: {\r\n  row: D,\r\n  rowIndex: number,\r\n  column: TableColumnOptions<D, Val>,\r\n  columnIndex: number,\r\n  fixed?: 'left' | 'right',\r\n}) => CellSpanResult | undefined\r\n\r\nexport type TableCellPropFn<D = Data, P = any> = (data: {\r\n  row: D,\r\n  rowIndex: number,\r\n  column: ColumnWithKey,\r\n  columnIndex: number,\r\n}) => P\r\nexport type TableHeadPropFn<P = any> = (data: {\r\n  column: ColumnWithKey,\r\n  index: number,\r\n  rowIndex: number,\r\n}) => P\r\nexport type TableFootPropFn<P = any> = (data: {\r\n  column: ColumnWithKey,\r\n  columnIndex: number,\r\n  summary: SummaryWithKey,\r\n  summaryIndex: number,\r\n}) => P\r\n\r\nexport type ColumnProfile<D = Data, Val extends string | number = string | number> = Pick<\r\n  ColumnWithKey<D, Val>,\r\n  'name' | 'key' | 'meta'\r\n>\r\nexport type TableFilterProfile<\r\n  D = Data,\r\n  Val extends string | number = string | number,\r\n> = ColumnProfile<D, Val> & {\r\n  active: Val | Val[],\r\n}\r\nexport type TableSorterProfile<\r\n  D = Data,\r\n  Val extends string | number = string | number,\r\n> = ColumnProfile<D, Val> & {\r\n  type: 'asc' | 'desc',\r\n  order: number,\r\n}\r\n\r\nexport interface TableSummaryOptions<D = Data, Val extends string | number = string | number> {\r\n  name: string,\r\n  key: keyof D,\r\n  class?: ClassType,\r\n  style?: StyleType,\r\n  attrs?: Record<string, any>,\r\n  order?: number,\r\n  above?: boolean,\r\n  meta?: Record<any, any>,\r\n  cellSpan?: SummaryCellSpanFn<D, Val>,\r\n  renderer?: SummaryRenderFn<D, Val>,\r\n}\r\n\r\nexport type SummaryWithKey<\r\n  D = Data,\r\n  Val extends string | number = string | number,\r\n> = TableSummaryOptions<D, Val> & { key: Key }\r\n\r\n/** @internal */\r\nexport interface TableRowState {\r\n  key: Key,\r\n  index: number,\r\n  hidden: boolean,\r\n  hover: boolean,\r\n  checked: boolean,\r\n  height: number,\r\n  // borderHeight: number,\r\n  expanded: boolean,\r\n  expandHeight: number,\r\n  parent?: Key,\r\n  children: TableRowState[],\r\n  depth: number,\r\n  treeExpanded: boolean,\r\n  partial: boolean,\r\n  dragging: boolean,\r\n  listIndex: number,\r\n  cellHeights: Record<Key, number>,\r\n  last: boolean,\r\n  expandAnimate: boolean,\r\n  data: Data,\r\n}\r\n\r\nexport interface StoreOptions {\r\n  columns: TableColumnRawOptions[],\r\n  summaries: TableSummaryOptions[],\r\n  data: Data[],\r\n  dataKey: string,\r\n  rowClass: ClassType | TableRowPropFn<ClassType>,\r\n  rowStyle: StyleType | TableRowPropFn<StyleType>,\r\n  rowAttrs: Record<string, any> | TableRowPropFn<Record<string, any>>,\r\n  cellClass: ClassType | TableCellPropFn<ClassType>,\r\n  cellStyle: StyleType | TableCellPropFn<StyleType>,\r\n  cellAttrs: Record<string, any> | TableCellPropFn<Record<string, any>>,\r\n  headClass: ClassType | TableHeadPropFn<ClassType>,\r\n  headStyle: StyleType | TableHeadPropFn<StyleType>,\r\n  headAttrs: Record<string, any> | TableHeadPropFn<Record<string, any>>,\r\n  footClass: ClassType | TableFootPropFn<ClassType>,\r\n  footStyle: StyleType | TableFootPropFn<StyleType>,\r\n  footAttrs: Record<string, any> | TableFootPropFn<Record<string, any>>,\r\n  border: boolean,\r\n  stripe: boolean,\r\n  highlight: boolean,\r\n  currentPage: number,\r\n  pageSize: number,\r\n  rowHeight: number,\r\n  rowMinHeight: number,\r\n  virtual: boolean,\r\n  rowDraggable: boolean,\r\n  locale: LocaleConfig['table'],\r\n  tooltipTheme: TooltipTheme,\r\n  tooltipWidth: number | string,\r\n  singleSorter: boolean,\r\n  singleFilter: boolean,\r\n  customSorter: boolean,\r\n  customFilter: boolean,\r\n  keyConfig: Required<TableKeyConfig>,\r\n  disabledTree: boolean,\r\n  noCascaded: boolean,\r\n  colResizable: false | TableColResizeType,\r\n  expandRenderer: ExpandRenderFn | null,\r\n  cellSpan: TableCellSpanFn | null,\r\n  sidePadding: number[],\r\n  borderWidth: number,\r\n  dataFilter: (data: Data) => boolean,\r\n  ellipsis: boolean,\r\n}\r\n\r\nexport type TableColumnRawOptions = TableColumnOptions<any, any> | TableColumnGroupOptions\r\nexport type ColumnRawWithKey = ColumnGroupWithKey | ColumnWithKey\r\n\r\nexport interface StoreState extends StoreOptions {\r\n  columns: ColumnWithKey[],\r\n  normalColumns: ColumnWithKey[],\r\n  allColumns: ColumnRawWithKey[][],\r\n  summaries: SummaryWithKey[],\r\n  rowData: TableRowState[],\r\n  treeRowData: TableRowState[],\r\n  width: number,\r\n  rightFixedColumns: ColumnWithKey[],\r\n  leftFixedColumns: ColumnWithKey[],\r\n  aboveSummaries: SummaryWithKey[],\r\n  belowSummaries: SummaryWithKey[],\r\n  columnMap: Map<Key, ColumnRawWithKey>,\r\n  rowMap: Map<Key, TableRowState>,\r\n  summaryMap: Map<Key, SummaryWithKey>,\r\n  idMaps: WeakMap<Data, Key>,\r\n  checkedAll: boolean,\r\n  partial: boolean,\r\n  widths: Map<Key, number>,\r\n  sorters: Map<Key, ParsedTableSorterOptions>,\r\n  filters: Map<Key, ParsedFilterOptions>,\r\n  resized: Set<Key>,\r\n  bodyYScroll: number,\r\n  bodyXScroll: number,\r\n  padTop: number,\r\n  startRow: number,\r\n  endRow: number,\r\n  dragging: boolean,\r\n  heightBITree: BITree,\r\n  virtualData: TableRowState[],\r\n  totalHeight: number,\r\n  colResizing: boolean,\r\n  resizeLeft: number,\r\n  cellSpanMap: Map<'left' | 'default' | 'right', Map<string, Required<CellSpanResult>>>,\r\n  collapseMap: Map<'left' | 'default' | 'right', Map<string, Set<string>>>,\r\n  locked: boolean,\r\n  barScrolling: boolean,\r\n  heightTrigger: number,\r\n  hoveredRowKey: Key | null,\r\n}\r\n\r\nexport interface TableRowInstance {\r\n  el?: HTMLElement | null,\r\n  row: TableRowState,\r\n}\r\n\r\nexport interface TableRowPayload {\r\n  row: Data,\r\n  key: Key,\r\n  index: number,\r\n  event: Event,\r\n  checked?: boolean,\r\n  expanded?: boolean,\r\n}\r\n\r\nexport interface TableCellPayload {\r\n  row: Data,\r\n  key: Key,\r\n  rowIndex: number,\r\n  column: TableColumnOptions,\r\n  columnIndex: number,\r\n  event: Event,\r\n}\r\n\r\nexport interface TableHeadPayload {\r\n  column: TableColumnOptions,\r\n  index: number,\r\n  event: Event,\r\n}\r\n\r\nexport interface TableColResizePayload extends TableHeadPayload {\r\n  width: number,\r\n}\r\n\r\nexport interface TableFootPayload {\r\n  column: TableColumnOptions,\r\n  columnIndex: number,\r\n  summary: TableSummaryOptions,\r\n  summaryIndex: number,\r\n  event: Event,\r\n}\r\n\r\nexport interface TableActions {\r\n  increaseColumn(column: TableColumnRawOptions): void,\r\n  decreaseColumn(column: TableColumnRawOptions): void,\r\n  increaseSummary(column: TableSummaryOptions): void,\r\n  decreaseSummary(column: TableSummaryOptions): void,\r\n  getTableElement(): HTMLElement | undefined,\r\n  refreshXScroll(): void,\r\n  emitRowCheck(payload: TableRowPayload & { checked: boolean }): void,\r\n  emitAllRowCheck(checked: boolean, partial: boolean): void,\r\n  emitRowExpand(payload: TableRowPayload & { expanded: boolean }): void,\r\n  emitRowTreeExpand(payload: TableRowPayload & { expanded: boolean }): void,\r\n  emitRowFilter(): void,\r\n  emitRowSort(): void,\r\n  handleRowDragStart(rowInstance: TableRowInstance, event: DragEvent): void,\r\n  handleRowDragOver(rowInstance: TableRowInstance, event: DragEvent): void,\r\n  handleRowDrop(rowInstance: TableRowInstance, event: DragEvent): void,\r\n  handleRowDragEnd(event: DragEvent): void,\r\n  emitRowEvent(type: MouseEventType, payload: TableRowPayload): void,\r\n  emitCellEvent(type: MouseEventType, payload: TableCellPayload): void,\r\n  emitHeadEvent(type: MouseEventType, payload: TableHeadPayload): void,\r\n  emitFootEvent(type: MouseEventType, payload: TableFootPayload): void,\r\n  emitColResize(type: MoveEventType, payload: TableColResizePayload): void,\r\n  hasIcon(name: TableIconName): boolean,\r\n  getIcon(name: TableIconName): TableIcons[TableIconName],\r\n  renderTableSlot(payload: { name: string }): any,\r\n  runInLocked(handler?: (...args: any[]) => any, delay?: number): Promise<void>,\r\n  updateColumns(): void,\r\n  setColumnProp(key: Key, prop: string, value: any): void,\r\n  updateSummaries(): void,\r\n  setSummaryProp(key: Key, prop: string, value: any): void,\r\n}\r\n\r\nexport interface ColumnGroupActions {\r\n  increaseColumn(column: TableColumnRawOptions): void,\r\n  decreaseColumn(column: TableColumnRawOptions): void,\r\n}\r\n\r\nexport const DEFAULT_KEY_FIELD = 'id'\r\n/**\r\n * 表格状态管理\r\n */\r\nexport const TABLE_STORE = '__VXP_TABLE_STORE' as unknown as InjectionKey<TableStore>\r\n/**\r\n * 表格组件的顶层 Api\r\n */\r\nexport const TABLE_ACTIONS = '__VXP_TABLE_ACTIONS' as unknown as InjectionKey<TableActions>\r\nexport const TABLE_SLOTS = '__VXP_TABLE_SLOTS' as unknown as InjectionKey<Slots>\r\nexport const TABLE_HEAD_PREFIX = '__vxp-table-head-'\r\nexport const TABLE_FOOT_PREFIX = '__vxp-table-foot-'\r\n\r\nexport const COLUMN_GROUP_ACTIONS =\r\n  '__VXP_TABLE_COLUMN_GROUP_ACTIONS' as unknown as InjectionKey<ColumnGroupActions>\r\n\r\nexport const columnTypes: TableColumnType[] = ['order', 'selection', 'expand', 'drag']\r\n\r\nexport const noopFormatter = (v: any) => v\r\n","import {\r\n  computed,\r\n  defineComponent,\r\n  inject,\r\n  onBeforeUnmount,\r\n  reactive,\r\n  renderSlot,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { createSizeProp, useProps } from '@vexip-ui/config'\r\nimport { isNull, warnOnce } from '@vexip-ui/utils'\r\nimport { tableColumnProps } from './props'\r\nimport { COLUMN_GROUP_ACTIONS, TABLE_ACTIONS, columnTypes, noopFormatter } from './symbol'\r\n\r\nimport type { ColumnWithKey, Data, TableRowState, TableTextAlign } from './symbol'\r\n\r\ntype ColumnPropKey = keyof typeof tableColumnProps\r\n\r\nconst propKeys = Object.keys(tableColumnProps) as ColumnPropKey[]\r\nconst aliases: Partial<Record<ColumnPropKey, string>> = {\r\n  idKey: 'key',\r\n}\r\nconst ignoredProps: ColumnPropKey[] = [\r\n  'renderer',\r\n  'headRenderer',\r\n  'filterRenderer',\r\n  'summaryRenderer',\r\n]\r\nconst triggerProps: ColumnPropKey[] = [\r\n  'idKey',\r\n  'fixed',\r\n  'type',\r\n  'width',\r\n  'minWidth',\r\n  'maxWidth',\r\n  'sorter',\r\n  'order',\r\n  'orderLabel',\r\n  'disableRow',\r\n  'headSpan',\r\n  'cellSpan',\r\n]\r\nconst aligns: TableTextAlign[] = ['left', 'center', 'right']\r\n\r\nconst funcProp = {\r\n  default: null,\r\n  isFunc: true,\r\n  static: true,\r\n}\r\n\r\nexport default defineComponent({\r\n  name: 'TableColumn',\r\n  inheritAttrs: false,\r\n  props: tableColumnProps,\r\n  setup(_props, { slots }) {\r\n    const props = useProps('tableColumn', _props, {\r\n      idKey: {\r\n        default: null,\r\n        validator: value => !isNull(value),\r\n        static: true,\r\n      },\r\n      name: {\r\n        default: '',\r\n        static: true,\r\n      },\r\n      accessor: {\r\n        default: null,\r\n        isFunc: true,\r\n        static: true,\r\n      },\r\n      fixed: {\r\n        default: false,\r\n        static: true,\r\n      },\r\n      class: null,\r\n      style: null,\r\n      attrs: null,\r\n      type: {\r\n        default: null,\r\n        validator: value => columnTypes.includes(value),\r\n        static: true,\r\n      },\r\n      width: null,\r\n      minWidth: 100,\r\n      maxWidth: null,\r\n      filter: null,\r\n      sorter: false,\r\n      renderer: funcProp,\r\n      headRenderer: funcProp,\r\n      filterRenderer: funcProp,\r\n      order: {\r\n        default: 0,\r\n        static: true,\r\n      },\r\n      ellipsis: null,\r\n      checkboxSize: {\r\n        ...createSizeProp(),\r\n        default: null,\r\n      },\r\n      selectionSize: {\r\n        ...createSizeProp(),\r\n        default: null,\r\n      },\r\n      disableRow: {\r\n        default: null,\r\n        isFunc: true,\r\n      },\r\n      truthIndex: false,\r\n      orderLabel: {\r\n        default: null,\r\n        isFunc: true,\r\n      },\r\n      meta: null,\r\n      textAlign: {\r\n        default: 'left',\r\n        validator: value => aligns.includes(value),\r\n      },\r\n      headSpan: {\r\n        default: 1,\r\n        static: true,\r\n      },\r\n      cellSpan: funcProp,\r\n      noSummary: false,\r\n      summaryRenderer: funcProp,\r\n      indented: false,\r\n      formatter: {\r\n        default: null,\r\n        isFunc: true,\r\n      },\r\n      singleSelect: false,\r\n    })\r\n\r\n    const selectionSize = computed(() => {\r\n      if (props.checkboxSize) {\r\n        warnOnce(\"'checkboxSize' has been deprecated, please use 'selectionSize' instead.\")\r\n      }\r\n\r\n      return props.selectionSize ?? props.checkboxSize ?? 'default'\r\n    })\r\n\r\n    const tableAction = inject(TABLE_ACTIONS, null)\r\n    const parentActions = inject(COLUMN_GROUP_ACTIONS, null)\r\n    const options = reactive({}) as ColumnWithKey\r\n\r\n    for (const key of propKeys) {\r\n      if (ignoredProps.includes(key)) continue\r\n\r\n      if (key === 'selectionSize' || key === 'checkboxSize') {\r\n        ;(options as any).selectionSize = selectionSize.value\r\n\r\n        watch(selectionSize, value => {\r\n          ;(options as any).selectionSize = value\r\n          tableAction?.setColumnProp(options.key, 'selectionSize', value)\r\n        })\r\n\r\n        continue\r\n      }\r\n\r\n      const aliasKey = (aliases[key] || key) as keyof ColumnWithKey\r\n\r\n      ;(options[aliasKey] as any) = props[key]\r\n\r\n      if (key === 'idKey') {\r\n        const update = (value: string | number) => {\r\n          if (isNull(value) && props.type) {\r\n            ;(options[aliasKey] as any) = value = `__vxp_${props.type}`\r\n          } else {\r\n            ;(options[aliasKey] as any) = value\r\n          }\r\n        }\r\n\r\n        update(props.idKey)\r\n        watch(\r\n          () => props.idKey,\r\n          value => {\r\n            update(value)\r\n            tableAction?.updateColumns()\r\n          },\r\n        )\r\n      } else if (key === 'filter') {\r\n        const filterWithoutMeta = computed(() => {\r\n          if (props.filter) {\r\n            const { meta, ...filter } = props.filter\r\n            return filter\r\n          }\r\n\r\n          return props.filter\r\n        })\r\n\r\n        watch(\r\n          filterWithoutMeta,\r\n          () => {\r\n            options.filter = props.filter\r\n            tableAction?.updateColumns()\r\n          },\r\n          { deep: true },\r\n        )\r\n      } else {\r\n        const trigger = triggerProps.includes(key)\r\n\r\n        watch(\r\n          () => props[key],\r\n          value => {\r\n            ;(options[aliasKey] as any) = value\r\n            trigger\r\n              ? tableAction?.updateColumns()\r\n              : tableAction?.setColumnProp(options.key, key, value)\r\n          },\r\n        )\r\n      }\r\n    }\r\n\r\n    watch(() => props.renderer, setRenderer)\r\n    watch(() => props.headRenderer, setHeadRenderer)\r\n    watch(() => props.filterRenderer, setFilterRenderer)\r\n    watch(() => props.summaryRenderer, setSummaryRenderer)\r\n\r\n    setRenderer()\r\n    setHeadRenderer()\r\n    setFilterRenderer()\r\n    setSummaryRenderer()\r\n\r\n    if (parentActions) {\r\n      parentActions.increaseColumn(options)\r\n\r\n      onBeforeUnmount(() => {\r\n        parentActions.decreaseColumn(options)\r\n      })\r\n    } else {\r\n      tableAction?.increaseColumn(options)\r\n\r\n      onBeforeUnmount(() => {\r\n        tableAction?.decreaseColumn(options)\r\n      })\r\n    }\r\n\r\n    // TODO: 在动态列时会触发无限 watch，初步估计是重置单元格合并状态导致的\r\n    // onBeforeUpdate(() => {\r\n    //   setRenderer()\r\n    //   setHeadRenderer()\r\n    //   setFilterRenderer()\r\n    // }\r\n\r\n    function setRenderer() {\r\n      if (options.type && options.type !== 'expand') {\r\n        ;(options as any).renderer = undefined\r\n        return\r\n      }\r\n\r\n      options.renderer = (data: any) => {\r\n        if (typeof slots.default === 'function') {\r\n          return renderSlot(slots, 'default', data)\r\n        }\r\n\r\n        if (typeof props.renderer === 'function') {\r\n          return props.renderer(data)\r\n        }\r\n\r\n        if (options.type === 'expand') {\r\n          return ''\r\n        }\r\n\r\n        const row = data.row\r\n        const rowIndex = data.rowIndex as number\r\n        const formatter =\r\n          typeof options.formatter === 'function' ? options.formatter : noopFormatter\r\n\r\n        const result = formatter(\r\n          typeof props.accessor === 'function'\r\n            ? props.accessor(row as Data, rowIndex)\r\n            : (row as TableRowState)[options.key as unknown as keyof TableRowState],\r\n        )\r\n\r\n        return isNull(result) ? '' : String(result)\r\n      }\r\n    }\r\n\r\n    function setHeadRenderer() {\r\n      if (options.type === 'selection') {\r\n        ;(options as any).renderer = undefined\r\n        return\r\n      }\r\n\r\n      options.headRenderer = data => {\r\n        if (typeof slots.head === 'function') {\r\n          return renderSlot(slots, 'head', data)\r\n        }\r\n\r\n        if (typeof props.headRenderer === 'function') {\r\n          return props.headRenderer(data)\r\n        }\r\n\r\n        return props.name\r\n      }\r\n    }\r\n\r\n    function setFilterRenderer() {\r\n      if (typeof slots.filter === 'function' || typeof props.filterRenderer === 'function') {\r\n        options.filterRenderer = data => {\r\n          if (typeof slots.filter === 'function') {\r\n            return renderSlot(slots, 'filter', data)\r\n          }\r\n\r\n          return props.filterRenderer(data)\r\n        }\r\n      } else {\r\n        options.filterRenderer = undefined\r\n      }\r\n    }\r\n\r\n    function setSummaryRenderer() {\r\n      if (typeof slots.summary === 'function' || typeof props.summaryRenderer === 'function') {\r\n        options.summaryRenderer = data => {\r\n          if (typeof slots.summary === 'function') {\r\n            return renderSlot(slots, 'summary', data)\r\n          }\r\n\r\n          if (typeof props.summaryRenderer === 'function') {\r\n            return props.summaryRenderer(data)\r\n          }\r\n\r\n          return ''\r\n        }\r\n      } else {\r\n        options.summaryRenderer = undefined\r\n      }\r\n    }\r\n\r\n    return () => null\r\n  },\r\n})\r\n","import {\r\n  computed,\r\n  defineComponent,\r\n  inject,\r\n  onBeforeUnmount,\r\n  provide,\r\n  reactive,\r\n  renderSlot,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport TableColumn from './table-column'\r\nimport { useProps } from '@vexip-ui/config'\r\nimport { tableColumnGroupProps } from './props'\r\nimport { COLUMN_GROUP_ACTIONS, TABLE_ACTIONS } from './symbol'\r\n\r\nimport type { ColumnGroupWithKey, TableColumnOptions } from './symbol'\r\n\r\ntype GroupPropKey = keyof typeof tableColumnGroupProps\r\n\r\nconst propKeys = Object.keys(tableColumnGroupProps) as GroupPropKey[]\r\nconst ignoredProps: GroupPropKey[] = ['renderer', 'children']\r\nconst triggerProps: GroupPropKey[] = ['fixed', 'order']\r\n\r\nconst TableColumnGroup = defineComponent({\r\n  name: 'TableColumnGroup',\r\n  inheritAttrs: false,\r\n  props: tableColumnGroupProps,\r\n  setup(_props, { slots }) {\r\n    const props = useProps('tableColumn', _props, {\r\n      name: {\r\n        default: '',\r\n        static: true,\r\n      },\r\n      fixed: {\r\n        default: false,\r\n        static: true,\r\n      },\r\n      order: {\r\n        default: 0,\r\n        static: true,\r\n      },\r\n      ellipsis: null,\r\n      textAlign: 'center',\r\n      renderer: {\r\n        default: null,\r\n        isFunc: true,\r\n        static: true,\r\n      },\r\n      children: {\r\n        default: () => [],\r\n        static: true,\r\n      },\r\n    })\r\n    const tableAction = inject(TABLE_ACTIONS, null)\r\n    const parentActions = inject(COLUMN_GROUP_ACTIONS, null)\r\n\r\n    const columns = reactive(new Set<TableColumnOptions>())\r\n    const children = computed(() => [...columns])\r\n    const options = reactive({ children }) as ColumnGroupWithKey\r\n\r\n    options.key = Symbol('TableColumnGroup')\r\n\r\n    for (const key of propKeys) {\r\n      if (ignoredProps.includes(key)) continue\r\n      ;(options[key as keyof ColumnGroupWithKey] as any) = props[key]\r\n\r\n      const trigger = triggerProps.includes(key)\r\n\r\n      watch(\r\n        () => props[key],\r\n        value => {\r\n          ;(options[key as keyof ColumnGroupWithKey] as any) = value\r\n          trigger\r\n            ? tableAction?.updateColumns()\r\n            : tableAction?.setColumnProp(options.key, key, value)\r\n        },\r\n      )\r\n    }\r\n\r\n    watch(() => props.renderer, setRenderer, { immediate: true })\r\n\r\n    provide(COLUMN_GROUP_ACTIONS, {\r\n      increaseColumn,\r\n      decreaseColumn,\r\n    })\r\n\r\n    if (parentActions) {\r\n      parentActions.increaseColumn(options)\r\n\r\n      onBeforeUnmount(() => {\r\n        parentActions.decreaseColumn(options)\r\n      })\r\n    } else {\r\n      tableAction?.increaseColumn(options)\r\n\r\n      onBeforeUnmount(() => {\r\n        tableAction?.decreaseColumn(options)\r\n      })\r\n    }\r\n\r\n    function increaseColumn(column: TableColumnOptions) {\r\n      columns.add(column)\r\n    }\r\n\r\n    function decreaseColumn(column: TableColumnOptions) {\r\n      columns.delete(column)\r\n    }\r\n\r\n    function setRenderer() {\r\n      options.renderer = () => {\r\n        if (typeof slots.head === 'function') {\r\n          return renderSlot(slots, 'head')\r\n        }\r\n\r\n        if (typeof props.renderer === 'function') {\r\n          return props.renderer()\r\n        }\r\n\r\n        return props.name\r\n      }\r\n    }\r\n\r\n    function renderChildren() {\r\n      return props.children.map(child => {\r\n        if ('children' in child) {\r\n          return <TableColumnGroup {...child}></TableColumnGroup>\r\n        }\r\n\r\n        const { key, ...others } = child\r\n\r\n        return <TableColumn {...others} id-key={key}></TableColumn>\r\n      })\r\n    }\r\n\r\n    return () => [renderSlot(slots, 'default'), ...renderChildren()]\r\n  },\r\n})\r\n\r\n// eslint-disable-next-line vue/require-direct-export\r\nexport default TableColumnGroup\r\n","import { defineComponent, inject, onBeforeUnmount, reactive, renderSlot, watch } from 'vue'\r\n\r\nimport { useProps } from '@vexip-ui/config'\r\nimport { isNull } from '@vexip-ui/utils'\r\nimport { tableSummaryProps } from './props'\r\nimport { TABLE_ACTIONS } from './symbol'\r\n\r\nimport type { SummaryWithKey } from './symbol'\r\n\r\ntype SummaryPropKey = keyof typeof tableSummaryProps\r\n\r\nconst propKeys = Object.keys(tableSummaryProps) as SummaryPropKey[]\r\nconst aliases: Partial<Record<SummaryPropKey, string>> = {\r\n  idKey: 'key',\r\n}\r\nconst ignoredProps: SummaryPropKey[] = ['renderer']\r\nconst triggerProps: SummaryPropKey[] = ['idKey', 'cellSpan', 'order', 'above']\r\n\r\nconst funcProp = {\r\n  default: null,\r\n  isFunc: true,\r\n  static: true,\r\n}\r\n\r\nexport default defineComponent({\r\n  name: 'TableSummary',\r\n  props: tableSummaryProps,\r\n  setup(_props, { slots }) {\r\n    const props = useProps('tableSummary', _props, {\r\n      idKey: {\r\n        default: null,\r\n        validator: value => !isNull(value),\r\n        static: true,\r\n      },\r\n      class: null,\r\n      style: null,\r\n      attrs: null,\r\n      cellSpan: funcProp,\r\n      order: {\r\n        default: 0,\r\n        static: true,\r\n      },\r\n      above: {\r\n        default: false,\r\n        static: true,\r\n      },\r\n      meta: null,\r\n      renderer: funcProp,\r\n    })\r\n\r\n    const tableAction = inject(TABLE_ACTIONS, null)\r\n    const options = reactive({}) as SummaryWithKey\r\n\r\n    for (const key of propKeys) {\r\n      if (ignoredProps.includes(key)) continue\r\n\r\n      const aliasKey = (aliases[key] || key) as keyof SummaryWithKey\r\n      const trigger = triggerProps.includes(key)\r\n\r\n      ;(options[aliasKey] as any) = props[key]\r\n\r\n      watch(\r\n        () => props[key],\r\n        value => {\r\n          ;(options[aliasKey] as any) = value\r\n          trigger\r\n            ? tableAction?.updateSummaries()\r\n            : tableAction?.setSummaryProp(options.key, key, value)\r\n        },\r\n      )\r\n    }\r\n\r\n    watch(() => props.renderer, setRenderer)\r\n\r\n    setRenderer()\r\n    tableAction?.increaseSummary(options)\r\n\r\n    onBeforeUnmount(() => {\r\n      tableAction?.decreaseSummary(options)\r\n    })\r\n\r\n    function setRenderer() {\r\n      options.renderer = data => {\r\n        if (typeof data.column.summaryRenderer === 'function') {\r\n          return data.column.summaryRenderer({\r\n            ...data,\r\n            summary: options,\r\n          })\r\n        }\r\n\r\n        if (typeof slots.default === 'function') {\r\n          return renderSlot(slots, 'default', data)\r\n        }\r\n\r\n        if (typeof props.renderer === 'function') {\r\n          return props.renderer(data)\r\n        }\r\n\r\n        return ''\r\n      }\r\n    }\r\n\r\n    return () => null\r\n  },\r\n})\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, inject } from 'vue'\r\n\r\nimport { isFunction } from '@vexip-ui/utils'\r\nimport { TABLE_ACTIONS, TABLE_SLOTS } from './symbol'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { TableIconName } from './symbol'\r\n\r\ndefineOptions({ name: 'TableIcon' })\r\n\r\nconst props = defineProps({\r\n  name: {\r\n    type: String as PropType<TableIconName>,\r\n    required: true,\r\n  },\r\n  origin: {\r\n    type: Object,\r\n    default: null,\r\n  },\r\n})\r\n\r\nconst tableActions = inject(TABLE_ACTIONS)!\r\nconst tableSlots = inject(TABLE_SLOTS)!\r\n\r\nconst customIcon = computed(() => tableActions.getIcon(props.name))\r\n</script>\r\n\r\n<template>\r\n  <Renderer\r\n    v-if=\"isFunction(tableSlots[`icon-${name}`])\"\r\n    :renderer=\"tableActions.renderTableSlot\"\r\n    :data=\"{ name: `icon-${name}` }\"\r\n  ></Renderer>\r\n  <Icon v-else-if=\"tableActions.hasIcon(name)\" :icon=\"customIcon\"></Icon>\r\n  <Icon v-else v-bind=\"origin\"></Icon>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Button } from '@/components/button'\r\nimport { Checkbox } from '@/components/checkbox'\r\nimport { Ellipsis } from '@/components/ellipsis'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\nimport { Tooltip } from '@/components/tooltip'\r\n\r\nimport { computed, inject, ref, toRef } from 'vue'\r\n\r\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\r\nimport TableIcon from './table-icon.vue'\r\nimport { useMoving, useRtl } from '@vexip-ui/hooks'\r\nimport { getLast, isFunction, nextFrameOnce } from '@vexip-ui/utils'\r\nimport { TABLE_ACTIONS, TABLE_HEAD_PREFIX, TABLE_STORE, columnTypes } from './symbol'\r\n\r\nimport type { PropType, StyleValue } from 'vue'\r\nimport type { MovingState } from '@vexip-ui/hooks'\r\nimport type {\r\n  ColumnWithKey,\r\n  ParsedFilterOptions,\r\n  ParsedTableSorterOptions,\r\n  TableRowState,\r\n  TableSelectionColumn,\r\n  TableTypeColumn,\r\n} from './symbol'\r\n\r\ndefineOptions({ name: 'TableHeadCell' })\r\n\r\nconst props = defineProps({\r\n  column: {\r\n    type: Object as PropType<ColumnWithKey>,\r\n    default: () => ({}),\r\n  },\r\n  index: {\r\n    type: Number,\r\n    default: -1,\r\n  },\r\n  row: {\r\n    type: Object as PropType<TableRowState>,\r\n    default: () => ({}),\r\n  },\r\n  rowIndex: {\r\n    type: Number,\r\n    default: 0,\r\n  },\r\n  fixed: {\r\n    type: String as PropType<'left' | 'right' | undefined>,\r\n    default: null,\r\n  },\r\n})\r\n\r\nconst { state, getters, mutations } = inject(TABLE_STORE)!\r\nconst tableActions = inject(TABLE_ACTIONS)!\r\n\r\nconst nh = useNameHelper('table')\r\nconst locale = toRef(state, 'locale')\r\nconst icons = useIcons()\r\nconst { isRtl } = useRtl()\r\n\r\nconst filterVisible = ref(false)\r\nconst resizable = toRef(state, 'colResizable')\r\nconst resizing = computed(() => state.colResizing)\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nconst isGroup = computed(() => mutations.isGroupColumn(props.column))\r\nconst columns = computed(() => {\r\n  return props.fixed === 'left'\r\n    ? state.leftFixedColumns\r\n    : props.fixed === 'right'\r\n      ? state.rightFixedColumns\r\n      : state.normalColumns\r\n})\r\nconst cellSpan = computed(() => {\r\n  return (\r\n    state.cellSpanMap.get(props.fixed || 'default')!.get(`h${props.rowIndex},${props.index}`) || {\r\n      colSpan: 1,\r\n      rowSpan: 1,\r\n    }\r\n  )\r\n})\r\nconst inLast = computed(() => {\r\n  return isGroup.value\r\n    ? props.column.last\r\n    : props.column.index + cellSpan.value.colSpan >= state.columns.length\r\n})\r\n\r\nconst minWidth = 10\r\n\r\nlet currentWidth = 0\r\n\r\nfunction processColResize(payload: MovingState, lazy = false) {\r\n  const width = Math.max(currentWidth + (payload.isRtl ? -1 : 1) * payload.deltaX, minWidth)\r\n\r\n  !lazy &&\r\n    mutations.handleColumnResize(\r\n      state.columns\r\n        .slice(props.column.index, props.column.index + cellSpan.value.colSpan)\r\n        .map(column => column.key),\r\n      width,\r\n    )\r\n\r\n  return width\r\n}\r\n\r\nconst { target: resizer } = useMoving({\r\n  capture: false,\r\n  onStart: (payload, event) => {\r\n    if (!resizable.value || resizing.value || isGroup.value) return false\r\n\r\n    const table = tableActions.getTableElement()\r\n\r\n    if (!table || !wrapper.value) return false\r\n\r\n    payload.xStart = payload.clientX - table.getBoundingClientRect().left\r\n    payload.isRtl = isRtl.value\r\n    currentWidth = wrapper.value.getBoundingClientRect().width\r\n\r\n    mutations.setColumnResizing(true)\r\n    mutations.setResizeLeft(payload.xStart)\r\n    tableActions.emitColResize('Start', {\r\n      ...buildEventPayload(event),\r\n      width: currentWidth,\r\n    })\r\n  },\r\n  onMove: (payload, event) => {\r\n    payload.xEnd = Math.max(payload.xStart - currentWidth + minWidth, payload.xEnd)\r\n\r\n    mutations.setResizeLeft(payload.xEnd)\r\n    tableActions.emitColResize('Move', {\r\n      ...buildEventPayload(event),\r\n      width: processColResize(payload, state.colResizable !== 'responsive'),\r\n    })\r\n  },\r\n  onEnd: (payload, event) => {\r\n    mutations.setColumnResizing(false)\r\n    tableActions.emitColResize('End', {\r\n      ...buildEventPayload(event),\r\n      width: processColResize(payload),\r\n    })\r\n  },\r\n})\r\n\r\nconst typed = computed(() => columnTypes.includes((props.column as TableTypeColumn).type))\r\nconst className = computed(() => {\r\n  let customClass = null\r\n\r\n  if (typeof state.headClass === 'function') {\r\n    customClass = state.headClass({\r\n      column: props.column,\r\n      index: props.column.colIndex,\r\n      rowIndex: props.rowIndex,\r\n    })\r\n  } else {\r\n    customClass = state.headClass\r\n  }\r\n\r\n  return [\r\n    nh.be('head-cell'),\r\n    {\r\n      [nh.bem('head-cell', 'group')]: isGroup.value,\r\n      [nh.bem('head-cell', 'typed')]: typed.value,\r\n      [nh.bem('head-cell', 'center')]: typed.value || props.column.textAlign === 'center',\r\n      [nh.bem('head-cell', 'right')]: props.column.textAlign === 'right',\r\n      [nh.bem('head-cell', 'last')]: inLast.value,\r\n    },\r\n    props.column.class,\r\n    customClass,\r\n  ]\r\n})\r\nconst customStyle = computed(() => {\r\n  if (typeof state.headStyle === 'function') {\r\n    return state.headStyle({\r\n      column: props.column,\r\n      index: props.column.colIndex,\r\n      rowIndex: props.rowIndex,\r\n    })\r\n  }\r\n\r\n  return state.headStyle\r\n})\r\nconst style = computed(() => {\r\n  const totalWidths =\r\n    props.fixed === 'left'\r\n      ? getters.leftFixedWidths\r\n      : props.fixed === 'right'\r\n        ? getters.rightFixedWidths\r\n        : getters.normalWidths\r\n  const { colSpan, rowSpan } = cellSpan.value\r\n  const noFixed = !getters.hasFixedColumn\r\n  const padLeft = noFixed || columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\r\n  const padRight =\r\n    noFixed || getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\r\n  const width = totalWidths[props.index + colSpan] - totalWidths[props.index]\r\n\r\n  let height: number | undefined\r\n\r\n  if (rowSpan > 1) {\r\n    height = 0\r\n\r\n    for (let i = 0; i < rowSpan; ++i) {\r\n      height += state.rowMap.get(`${TABLE_HEAD_PREFIX}${props.rowIndex + i}`)?.height ?? 0\r\n    }\r\n  }\r\n\r\n  return [\r\n    props.column.style || '',\r\n    customStyle.value,\r\n    {\r\n      display: !colSpan ? 'none' : undefined,\r\n      width: `${(props.column.index ? 0 : padLeft) + (inLast.value ? padRight : 0) + width}px`,\r\n      height: height ? `${height}px` : undefined,\r\n      visibility: props.column.fixed && !props.fixed ? 'hidden' : undefined,\r\n      borderRightWidth:\r\n        !state.border && colSpan > 1 && props.index + colSpan >= totalWidths.length - 1\r\n          ? 0\r\n          : undefined,\r\n      transform: `translate3d(${isRtl.value ? '-' : ''}${\r\n        (props.column.index ? padLeft : 0) + totalWidths[props.index]\r\n      }px, 0, 0)`,\r\n    },\r\n  ] as StyleValue\r\n})\r\nconst attrs = computed(() => {\r\n  let customAttrs: Record<string, any>\r\n\r\n  if (typeof state.headAttrs === 'function') {\r\n    customAttrs = state.headAttrs({\r\n      column: props.column,\r\n      index: props.column.colIndex,\r\n      rowIndex: props.rowIndex,\r\n    })\r\n  } else {\r\n    customAttrs = state.headAttrs\r\n  }\r\n\r\n  return { ...(props.column.attrs || {}), ...(customAttrs || {}) }\r\n})\r\nconst sorter = computed(() => {\r\n  return state.sorters.get(props.column.key) || ({} as ParsedTableSorterOptions)\r\n})\r\nconst filter = computed(() => {\r\n  return state.filters.get(props.column.key) || ({} as ParsedFilterOptions)\r\n})\r\nconst hasFilterActive = computed(() => {\r\n  const options = filter.value.options ?? []\r\n\r\n  for (let i = 0, len = options.length; i < len; ++i) {\r\n    if (options[i].active) {\r\n      return true\r\n    }\r\n  }\r\n\r\n  return false\r\n})\r\nconst checkboxDisabled = computed(() => {\r\n  if (!isSelection(props.column)) {\r\n    return false\r\n  }\r\n\r\n  const records = Object.values(getters.disableCheckRows)\r\n\r\n  return (\r\n    getters.processedData.length === records.length &&\r\n    !Object.values(getters.disableCheckRows).includes(false)\r\n  )\r\n})\r\n\r\nconst refreshXScroll = () => nextFrameOnce(tableActions.refreshXScroll)\r\n\r\nfunction isSelection(column: unknown): column is TableSelectionColumn {\r\n  return !isGroup.value && (column as TableTypeColumn).type === 'selection'\r\n}\r\n\r\nfunction buildEventPayload(event: Event) {\r\n  return {\r\n    column: props.column,\r\n    index: props.column.colIndex,\r\n    event,\r\n  }\r\n}\r\n\r\nfunction handleMouseEnter(event: MouseEvent) {\r\n  tableActions?.emitHeadEvent('Enter', buildEventPayload(event))\r\n}\r\n\r\nfunction handleMouseLeave(event: MouseEvent) {\r\n  tableActions?.emitHeadEvent('Leave', buildEventPayload(event))\r\n}\r\n\r\nfunction handleClick(event: MouseEvent) {\r\n  tableActions?.emitHeadEvent('Click', buildEventPayload(event))\r\n}\r\n\r\nfunction handleDblclick(event: MouseEvent) {\r\n  tableActions?.emitHeadEvent('Dblclick', buildEventPayload(event))\r\n}\r\n\r\nfunction handleContextmenu(event: MouseEvent) {\r\n  tableActions?.emitHeadEvent('Contextmenu', buildEventPayload(event))\r\n}\r\n\r\nfunction handleSortAsc() {\r\n  const key = props.column.key\r\n  const type = sorter.value.type === 'asc' ? null : 'asc'\r\n\r\n  mutations.handleSort(key, type)\r\n  tableActions.emitRowSort()\r\n}\r\n\r\nfunction handleSortDesc() {\r\n  const key = props.column.key\r\n  const type = sorter.value.type === 'desc' ? null : 'desc'\r\n\r\n  mutations.handleSort(key, type)\r\n  tableActions.emitRowSort()\r\n}\r\n\r\nfunction handleFilter(value: ParsedFilterOptions['active']) {\r\n  mutations.handleFilter(props.column.key, value)\r\n}\r\n\r\nfunction handleFilterItemSelect(value: string | number, active: boolean) {\r\n  mutations.toggleFilterItemActive({\r\n    key: props.column.key,\r\n    value,\r\n    active,\r\n    disableOthers: true,\r\n  })\r\n  handleFilter(value)\r\n  filterVisible.value = false\r\n  tableActions.emitRowFilter()\r\n}\r\n\r\nfunction handleFilterCheck(value: string | number, checked: boolean) {\r\n  mutations.toggleFilterItemActive({\r\n    key: props.column.key,\r\n    value,\r\n    active: checked,\r\n  })\r\n}\r\n\r\nfunction handleFilterMultiple() {\r\n  const options = filter.value.options ?? []\r\n  const activeValues = []\r\n\r\n  for (let i = 0, len = options.length; i < len; ++i) {\r\n    const option = options[i]\r\n\r\n    if (option.active) {\r\n      activeValues.push(option.value)\r\n    }\r\n  }\r\n\r\n  handleFilter(activeValues)\r\n  filterVisible.value = false\r\n  tableActions.emitRowFilter()\r\n}\r\n\r\nfunction handleResetFilter() {\r\n  filterVisible.value = false\r\n  handleFilter(null)\r\n  mutations.toggleFilterItemActive({\r\n    key: props.column.key,\r\n    value: null,\r\n    disableOthers: true,\r\n  })\r\n  tableActions.emitRowFilter()\r\n}\r\n\r\nfunction handleCheckAllRow() {\r\n  mutations.handleCheckAll()\r\n  tableActions.emitAllRowCheck(state.checkedAll, state.partial)\r\n}\r\n\r\nfunction handleCellResize(entry: ResizeObserverEntry) {\r\n  mutations.setCellHeight(\r\n    props.row.key,\r\n    props.column.key,\r\n    (entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height) + state.borderWidth,\r\n  )\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    v-bind=\"attrs\"\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"columnheader\"\r\n    scope=\"col\"\r\n    :colspan=\"cellSpan.colSpan !== 1 ? cellSpan.colSpan : undefined\"\r\n    :rowspan=\"cellSpan.rowSpan !== 1 ? cellSpan.rowSpan : undefined\"\r\n    :style=\"style\"\r\n    :aria-sort=\"\r\n      !isGroup && sorter.able\r\n        ? sorter.type\r\n          ? sorter.type === 'asc'\r\n            ? 'ascending'\r\n            : 'descending'\r\n          : 'none'\r\n        : undefined\r\n    \"\r\n    @mouseenter=\"handleMouseEnter\"\r\n    @mouseleave=\"handleMouseLeave\"\r\n    @click=\"handleClick\"\r\n    @dblclick=\"handleDblclick\"\r\n    @contextmenu=\"handleContextmenu\"\r\n    @transitionend=\"refreshXScroll\"\r\n  >\r\n    <div\r\n      v-if=\"column.index === 0\"\r\n      :class=\"nh.be('side-pad')\"\r\n      role=\"none\"\r\n      aria-hidden\r\n    ></div>\r\n    <template v-if=\"isSelection(column)\">\r\n      <div v-if=\"!column.singleSelect\" :class=\"nh.be('content')\">\r\n        <Checkbox\r\n          inherit\r\n          control\r\n          :class=\"nh.be('selection')\"\r\n          :checked=\"state.checkedAll\"\r\n          :partial=\"state.partial\"\r\n          :disabled=\"checkboxDisabled\"\r\n          :size=\"column.selectionSize || 'default'\"\r\n          @click.prevent=\"handleCheckAllRow\"\r\n        ></Checkbox>\r\n      </div>\r\n    </template>\r\n    <ResizeObserver\r\n      v-else\r\n      :disabled=\"column.ellipsis ?? state.ellipsis\"\r\n      :on-resize=\"handleCellResize\"\r\n    >\r\n      <span :class=\"nh.be('content')\">\r\n        <Ellipsis\r\n          v-if=\"column.ellipsis ?? state.ellipsis\"\r\n          inherit\r\n          :class=\"nh.be('ellipsis')\"\r\n          :tooltip-theme=\"state.tooltipTheme\"\r\n          :tip-max-width=\"state.tooltipWidth\"\r\n        >\r\n          <Renderer\r\n            v-if=\"isGroup && isFunction((column as any).renderer)\"\r\n            :renderer=\"(column as any).renderer\"\r\n          ></Renderer>\r\n          <Renderer\r\n            v-else-if=\"isFunction(column.headRenderer)\"\r\n            :renderer=\"column.headRenderer\"\r\n            :data=\"{ column, index }\"\r\n          ></Renderer>\r\n          <template v-else>\r\n            {{ column.name }}\r\n          </template>\r\n        </Ellipsis>\r\n        <template v-else>\r\n          <Renderer\r\n            v-if=\"isGroup && isFunction((column as any).renderer)\"\r\n            :renderer=\"(column as any).renderer\"\r\n          ></Renderer>\r\n          <Renderer\r\n            v-else-if=\"isFunction(column.headRenderer)\"\r\n            :renderer=\"column.headRenderer\"\r\n            :data=\"{ column, index }\"\r\n          ></Renderer>\r\n          <template v-else>\r\n            {{ column.name }}\r\n          </template>\r\n        </template>\r\n        <template v-if=\"!isGroup\">\r\n          <div v-if=\"sorter.able\" :class=\"nh.be('sorter')\">\r\n            <span\r\n              :class=\"{\r\n                [nh.bem('sorter', 'asc')]: true,\r\n                [nh.bem('sorter', 'active')]: sorter.type === 'asc'\r\n              }\"\r\n              @click=\"handleSortAsc()\"\r\n            >\r\n              <TableIcon name=\"asc\" :origin=\"icons.angleUp\"></TableIcon>\r\n            </span>\r\n            <span\r\n              :class=\"{\r\n                [nh.bem('sorter', 'desc')]: true,\r\n                [nh.bem('sorter', 'active')]: sorter.type === 'desc'\r\n              }\"\r\n              @click=\"handleSortDesc()\"\r\n            >\r\n              <TableIcon name=\"desc\" :origin=\"icons.angleDown\"></TableIcon>\r\n            </span>\r\n          </div>\r\n          <template v-if=\"filter.able\">\r\n            <Renderer\r\n              v-if=\"isFunction(column.filterRenderer)\"\r\n              :renderer=\"column.filterRenderer\"\r\n              :data=\"{ column, index, filter, handleFilter }\"\r\n            ></Renderer>\r\n            <Tooltip\r\n              v-else\r\n              v-model:visible=\"filterVisible\"\r\n              transfer\r\n              placement=\"bottom\"\r\n              trigger=\"click\"\r\n              :class=\"{\r\n                [nh.be('filter')]: true,\r\n                [nh.bem('filter', 'visible')]: filterVisible,\r\n                [nh.bem('filter', 'active')]: filter.active\r\n              }\"\r\n              :tip-class=\"{\r\n                [nh.be('filter-wrapper')]: true,\r\n                [nh.bs('vars')]: true,\r\n                [nh.bem('filter-wrapper', 'multiple')]: filter.multiple\r\n              }\"\r\n            >\r\n              <template #trigger>\r\n                <div :class=\"nh.be('filter-trigger')\">\r\n                  <TableIcon name=\"filter\" :origin=\"icons.filter\"></TableIcon>\r\n                </div>\r\n              </template>\r\n              <template v-if=\"filter.multiple\" #default>\r\n                <div vertical :class=\"nh.be('filter-group')\">\r\n                  <Checkbox\r\n                    v-for=\"item in filter.options\"\r\n                    :key=\"item.value\"\r\n                    inherit\r\n                    :checked=\"item.active\"\r\n                    :label=\"item.label\"\r\n                    :value=\"item.value\"\r\n                    @change=\"handleFilterCheck(item.value, $event)\"\r\n                  ></Checkbox>\r\n                </div>\r\n                <div :class=\"nh.be('filter-actions')\">\r\n                  <Button\r\n                    inherit\r\n                    text\r\n                    size=\"small\"\r\n                    :disabled=\"!hasFilterActive\"\r\n                    @click=\"handleFilterMultiple()\"\r\n                  >\r\n                    {{ locale.filterConfirm }}\r\n                  </Button>\r\n                  <Button\r\n                    inherit\r\n                    text\r\n                    size=\"small\"\r\n                    @click=\"handleResetFilter\"\r\n                  >\r\n                    {{ locale.filterReset }}\r\n                  </Button>\r\n                </div>\r\n              </template>\r\n              <template v-else #default>\r\n                <div\r\n                  :class=\"{\r\n                    [nh.be('filter-item')]: true,\r\n                    [nh.bem('filter-item', 'active')]: !filter.active\r\n                  }\"\r\n                  @click=\"handleResetFilter\"\r\n                >\r\n                  {{ locale.filterAll }}\r\n                </div>\r\n                <div\r\n                  v-for=\"item in filter.options\"\r\n                  :key=\"item.value\"\r\n                  :class=\"{\r\n                    [nh.be('filter-item')]: true,\r\n                    [nh.bem('filter-item', 'active')]: item.active\r\n                  }\"\r\n                  @click=\"handleFilterItemSelect(item.value, !item.active)\"\r\n                >\r\n                  {{ item.label }}\r\n                </div>\r\n              </template>\r\n            </Tooltip>\r\n          </template>\r\n        </template>\r\n      </span>\r\n    </ResizeObserver>\r\n    <div\r\n      v-if=\"!isGroup && resizable && !typed && !column.last\"\r\n      ref=\"resizer\"\r\n      :class=\"nh.be('resizer')\"\r\n    ></div>\r\n    <div\r\n      v-if=\"inLast\"\r\n      :class=\"[nh.be('side-pad'), nh.bem('side-pad', 'right')]\"\r\n      role=\"none\"\r\n      aria-hidden\r\n    ></div>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { CollapseTransition } from '@/components/collapse-transition'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport { computed, inject, nextTick, onMounted, reactive, ref, toRef, watchEffect } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { useSetTimeout } from '@vexip-ui/hooks'\r\nimport { isFunction } from '@vexip-ui/utils'\r\nimport { TABLE_ACTIONS, TABLE_STORE } from './symbol'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { TableRowState } from './symbol'\r\n\r\ndefineOptions({ name: 'TableRow' })\r\n\r\nconst props = defineProps({\r\n  row: {\r\n    type: Object as PropType<TableRowState>,\r\n    default: () => ({}),\r\n  },\r\n  index: {\r\n    type: Number,\r\n    default: null,\r\n  },\r\n  isHead: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  isFoot: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  fixed: {\r\n    type: String as PropType<'left' | 'right' | undefined>,\r\n    default: null,\r\n  },\r\n})\r\n\r\nconst { state, getters, mutations } = inject(TABLE_STORE)!\r\nconst tableAction = inject(TABLE_ACTIONS)!\r\n\r\nconst nh = useNameHelper('table')\r\n\r\nconst { timer } = useSetTimeout()\r\nconst dragging = ref(false)\r\nconst isDragOver = ref(false)\r\n\r\nconst wrapper = ref<HTMLElement>()\r\nconst rowEl = ref<HTMLElement>()\r\nconst expandEl = ref<HTMLElement>()\r\n\r\nconst instance = reactive({\r\n  el: wrapper,\r\n  row: toRef(props, 'row'),\r\n})\r\n\r\nconst rowKey = computed(() => props.row.key)\r\nconst rowType = computed(() => (props.isHead ? 'head' : props.isFoot ? 'foot' : undefined))\r\nconst className = computed(() => {\r\n  let customClass = null\r\n\r\n  if (!rowType.value) {\r\n    if (typeof state.rowClass === 'function') {\r\n      customClass = state.rowClass(props.row.data, props.index)\r\n    } else {\r\n      customClass = state.rowClass\r\n    }\r\n  }\r\n\r\n  return [\r\n    nh.be('row'),\r\n    {\r\n      [nh.bem('row', 'fixed')]: state.rowHeight && state.rowHeight > 0,\r\n      [nh.bem('row', 'hover')]:\r\n        !rowType.value && state.highlight && rowKey.value === state.hoveredRowKey,\r\n      [nh.bem('row', 'stripe')]: state.stripe && props.index % 2 === 1,\r\n      [nh.bem('row', 'checked')]: props.row.checked,\r\n      [nh.bem('row', 'dragging')]: dragging.value,\r\n      [nh.bem('row', 'drag-over')]: isDragOver.value,\r\n    },\r\n    customClass,\r\n  ]\r\n})\r\nconst maxHeight = computed(() =>\r\n  Math.max(...Object.values(props.row.cellHeights || {}), state.rowMinHeight),\r\n)\r\nconst style = computed(() => {\r\n  let customStyle: any = ''\r\n\r\n  if (!rowType.value) {\r\n    if (typeof state.rowStyle === 'function') {\r\n      customStyle = state.rowStyle(props.row.data, props.index)\r\n    } else {\r\n      customStyle = state.rowStyle\r\n    }\r\n  }\r\n\r\n  return [\r\n    customStyle,\r\n    {\r\n      height: !state.rowHeight ? `${maxHeight.value}px` : `${state.rowHeight}px`,\r\n      minHeight: state.rowHeight ? undefined : `${state.rowMinHeight}px`,\r\n      border: '0',\r\n    },\r\n  ]\r\n})\r\nconst attrs = computed(() => {\r\n  if (!rowType.value) {\r\n    if (typeof state.rowAttrs === 'function') {\r\n      return state.rowAttrs(props.row.data, props.index)\r\n    } else {\r\n      return state.rowAttrs\r\n    }\r\n  }\r\n\r\n  return null\r\n})\r\nconst groupStyle = computed(() => {\r\n  if (props.isHead || props.isFoot) return undefined\r\n\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n  state.heightTrigger\r\n\r\n  const offset =\r\n    state.heightBITree && !rowType.value && props.index ? state.heightBITree.sum(props.index) : 0\r\n\r\n  return {\r\n    transform: offset ? `translate3d(0, ${offset}px, 0)` : undefined,\r\n  }\r\n})\r\nconst cellDraggable = computed(() => {\r\n  return getters.hasDragColumn && !getters.disableDragRows.has(rowKey.value)\r\n})\r\nconst rowDraggable = computed(() => !rowType.value && state.rowDraggable)\r\nconst draggable = computed(() => !rowType.value && (state.rowDraggable || cellDraggable.value))\r\nconst expandRenderer = computed(() => state.expandRenderer)\r\nconst hasExpand = computed(() => {\r\n  if (props.isHead || props.isFoot || !getters.expandColumn) return false\r\n  if (state.rightFixedColumns.length) return props.fixed === 'right'\r\n  if (state.leftFixedColumns.length) return props.fixed === 'left'\r\n\r\n  return !!state.normalColumns.length && !props.fixed\r\n})\r\n\r\nfunction setExpandHeight() {\r\n  let targetHeight: number\r\n\r\n  if (props.row.expanded && expandEl.value) {\r\n    targetHeight = expandEl.value.scrollHeight\r\n  } else {\r\n    targetHeight = 0\r\n  }\r\n\r\n  if (targetHeight !== props.row.expandHeight) {\r\n    mutations.setRowProp(rowKey.value, 'expandHeight', targetHeight)\r\n    updateTotalHeight(true)\r\n  }\r\n}\r\n\r\nfunction updateTotalHeight(force = false) {\r\n  if (state.heightBITree && getters.visibleKeys.has(rowKey.value) && (force || !props.fixed)) {\r\n    const height = props.row.height + props.row.expandHeight\r\n    const tree = state.heightBITree\r\n    const prev = tree.get(props.index)\r\n\r\n    if (height !== prev) {\r\n      tree.add(props.index, height - prev)\r\n      mutations.updateTotalHeight()\r\n      mutations.triggerHeightChange()\r\n    }\r\n  }\r\n}\r\n\r\nfunction handleResize(entry: ResizeObserverEntry) {\r\n  const height = entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height\r\n  mutations.setRowProp(rowKey.value, 'height', height)\r\n  !rowType.value && updateTotalHeight()\r\n}\r\n\r\nwatchEffect(() => {\r\n  if (props.isHead || props.isFoot) return\r\n\r\n  mutations.setRowProp(rowKey.value, 'height', state.rowHeight || maxHeight.value)\r\n  !rowType.value && updateTotalHeight()\r\n  nextTick(() => {\r\n    hasExpand.value && setExpandHeight()\r\n  })\r\n})\r\n\r\nonMounted(() => {\r\n  nextTick(() => {\r\n    mutations.setRowProp(rowKey.value, 'height', state.rowHeight || maxHeight.value)\r\n    nextTick(() => {\r\n      hasExpand.value && setExpandHeight()\r\n    })\r\n  })\r\n})\r\n\r\nfunction buildEventPayload(event: Event) {\r\n  return {\r\n    row: props.row.data,\r\n    key: props.row.key,\r\n    index: props.index,\r\n    event,\r\n  }\r\n}\r\n\r\nfunction handleMouseEnter(event: MouseEvent) {\r\n  mutations.setHoveredRowKey(rowKey.value)\r\n\r\n  if (!rowType.value && tableAction) {\r\n    tableAction.emitRowEvent('Enter', buildEventPayload(event))\r\n  }\r\n}\r\n\r\nfunction handleMouseLeave(event: MouseEvent) {\r\n  mutations.setHoveredRowKey(null)\r\n\r\n  if (!rowType.value && tableAction) {\r\n    tableAction.emitRowEvent('Leave', buildEventPayload(event))\r\n  }\r\n}\r\n\r\nfunction handleClick(event: MouseEvent) {\r\n  if (!rowType.value && tableAction) {\r\n    tableAction.emitRowEvent('Click', buildEventPayload(event))\r\n  }\r\n}\r\n\r\nfunction handleDblclick(event: MouseEvent) {\r\n  if (!rowType.value && tableAction) {\r\n    tableAction.emitRowEvent('Dblclick', buildEventPayload(event))\r\n  }\r\n}\r\n\r\nfunction handleContextmenu(event: MouseEvent) {\r\n  if (!rowType.value && tableAction) {\r\n    tableAction.emitRowEvent('Contextmenu', buildEventPayload(event))\r\n  }\r\n}\r\n\r\nfunction shouldProcessDrag() {\r\n  return draggable.value && state.dragging\r\n}\r\n\r\nfunction handleDragStart(event: DragEvent) {\r\n  if (!draggable.value && !cellDraggable.value) return\r\n\r\n  dragging.value = true\r\n  tableAction.handleRowDragStart(instance, event)\r\n}\r\n\r\nfunction handleDragOver(event: DragEvent) {\r\n  if (!shouldProcessDrag() || (cellDraggable.value && !getters.rowDragging)) return\r\n\r\n  clearTimeout(timer.drag)\r\n  event.stopPropagation()\r\n  event.preventDefault()\r\n\r\n  isDragOver.value = true\r\n\r\n  tableAction.handleRowDragOver(instance, event)\r\n}\r\n\r\nfunction handleDrop(event: DragEvent) {\r\n  if (!shouldProcessDrag()) return\r\n\r\n  clearTimeout(timer.drag)\r\n  event.stopPropagation()\r\n  event.preventDefault()\r\n\r\n  isDragOver.value = false\r\n\r\n  tableAction.handleRowDrop(instance, event)\r\n  nextTick(() => mutations.handleDrag(rowKey.value, false))\r\n}\r\n\r\nfunction handleDragEnd(event: DragEvent) {\r\n  if (!shouldProcessDrag()) return\r\n\r\n  event.stopPropagation()\r\n  dragging.value = true\r\n\r\n  tableAction.handleRowDragEnd(event)\r\n  nextTick(() => mutations.handleDrag(rowKey.value, false))\r\n}\r\n\r\nfunction handleDragLeave(event: DragEvent) {\r\n  if (!shouldProcessDrag()) return\r\n\r\n  clearTimeout(timer.drag)\r\n  event.preventDefault()\r\n\r\n  timer.drag = setTimeout(() => {\r\n    isDragOver.value = false\r\n  }, 100)\r\n}\r\n\r\nfunction afterExpand() {\r\n  mutations.setRowProp(rowKey.value, 'expandAnimate', false)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    v-if=\"!row.hidden\"\r\n    ref=\"wrapper\"\r\n    :class=\"{\r\n      [nh.be('group')]: true,\r\n      [nh.bem('group', 'checked')]: row.checked,\r\n      [nh.bem('group', 'last')]: row.last,\r\n    }\"\r\n    role=\"row\"\r\n    :draggable=\"rowDraggable || row.dragging\"\r\n    :style=\"groupStyle\"\r\n    @mouseenter=\"handleMouseEnter\"\r\n    @mouseleave=\"handleMouseLeave\"\r\n    @click=\"handleClick\"\r\n    @dblclick=\"handleDblclick\"\r\n    @contextmenu=\"handleContextmenu\"\r\n    @dragstart.stop=\"handleDragStart\"\r\n    @dragover=\"handleDragOver\"\r\n    @drop=\"handleDrop\"\r\n    @dragend=\"handleDragEnd\"\r\n    @dragleave=\"handleDragLeave\"\r\n  >\r\n    <ResizeObserver :on-resize=\"handleResize\">\r\n      <div\r\n        v-bind=\"attrs\"\r\n        ref=\"rowEl\"\r\n        :class=\"className\"\r\n        :style=\"style\"\r\n      >\r\n        <slot></slot>\r\n      </div>\r\n    </ResizeObserver>\r\n    <CollapseTransition\r\n      v-if=\"hasExpand\"\r\n      :disabled=\"!row.expandAnimate\"\r\n      @enter=\"setExpandHeight\"\r\n      @leave=\"setExpandHeight\"\r\n      @after-enter=\"afterExpand\"\r\n      @after-leave=\"afterExpand\"\r\n    >\r\n      <div\r\n        v-if=\"row.expanded\"\r\n        ref=\"expandEl\"\r\n        :class=\"[nh.be('expanded'), fixed === 'right' && nh.bem('expanded', 'fixed')]\"\r\n      >\r\n        <ResizeObserver :disabled=\"row.expandAnimate\" :on-resize=\"setExpandHeight\">\r\n          <div :class=\"nh.be('expanded-wrapper')\">\r\n            <Renderer\r\n              v-if=\"isFunction(getters.expandColumn!.renderer)\"\r\n              :renderer=\"getters.expandColumn!.renderer\"\r\n              :data=\"{ leftFixed: 0, rightFixed: 0, row: row.data, rowIndex: index }\"\r\n            ></Renderer>\r\n            <Renderer\r\n              v-else-if=\"isFunction(expandRenderer)\"\r\n              :renderer=\"expandRenderer\"\r\n              :data=\"{ leftFixed: 0, rightFixed: 0, row: row.data, rowIndex: index }\"\r\n            ></Renderer>\r\n          </div>\r\n        </ResizeObserver>\r\n      </div>\r\n    </CollapseTransition>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed, inject } from 'vue'\r\n\r\nimport TableHeadCell from './table-head-cell.vue'\r\nimport TableRow from './table-row.vue'\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { getLast } from '@vexip-ui/utils'\r\nimport { TABLE_HEAD_PREFIX, TABLE_STORE } from './symbol'\r\n\r\nimport type { PropType } from 'vue'\r\n\r\ndefineOptions({ name: 'TableHead' })\r\n\r\nconst props = defineProps({\r\n  fixed: {\r\n    type: String as PropType<'left' | 'right' | undefined>,\r\n    default: null,\r\n  },\r\n})\r\n\r\nconst { state, getters, mutations } = inject(TABLE_STORE)!\r\n\r\nconst nh = useNameHelper('table')\r\nconst allColumns = computed(() => {\r\n  const left = state.leftFixedColumns.length\r\n  const right = state.allColumns[0].length - state.rightFixedColumns.length\r\n\r\n  if (props.fixed === 'left') {\r\n    return state.allColumns.map(columns => columns.slice(0, left))\r\n  } else if (props.fixed === 'right') {\r\n    return state.allColumns.map(columns => columns.slice(right, state.allColumns[0].length))\r\n  }\r\n\r\n  return state.allColumns.map(columns => columns.slice(left, right))\r\n})\r\nconst columns = computed(() => {\r\n  return props.fixed === 'left'\r\n    ? state.leftFixedColumns\r\n    : props.fixed === 'right'\r\n      ? state.rightFixedColumns\r\n      : state.normalColumns\r\n})\r\nconst style = computed(() => {\r\n  const width =\r\n    props.fixed === 'left'\r\n      ? getLast(getters.leftFixedWidths)\r\n      : props.fixed === 'right'\r\n        ? getLast(getters.rightFixedWidths)\r\n        : getLast(getters.normalWidths)\r\n  const padLeft = columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\r\n  const padRight = getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\r\n\r\n  return {\r\n    minWidth: width && `${width + padLeft + padRight}px`,\r\n  }\r\n})\r\n\r\nfunction getRow(index: number) {\r\n  const key = `${TABLE_HEAD_PREFIX}${index}`\r\n\r\n  return state.rowMap.get(key) || mutations.createMinRowState(key)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"nh.be('head')\" role=\"rowgroup\" :style=\"style\">\r\n    <TableRow\r\n      v-for=\"(rowColumns, rowIndex) in allColumns\"\r\n      :key=\"rowIndex\"\r\n      :index=\"rowIndex\"\r\n      is-head\r\n      :fixed=\"fixed\"\r\n      :row=\"getRow(rowIndex)\"\r\n      :aria-rowindex=\"rowIndex\"\r\n    >\r\n      <template v-for=\"(column, index) in rowColumns as any\" :key=\"index\">\r\n        <TableHeadCell\r\n          v-if=\"column\"\r\n          :column=\"column\"\r\n          :index=\"index\"\r\n          :row=\"getRow(rowIndex)\"\r\n          :row-index=\"rowIndex\"\r\n          :fixed=\"fixed\"\r\n          :aria-colindex=\"index\"\r\n        ></TableHeadCell>\r\n      </template>\r\n    </TableRow>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Checkbox } from '@/components/checkbox'\r\nimport { Ellipsis } from '@/components/ellipsis'\r\nimport { Radio } from '@/components/radio'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport { computed, inject, nextTick, ref, watchEffect } from 'vue'\r\n\r\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\r\nimport TableIcon from './table-icon.vue'\r\nimport { useRtl } from '@vexip-ui/hooks'\r\nimport { getLast, isFunction } from '@vexip-ui/utils'\r\nimport { TABLE_ACTIONS, TABLE_STORE, columnTypes, noopFormatter } from './symbol'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type {\r\n  ColumnWithKey,\r\n  TableDragColumn,\r\n  TableExpandColumn,\r\n  TableOrderColumn,\r\n  TableRowState,\r\n  TableSelectionColumn,\r\n  TableTypeColumn,\r\n} from './symbol'\r\n\r\ndefineOptions({ name: 'TableCell' })\r\n\r\nconst props = defineProps({\r\n  row: {\r\n    type: Object as PropType<TableRowState>,\r\n    default: () => ({}),\r\n  },\r\n  rowIndex: {\r\n    type: Number,\r\n    default: -1,\r\n  },\r\n  column: {\r\n    type: Object as PropType<ColumnWithKey>,\r\n    default: () => ({}),\r\n  },\r\n  colIndex: {\r\n    type: Number,\r\n    default: -1,\r\n  },\r\n  fixed: {\r\n    type: String as PropType<'left' | 'right' | undefined>,\r\n    default: null,\r\n  },\r\n})\r\n\r\nconst { state, getters, mutations } = inject(TABLE_STORE)!\r\nconst tableActions = inject(TABLE_ACTIONS)!\r\n\r\nconst nh = useNameHelper('table')\r\nconst icons = useIcons()\r\nconst { isRtl } = useRtl()\r\n\r\nconst contentHeight = ref(0)\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nconst inLast = computed(() => {\r\n  return props.column.index + cellSpan.value.colSpan >= state.columns.length\r\n})\r\nconst className = computed(() => {\r\n  let customClass = null\r\n\r\n  if (typeof state.cellClass === 'function') {\r\n    customClass = state.cellClass({\r\n      row: props.row.data,\r\n      rowIndex: props.rowIndex,\r\n      column: props.column,\r\n      columnIndex: props.column.index,\r\n    })\r\n  } else {\r\n    customClass = state.cellClass\r\n  }\r\n\r\n  const typed = columnTypes.includes((props.column as TableTypeColumn).type)\r\n\r\n  return [\r\n    nh.be('cell'),\r\n    {\r\n      [nh.bem('cell', 'typed')]: typed,\r\n      [nh.bem('cell', 'center')]: typed || props.column.textAlign === 'center',\r\n      [nh.bem('cell', 'right')]: props.column.textAlign === 'right',\r\n      [nh.bem('cell', 'last')]: inLast.value,\r\n    },\r\n    props.column.class,\r\n    customClass,\r\n  ]\r\n})\r\nconst columns = computed(() => {\r\n  return props.fixed === 'left'\r\n    ? state.leftFixedColumns\r\n    : props.fixed === 'right'\r\n      ? state.rightFixedColumns\r\n      : state.normalColumns\r\n})\r\nconst cellSpan = computed(() => {\r\n  return (\r\n    state.cellSpanMap\r\n      .get(props.fixed || 'default')!\r\n      .get(`${props.row.index},${props.column.index}`) || { colSpan: 1, rowSpan: 1 }\r\n  )\r\n})\r\nconst customStyle = computed(() => {\r\n  if (typeof state.cellStyle === 'function') {\r\n    return state.cellStyle({\r\n      row: props.row.data,\r\n      rowIndex: props.rowIndex,\r\n      column: props.column,\r\n      columnIndex: props.column.index,\r\n    })\r\n  }\r\n\r\n  return state.cellStyle\r\n})\r\nconst style = computed(() => {\r\n  const totalWidths =\r\n    props.fixed === 'left'\r\n      ? getters.leftFixedWidths\r\n      : props.fixed === 'right'\r\n        ? getters.rightFixedWidths\r\n        : getters.normalWidths\r\n  const { colSpan, rowSpan } = cellSpan.value\r\n  const noFixed = !getters.hasFixedColumn\r\n  const padLeft = noFixed || columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\r\n  const padRight =\r\n    noFixed || getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\r\n  const width = totalWidths[props.colIndex + colSpan] - totalWidths[props.colIndex]\r\n\r\n  let height: number | undefined\r\n\r\n  if (rowSpan > 1 && state.heightBITree) {\r\n    height =\r\n      state.heightBITree.sum(props.row.listIndex + rowSpan) -\r\n      state.heightBITree.sum(props.row.listIndex)\r\n  }\r\n\r\n  return [\r\n    props.column.style || '',\r\n    customStyle.value,\r\n    {\r\n      display: !colSpan || !rowSpan ? 'none' : undefined,\r\n      width: `${(props.column.index ? 0 : padLeft) + (inLast.value ? padRight : 0) + width}px`,\r\n      height: height ? `${height}px` : undefined,\r\n      visibility: props.column.fixed && !props.fixed ? 'hidden' : undefined,\r\n      borderRightWidth:\r\n        !state.border && colSpan > 1 && props.colIndex + colSpan >= totalWidths.length - 1\r\n          ? 0\r\n          : undefined,\r\n      borderBottomWidth:\r\n        rowSpan > 1 && props.rowIndex + rowSpan >= getters.processedData.length ? 0 : undefined,\r\n      transform: `translate3d(${isRtl.value ? '-' : ''}${\r\n        (props.column.index ? padLeft : 0) + totalWidths[props.colIndex]\r\n      }px, 0, 0)`,\r\n    },\r\n  ]\r\n})\r\nconst attrs = computed(() => {\r\n  let customAttrs: Record<string, any>\r\n\r\n  if (typeof state.cellAttrs === 'function') {\r\n    customAttrs = state.cellAttrs({\r\n      row: props.row.data,\r\n      rowIndex: props.rowIndex,\r\n      column: props.column,\r\n      columnIndex: props.colIndex,\r\n    })\r\n  } else {\r\n    customAttrs = state.cellAttrs\r\n  }\r\n\r\n  return { ...(props.column.attrs || {}), ...(customAttrs || {}) }\r\n})\r\nconst formatter = computed(() => {\r\n  return isFunction(props.column.formatter) ? props.column.formatter : noopFormatter\r\n})\r\nconst isTreeColumn = computed(() => {\r\n  return (\r\n    getters.usingTree &&\r\n    (getters.indentedColumn ? props.column.key === getters.indentedColumn.key : props.column.first)\r\n  )\r\n})\r\n\r\nwatchEffect(() => {\r\n  if (isTypeColumn(props.column)) return\r\n\r\n  mutations.setCellHeight(props.row.key, props.column.key, contentHeight.value)\r\n})\r\n\r\nfunction isSelectionColumn(column: unknown): column is TableSelectionColumn {\r\n  return (column as TableTypeColumn).type === 'selection'\r\n}\r\n\r\nfunction isOrderColumn(column: unknown): column is TableOrderColumn {\r\n  return (column as TableTypeColumn).type === 'order'\r\n}\r\n\r\nfunction isExpandColumn(column: unknown): column is TableExpandColumn {\r\n  return (column as TableTypeColumn).type === 'expand'\r\n}\r\n\r\nfunction isDragColumn(column: unknown): column is TableDragColumn {\r\n  return (column as TableTypeColumn).type === 'drag'\r\n}\r\n\r\nfunction isTypeColumn(column: unknown): column is TableTypeColumn {\r\n  return (\r\n    isSelectionColumn(column) ||\r\n    isOrderColumn(column) ||\r\n    isExpandColumn(column) ||\r\n    isDragColumn(column)\r\n  )\r\n}\r\n\r\nfunction buildEventPayload(event: Event) {\r\n  return {\r\n    row: props.row.data,\r\n    key: props.row.key,\r\n    rowIndex: props.rowIndex,\r\n    column: props.column,\r\n    columnIndex: props.colIndex,\r\n    event,\r\n  }\r\n}\r\n\r\nfunction handleMouseEnter(event: MouseEvent) {\r\n  tableActions?.emitCellEvent('Enter', buildEventPayload(event))\r\n}\r\n\r\nfunction handleMouseLeave(event: MouseEvent) {\r\n  tableActions?.emitCellEvent('Leave', buildEventPayload(event))\r\n}\r\n\r\nfunction handleClick(event: MouseEvent) {\r\n  tableActions?.emitCellEvent('Click', buildEventPayload(event))\r\n}\r\n\r\nfunction handleDblclick(event: MouseEvent) {\r\n  tableActions?.emitCellEvent('Dblclick', buildEventPayload(event))\r\n}\r\n\r\nfunction handleContextmenu(event: MouseEvent) {\r\n  tableActions?.emitCellEvent('Contextmenu', buildEventPayload(event))\r\n}\r\n\r\nfunction handleCheckRow(row: TableRowState, event: MouseEvent, single = false) {\r\n  if (!getters.disableCheckRows.has(row.key)) {\r\n    const checked = !row.checked\r\n    const { data, key, index } = row\r\n\r\n    mutations.handleCheck(key, checked, single)\r\n    tableActions.emitRowCheck({ row: data, key, index, event, checked })\r\n  }\r\n}\r\n\r\nfunction handleExpandRow(row: TableRowState, event: MouseEvent) {\r\n  if (!getters.disableExpandRows.has(row.key)) {\r\n    const expanded = !row.expanded\r\n    const { data, key, index } = row\r\n\r\n    mutations.setRowProp(key, 'expandAnimate', true)\r\n    nextTick(() => {\r\n      mutations.handleExpand(key, expanded)\r\n      tableActions.emitRowExpand({ row: data, key, index, event, expanded })\r\n    })\r\n  }\r\n}\r\n\r\nfunction handleDragRow(row: TableRowState) {\r\n  if (!getters.disableDragRows.has(row.key)) {\r\n    mutations.handleDrag(row.key, true)\r\n  }\r\n}\r\n\r\nfunction handleExpandTree(row: TableRowState, event: MouseEvent) {\r\n  if (!row.children?.length) return\r\n\r\n  const expanded = !row.treeExpanded\r\n  const { data, key, index } = row\r\n\r\n  tableActions.runInLocked()\r\n  mutations.setTreeExpanded(row.key, expanded)\r\n  tableActions.emitRowExpand({ row: data, key, index, event, expanded })\r\n}\r\n\r\nfunction handleCellResize(entry: ResizeObserverEntry) {\r\n  contentHeight.value =\r\n    (entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height) + state.borderWidth\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    v-bind=\"attrs\"\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"cell\"\r\n    :scope=\"column.first ? 'row' : undefined\"\r\n    :colspan=\"cellSpan.colSpan !== 1 ? cellSpan.colSpan : undefined\"\r\n    :rowspan=\"cellSpan.rowSpan !== 1 ? cellSpan.rowSpan : undefined\"\r\n    :style=\"style\"\r\n    @mouseenter=\"handleMouseEnter\"\r\n    @mouseleave=\"handleMouseLeave\"\r\n    @click=\"handleClick\"\r\n    @dblclick=\"handleDblclick\"\r\n    @contextmenu=\"handleContextmenu\"\r\n  >\r\n    <div\r\n      v-if=\"column.index === 0\"\r\n      :class=\"nh.be('side-pad')\"\r\n      role=\"none\"\r\n      aria-hidden\r\n    ></div>\r\n    <div v-if=\"isTypeColumn(column)\" :class=\"nh.be('content')\">\r\n      <template v-if=\"isSelectionColumn(column)\">\r\n        <Radio\r\n          v-if=\"column.singleSelect\"\r\n          inherit\r\n          :label=\"row.key\"\r\n          :value=\"row.checked ? row.key : null\"\r\n          :class=\"nh.be('selection')\"\r\n          :size=\"column.selectionSize || 'default'\"\r\n          :disabled=\"getters.disableCheckRows.has(row.key)\"\r\n          @click.prevent.stop=\"handleCheckRow(row, $event, true)\"\r\n        ></Radio>\r\n        <Checkbox\r\n          v-else\r\n          inherit\r\n          :class=\"nh.be('selection')\"\r\n          :checked=\"row.checked\"\r\n          :size=\"column.selectionSize || 'default'\"\r\n          :disabled=\"getters.disableCheckRows.has(row.key)\"\r\n          :partial=\"row.partial\"\r\n          :control=\"!!row.children?.length\"\r\n          @click.prevent.stop=\"handleCheckRow(row, $event)\"\r\n        ></Checkbox>\r\n      </template>\r\n      <span v-else-if=\"isOrderColumn(column)\" :class=\"nh.be('order')\">\r\n        {{ column.orderLabel && column.orderLabel(column.truthIndex ? row.index : rowIndex) }}\r\n      </span>\r\n      <template v-else-if=\"isExpandColumn(column)\">\r\n        <button\r\n          v-if=\"!getters.disableExpandRows.has(row.key)\"\r\n          type=\"button\"\r\n          :class=\"{\r\n            [nh.be('expand')]: true,\r\n            [nh.bem('expand', 'active')]: row.expanded\r\n          }\"\r\n          @click.stop=\"handleExpandRow(row, $event)\"\r\n        >\r\n          <TableIcon name=\"expand\" :origin=\"icons.angleRight\"></TableIcon>\r\n        </button>\r\n      </template>\r\n      <template v-else-if=\"isDragColumn(column)\">\r\n        <button\r\n          v-if=\"!getters.disableDragRows.has(row.key)\"\r\n          type=\"button\"\r\n          :class=\"nh.be('dragger')\"\r\n          @mousedown=\"handleDragRow(row)\"\r\n        >\r\n          <TableIcon name=\"dragger\" :origin=\"icons.dragger\"></TableIcon>\r\n        </button>\r\n      </template>\r\n    </div>\r\n    <ResizeObserver v-else :on-resize=\"handleCellResize\">\r\n      <span :class=\"nh.be('content')\">\r\n        <div v-if=\"isTreeColumn\" :class=\"nh.be('tree-append')\">\r\n          <span\r\n            :class=\"nh.be('pad')\"\r\n            :style=\"{\r\n              [nh.cv('row-depth')]: row.depth\r\n            }\"\r\n          ></span>\r\n          <button\r\n            type=\"button\"\r\n            :class=\"[\r\n              nh.be('tree-expand'),\r\n              !row.children?.length && nh.bem('tree-expand', 'hidden')\r\n            ]\"\r\n            @click=\"handleExpandTree(row, $event)\"\r\n          >\r\n            <TableIcon v-if=\"row.treeExpanded\" name=\"minus\" :origin=\"icons.minusSquare\"></TableIcon>\r\n            <TableIcon v-else name=\"plus\" :origin=\"icons.plusSquare\"></TableIcon>\r\n          </button>\r\n        </div>\r\n        <Ellipsis\r\n          v-if=\"column.ellipsis ?? state.ellipsis\"\r\n          inherit\r\n          :class=\"nh.be('ellipsis')\"\r\n          :tip-disabled=\"state.barScrolling\"\r\n          :tooltip-theme=\"state.tooltipTheme\"\r\n          :tip-max-width=\"state.tooltipWidth\"\r\n        >\r\n          <Renderer\r\n            v-if=\"isFunction(column.renderer)\"\r\n            :renderer=\"column.renderer\"\r\n            :data=\"{ row: row.data, rowIndex, column, columnIndex: column.index }\"\r\n          ></Renderer>\r\n          <template v-else-if=\"isFunction(column.accessor)\">\r\n            {{ formatter(column.accessor(row.data, rowIndex)) }}\r\n          </template>\r\n          <template v-else>\r\n            {{ formatter(row.data[column.key]) }}\r\n          </template>\r\n        </Ellipsis>\r\n        <template v-else>\r\n          <Renderer\r\n            v-if=\"isFunction(column.renderer)\"\r\n            :renderer=\"column.renderer\"\r\n            :data=\"{ row: row.data, rowIndex, column, columnIndex: column.index }\"\r\n          ></Renderer>\r\n          <template v-else-if=\"isFunction(column.accessor)\">\r\n            {{ formatter(column.accessor(row.data, rowIndex)) }}\r\n          </template>\r\n          <template v-else>\r\n            {{ formatter(row.data[column.key]) }}\r\n          </template>\r\n        </template>\r\n      </span>\r\n    </ResizeObserver>\r\n    <div\r\n      v-if=\"inLast\"\r\n      :class=\"[nh.be('side-pad'), nh.bem('side-pad', 'right')]\"\r\n      role=\"none\"\r\n      aria-hidden\r\n    ></div>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed, inject, toRef } from 'vue'\r\n\r\nimport TableCell from './table-cell.vue'\r\nimport TableRow from './table-row.vue'\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { getLast } from '@vexip-ui/utils'\r\nimport { TABLE_STORE } from './symbol'\r\n\r\nimport type { PropType } from 'vue'\r\n\r\ndefineOptions({ name: 'TableBody' })\r\n\r\nconst props = defineProps({\r\n  fixed: {\r\n    type: String as PropType<'left' | 'right' | undefined>,\r\n    default: null,\r\n  },\r\n})\r\n\r\nconst { state, getters } = inject(TABLE_STORE)!\r\n\r\nconst nh = useNameHelper('table')\r\nconst locale = toRef(state, 'locale')\r\n\r\nconst columns = computed(() => {\r\n  return props.fixed === 'left'\r\n    ? state.leftFixedColumns\r\n    : props.fixed === 'right'\r\n      ? state.rightFixedColumns\r\n      : state.normalColumns\r\n})\r\nconst data = computed(() => (state.virtual ? state.virtualData : getters.processedData))\r\nconst style = computed(() => {\r\n  const width =\r\n    props.fixed === 'left'\r\n      ? getLast(getters.leftFixedWidths)\r\n      : props.fixed === 'right'\r\n        ? getLast(getters.rightFixedWidths)\r\n        : getLast(getters.normalWidths)\r\n  const padLeft = columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\r\n  const padRight = getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\r\n\r\n  return {\r\n    [nh.cv('expanded-fix-width')]:\r\n      props.fixed === 'right' && width ? `${width + padLeft + padRight}px` : '0px',\r\n    minWidth: width && `${width + padLeft + padRight}px`,\r\n    minHeight: `${state.totalHeight}px`,\r\n  }\r\n})\r\nconst emptyStyle = computed(() => {\r\n  const { rowHeight, rowMinHeight } = state\r\n\r\n  return {\r\n    minHeight: `${rowHeight || rowMinHeight}px`,\r\n  }\r\n})\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"nh.be('body')\" role=\"rowgroup\" :style=\"style\">\r\n    <template v-if=\"data.length\">\r\n      <TableRow\r\n        v-for=\"(row, index) in data\"\r\n        :key=\"index\"\r\n        :row=\"row\"\r\n        :index=\"row.listIndex\"\r\n        :fixed=\"fixed\"\r\n        :aria-rowindex=\"row.index\"\r\n      >\r\n        <TableCell\r\n          v-for=\"(column, colIndex) in columns\"\r\n          :key=\"colIndex\"\r\n          :row=\"row\"\r\n          :row-index=\"row.listIndex\"\r\n          :column=\"column\"\r\n          :col-index=\"colIndex\"\r\n          :fixed=\"fixed\"\r\n          :aria-colindex=\"colIndex\"\r\n        ></TableCell>\r\n      </TableRow>\r\n    </template>\r\n    <div v-else :class=\"nh.be('empty')\" :style=\"emptyStyle\">\r\n      <slot name=\"empty\" :is-fixed=\"!!fixed\">\r\n        <template v-if=\"!fixed\">\r\n          {{ locale.empty }}\r\n        </template>\r\n      </slot>\r\n    </div>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Ellipsis } from '@/components/ellipsis'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport { computed, inject, ref } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { useRtl } from '@vexip-ui/hooks'\r\nimport { getLast, isFunction } from '@vexip-ui/utils'\r\nimport { TABLE_ACTIONS, TABLE_STORE, columnTypes } from './symbol'\r\n\r\nimport type { PropType, StyleValue } from 'vue'\r\nimport type { ColumnWithKey, SummaryWithKey, TableRowState, TableTypeColumn } from './symbol'\r\n\r\ndefineOptions({ name: 'TableFootCell' })\r\n\r\nconst props = defineProps({\r\n  row: {\r\n    type: Object as PropType<TableRowState>,\r\n    default: () => ({}),\r\n  },\r\n  column: {\r\n    type: Object as PropType<ColumnWithKey>,\r\n    default: () => ({}),\r\n  },\r\n  colIndex: {\r\n    type: Number,\r\n    default: -1,\r\n  },\r\n  summary: {\r\n    type: Object as PropType<SummaryWithKey>,\r\n    default: () => ({}),\r\n  },\r\n  summaryIndex: {\r\n    type: Number,\r\n    default: -1,\r\n  },\r\n  fixed: {\r\n    type: String as PropType<'left' | 'right' | undefined>,\r\n    default: null,\r\n  },\r\n  above: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n})\r\n\r\nconst { state, getters, mutations } = inject(TABLE_STORE)!\r\nconst tableActions = inject(TABLE_ACTIONS)!\r\n\r\nconst nh = useNameHelper('table')\r\nconst { isRtl } = useRtl()\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nconst inLast = computed(() => {\r\n  return props.column.index + cellSpan.value.colSpan >= state.columns.length\r\n})\r\nconst columns = computed(() => {\r\n  return props.fixed === 'left'\r\n    ? state.leftFixedColumns\r\n    : props.fixed === 'right'\r\n      ? state.rightFixedColumns\r\n      : state.normalColumns\r\n})\r\n// We use 'a' and 'b' to distinguish above and below\r\nconst prefix = computed(() => (props.above ? 'af' : 'bf'))\r\nconst summaries = computed(() => (props.above ? state.aboveSummaries : state.belowSummaries))\r\nconst heights = computed(() => (props.above ? getters.topFixedHeights : getters.bottomFixedHeights))\r\nconst className = computed(() => {\r\n  let customClass = null\r\n\r\n  if (typeof state.footClass === 'function') {\r\n    customClass = state.footClass({\r\n      column: props.column,\r\n      columnIndex: props.column.index,\r\n      summary: props.summary,\r\n      summaryIndex: props.summaryIndex,\r\n    })\r\n  } else {\r\n    customClass = state.footClass\r\n  }\r\n\r\n  const typed = columnTypes.includes((props.column as TableTypeColumn).type)\r\n\r\n  return [\r\n    nh.be('foot-cell'),\r\n    {\r\n      [nh.bem('foot-cell', 'typed')]: typed,\r\n      [nh.bem('foot-cell', 'center')]: typed || props.column.textAlign === 'center',\r\n      [nh.bem('foot-cell', 'right')]: props.column.textAlign === 'right',\r\n      [nh.bem('foot-cell', 'last')]: inLast.value,\r\n    },\r\n    props.column.class,\r\n    customClass,\r\n  ]\r\n})\r\nconst cellSpan = computed(() => {\r\n  return (\r\n    state.cellSpanMap\r\n      .get(props.fixed || 'default')!\r\n      .get(`${prefix.value}${props.summaryIndex},${props.column.index}`) || {\r\n      colSpan: 1,\r\n      rowSpan: 1,\r\n    }\r\n  )\r\n})\r\nconst customStyle = computed(() => {\r\n  if (typeof state.footStyle === 'function') {\r\n    return state.footStyle({\r\n      column: props.column,\r\n      columnIndex: props.column.index,\r\n      summary: props.summary,\r\n      summaryIndex: props.summaryIndex,\r\n    })\r\n  }\r\n\r\n  return state.cellStyle\r\n})\r\nconst style = computed(() => {\r\n  const totalWidths =\r\n    props.fixed === 'left'\r\n      ? getters.leftFixedWidths\r\n      : props.fixed === 'right'\r\n        ? getters.rightFixedWidths\r\n        : getters.normalWidths\r\n  const { colSpan, rowSpan } = cellSpan.value\r\n  const padLeft = columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\r\n  const padRight = getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\r\n  const width = totalWidths[props.colIndex + colSpan] - totalWidths[props.colIndex]\r\n\r\n  let height: number | undefined\r\n\r\n  if (rowSpan > 1) {\r\n    height = heights.value[props.summaryIndex + rowSpan] - heights.value[props.summaryIndex]\r\n  }\r\n\r\n  return [\r\n    props.column.style || '',\r\n    customStyle.value,\r\n    {\r\n      display: !colSpan || !rowSpan ? 'none' : undefined,\r\n      width: `${(props.column.index ? 0 : padLeft) + (inLast.value ? padRight : 0) + width}px`,\r\n      height: height ? `${height}px` : undefined,\r\n      visibility: props.column.fixed && !props.fixed ? 'hidden' : undefined,\r\n      borderRightWidth:\r\n        !state.border && colSpan > 1 && props.colIndex + colSpan >= totalWidths.length - 1\r\n          ? 0\r\n          : undefined,\r\n      borderBottomWidth:\r\n        rowSpan > 1 && props.summaryIndex + rowSpan >= summaries.value.length ? 0 : undefined,\r\n      transform: `translate3d(${isRtl.value ? '-' : ''}${\r\n        (props.column.index ? padLeft : 0) + totalWidths[props.colIndex]\r\n      }px, 0, 0)`,\r\n    },\r\n  ] as StyleValue\r\n})\r\nconst attrs = computed(() => {\r\n  let customAttrs: Record<string, any>\r\n\r\n  if (typeof state.footAttrs === 'function') {\r\n    customAttrs = state.footAttrs({\r\n      column: props.column,\r\n      columnIndex: props.column.index,\r\n      summary: props.summary,\r\n      summaryIndex: props.summaryIndex,\r\n    })\r\n  } else {\r\n    customAttrs = state.footAttrs\r\n  }\r\n\r\n  return { ...(props.column.attrs || {}), ...(customAttrs || {}) }\r\n})\r\nconst summaryData = computed(() => getters.summaryData.get(props.column.key))\r\n\r\nfunction buildEventPayload(event: Event) {\r\n  return {\r\n    column: props.column,\r\n    columnIndex: props.column.index,\r\n    summary: props.summary,\r\n    summaryIndex: props.summaryIndex,\r\n    event,\r\n  }\r\n}\r\n\r\nfunction handleMouseEnter(event: MouseEvent) {\r\n  tableActions?.emitFootEvent('Enter', buildEventPayload(event))\r\n}\r\n\r\nfunction handleMouseLeave(event: MouseEvent) {\r\n  tableActions?.emitFootEvent('Leave', buildEventPayload(event))\r\n}\r\n\r\nfunction handleClick(event: MouseEvent) {\r\n  tableActions?.emitFootEvent('Click', buildEventPayload(event))\r\n}\r\n\r\nfunction handleDblclick(event: MouseEvent) {\r\n  tableActions?.emitFootEvent('Dblclick', buildEventPayload(event))\r\n}\r\n\r\nfunction handleContextmenu(event: MouseEvent) {\r\n  tableActions?.emitFootEvent('Contextmenu', buildEventPayload(event))\r\n}\r\n\r\nfunction handleCellResize(entry: ResizeObserverEntry) {\r\n  mutations.setCellHeight(\r\n    props.row.key,\r\n    props.column.key,\r\n    (entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height) + state.borderWidth,\r\n  )\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    v-bind=\"attrs\"\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"cell\"\r\n    :scope=\"column.first ? 'row' : undefined\"\r\n    :colspan=\"cellSpan.colSpan !== 1 ? cellSpan.colSpan : undefined\"\r\n    :rowspan=\"cellSpan.rowSpan !== 1 ? cellSpan.rowSpan : undefined\"\r\n    :style=\"style\"\r\n    @mouseenter=\"handleMouseEnter\"\r\n    @mouseleave=\"handleMouseLeave\"\r\n    @click=\"handleClick\"\r\n    @dblclick=\"handleDblclick\"\r\n    @contextmenu=\"handleContextmenu\"\r\n  >\r\n    <div\r\n      v-if=\"column.index === 0\"\r\n      :class=\"nh.be('side-pad')\"\r\n      role=\"none\"\r\n      aria-hidden\r\n    ></div>\r\n    <ResizeObserver\r\n      v-if=\"isFunction(summary.renderer)\"\r\n      :disabled=\"column.ellipsis ?? state.ellipsis\"\r\n      :on-resize=\"handleCellResize\"\r\n    >\r\n      <span :class=\"nh.be('content')\">\r\n        <Ellipsis\r\n          v-if=\"column.ellipsis ?? state.ellipsis\"\r\n          inherit\r\n          :class=\"nh.be('ellipsis')\"\r\n          :tooltip-theme=\"state.tooltipTheme\"\r\n          :tip-max-width=\"state.tooltipWidth\"\r\n        >\r\n          <Renderer\r\n            :renderer=\"summary.renderer\"\r\n            :data=\"{\r\n              column,\r\n              index: column.index,\r\n              rows: state.data,\r\n              meta: summaryData\r\n            }\"\r\n          ></Renderer>\r\n        </Ellipsis>\r\n        <Renderer\r\n          v-else\r\n          :renderer=\"summary.renderer\"\r\n          :data=\"{\r\n            column,\r\n            index: column.index,\r\n            rows: state.data,\r\n            meta: summaryData\r\n          }\"\r\n        ></Renderer>\r\n      </span>\r\n    </ResizeObserver>\r\n    <div\r\n      v-if=\"inLast\"\r\n      :class=\"[nh.be('side-pad'), nh.bem('side-pad', 'right')]\"\r\n      role=\"none\"\r\n      aria-hidden\r\n    ></div>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed, inject } from 'vue'\r\n\r\nimport TableFootCell from './table-foot-cell.vue'\r\nimport TableRow from './table-row.vue'\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { getLast } from '@vexip-ui/utils'\r\nimport { TABLE_STORE } from './symbol'\r\n\r\nimport type { PropType } from 'vue'\r\n\r\ndefineOptions({ name: 'TableFoot' })\r\n\r\nconst props = defineProps({\r\n  fixed: {\r\n    type: String as PropType<'left' | 'right' | undefined>,\r\n    default: null,\r\n  },\r\n  above: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n})\r\n\r\nconst { state, getters, mutations } = inject(TABLE_STORE)!\r\n\r\nconst nh = useNameHelper('table')\r\n\r\nconst columns = computed(() => {\r\n  return props.fixed === 'left'\r\n    ? state.leftFixedColumns\r\n    : props.fixed === 'right'\r\n      ? state.rightFixedColumns\r\n      : state.normalColumns\r\n})\r\nconst summaries = computed(() => (props.above ? state.aboveSummaries : state.belowSummaries))\r\nconst summaryData = computed(() => {\r\n  return summaries.value.map(summary => {\r\n    const key = mutations.buildSummaryKey(summary.key)\r\n    const row = state.rowMap.get(key) || mutations.createMinRowState(key)\r\n\r\n    return { summary, row }\r\n  })\r\n})\r\nconst className = computed(() => {\r\n  return [nh.be('foot'), nh.bem('foot', props.above ? 'above' : 'below')]\r\n})\r\nconst style = computed(() => {\r\n  const width =\r\n    props.fixed === 'left'\r\n      ? getLast(getters.leftFixedWidths)\r\n      : props.fixed === 'right'\r\n        ? getLast(getters.rightFixedWidths)\r\n        : getLast(getters.normalWidths)\r\n  const padLeft = columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\r\n  const padRight = getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\r\n\r\n  return {\r\n    minWidth: width && `${width + padLeft + padRight}px`,\r\n  }\r\n})\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"className\" role=\"rowgroup\" :style=\"style\">\r\n    <TableRow\r\n      v-for=\"({ row, summary }, index) in summaryData\"\r\n      :key=\"row.key\"\r\n      is-foot\r\n      :fixed=\"fixed\"\r\n      :row=\"row\"\r\n      :aria-rowindex=\"index\"\r\n    >\r\n      <TableFootCell\r\n        v-for=\"(column, colIndex) in columns\"\r\n        :key=\"colIndex\"\r\n        :row=\"row\"\r\n        :column=\"column\"\r\n        :col-index=\"colIndex\"\r\n        :summary=\"summary\"\r\n        :summary-index=\"index\"\r\n        :fixed=\"fixed\"\r\n        :above=\"above\"\r\n        :aria-colindex=\"colIndex\"\r\n      ></TableFootCell>\r\n    </TableRow>\r\n  </div>\r\n</template>\r\n","import { isNull, toFalse } from '@vexip-ui/utils'\r\n\r\nexport interface CascadedNode {\r\n  checked: boolean,\r\n  partial: boolean,\r\n  parent?: string | number | symbol,\r\n  children: CascadedNode[],\r\n}\r\n\r\nexport function useCascadedChecked<T extends CascadedNode>(options: {\r\n  getNode: (key: string | number | symbol) => T | null | undefined | void,\r\n  disableNode?: (node: T) => boolean,\r\n}) {\r\n  function updateCheckedUpward(key: string | number | symbol) {\r\n    let node = options.getNode(key)\r\n\r\n    if (!node) return\r\n\r\n    while (!isNull(node.parent)) {\r\n      const parentId = node.parent\r\n      const parent = options.getNode(parentId)\r\n\r\n      if (!parent) break\r\n\r\n      if (node.checked === parent.checked && node.partial === parent.partial) {\r\n        break\r\n      }\r\n\r\n      if (node.checked) {\r\n        parent.checked = parent.children.every(item => item.checked)\r\n        parent.partial = !parent.checked\r\n      } else {\r\n        parent.checked = false\r\n        parent.partial = parent.children.some(item => item.checked || item.partial)\r\n      }\r\n\r\n      node = parent\r\n    }\r\n  }\r\n\r\n  function updateCheckedDown(key: string | number | symbol) {\r\n    const originNode = options.getNode(key)\r\n\r\n    if (!originNode) return\r\n\r\n    const disable = typeof options.disableNode === 'function' ? options.disableNode : toFalse\r\n    const checked = originNode.checked\r\n    const partial = originNode.partial\r\n\r\n    const loop = [...(originNode.children as T[])]\r\n\r\n    let node: T\r\n\r\n    while (loop.length) {\r\n      node = loop.shift()!\r\n\r\n      if (disable(node)) continue\r\n\r\n      node.checked = checked\r\n      node.partial = partial\r\n\r\n      if (node.children.length) {\r\n        loop.push(...(node.children as T[]))\r\n      }\r\n    }\r\n  }\r\n\r\n  return {\r\n    updateCheckedUpward,\r\n    updateCheckedDown,\r\n  }\r\n}\r\n","import { useCascadedChecked } from '@/components/tree/hooks'\r\n\r\nimport { computed, reactive, watchEffect } from 'vue'\r\n\r\nimport {\r\n  boundRange,\r\n  createBITree,\r\n  debounceMinor,\r\n  deepClone,\r\n  getLast,\r\n  isNull,\r\n  mapTree,\r\n  sortByProps,\r\n  toFalse,\r\n  toFixed,\r\n  toNumber,\r\n  walkTree,\r\n} from '@vexip-ui/utils'\r\nimport { DEFAULT_KEY_FIELD, TABLE_FOOT_PREFIX, TABLE_HEAD_PREFIX, columnTypes } from './symbol'\r\n\r\nimport type { ClassType, LocaleConfig, StyleType } from '@vexip-ui/config'\r\nimport type { TooltipTheme } from '@/components/tooltip'\r\nimport type {\r\n  CellSpanResult,\r\n  ColumnCellSpanFn,\r\n  ColumnGroupWithKey,\r\n  ColumnRawWithKey,\r\n  ColumnWithKey,\r\n  Data,\r\n  ExpandRenderFn,\r\n  Key,\r\n  ParsedFilterOptions,\r\n  ParsedTableSorterOptions,\r\n  StoreOptions,\r\n  StoreState,\r\n  SummaryCellSpanFn,\r\n  SummaryWithKey,\r\n  TableCellPropFn,\r\n  TableCellSpanFn,\r\n  TableColResizeType,\r\n  TableColumnOptions,\r\n  TableColumnRawOptions,\r\n  TableColumnType,\r\n  TableDragColumn,\r\n  TableExpandColumn,\r\n  TableFilterOptions,\r\n  TableFootPropFn,\r\n  TableHeadPropFn,\r\n  TableKeyConfig,\r\n  TableRowPropFn,\r\n  TableRowState,\r\n  TableSelectionColumn,\r\n  TableSorterOptions,\r\n  TableSummaryData,\r\n  TableSummaryOptions,\r\n} from './symbol'\r\n\r\nconst defaultSummaryData = Object.freeze<TableSummaryData>({\r\n  sum: NaN,\r\n  min: NaN,\r\n  max: NaN,\r\n})\r\n\r\nlet indexId = 1\r\n\r\nfunction getIndexId() {\r\n  return `__vxp-table-key-${indexId++}`\r\n}\r\n\r\nfunction defaultIndexLabel(index: number) {\r\n  return index + 1\r\n}\r\n\r\nconst COLUMN_DEFAULT_WIDTH = 100\r\nconst COLUMN_DEFAULT_MIN_WIDTH = 100\r\n\r\nexport function useStore(options: StoreOptions) {\r\n  const state = reactive({\r\n    ...options,\r\n    columns: [],\r\n    normalColumns: [],\r\n    allColumns: [],\r\n    summaries: [],\r\n    data: [],\r\n    dataKey: options.dataKey ?? DEFAULT_KEY_FIELD,\r\n    rowData: [],\r\n    treeRowData: [],\r\n    width: 0,\r\n    rightFixedColumns: [],\r\n    leftFixedColumns: [],\r\n    aboveSummaries: [],\r\n    belowSummaries: [],\r\n    rowMinHeight: options.rowMinHeight || 36,\r\n    rowDraggable: !!options.rowDraggable,\r\n    columnMap: new Map(),\r\n    rowMap: new Map(),\r\n    summaryMap: new Map(),\r\n    idMaps: new WeakMap(),\r\n    checkedAll: false,\r\n    partial: false,\r\n    widths: new Map(),\r\n    sorters: new Map(),\r\n    filters: new Map(),\r\n    resized: new Set(),\r\n    bodyYScroll: 0,\r\n    bodyXScroll: 0,\r\n    padTop: 0,\r\n    startRow: 0,\r\n    endRow: 0,\r\n    dragging: false,\r\n    heightBITree: null!,\r\n    virtualData: [],\r\n    totalHeight: options.rowMinHeight * options.data.length,\r\n    colResizing: false,\r\n    resizeLeft: 0,\r\n    cellSpanMap: new Map(),\r\n    collapseMap: new Map(),\r\n    sidePadding: options.sidePadding || [0, 0],\r\n    locked: false,\r\n    barScrolling: false,\r\n    heightTrigger: 0,\r\n    hoveredRowKey: null as Key | null,\r\n  }) as StoreState\r\n\r\n  setColumns(options.columns)\r\n  setSummaries(options.summaries)\r\n  setData(options.data)\r\n\r\n  const userData = computed(() => {\r\n    return typeof state.dataFilter === 'function'\r\n      ? state.rowData.filter(row => state.dataFilter(row.data))\r\n      : state.rowData\r\n  })\r\n  const filteredData = computed(() => {\r\n    return state.customFilter\r\n      ? userData.value\r\n      : filterData(state.filters, userData.value, state.singleFilter)\r\n  })\r\n  const sortedData = computed(() => {\r\n    const data = state.customSorter\r\n      ? filteredData.value\r\n      : sortData(state.sorters, filteredData.value, state.columns, state.singleSorter)\r\n\r\n    return data\r\n  })\r\n  const processedData = computed(() => {\r\n    const data = pageData(state.currentPage, state.pageSize, sortedData.value)\r\n\r\n    for (let i = 0, len = data.length; i < len; ++i) {\r\n      data[i].listIndex = i\r\n      data[i].last = i === len - 1\r\n    }\r\n\r\n    return data\r\n  })\r\n  const visibleKeys = computed(() => new Set(processedData.value.map(row => row.key)))\r\n  const disableCheckRows = computed(() => {\r\n    const rowData = processedData.value\r\n    const selectionColumn = state.columns.find(\r\n      item => (item as TableSelectionColumn).type === 'selection',\r\n    ) as TableSelectionColumn | undefined\r\n    const disableCheckRows = new Set<Key>()\r\n\r\n    if (selectionColumn && typeof selectionColumn.disableRow === 'function') {\r\n      const isDisabled = selectionColumn.disableRow\r\n\r\n      for (let i = 0, len = rowData.length; i < len; ++i) {\r\n        const row = rowData[i]\r\n\r\n        if (isDisabled(row.data)) {\r\n          disableCheckRows.add(row.key)\r\n        }\r\n      }\r\n    }\r\n\r\n    return disableCheckRows\r\n  })\r\n  const disableExpandRows = computed(() => {\r\n    const rowData = processedData.value\r\n    const expandColumn = state.columns.find(\r\n      item => (item as TableExpandColumn).type === 'expand',\r\n    ) as TableExpandColumn | undefined\r\n    const disableExpandRows = new Set<Key>()\r\n\r\n    if (expandColumn && typeof expandColumn.disableRow === 'function') {\r\n      const isDisabled = expandColumn.disableRow\r\n\r\n      for (let i = 0, len = rowData.length; i < len; ++i) {\r\n        const row = rowData[i]\r\n\r\n        if (isDisabled(row.data)) {\r\n          disableExpandRows.add(row.key)\r\n        }\r\n      }\r\n    }\r\n\r\n    return disableExpandRows\r\n  })\r\n  const disableDragRows = computed(() => {\r\n    const rowData = processedData.value\r\n    const dragColumn = state.columns.find(item => (item as TableDragColumn).type === 'drag') as\r\n      | TableDragColumn\r\n      | undefined\r\n    const disableDragRows = new Set<Key>()\r\n\r\n    if (dragColumn && typeof dragColumn.disableRow === 'function') {\r\n      const isDisabled = dragColumn.disableRow\r\n\r\n      for (let i = 0, len = rowData.length; i < len; ++i) {\r\n        const row = rowData[i]\r\n\r\n        if (isDisabled(row.data)) {\r\n          disableDragRows.add(row.key)\r\n        }\r\n      }\r\n    }\r\n\r\n    return disableDragRows\r\n  })\r\n  const usingTree = computed(() => {\r\n    return !state.disabledTree && state.rowData.some(row => row.children?.length)\r\n  })\r\n  const hasDragColumn = computed(() => {\r\n    return !!state.columns.find(column => 'type' in column && column.type === 'drag')\r\n  })\r\n  const rowDragging = computed(() => !!processedData.value.find(row => row.dragging))\r\n  const totalWidths = computed(() => getColumnsWidths())\r\n  const normalWidths = computed(() => getColumnsWidths(state.normalColumns))\r\n  const leftFixedWidths = computed(() => getColumnsWidths(state.leftFixedColumns))\r\n  const rightFixedWidths = computed(() => getColumnsWidths(state.rightFixedColumns))\r\n  const expandColumn = computed(() => {\r\n    return state.columns.find(column => (column as TableExpandColumn).type === 'expand') as\r\n      | TableExpandColumn\r\n      | undefined\r\n  })\r\n  const summaryData = computed(() => {\r\n    const { columns, summaries, data } = state\r\n    const map = new Map<Key, TableSummaryData>()\r\n\r\n    if (!summaries.length) return map\r\n\r\n    for (const column of columns) {\r\n      const key = column.key\r\n\r\n      if (column.type || column.noSummary) {\r\n        map.set(key, defaultSummaryData)\r\n        continue\r\n      }\r\n\r\n      const accessor =\r\n        typeof column.accessor === 'function' ? column.accessor : (data: Data) => data[key]\r\n\r\n      let sum = 0\r\n      let min = Infinity\r\n      let max = -Infinity\r\n      let valid = false\r\n\r\n      for (let i = 0, len = data.length; i < len; ++i) {\r\n        const value = accessor(data[i], i)\r\n        const number = parseFloat(value as string)\r\n\r\n        if (Number.isNaN(number)) continue\r\n\r\n        sum += number\r\n        min = Math.min(min, number)\r\n        max = Math.max(max, number)\r\n        valid = true\r\n      }\r\n\r\n      valid ? map.set(key, { sum, min, max }) : map.set(key, defaultSummaryData)\r\n    }\r\n\r\n    return map\r\n  })\r\n  const topFixedHeights = computed(() => getSummariesHeights(state.aboveSummaries))\r\n  const bottomFixedHeights = computed(() => getSummariesHeights())\r\n  const indentedColumn = computed(() => {\r\n    return state.columns.find(column => !column.type && column.indented)\r\n  })\r\n  const hasFixedColumn = computed(() => {\r\n    return !!(state.leftFixedColumns.length || state.rightFixedColumns.length)\r\n  })\r\n\r\n  const getters = reactive({\r\n    filteredData,\r\n    sortedData,\r\n    processedData,\r\n    visibleKeys,\r\n    disableCheckRows,\r\n    disableExpandRows,\r\n    disableDragRows,\r\n    usingTree,\r\n    hasDragColumn,\r\n    rowDragging,\r\n    totalWidths,\r\n    normalWidths,\r\n    leftFixedWidths,\r\n    rightFixedWidths,\r\n    expandColumn,\r\n    summaryData,\r\n    topFixedHeights,\r\n    bottomFixedHeights,\r\n    indentedColumn,\r\n    hasFixedColumn,\r\n  })\r\n\r\n  const mutations = {\r\n    // 这几个个方法被 deep watch 回调\r\n    // 需要防止在一个微任务内被多次调用\r\n    setColumns: debounceMinor(setColumns),\r\n    // setColumns,\r\n    setSummaries: debounceMinor(setSummaries),\r\n    setData: debounceMinor(setData),\r\n\r\n    // 这个方法被大量的 watch 回调，需要防抖\r\n    updateTotalHeight: debounceMinor(updateTotalHeight),\r\n\r\n    isGroupColumn,\r\n    buildSummaryKey,\r\n    setColumnProp,\r\n    setSummaryProp,\r\n    setDataKey,\r\n    setCurrentPage,\r\n    setPageSize,\r\n    setRowClass,\r\n    setRowStyle,\r\n    setRowAttrs,\r\n    setCellClass,\r\n    setCellStyle,\r\n    setCellAttrs,\r\n    setHeadClass,\r\n    setHeadStyle,\r\n    setHeadAttrs,\r\n    setFootClass,\r\n    setFootStyle,\r\n    setFootAttrs,\r\n    setTableWidth,\r\n    setRowHeight,\r\n    setRowMinHeight,\r\n    setCellHeight,\r\n    setVirtual,\r\n    setRowDraggable,\r\n    setBodyYScroll,\r\n    setBodyXScroll,\r\n    setBorder,\r\n    setStripe,\r\n    setHighlight,\r\n    setRowProp,\r\n    setLocale,\r\n    setTooltipTheme,\r\n    setTooltipWidth,\r\n    setSingleSorter,\r\n    setSingleFilter,\r\n    setDragging,\r\n    setKeyConfig,\r\n    setDisabledTree,\r\n    setNoCascaded,\r\n    setColResizable,\r\n    setCustomSorter,\r\n    setCustomFilter,\r\n    setColumnResizing,\r\n    setResizeLeft,\r\n    setExpandRenderer,\r\n    setCellSpan,\r\n    setSidePadding,\r\n    setBorderWidth,\r\n    setDataFilter,\r\n    setEllipsis,\r\n    setLocked,\r\n    setBarScrolling,\r\n    setHoveredRowKey,\r\n\r\n    handleSort,\r\n    clearSort,\r\n    handleFilter,\r\n    clearFilter,\r\n    toggleFilterItemActive,\r\n    refreshRowIndex,\r\n    handleCheck,\r\n    handleCheckAll,\r\n    clearCheckAll,\r\n    setRenderRows,\r\n    handleExpand,\r\n    handleDrag,\r\n    collectUnderRows,\r\n    setTreeExpanded,\r\n    getParentRow,\r\n    handleColumnResize,\r\n    getCurrentData,\r\n    createMinRowState,\r\n    flatTreeRows,\r\n    refreshRowDepth,\r\n    triggerHeightChange,\r\n    queryRow,\r\n  }\r\n\r\n  watchEffect(() => {\r\n    state.heightBITree = createBITree(\r\n      processedData.value.length,\r\n      state.rowHeight || state.rowMinHeight,\r\n    )\r\n\r\n    state.totalHeight = -1\r\n    updateTotalHeight()\r\n  })\r\n  watchEffect(computeCellSpan)\r\n\r\n  function triggerHeightChange() {\r\n    ++state.heightTrigger\r\n\r\n    if (state.heightTrigger >= Number.MAX_SAFE_INTEGER) {\r\n      state.heightTrigger = 0\r\n    }\r\n  }\r\n\r\n  function getColumnsWidths(columns = state.columns) {\r\n    const widths = state.widths\r\n    const combinedWidths: number[] = [0]\r\n\r\n    let width = 0\r\n\r\n    for (let i = 0, len = columns.length; i < len; ++i) {\r\n      const column = columns[i]\r\n      const key = column.key\r\n      const columnWidth = widths.get(key) || 0\r\n\r\n      width += columnWidth\r\n      combinedWidths.push(width)\r\n    }\r\n\r\n    return combinedWidths\r\n  }\r\n\r\n  function getSummariesHeights(summaries = state.belowSummaries) {\r\n    const rowMap = state.rowMap\r\n    const heights: number[] = [0]\r\n\r\n    let height = 0\r\n\r\n    for (let i = 0, len = summaries.length; i < len; ++i) {\r\n      const summary = summaries[i]\r\n      const key = buildSummaryKey(summary.key)\r\n      const row = rowMap.get(key)\r\n\r\n      if (row) {\r\n        height += row.height || 0\r\n      }\r\n\r\n      heights.push(height)\r\n    }\r\n\r\n    return heights\r\n  }\r\n\r\n  function createMinRowState(key: Key) {\r\n    return { key, cellHeights: {}, height: state.rowHeight ?? state.rowMinHeight } as TableRowState\r\n  }\r\n\r\n  function isGroupColumn(column: any): column is ColumnGroupWithKey {\r\n    return !!column.children?.length\r\n  }\r\n\r\n  function buildColumns(columns: TableColumnRawOptions[]) {\r\n    const allColumns: ColumnRawWithKey[][] = []\r\n    const baseColumns: ColumnWithKey[] = []\r\n    const columnMap = new Map<Key, ColumnRawWithKey>()\r\n    const existedTypes = new Set<TableColumnType>()\r\n\r\n    const getFixedOrder = (fixed?: boolean | 'left' | 'right') => {\r\n      return fixed === true || fixed === 'left' ? -1 : fixed === 'right' ? 1 : 0\r\n    }\r\n    const build = (\r\n      _columns: TableColumnRawOptions[],\r\n      fixed?: boolean | 'left' | 'right',\r\n      row = 0,\r\n      result: ColumnRawWithKey[][] = [],\r\n    ) => {\r\n      _columns = _columns\r\n        .filter(column => !('children' in column) || isGroupColumn(column))\r\n        .sort((prev, next) => (prev.order || 0) - (next.order || 0))\r\n        .sort((prev, next) => getFixedOrder(prev.fixed) - getFixedOrder(next.fixed))\r\n      fixed = fixed === true ? 'left' : fixed\r\n\r\n      const columns = _columns as ColumnRawWithKey[]\r\n      const rowColumns = result[row] ?? (result[row] = [])\r\n\r\n      let index = row > 0 ? result[row - 1].length - 1 : 0\r\n\r\n      for (const { ...column } of columns) {\r\n        if (!isNull(fixed)) {\r\n          column.fixed = fixed\r\n        }\r\n\r\n        rowColumns[index] = column\r\n\r\n        if (isGroupColumn(column)) {\r\n          const endIndex = build(column.children, column.fixed, row + 1, result)\r\n\r\n          column.key = Symbol('TableColumnGroup')\r\n          column.headSpan = endIndex - index\r\n          index = endIndex\r\n        } else {\r\n          const validType = column.type && columnTypes.includes(column.type)\r\n\r\n          if (validType) {\r\n            if (existedTypes.has(column.type)) {\r\n              console.warn(`[vexip-ui:Table] Table has duplicate column with type '${column.type}'`)\r\n            }\r\n\r\n            existedTypes.add(column.type)\r\n          }\r\n\r\n          let key = column.key\r\n\r\n          if (isNull(key)) {\r\n            if (validType) {\r\n              key = `__vxp_${column.type}`\r\n            } else {\r\n              console.warn('[vexip-ui:Table] Table column requires key prop, but missing')\r\n\r\n              key = getIndexId()\r\n            }\r\n          }\r\n\r\n          column.key = key\r\n          baseColumns.push(column)\r\n          index += 1\r\n        }\r\n\r\n        columnMap.set(column.key, column)\r\n      }\r\n\r\n      return index\r\n    }\r\n\r\n    build(columns, undefined, 0, allColumns)\r\n\r\n    let length = 0\r\n\r\n    for (const rowColumns of allColumns) {\r\n      length = Math.max(rowColumns.length, length)\r\n    }\r\n\r\n    for (const rowColumns of allColumns) {\r\n      if (rowColumns.length) {\r\n        getLast(rowColumns)!.last = true\r\n      }\r\n\r\n      rowColumns.length = length\r\n    }\r\n\r\n    for (let i = 0, rowCount = allColumns.length; i < length; ++i) {\r\n      let span = 1\r\n\r\n      for (let j = rowCount - 1; j >= 0; --j) {\r\n        const column = allColumns[j][i]\r\n\r\n        if (column) {\r\n          column.colIndex = i\r\n          column.rowSpan = span\r\n          span = 1\r\n        } else {\r\n          ++span\r\n        }\r\n      }\r\n    }\r\n\r\n    return { allColumns, baseColumns, columnMap }\r\n  }\r\n\r\n  function setColumns(columns: TableColumnRawOptions[]) {\r\n    const { widths, sorters, filters } = state\r\n    const { allColumns, baseColumns, columnMap } = buildColumns(columns)\r\n\r\n    const normalColumns: ColumnWithKey[] = []\r\n    const rightFixedColumns: ColumnWithKey[] = []\r\n    const leftFixedColumns: ColumnWithKey[] = []\r\n\r\n    for (let i = 0, len = baseColumns.length; i < len; ++i) {\r\n      const column = baseColumns[i]\r\n\r\n      column.first = false\r\n      column.last = false\r\n      column.index = i\r\n\r\n      if (column.type && columnTypes.includes(column.type)) {\r\n        switch (column.type) {\r\n          case 'order': {\r\n            column.truthIndex = !!column.truthIndex\r\n\r\n            if (typeof column.orderLabel !== 'function') {\r\n              column.orderLabel = defaultIndexLabel\r\n            }\r\n\r\n            if (isNull(column.width)) {\r\n              column.width = 60\r\n              column.minWidth = 60\r\n            }\r\n\r\n            break\r\n          }\r\n          case 'selection': {\r\n            column.selectionSize = column.selectionSize || 'default'\r\n\r\n            if (typeof column.disableRow !== 'function') {\r\n              column.disableRow = toFalse\r\n            }\r\n\r\n            if (isNull(column.width)) {\r\n              column.width = 40\r\n              column.minWidth = 40\r\n            }\r\n\r\n            break\r\n          }\r\n          case 'expand': {\r\n            if (typeof column.disableRow !== 'function') {\r\n              column.disableRow = toFalse\r\n            }\r\n\r\n            if (isNull(column.width)) {\r\n              column.width = 40\r\n              column.minWidth = 40\r\n            }\r\n\r\n            break\r\n          }\r\n          case 'drag': {\r\n            if (typeof column.disableRow !== 'function') {\r\n              column.disableRow = toFalse\r\n            }\r\n\r\n            if (isNull(column.width)) {\r\n              column.width = 40\r\n              column.minWidth = 40\r\n            }\r\n\r\n            break\r\n          }\r\n        }\r\n\r\n        if (!column.key) {\r\n          column.key = `__vxp_${column.type}-${i}`\r\n        }\r\n      } else {\r\n        column.type = undefined\r\n      }\r\n\r\n      // 独立属性解析时注意隔断同对象引用\r\n      widths.set(\r\n        column.key,\r\n        typeof column.width === 'string'\r\n          ? COLUMN_DEFAULT_MIN_WIDTH\r\n          : Math.round(\r\n            boundRange(\r\n              column.width || COLUMN_DEFAULT_WIDTH,\r\n              column.minWidth || COLUMN_DEFAULT_MIN_WIDTH,\r\n              column.maxWidth || Infinity,\r\n            ),\r\n          ),\r\n      )\r\n      sorters.set(column.key, parseSorter(column.sorter))\r\n      filters.set(column.key, parseFilter(column.filter))\r\n\r\n      const fixed = column.fixed\r\n\r\n      if (fixed === true || fixed === 'left') {\r\n        leftFixedColumns.push(column)\r\n      } else if (fixed === 'right') {\r\n        rightFixedColumns.push(column)\r\n      } else {\r\n        normalColumns.push(column)\r\n      }\r\n    }\r\n\r\n    if (state.allColumns.length > allColumns.length) {\r\n      for (let i = allColumns.length - 1, len = state.allColumns.length; i < len; ++i) {\r\n        state.rowMap.delete(`${TABLE_HEAD_PREFIX}${i}`)\r\n      }\r\n    }\r\n\r\n    for (let i = 0, len = allColumns.length; i < len; ++i) {\r\n      const rowKey = `${TABLE_HEAD_PREFIX}${i}`\r\n\r\n      state.rowMap.set(rowKey, createMinRowState(rowKey))\r\n    }\r\n\r\n    state.columnMap = columnMap\r\n    state.columns = Array.from(leftFixedColumns).concat(normalColumns, rightFixedColumns)\r\n    state.normalColumns = normalColumns\r\n    state.allColumns = allColumns\r\n\r\n    if (state.columns.length) {\r\n      for (const column of state.columns) {\r\n        if (!column.type) {\r\n          column.first = true\r\n          break\r\n        }\r\n      }\r\n\r\n      getLast(state.columns)!.last = true\r\n    }\r\n\r\n    if (leftFixedColumns.length) {\r\n      state.leftFixedColumns = leftFixedColumns\r\n    }\r\n\r\n    if (rightFixedColumns.length) {\r\n      state.rightFixedColumns = rightFixedColumns\r\n    }\r\n  }\r\n\r\n  function setColumnProp(key: Key, prop: string, value: any) {\r\n    if (state.columnMap.has(key)) {\r\n      ;(state.columnMap.get(key) as any)[prop] = value\r\n    }\r\n  }\r\n\r\n  function buildSummaryKey(key: Key) {\r\n    return typeof key === 'symbol' ? key : `${TABLE_FOOT_PREFIX}${key}`\r\n  }\r\n\r\n  function setSummaries(summaries: TableSummaryOptions[]) {\r\n    summaries = Array.from(summaries).sort((prev, next) => {\r\n      return (prev.order || 0) - (next.order || 0)\r\n    })\r\n\r\n    const prevKeys = new Set(state.summaries.map(summary => summary.key))\r\n    const aboveSummaries: SummaryWithKey[] = []\r\n    const belowSummaries: SummaryWithKey[] = []\r\n    const summaryMap = new Map<Key, SummaryWithKey>()\r\n\r\n    for (let i = 0, len = summaries.length; i < len; ++i) {\r\n      const summary = { ...summaries[i] } as SummaryWithKey\r\n\r\n      let key = summary.key\r\n\r\n      if (isNull(key)) {\r\n        console.error('[vexip-ui:Table] Table summary requires key prop, but missing')\r\n\r\n        key = getIndexId()\r\n      }\r\n\r\n      summary.key = key\r\n      ;(summary.above ? aboveSummaries : belowSummaries).push(summary)\r\n\r\n      if (!prevKeys.has(summary.key)) {\r\n        const rowKey = buildSummaryKey(summary.key)\r\n\r\n        state.rowMap.set(rowKey, createMinRowState(rowKey))\r\n      }\r\n\r\n      prevKeys.delete(summary.key)\r\n      summaryMap.set(summary.key, summary)\r\n    }\r\n\r\n    state.summaries = Array.from(aboveSummaries).concat(belowSummaries)\r\n    state.summaryMap = summaryMap\r\n\r\n    if (aboveSummaries.length) {\r\n      state.aboveSummaries = aboveSummaries\r\n    }\r\n\r\n    if (belowSummaries.length) {\r\n      state.belowSummaries = belowSummaries\r\n    }\r\n\r\n    if (prevKeys.size) {\r\n      for (const key of prevKeys) {\r\n        state.rowMap.delete(buildSummaryKey(key))\r\n      }\r\n    }\r\n  }\r\n\r\n  function setSummaryProp(key: Key, prop: string, value: any) {\r\n    if (state.summaryMap.has(key)) {\r\n      ;(state.summaryMap.get(key) as any)[prop] = value\r\n    }\r\n  }\r\n\r\n  function setDataKey(field: string) {\r\n    const oldDataKey = state.dataKey\r\n\r\n    if (!isNull(field) && oldDataKey !== field) {\r\n      const { rowData, idMaps } = state\r\n\r\n      state.dataKey = field\r\n\r\n      rowData.forEach(row => {\r\n        let key = row.data[field] as Key\r\n\r\n        if (isNull(key)) {\r\n          key = getIndexId()\r\n        }\r\n\r\n        row.key = key\r\n        idMaps.set(row.data, key)\r\n      })\r\n    }\r\n  }\r\n\r\n  function collectUnderRows(row: TableRowState, result: TableRowState[] = []) {\r\n    if (row.treeExpanded && row.children?.length) {\r\n      for (const childRow of row.children) {\r\n        result.push(childRow)\r\n        collectUnderRows(childRow, result)\r\n      }\r\n    }\r\n\r\n    return result\r\n  }\r\n\r\n  function setData(data: Data[]) {\r\n    const clonedData: TableRowState[] = []\r\n    const rowMap = new Map<Key, TableRowState>()\r\n    const { allColumns, dataKey, keyConfig, idMaps, disabledTree } = state\r\n    const oldDataMap = state.rowMap\r\n    const hidden = !!state.virtual\r\n\r\n    const {\r\n      children: childrenKey,\r\n      checked: checkedKey,\r\n      height: heightKey,\r\n      expanded: expandedKey,\r\n      treeExpanded: treeExpandedKey,\r\n    } = keyConfig\r\n\r\n    for (let i = 0, len = allColumns.length; i < len; ++i) {\r\n      const key = `${TABLE_HEAD_PREFIX}${i}`\r\n\r\n      rowMap.set(key, oldDataMap.get(key) || createMinRowState(key))\r\n    }\r\n\r\n    for (const summary of state.summaries) {\r\n      const key = buildSummaryKey(summary.key)\r\n\r\n      rowMap.set(key, oldDataMap.get(key) || createMinRowState(key))\r\n    }\r\n\r\n    const parseRow = (origin: Data[], result: TableRowState[], parent?: TableRowState) => {\r\n      for (let i = 0, len = origin.length; i < len; ++i) {\r\n        const item = origin[i]\r\n\r\n        let key = item[dataKey] as Key\r\n\r\n        if (isNull(key)) {\r\n          key = idMaps.get(item)!\r\n\r\n          if (isNull(key)) {\r\n            key = getIndexId()\r\n          }\r\n        }\r\n\r\n        let row: TableRowState\r\n\r\n        if (oldDataMap.has(key)) {\r\n          row = oldDataMap.get(key)!\r\n\r\n          const {\r\n            [checkedKey]: checked,\r\n            [heightKey]: height,\r\n            [expandedKey]: expanded,\r\n            [treeExpandedKey]: treeExpanded,\r\n          } = row.data !== item ? Object.assign(row.data, item) : row.data\r\n\r\n          row.checked = !isNull(checked) ? !!checked : row.checked\r\n          row.height = !isNull(height) ? toNumber(height) : row.height\r\n          row.expanded = !isNull(expanded) ? !!expanded : row.expanded\r\n          row.treeExpanded = !isNull(treeExpanded) ? !!treeExpanded : row.treeExpanded\r\n        } else {\r\n          const {\r\n            [checkedKey]: checked,\r\n            [heightKey]: height,\r\n            [expandedKey]: expanded,\r\n            [treeExpandedKey]: treeExpanded,\r\n          } = item\r\n\r\n          row = {\r\n            key,\r\n            hidden,\r\n            checked: !!checked,\r\n            height: toNumber(height),\r\n            expanded: !!expanded,\r\n            hover: false,\r\n            expandHeight: 0,\r\n            index: -1,\r\n            children: [],\r\n            depth: 0,\r\n            treeExpanded: !!treeExpanded,\r\n            partial: false,\r\n            dragging: false,\r\n            listIndex: 0,\r\n            cellHeights: reactive({}),\r\n            last: false,\r\n            expandAnimate: false,\r\n            data: item,\r\n          }\r\n\r\n          idMaps.set(item, key)\r\n        }\r\n\r\n        if (parent) {\r\n          row.parent = parent.key\r\n          row.depth = parent.depth + 1\r\n        }\r\n\r\n        row.children = []\r\n\r\n        const children = row.data[childrenKey]\r\n        children?.length && parseRow(children, row.children, row)\r\n\r\n        result.push(row)\r\n        rowMap.set(key, row)\r\n      }\r\n    }\r\n\r\n    parseRow(data, clonedData)\r\n\r\n    state.rowMap = rowMap\r\n    state.treeRowData = clonedData\r\n\r\n    if (!disabledTree) {\r\n      flatTreeRows()\r\n    } else {\r\n      state.rowData = clonedData\r\n    }\r\n\r\n    state.data = data\r\n\r\n    refreshRowIndex()\r\n    computePartial()\r\n  }\r\n\r\n  function flatTreeRows() {\r\n    if (state.disabledTree) return\r\n\r\n    const rowData: TableRowState[] = []\r\n\r\n    for (const row of state.treeRowData) {\r\n      rowData.push(row)\r\n      collectUnderRows(row, rowData)\r\n    }\r\n\r\n    state.rowData = rowData\r\n  }\r\n\r\n  function refreshRowDepth() {\r\n    walkTree(state.treeRowData, (row, depth) => {\r\n      row.depth = depth\r\n    })\r\n  }\r\n\r\n  function setCurrentPage(currentPage: number) {\r\n    state.currentPage = currentPage ?? 1\r\n  }\r\n\r\n  function setPageSize(pageSize: number) {\r\n    state.pageSize = pageSize || 0\r\n  }\r\n\r\n  function setRowClass(rowClass: ClassType | TableRowPropFn<ClassType>) {\r\n    state.rowClass = rowClass ?? ''\r\n  }\r\n\r\n  function setRowStyle(rowStyle: StyleType | TableRowPropFn<StyleType>) {\r\n    state.rowStyle = rowStyle ?? ''\r\n  }\r\n\r\n  function setRowAttrs(rowAttrs: Record<string, any> | TableRowPropFn<Record<string, any>>) {\r\n    state.rowAttrs = rowAttrs ?? null!\r\n  }\r\n\r\n  function setCellClass(cellClass: ClassType | TableCellPropFn<ClassType>) {\r\n    state.cellClass = cellClass ?? ''\r\n  }\r\n\r\n  function setCellStyle(cellStyle: StyleType | TableCellPropFn<StyleType>) {\r\n    state.cellStyle = cellStyle ?? ''\r\n  }\r\n\r\n  function setCellAttrs(cellAttrs: Record<string, any> | TableCellPropFn<Record<string, any>>) {\r\n    state.cellAttrs = cellAttrs ?? null!\r\n  }\r\n\r\n  function setHeadClass(headClass: ClassType | TableHeadPropFn<ClassType>) {\r\n    state.headClass = headClass ?? ''\r\n  }\r\n\r\n  function setHeadStyle(headStyle: StyleType | TableHeadPropFn<StyleType>) {\r\n    state.headStyle = headStyle ?? ''\r\n  }\r\n\r\n  function setHeadAttrs(headAttrs: Record<string, any> | TableHeadPropFn<Record<string, any>>) {\r\n    state.headAttrs = headAttrs ?? null!\r\n  }\r\n\r\n  function setFootClass(footClass: ClassType | TableFootPropFn<ClassType>) {\r\n    state.footClass = footClass ?? ''\r\n  }\r\n\r\n  function setFootStyle(footStyle: StyleType | TableFootPropFn<StyleType>) {\r\n    state.footStyle = footStyle ?? ''\r\n  }\r\n\r\n  function setFootAttrs(footAttrs: Record<string, any> | TableFootPropFn<Record<string, any>>) {\r\n    state.footAttrs = footAttrs ?? null!\r\n  }\r\n\r\n  function setTableWidth(width: number) {\r\n    width = toNumber(width)\r\n\r\n    const { columns, widths, resized } = state\r\n\r\n    const hasWidthColumns: ColumnWithKey[] = []\r\n    const flexColumns: ColumnWithKey[] = []\r\n\r\n    let flexWidth = width\r\n\r\n    for (let i = 0, len = columns.length; i < len; ++i) {\r\n      const column = columns[i]\r\n      const { minWidth, maxWidth } = column\r\n\r\n      if (resized.has(column.key)) {\r\n        flexWidth -= widths.get(column.key)!\r\n        hasWidthColumns.push(column)\r\n      } else if (column.width) {\r\n        if (typeof column.width === 'string') {\r\n          const percent = boundRange(toNumber(column.width), 0, 100)\r\n\r\n          if (percent) {\r\n            const fixedWidth = Math.round(\r\n              boundRange(\r\n                (width * percent) / 100,\r\n                minWidth || COLUMN_DEFAULT_MIN_WIDTH,\r\n                maxWidth || Infinity,\r\n              ),\r\n            )\r\n\r\n            flexWidth -= fixedWidth\r\n            widths.set(column.key, fixedWidth)\r\n            hasWidthColumns.push(column)\r\n          } else {\r\n            flexColumns.push(column)\r\n          }\r\n        } else {\r\n          const width = Math.round(\r\n            boundRange(\r\n              column.width || COLUMN_DEFAULT_WIDTH,\r\n              minWidth || COLUMN_DEFAULT_MIN_WIDTH,\r\n              maxWidth || Infinity,\r\n            ),\r\n          )\r\n\r\n          flexWidth -= width\r\n          widths.set(column.key, width)\r\n          hasWidthColumns.push(column)\r\n        }\r\n      } else {\r\n        flexColumns.push(column)\r\n      }\r\n    }\r\n\r\n    const flexColumnCount = flexColumns.length\r\n    const flexWidths = distributeWidths(flexColumns, flexWidth)\r\n\r\n    let usedWidth = 0\r\n\r\n    for (let i = 0; i < flexColumnCount; ++i) {\r\n      const column = flexColumns[i]\r\n      const width = Math[i % 2 ? 'ceil' : 'floor'](flexWidths[i])\r\n\r\n      if (i < flexColumnCount - 1) {\r\n        usedWidth += width\r\n      }\r\n\r\n      widths.set(column.key, width)\r\n    }\r\n\r\n    if (flexColumnCount && flexWidth >= usedWidth + getLast(flexWidths)!) {\r\n      widths.set(getLast(flexColumns)!.key, flexWidth - usedWidth)\r\n    }\r\n\r\n    state.width = width\r\n  }\r\n\r\n  function distributeWidths(columns: ColumnWithKey[], totalWidth: number): number[] {\r\n    const count = columns.length\r\n    const baseWidth = Math.max(totalWidth / count, COLUMN_DEFAULT_WIDTH)\r\n\r\n    const widths = columns.map(col => {\r\n      let w = baseWidth\r\n      if (col.minWidth != null) w = Math.max(w, col.minWidth)\r\n      if (col.maxWidth != null) w = Math.min(w, col.maxWidth)\r\n      return w\r\n    })\r\n\r\n    const currentTotal = widths.reduce((a, b) => a + b, 0)\r\n    let delta = totalWidth - currentTotal\r\n\r\n    const canGrow = (i: number) => columns[i].maxWidth == null || widths[i] < columns[i].maxWidth!\r\n    const canShrink = (i: number) => columns[i].minWidth == null || widths[i] > columns[i].minWidth!\r\n\r\n    const epsilon = 0.1\r\n    let adjusted = false\r\n\r\n    while (Math.abs(delta) > epsilon) {\r\n      const adjustableIndices = widths\r\n        .map((_, i) => {\r\n          if (delta > 0 && canGrow(i)) return i\r\n          if (delta < 0 && canShrink(i)) return i\r\n          return -1\r\n        })\r\n        .filter(i => i !== -1)\r\n\r\n      if (adjustableIndices.length === 0) {\r\n        adjusted = false\r\n        break\r\n      }\r\n\r\n      const adjustment = delta / adjustableIndices.length\r\n      for (const i of adjustableIndices) {\r\n        const old = widths[i]\r\n        let next = old + adjustment\r\n\r\n        if (columns[i].minWidth != undefined) next = Math.max(next, columns[i].minWidth!)\r\n        if (columns[i].maxWidth != undefined) next = Math.min(next, columns[i].maxWidth!)\r\n\r\n        delta -= next - old\r\n        widths[i] = next\r\n      }\r\n\r\n      adjusted = true\r\n    }\r\n\r\n    // delta > 0 且无法再调整时，强行补给最后一列\r\n    if (!adjusted && delta > epsilon) {\r\n      widths[count - 1] += delta\r\n    }\r\n\r\n    return widths\r\n  }\r\n\r\n  function setRowHeight(height: number) {\r\n    state.rowHeight = height\r\n  }\r\n\r\n  function setRowMinHeight(height: number) {\r\n    state.rowMinHeight = height\r\n  }\r\n\r\n  function setCellHeight(rowKey: Key, columnKey: Key, height: number) {\r\n    if (!isNull(height) && state.rowMap.has(rowKey)) {\r\n      state.rowMap.get(rowKey)!.cellHeights[columnKey] = height\r\n    }\r\n  }\r\n\r\n  function setRowDraggable(draggable: boolean) {\r\n    state.rowDraggable = !!draggable\r\n  }\r\n\r\n  function setBodyYScroll(scroll: number) {\r\n    state.bodyYScroll = scroll\r\n  }\r\n\r\n  function setBodyXScroll(scroll: number) {\r\n    state.bodyXScroll = scroll\r\n  }\r\n\r\n  function setBorder(able: boolean) {\r\n    state.border = !!able\r\n  }\r\n\r\n  function setStripe(able: boolean) {\r\n    state.stripe = !!able\r\n  }\r\n\r\n  function setHighlight(able: boolean) {\r\n    state.highlight = !!able\r\n  }\r\n\r\n  function setVirtual(virtual: boolean) {\r\n    state.virtual = !!virtual\r\n  }\r\n\r\n  function setRowProp(key: Key, prop: Exclude<keyof TableRowState, 'key'>, value: any) {\r\n    const row = state.rowMap.get(key)\r\n\r\n    if (row && row[prop] !== value) {\r\n      ;(row as any)[prop] = value\r\n    }\r\n  }\r\n\r\n  function setLocale(locale: LocaleConfig['table']) {\r\n    state.locale = locale\r\n  }\r\n\r\n  function setTooltipTheme(theme: TooltipTheme) {\r\n    state.tooltipTheme = theme\r\n  }\r\n\r\n  function setTooltipWidth(theme: number | string) {\r\n    state.tooltipWidth = theme\r\n  }\r\n\r\n  function setSingleSorter(able: boolean) {\r\n    state.singleSorter = !!able\r\n  }\r\n\r\n  function setSingleFilter(able: boolean) {\r\n    state.singleFilter = !!able\r\n  }\r\n\r\n  function setDragging(dragging: boolean) {\r\n    state.dragging = !!dragging\r\n  }\r\n\r\n  function setKeyConfig(keyConfig: Required<TableKeyConfig>) {\r\n    state.keyConfig = keyConfig\r\n  }\r\n\r\n  function setDisabledTree(disabled: boolean) {\r\n    state.disabledTree = !!disabled\r\n  }\r\n\r\n  function setNoCascaded(noCascaded: boolean) {\r\n    state.noCascaded = !!noCascaded\r\n  }\r\n\r\n  function setColResizable(resizable: boolean | TableColResizeType) {\r\n    state.colResizable = resizable === true ? 'lazy' : resizable\r\n  }\r\n\r\n  function setCustomSorter(able: boolean) {\r\n    state.customSorter = !!able\r\n  }\r\n\r\n  function setCustomFilter(able: boolean) {\r\n    state.customFilter = !!able\r\n  }\r\n\r\n  function setColumnResizing(resizing: boolean) {\r\n    state.colResizing = !!resizing\r\n  }\r\n\r\n  function setResizeLeft(left: number) {\r\n    state.resizeLeft = left\r\n  }\r\n\r\n  function setExpandRenderer(renderer: ExpandRenderFn | null) {\r\n    state.expandRenderer = renderer\r\n  }\r\n\r\n  function setCellSpan(spanFn: TableCellSpanFn | null) {\r\n    state.cellSpan = spanFn\r\n  }\r\n\r\n  function setSidePadding(padding: number | number[]) {\r\n    state.sidePadding = Array.isArray(padding) ? padding : [padding, padding]\r\n  }\r\n\r\n  function setBorderWidth(width: number) {\r\n    state.borderWidth = Math.max(width, 0)\r\n  }\r\n\r\n  function setDataFilter(filter: (data: Data) => boolean) {\r\n    state.dataFilter = filter\r\n  }\r\n\r\n  function setEllipsis(ellipsis: boolean) {\r\n    state.ellipsis = ellipsis\r\n  }\r\n\r\n  function setLocked(locked: boolean) {\r\n    state.locked = locked\r\n  }\r\n\r\n  function setBarScrolling(scrolling: boolean) {\r\n    state.barScrolling = scrolling\r\n  }\r\n\r\n  function setHoveredRowKey(key: Key | null) {\r\n    if (state.hoveredRowKey !== key) {\r\n      const prevHoveredRow = state.hoveredRowKey && state.rowMap.get(state.hoveredRowKey)\r\n      const newHoveredRow = key && state.rowMap.get(key)\r\n\r\n      if (prevHoveredRow) {\r\n        prevHoveredRow.hover = false\r\n      }\r\n\r\n      if (newHoveredRow) {\r\n        newHoveredRow.hover = true\r\n      }\r\n    }\r\n\r\n    state.hoveredRowKey = key\r\n  }\r\n\r\n  function handleSort(key: Key, type: ParsedTableSorterOptions['type']) {\r\n    if (state.sorters.has(key)) {\r\n      if (state.singleSorter && type) {\r\n        clearSort()\r\n      }\r\n\r\n      state.sorters.get(key)!.type = type\r\n    }\r\n  }\r\n\r\n  function clearSort() {\r\n    const sorters = state.sorters\r\n\r\n    for (const sorter of sorters.values()) {\r\n      sorter.type = null\r\n    }\r\n  }\r\n\r\n  function handleFilter(key: Key, active: ParsedFilterOptions['active']) {\r\n    if (state.filters.has(key)) {\r\n      if (state.singleFilter && (Array.isArray(active) ? active.length : active)) {\r\n        clearFilter()\r\n      }\r\n\r\n      state.filters.get(key)!.active = Array.isArray(active) ? Array.from(active) : active\r\n    }\r\n  }\r\n\r\n  function clearFilter() {\r\n    const filters = state.filters\r\n\r\n    for (const filter of filters.values()) {\r\n      filter.active = null\r\n\r\n      for (const option of filter.options) {\r\n        option.active = false\r\n      }\r\n    }\r\n  }\r\n\r\n  const { updateCheckedUpward, updateCheckedDown } = useCascadedChecked({\r\n    getNode: key => state.rowMap.get(key),\r\n    disableNode: row => disableCheckRows.value.has(row.key),\r\n  })\r\n\r\n  function computeChecked(key: Key) {\r\n    const { rowMap, rowData } = state\r\n    const { disableCheckRows } = getters\r\n\r\n    if (!rowMap.has(key)) return\r\n\r\n    const rowList = [rowMap.get(key)!].concat(\r\n      // 需要包含被禁用且被勾选的节点\r\n      rowData.filter(row => disableCheckRows.has(row.key) && row.checked),\r\n    )\r\n\r\n    for (let i = 0, len = rowList.length; i < len; ++i) {\r\n      updateCheckedUpward(rowList[i].key)\r\n      updateCheckedDown(rowList[i].key)\r\n    }\r\n  }\r\n\r\n  function handleCheck(key: Key, checked: boolean, single = false) {\r\n    const { rowMap, noCascaded } = state\r\n    const { disableCheckRows } = getters\r\n    const row = rowMap.get(key)\r\n\r\n    if (!row) return\r\n\r\n    if (single) {\r\n      clearCheckAll(true)\r\n      row.checked = !!checked\r\n    }\r\n\r\n    if (!disableCheckRows.has(key)) {\r\n      row.checked = !!checked\r\n      row.partial = false\r\n    }\r\n\r\n    !noCascaded && computeChecked(key)\r\n    computePartial()\r\n  }\r\n\r\n  function handleCheckAll() {\r\n    const { rowData, checkedAll } = state\r\n    const { disableCheckRows } = getters\r\n\r\n    let checked = !checkedAll\r\n\r\n    // 阻断 disabled 元素对全选的影响\r\n    if (disableCheckRows.size) {\r\n      // 由于被禁用的元素不可被操作，如果存在被禁用的元素且该状态为未被选中，则全选时仍然是 partial 状态\r\n      // 假设除了禁用的元素，其余元素均为选中状态（此时对于用户来说属于已经全选，点击的期望是取消全选）\r\n      let partialCheckedAll = true\r\n\r\n      for (const row of rowData) {\r\n        // 检查是否存在非禁用的且未被选中的元素（如有则证明现在不是全选，用户点击的期望是进行全选）\r\n        if (!disableCheckRows.has(row.key) && !row.checked) {\r\n          partialCheckedAll = false\r\n\r\n          break\r\n        }\r\n      }\r\n\r\n      checked = !partialCheckedAll\r\n    }\r\n\r\n    for (const row of rowData) {\r\n      if (!disableCheckRows.has(row.key)) {\r\n        row.checked = checked\r\n      }\r\n    }\r\n\r\n    state.checkedAll = checked\r\n    state.partial = false\r\n\r\n    computePartial()\r\n  }\r\n\r\n  function clearCheckAll(includeDisabled = false) {\r\n    const { rowData } = state\r\n    const { disableCheckRows } = getters\r\n\r\n    for (const row of rowData) {\r\n      if (includeDisabled || !disableCheckRows.has(row.key)) {\r\n        row.checked = false\r\n      }\r\n\r\n      if (includeDisabled) {\r\n        row.partial = false\r\n      }\r\n    }\r\n\r\n    state.checkedAll = false\r\n    state.partial = false\r\n\r\n    !includeDisabled && computePartial()\r\n  }\r\n\r\n  function computePartial() {\r\n    const data = state.rowData\r\n\r\n    let hasChecked = false\r\n    let hasNotChecked = false\r\n    let partial = false\r\n\r\n    for (let i = 0, len = data.length; i < len; ++i) {\r\n      const row = data[i]\r\n\r\n      if (row.checked) {\r\n        hasChecked = true\r\n      } else {\r\n        hasNotChecked = true\r\n      }\r\n\r\n      if (hasChecked && hasNotChecked) {\r\n        partial = true\r\n\r\n        break\r\n      }\r\n    }\r\n\r\n    if (hasChecked && !partial) {\r\n      state.checkedAll = true\r\n    } else {\r\n      state.checkedAll = false\r\n    }\r\n\r\n    state.partial = partial\r\n  }\r\n\r\n  function setRenderRows(start: number, end: number, force = false) {\r\n    const { startRow, endRow, heightBITree, virtualData } = state\r\n\r\n    if (!force && start === startRow && end === endRow) return\r\n\r\n    const { processedData } = getters\r\n\r\n    if (!processedData.length) {\r\n      virtualData.length = 0\r\n      return\r\n    }\r\n\r\n    const prevData = new Set([...virtualData])\r\n    const added: TableRowState[] = []\r\n    const removed: TableRowState[] = []\r\n\r\n    for (let i = 0, len = processedData.length; i < len; ++i) {\r\n      const data = processedData[i]\r\n\r\n      data.hidden = !(i >= start && i < end)\r\n\r\n      if (data.hidden) {\r\n        data.hover = false\r\n\r\n        if (prevData.has(data)) {\r\n          removed.push(data)\r\n        }\r\n      } else if (!prevData.has(data)) {\r\n        added.push(data)\r\n      }\r\n\r\n      prevData.delete(data)\r\n    }\r\n\r\n    removed.push(...prevData)\r\n\r\n    const length = Math.min(added.length, removed.length)\r\n\r\n    for (let i = 0; i < length; ++i) {\r\n      virtualData[virtualData.indexOf(removed[i])] = added[i]\r\n    }\r\n\r\n    if (added.length > removed.length) {\r\n      virtualData.push(...added.slice(length))\r\n    } else if (added.length < removed.length) {\r\n      state.virtualData = virtualData.filter(data => !removed.includes(data))\r\n    }\r\n\r\n    state.padTop = heightBITree?.sum(start) ?? 0\r\n    state.startRow = start\r\n    state.endRow = end\r\n  }\r\n\r\n  function handleExpand(key: Key, expanded: boolean) {\r\n    const { rowMap } = state\r\n    const { disableExpandRows } = getters\r\n\r\n    if (rowMap.has(key) && !disableExpandRows.has(key)) {\r\n      rowMap.get(key)!.expanded = !!expanded\r\n    }\r\n  }\r\n\r\n  function handleDrag(key: Key, dragging: boolean) {\r\n    const { rowMap } = state\r\n    const { disableDragRows } = getters\r\n\r\n    if (rowMap.has(key) && !disableDragRows.has(key)) {\r\n      rowMap.get(key)!.dragging = !!dragging\r\n    }\r\n  }\r\n\r\n  function setTreeExpanded(key: Key, expanded: boolean) {\r\n    if (!usingTree.value) return\r\n\r\n    const { rowMap, rowData, virtual } = state\r\n    const row = rowMap.get(key)\r\n\r\n    if (!row?.children?.length) return\r\n\r\n    const underRows = collectUnderRows({ ...row, treeExpanded: true })\r\n\r\n    if (expanded) {\r\n      rowData.splice(row.index + 1, 0, ...underRows)\r\n    } else {\r\n      rowData.splice(row.index + 1, underRows.length)\r\n    }\r\n\r\n    row.treeExpanded = !!expanded\r\n\r\n    refreshRowIndex()\r\n    virtual && setRenderRows(state.startRow, state.endRow, true)\r\n  }\r\n\r\n  function toggleFilterItemActive(options: {\r\n    key: Key,\r\n    value: number | string | null,\r\n    active?: boolean,\r\n    disableOthers?: boolean,\r\n  }) {\r\n    const { key, value, active = false, disableOthers = false } = options\r\n\r\n    if (state.filters.has(key)) {\r\n      const filterOptions = state.filters.get(key)!.options\r\n\r\n      if (disableOthers) {\r\n        for (let i = 0, len = filterOptions.length; i < len; ++i) {\r\n          filterOptions[i].active = false\r\n        }\r\n      }\r\n\r\n      const item = filterOptions.find(item => item.value === value)\r\n\r\n      if (item) {\r\n        item.active = active\r\n      }\r\n    }\r\n  }\r\n\r\n  function refreshRowIndex() {\r\n    const data = state.rowData\r\n\r\n    for (let i = 0, len = data.length; i < len; ++i) {\r\n      data[i].index = i\r\n    }\r\n  }\r\n\r\n  function updateTotalHeight() {\r\n    const { heightBITree } = state\r\n\r\n    if (heightBITree) {\r\n      state.totalHeight = heightBITree.sum() ?? 0\r\n    } else {\r\n      state.totalHeight = 0\r\n    }\r\n  }\r\n\r\n  function parseSorter(sorter: boolean | TableSorterOptions = false): ParsedTableSorterOptions {\r\n    const raw = typeof sorter === 'boolean' ? { able: sorter } : sorter\r\n    const { able = true, type = null, order = 0, method = null } = raw\r\n\r\n    return { able, type, order, method }\r\n  }\r\n\r\n  function parseFilter(filter?: TableFilterOptions | null): ParsedFilterOptions {\r\n    filter = filter || { able: false, options: [] }\r\n\r\n    const {\r\n      able = true,\r\n      custom = false,\r\n      multiple = false,\r\n      active = null,\r\n      method = null,\r\n      meta,\r\n    } = filter\r\n    // 防止内部变化触发 deep watch\r\n    const options = deepClone(filter.options ?? [])\r\n    const formattedOptions = []\r\n\r\n    for (let i = 0, len = options.length; i < len; ++i) {\r\n      const item = options[i]\r\n      const option = typeof item === 'string' ? { value: item } : { ...item }\r\n\r\n      option.label = option.label ?? option.value.toString()\r\n\r\n      let isActive = false\r\n\r\n      if (multiple && Array.isArray(active)) {\r\n        isActive = active.includes(option.value)\r\n      } else if (!isNull(active)) {\r\n        isActive = Object.is(option.value, active)\r\n      }\r\n\r\n      option.active = isActive\r\n\r\n      formattedOptions.push(option as { value: string | number, label: string, active: boolean })\r\n    }\r\n\r\n    return { able, custom, meta, options: formattedOptions, multiple, active, method }\r\n  }\r\n\r\n  function filterData(\r\n    filters: Map<Key, ParsedFilterOptions>,\r\n    data: TableRowState[],\r\n    isSingle: boolean,\r\n  ) {\r\n    const usedFilter: ParsedFilterOptions[] = []\r\n    const usedData: TableRowState[] = []\r\n\r\n    for (const filter of filters.values()) {\r\n      const { able, active, method } = filter\r\n\r\n      if (able && active && typeof method === 'function') {\r\n        usedFilter.push(filter)\r\n\r\n        if (isSingle) break\r\n      }\r\n    }\r\n\r\n    const usedFilterCount = usedFilter.length\r\n\r\n    for (let i = 0, len = data.length; i < len; ++i) {\r\n      const row = data[i]\r\n\r\n      let isFilter = true\r\n\r\n      for (let j = 0; j < usedFilterCount; j++) {\r\n        const { active, method } = usedFilter[j]\r\n\r\n        isFilter = method!(active! as any, row.data)\r\n\r\n        if (!isFilter) {\r\n          break\r\n        }\r\n      }\r\n\r\n      if (isFilter) {\r\n        usedData.push(row)\r\n      }\r\n    }\r\n\r\n    return usedData\r\n  }\r\n\r\n  function sortData(\r\n    sorters: Map<Key, ParsedTableSorterOptions>,\r\n    data: TableRowState[],\r\n    columns: TableColumnOptions[],\r\n    isSingle: boolean,\r\n  ) {\r\n    const usedSorter = []\r\n\r\n    for (const [_key, sorter] of sorters) {\r\n      const key = _key as keyof TableRowState\r\n      const { able, type, order, method } = sorter\r\n\r\n      if (able && type) {\r\n        const column = columns.find(item => item.key === key)\r\n        const accessor = column?.accessor\r\n\r\n        usedSorter.push({\r\n          able,\r\n          key,\r\n          order,\r\n          type,\r\n          method: method ?? undefined,\r\n          accessor(row: TableRowState) {\r\n            if (typeof accessor === 'function') {\r\n              return accessor(row.data, row.index)\r\n            }\r\n\r\n            return row.data[key]\r\n          },\r\n        })\r\n\r\n        if (isSingle) break\r\n      }\r\n    }\r\n\r\n    // 多列排序优先级\r\n    usedSorter.sort((prev, next) => prev.order - next.order)\r\n\r\n    return sortByProps(data, usedSorter)\r\n  }\r\n\r\n  function pageData(currentPage: number, pageSize: number, data: TableRowState[]) {\r\n    return pageSize > 0 ? data.slice((currentPage - 1) * pageSize, currentPage * pageSize) : data\r\n  }\r\n\r\n  function getParentRow(key: Key) {\r\n    const { rowMap } = state\r\n    const row = rowMap.get(key)\r\n\r\n    if (!isNull(row?.parent)) {\r\n      return rowMap.get(row!.parent) ?? null\r\n    }\r\n\r\n    return null\r\n  }\r\n\r\n  let lastColumnWidth: number | undefined\r\n\r\n  function handleColumnResize(keys: Key[], newWidth: number) {\r\n    const { resized, widths, columns, columnMap, width: tableWidth } = state\r\n    const length = keys.length\r\n\r\n    if (!columns.length || !length) return\r\n\r\n    const deltaWidth = newWidth / length\r\n    const lastKey = getLast(columns)!.key\r\n\r\n    for (let i = 0; i < length; ++i) {\r\n      const key = keys[i]\r\n      const column = columnMap.get(key) as ColumnWithKey\r\n\r\n      if (!column) continue\r\n\r\n      const width =\r\n        length === 1 ? Math.round(deltaWidth) : Math[i % 2 ? 'ceil' : 'floor'](deltaWidth)\r\n      const { minWidth, maxWidth } = column\r\n\r\n      resized.add(key)\r\n      widths.set(key, boundRange(width, minWidth || COLUMN_DEFAULT_MIN_WIDTH, maxWidth || Infinity))\r\n    }\r\n\r\n    let totalWidth = 0\r\n\r\n    for (const width of widths.values()) {\r\n      totalWidth += width\r\n    }\r\n\r\n    totalWidth = toFixed(totalWidth, 1)\r\n\r\n    if (\r\n      totalWidth - widths.get(lastKey)! <\r\n      tableWidth - (lastColumnWidth ?? widths.get(lastKey)!)\r\n    ) {\r\n      if (!lastColumnWidth) {\r\n        lastColumnWidth = widths.get(lastKey)\r\n      }\r\n\r\n      widths.set(lastKey, widths.get(lastKey)! + tableWidth - totalWidth)\r\n    } else if (lastColumnWidth) {\r\n      widths.set(lastKey, lastColumnWidth!)\r\n      lastColumnWidth = undefined\r\n    }\r\n  }\r\n\r\n  function computeCellSpan() {\r\n    const {\r\n      normalColumns,\r\n      leftFixedColumns,\r\n      rightFixedColumns,\r\n      aboveSummaries,\r\n      belowSummaries,\r\n      rowData,\r\n      cellSpanMap,\r\n      collapseMap,\r\n    } = state\r\n    const { processedData } = getters\r\n\r\n    for (const type of ['left', 'default', 'right'] as const) {\r\n      cellSpanMap.set(type, new Map())\r\n      collapseMap.set(type, new Map())\r\n    }\r\n\r\n    function setCellSpan(\r\n      rowIndex: number,\r\n      columnIndex: number,\r\n      fixed: 'left' | 'default' | 'right',\r\n      getSpan: () => Required<CellSpanResult>,\r\n      prefix = '',\r\n    ) {\r\n      const masterKey = `${prefix}${rowIndex},${columnIndex}`\r\n      const collapsed = collapseMap.get(fixed)!\r\n\r\n      if (collapsed.has(masterKey)) {\r\n        cellSpanMap.get(fixed)!.set(masterKey, { colSpan: 0, rowSpan: 0 })\r\n        return\r\n      }\r\n\r\n      const span = getSpan()\r\n      const { colSpan, rowSpan } = span\r\n\r\n      for (let i = 0; i < colSpan; ++i) {\r\n        for (let j = 0; j < rowSpan; ++j) {\r\n          if (!i && !j) continue\r\n\r\n          const key = `${prefix}${rowIndex + j},${columnIndex + i}`\r\n\r\n          let masterSet = collapsed.get(key)\r\n\r\n          if (!masterSet) {\r\n            masterSet = new Set()\r\n            collapsed.set(key, masterSet)\r\n          }\r\n\r\n          masterSet.add(masterKey)\r\n        }\r\n      }\r\n\r\n      cellSpanMap.get(fixed)!.set(masterKey, span)\r\n    }\r\n\r\n    for (const columns of [normalColumns, leftFixedColumns, rightFixedColumns]) {\r\n      if (!columns.length) continue\r\n\r\n      const fixed = columns[0].fixed === true ? 'left' : columns[0].fixed || 'default'\r\n      const columnFixed = columns[0].fixed === true ? 'left' : columns[0].fixed || undefined\r\n\r\n      const left = state.leftFixedColumns.length\r\n      const right = state.allColumns[0].length - state.rightFixedColumns.length\r\n\r\n      let allColumns: ColumnRawWithKey[][]\r\n\r\n      if (fixed === 'left') {\r\n        allColumns = state.allColumns.map(columns => columns.slice(0, left))\r\n      } else if (fixed === 'right') {\r\n        allColumns = state.allColumns.map(columns =>\r\n          columns.slice(right, state.allColumns[0].length),\r\n        )\r\n      } else {\r\n        allColumns = state.allColumns.map(columns => columns.slice(left, right))\r\n      }\r\n\r\n      for (let i = 0, len1 = allColumns.length; i < len1; ++i) {\r\n        const rowColumns = allColumns[i]\r\n\r\n        for (let j = 0, len2 = rowColumns.length; j < len2; ++j) {\r\n          const column = rowColumns[j]\r\n\r\n          if (!column) continue\r\n\r\n          const fixed = column.fixed === true ? 'left' : column.fixed || 'default'\r\n\r\n          setCellSpan(\r\n            i,\r\n            j,\r\n            fixed,\r\n            () => {\r\n              const columns =\r\n                fixed === 'left'\r\n                  ? leftFixedColumns\r\n                  : fixed === 'right'\r\n                    ? rightFixedColumns\r\n                    : normalColumns\r\n              const colSpan = boundRange(column.headSpan ?? 1, 0, columns.length - j)\r\n              const span = { colSpan, rowSpan: column.rowSpan }\r\n\r\n              return span\r\n            },\r\n            'h',\r\n          )\r\n        }\r\n      }\r\n\r\n      for (let colIndex = 0, len = columns.length; colIndex < len; ++colIndex) {\r\n        const column = columns[colIndex]\r\n\r\n        for (const row of rowData) {\r\n          setCellSpan(row.index, column.index, fixed, () => {\r\n            let result: ReturnType<ColumnCellSpanFn>\r\n\r\n            if (typeof column.cellSpan === 'function') {\r\n              result = column.cellSpan({\r\n                row: row.data,\r\n                index: row.index,\r\n                fixed: columnFixed,\r\n              })\r\n            } else if (typeof state.cellSpan === 'function') {\r\n              result = state.cellSpan({\r\n                row: row.data,\r\n                rowIndex: row.index,\r\n                column,\r\n                columnIndex: column.index,\r\n                fixed: columnFixed,\r\n              })\r\n            }\r\n\r\n            result = result! || { colSpan: 1, rowSpan: 1 }\r\n\r\n            const span = { colSpan: result.colSpan ?? 1, rowSpan: result.rowSpan ?? 1 }\r\n\r\n            span.colSpan = boundRange(span.colSpan, 0, columns.length - colIndex)\r\n            span.rowSpan = boundRange(span.rowSpan, 0, processedData.length - row.listIndex)\r\n\r\n            return span\r\n          })\r\n        }\r\n\r\n        for (const { prefix, summaries } of [\r\n          { prefix: 'af', summaries: aboveSummaries },\r\n          { prefix: 'bf', summaries: belowSummaries },\r\n        ]) {\r\n          for (let i = 0, len = summaries.length; i < len; ++i) {\r\n            const summary = summaries[i]\r\n\r\n            setCellSpan(\r\n              i,\r\n              column.index,\r\n              fixed,\r\n              () => {\r\n                let result: ReturnType<SummaryCellSpanFn>\r\n\r\n                if (typeof summary.cellSpan === 'function') {\r\n                  result = summary.cellSpan({\r\n                    column,\r\n                    index: column.index,\r\n                    fixed: columnFixed,\r\n                  })\r\n                }\r\n\r\n                const { colSpan, rowSpan } = result! || { colSpan: 1, rowSpan: 1 }\r\n                const span = { colSpan: colSpan ?? 1, rowSpan: rowSpan ?? 1 }\r\n\r\n                span.colSpan = boundRange(span.colSpan, 0, columns.length - colIndex)\r\n                span.rowSpan = boundRange(span.rowSpan, 0, summaries.length - i)\r\n\r\n                return span\r\n              },\r\n              prefix,\r\n            )\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  function getCurrentData() {\r\n    const { treeRowData, disabledTree, keyConfig } = state\r\n\r\n    if (disabledTree) {\r\n      return treeRowData.map(row => ({ ...row.data }))\r\n    }\r\n\r\n    return mapTree(treeRowData, row => ({ ...row.data }), {\r\n      childField: keyConfig.children as 'children',\r\n    })\r\n  }\r\n\r\n  function queryRow(keyOrData: Key | Record<any, any>) {\r\n    const { dataKey, rowMap, idMaps } = state\r\n\r\n    let key: Key\r\n\r\n    if (typeof keyOrData === 'object') {\r\n      key = idMaps.get(keyOrData) ?? keyOrData[dataKey]\r\n    } else {\r\n      key = keyOrData\r\n    }\r\n\r\n    return isNull(key) ? undefined : rowMap.get(key)\r\n  }\r\n\r\n  type Store = Readonly<{\r\n    state: Readonly<typeof state>,\r\n    getters: Readonly<typeof getters>,\r\n    mutations: Readonly<typeof mutations>,\r\n  }>\r\n\r\n  return { state, getters, mutations } as Store\r\n}\r\n\r\nexport type TableStore = ReturnType<typeof useStore>\r\n","<script setup lang=\"ts\">\r\nimport { NativeScroll } from '@/components/native-scroll'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { Scrollbar } from '@/components/scrollbar'\r\n\r\nimport {\r\n  computed,\r\n  nextTick,\r\n  onBeforeUnmount,\r\n  onMounted,\r\n  provide,\r\n  reactive,\r\n  ref,\r\n  renderSlot,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport TableColumn from './table-column'\r\nimport TableColumnGroup from './table-column-group'\r\nimport TableSummary from './table-summary'\r\nimport TableHead from './table-head.vue'\r\nimport TableBody from './table-body.vue'\r\nimport TableFoot from './table-foot.vue'\r\nimport { emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport {\r\n  debounce,\r\n  debounceMinor,\r\n  getLast,\r\n  isDefined,\r\n  isValidNumber,\r\n  listToMap,\r\n  nextFrameOnce,\r\n  noop,\r\n  removeArrayItem,\r\n  toNumber,\r\n} from '@vexip-ui/utils'\r\nimport { useSetTimeout } from '@vexip-ui/hooks'\r\nimport { tableProps } from './props'\r\nimport { useStore } from './store'\r\nimport { DropType, TABLE_ACTIONS, TABLE_SLOTS, TABLE_STORE } from './symbol'\r\n\r\nimport type { Slots } from 'vue'\r\nimport type { StyleType } from '@vexip-ui/config'\r\nimport type { NativeScrollExposed, NativeScrollPayload } from '@/components/native-scroll'\r\nimport type { ScrollbarExposed } from '@/components/scrollbar'\r\nimport type {\r\n  Key,\r\n  MouseEventType,\r\n  MoveEventType,\r\n  StoreOptions,\r\n  TableCellPayload,\r\n  TableColResizePayload,\r\n  TableColumnGroupOptions,\r\n  TableColumnOptions,\r\n  TableFootPayload,\r\n  TableHeadPayload,\r\n  TableKeyConfig,\r\n  TableRowInstance,\r\n  TableRowPayload,\r\n  TableRowState,\r\n  TableSlots,\r\n  TableSummaryOptions,\r\n} from './symbol'\r\n\r\nconst defaultKeyConfig: Required<TableKeyConfig> = {\r\n  id: 'id',\r\n  children: 'children',\r\n  checked: 'checked',\r\n  height: 'height',\r\n  expanded: 'expanded',\r\n  treeExpanded: 'treeExpanded',\r\n}\r\n\r\ndefineOptions({ name: 'Table' })\r\n\r\nconst _props = defineProps(tableProps)\r\nconst props = useProps('table', _props, {\r\n  locale: null,\r\n  columns: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  summaries: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  data: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  width: null,\r\n  height: null,\r\n  minHeight: null,\r\n  rowClass: null,\r\n  rowStyle: null,\r\n  rowAttrs: null,\r\n  stripe: false,\r\n  border: false,\r\n  highlight: false,\r\n  useXBar: false,\r\n  useYBar: false,\r\n  barFade: 1500,\r\n  rowDraggable: false,\r\n  rowHeight: {\r\n    default: null,\r\n    validator: value => value > 0,\r\n  },\r\n  rowMinHeight: {\r\n    default: 36,\r\n    validator: value => value > 0,\r\n  },\r\n  virtual: false,\r\n  bufferCount: {\r\n    default: 5,\r\n    validator: value => value >= 0,\r\n  },\r\n  scrollClass: () => ({}),\r\n  expandRenderer: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  currentPage: {\r\n    default: 1,\r\n    validator: value => value > 0,\r\n    static: true,\r\n  },\r\n  pageSize: 0,\r\n  transparent: false,\r\n  tooltipTheme: {\r\n    default: 'dark',\r\n    validator: value => ['light', 'dark'].includes(value),\r\n  },\r\n  tooltipWidth: 500,\r\n  singleSorter: false,\r\n  singleFilter: false,\r\n  cellClass: null,\r\n  cellStyle: null,\r\n  cellAttrs: null,\r\n  headClass: null,\r\n  headStyle: null,\r\n  headAttrs: null,\r\n  footClass: null,\r\n  footStyle: null,\r\n  footAttrs: null,\r\n  customSorter: false,\r\n  customFilter: false,\r\n  keyConfig: () => ({}),\r\n  disabledTree: false,\r\n  rowIndent: '16px',\r\n  noCascaded: false,\r\n  colResizable: false,\r\n  cellSpan: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  sidePadding: 0,\r\n  icons: () => ({}),\r\n  borderWidth: 1,\r\n  dataFilter: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  noTransition: false,\r\n  ellipsis: false,\r\n  slots: () => ({}),\r\n})\r\n\r\n// only for dnd end payload\r\nconst emit = defineEmits(['update:data'])\r\n\r\nconst slots = defineSlots<TableSlots>()\r\n\r\nconst nh = useNameHelper('table')\r\nconst { timer } = useSetTimeout()\r\n\r\nconst bodyHeight = ref<number | undefined>(props.height)\r\nconst bodyMinHeight = ref(props.height || 0)\r\nconst xScrollEnabled = ref(false)\r\nconst yScrollEnabled = ref(false)\r\nconst xScrollPercent = ref(0)\r\nconst yScrollPercent = ref(0)\r\nconst headHeight = ref(0)\r\nconst footHeight = ref(0)\r\nconst indicatorShow = ref(false)\r\nconst indicatorType = ref(DropType.BEFORE)\r\nconst tempColumns = reactive(new Set<TableColumnGroupOptions | TableColumnOptions>())\r\nconst tempSummaries = reactive(new Set<TableSummaryOptions>())\r\nconst tableWidth = ref<number | string>()\r\nconst hasDragColumn = ref(false)\r\nconst bodyWidth = ref(0)\r\n\r\nconst wrapper = ref<HTMLElement>()\r\nconst mainScroll = ref<NativeScrollExposed>()\r\nconst xHeadScroll = ref<NativeScrollExposed>()\r\nconst xAboveScroll = ref<NativeScrollExposed>()\r\nconst xBelowScroll = ref<NativeScrollExposed>()\r\nconst thead = ref<HTMLElement>()\r\nconst aboveTfoot = ref<HTMLElement>()\r\nconst belowTfoot = ref<HTMLElement>()\r\nconst indicator = ref<HTMLElement>()\r\nconst xScrollbar = ref<ScrollbarExposed>()\r\nconst yScrollbar = ref<ScrollbarExposed>()\r\n\r\nlet isMounted = false\r\n\r\nconst locale = useLocale('table', toRef(props, 'locale'))\r\nconst keyConfig = computed(() => ({ ...defaultKeyConfig, ...props.keyConfig }))\r\nconst allColumns = computed(() => Array.from(tempColumns))\r\nconst allSummaries = computed(() => Array.from(tempSummaries))\r\n\r\nconst syncToStoreProps = [\r\n  'rowClass',\r\n  'rowStyle',\r\n  'rowAttrs',\r\n  'cellClass',\r\n  'cellStyle',\r\n  'cellAttrs',\r\n  'headClass',\r\n  'headStyle',\r\n  'headAttrs',\r\n  'footClass',\r\n  'footStyle',\r\n  'footAttrs',\r\n  'border',\r\n  'stripe',\r\n  'highlight',\r\n  'currentPage',\r\n  'pageSize',\r\n  'rowHeight',\r\n  'rowMinHeight',\r\n  'rowDraggable',\r\n  'tooltipTheme',\r\n  'tooltipWidth',\r\n  'singleSorter',\r\n  'singleFilter',\r\n  'customSorter',\r\n  'customFilter',\r\n  'noCascaded',\r\n  'colResizable',\r\n  'expandRenderer',\r\n  'cellSpan',\r\n  'sidePadding',\r\n  'borderWidth',\r\n  'dataFilter',\r\n  'ellipsis',\r\n] as const\r\n\r\nconst store = useStore({\r\n  ...(syncToStoreProps.reduce(\r\n    (prev, current) => ((prev[current] = props[current]), prev),\r\n    {} as any,\r\n  ) as StoreOptions),\r\n  columns: allColumns.value,\r\n  summaries: allSummaries.value,\r\n  data: props.data,\r\n  dataKey: keyConfig.value.id,\r\n  virtual: props.virtual,\r\n  locale: locale.value,\r\n  keyConfig: keyConfig.value,\r\n  disabledTree: props.disabledTree,\r\n  colResizable: props.colResizable === true ? 'lazy' : props.colResizable,\r\n  sidePadding: Array.isArray(props.sidePadding)\r\n    ? props.sidePadding\r\n    : [props.sidePadding, props.sidePadding],\r\n})\r\n\r\nprovide(TABLE_STORE, store)\r\nprovide(TABLE_ACTIONS, {\r\n  increaseColumn,\r\n  decreaseColumn,\r\n  increaseSummary,\r\n  decreaseSummary,\r\n  getTableElement,\r\n  refreshXScroll,\r\n  emitRowCheck,\r\n  emitAllRowCheck,\r\n  emitRowExpand,\r\n  emitRowTreeExpand,\r\n  emitRowFilter,\r\n  emitRowSort,\r\n  handleRowDragStart,\r\n  handleRowDragOver,\r\n  handleRowDrop,\r\n  handleRowDragEnd,\r\n  emitRowEvent,\r\n  emitCellEvent,\r\n  emitHeadEvent,\r\n  emitColResize,\r\n  emitFootEvent,\r\n  hasIcon: name => !!props.icons[name],\r\n  getIcon: name => props.icons[name],\r\n  renderTableSlot,\r\n  runInLocked,\r\n  updateColumns: () => debounceMinor(updateColumns),\r\n  setColumnProp,\r\n  updateSummaries: () => debounceMinor(updateSummaries),\r\n  setSummaryProp,\r\n})\r\nprovide(TABLE_SLOTS, slots as Slots)\r\n\r\nconst { state, getters, mutations } = store\r\n\r\nconst mergedLocked = computed(() => props.noTransition || state.locked || state.barScrolling)\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm('stripe')]: props.stripe,\r\n    [nh.bm('border')]: props.border,\r\n    [nh.bm('highlight')]: props.highlight,\r\n    [nh.bm('use-y-bar')]: props.useYBar,\r\n    [nh.bm('transparent')]: props.transparent,\r\n    [nh.bm('virtual')]: props.virtual,\r\n    [nh.bm('col-resizable')]: props.colResizable,\r\n    [nh.bm('col-resizing')]: state.colResizing,\r\n    [nh.bm('locked')]: mergedLocked.value,\r\n    [nh.bm('above-foot')]: state.aboveSummaries.length,\r\n    [nh.bm('below-foot')]: state.belowSummaries.length,\r\n    [nh.bm('using-bar')]: state.barScrolling,\r\n  }\r\n})\r\nconst style = computed(() => {\r\n  const width = tableWidth.value ?? props.width\r\n  const [padLeft, padRight] = state.sidePadding\r\n\r\n  const style: StyleType = {\r\n    [nh.cv('row-indent-width')]:\r\n      typeof props.rowIndent === 'number' ? `${props.rowIndent}px` : props.rowIndent,\r\n    [nh.cv('b-width')]: `${props.borderWidth}px`,\r\n    [nh.cv('expanded-width')]: `${bodyWidth.value}px`,\r\n  }\r\n\r\n  if (padLeft) {\r\n    style[nh.cv('side-pad-left')] = `${padLeft}px`\r\n  }\r\n\r\n  if (padRight) {\r\n    style[nh.cv('side-pad-right')] = `${padRight}px`\r\n  }\r\n\r\n  if (isDefined(width)) {\r\n    if (typeof width === 'number' || isValidNumber(width, true)) {\r\n      style.width = `${width}px`\r\n      style.minWidth = `${width}px`\r\n    } else {\r\n      style.width = width\r\n    }\r\n  }\r\n\r\n  return style\r\n})\r\nconst useXScroll = computed(() => {\r\n  return !!(\r\n    isDefined(props.width) ||\r\n    state.leftFixedColumns.length ||\r\n    state.rightFixedColumns.length\r\n  )\r\n})\r\nconst bodyScrollHeight = computed(() => {\r\n  const { totalHeight } = state\r\n\r\n  return bodyHeight.value ? Math.min(bodyHeight.value, totalHeight) : undefined\r\n})\r\nconst xBarLength = computed(() => mainScroll.value?.xBarLength || 35)\r\nconst yBarLength = computed(() => {\r\n  const { totalHeight } = state\r\n\r\n  if (bodyScrollHeight.value && totalHeight) {\r\n    return Math.max(Math.min((bodyScrollHeight.value / totalHeight) * 100, 99), 5) || 35\r\n  }\r\n\r\n  return 35\r\n})\r\nconst totalWidths = computed(() => {\r\n  return (\r\n    (getLast(getters.totalWidths) || 0) + (state.sidePadding[0] || 0) + (state.sidePadding[1] || 0)\r\n  )\r\n})\r\nconst leftFixedActive = computed(() => xScrollEnabled.value && xScrollPercent.value > 0)\r\nconst rightFixedActive = computed(() => xScrollEnabled.value && xScrollPercent.value < 100)\r\n\r\nconst {\r\n  setColumns,\r\n  setSummaries,\r\n  setData,\r\n  setDataKey,\r\n  setTableWidth,\r\n  setBodyYScroll,\r\n  setBodyXScroll,\r\n  setRenderRows,\r\n  setVirtual,\r\n  setLocale,\r\n  setDragging,\r\n  setKeyConfig,\r\n  setDisabledTree,\r\n  setLocked,\r\n  setBarScrolling,\r\n  clearSort,\r\n  clearFilter,\r\n  refreshRowIndex,\r\n  clearCheckAll,\r\n  getParentRow,\r\n  getCurrentData,\r\n  flatTreeRows,\r\n  refreshRowDepth,\r\n  queryRow,\r\n  handleCheck,\r\n  setTreeExpanded,\r\n} = mutations\r\n\r\nwatch(allColumns, updateColumns)\r\nwatch(allSummaries, updateSummaries)\r\nwatch(() => keyConfig.value.id, setDataKey)\r\nwatch(() => props.data, forceRefreshData, { deep: true })\r\nwatch(() => props.width, computeTableWidth)\r\nwatch([() => props.height, () => props.borderWidth], () => {\r\n  nextTick(computeBodyHeight)\r\n})\r\nwatch(locale, setLocale, { deep: true })\r\nwatch(\r\n  () => props.virtual,\r\n  value => {\r\n    setVirtual(value)\r\n    setData(props.data)\r\n    refreshPercentScroll()\r\n  },\r\n)\r\nwatch(\r\n  keyConfig,\r\n  config => {\r\n    setKeyConfig(config)\r\n    setData(props.data)\r\n  },\r\n  { deep: true },\r\n)\r\nwatch(\r\n  () => props.disabledTree,\r\n  value => {\r\n    setDisabledTree(value)\r\n    setData(props.data)\r\n  },\r\n)\r\nwatch([() => props.rowHeight, () => props.rowMinHeight], () => {\r\n  refresh()\r\n})\r\n\r\nfor (const prop of syncToStoreProps) {\r\n  const watchCallback =\r\n    mutations[\r\n      `set${prop.charAt(0).toLocaleUpperCase()}${prop.slice(1)}` as `set${Capitalize<typeof prop>}`\r\n    ]\r\n\r\n  watch(() => props[prop], watchCallback as any)\r\n}\r\n\r\nfunction syncBarScroll() {\r\n  xScrollbar.value?.handleScroll(xScrollPercent.value)\r\n  yScrollbar.value?.handleScroll(yScrollPercent.value)\r\n}\r\n\r\nconst handlerResize = debounce(refresh)\r\n\r\nonMounted(() => {\r\n  isMounted = true\r\n\r\n  watch(bodyScrollHeight, refreshPercentScroll)\r\n  refresh()\r\n  window.addEventListener('resize', handlerResize)\r\n  nextTick(() => {\r\n    hasDragColumn.value = getters.hasDragColumn\r\n  })\r\n\r\n  if (mainScroll.value) {\r\n    xScrollEnabled.value = mainScroll.value.enableXScroll\r\n    yScrollEnabled.value = mainScroll.value.enableYScroll\r\n  }\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n  isMounted = false\r\n\r\n  window.removeEventListener('resize', handlerResize)\r\n})\r\n\r\ndefineExpose({\r\n  bodyHeight,\r\n  xScrollEnabled,\r\n  yScrollEnabled,\r\n  xScrollPercent,\r\n  yScrollPercent,\r\n  headHeight,\r\n  footHeight,\r\n  indicatorShow,\r\n  bodyScrollHeight,\r\n  totalWidths,\r\n  totalHeight: computed(() => state.totalHeight),\r\n  locked: mergedLocked,\r\n\r\n  store,\r\n\r\n  wrapper,\r\n  mainScroll,\r\n  xHeadScroll,\r\n  xAboveScroll,\r\n  xBelowScroll,\r\n  thead,\r\n  aboveTfoot,\r\n  belowTfoot,\r\n  indicator,\r\n  xScrollbar,\r\n  yScrollbar,\r\n\r\n  clearSort,\r\n  clearFilter,\r\n  clearSelected: clearCheckAll,\r\n  refresh,\r\n  refreshData: forceRefreshData,\r\n  getSelected,\r\n  getData: getCurrentData,\r\n  selectRow: setRowChecked,\r\n  treeExpandRow: setRowTreeExpanded,\r\n})\r\n\r\nfunction forceRefreshData(data = props.data) {\r\n  return runInLocked(() => {\r\n    setData(data)\r\n    nextTick(() => computeRenderRows(true))\r\n    refreshPercentScroll()\r\n  })\r\n}\r\n\r\nfunction computeTableWidth() {\r\n  const width = props.width\r\n\r\n  if (isDefined(width)) {\r\n    if (typeof width === 'string' && parseFloat(width).toString() !== width) {\r\n      tableWidth.value = width\r\n    } else {\r\n      tableWidth.value = `${toNumber(width)}px`\r\n    }\r\n  }\r\n\r\n  nextTick(() => {\r\n    mainScroll.value?.content && setTableWidth(mainScroll.value.content.offsetWidth)\r\n    refreshXScroll()\r\n  })\r\n}\r\n\r\nfunction computeBodyHeight() {\r\n  const height = props.height\r\n  const minHeight = props.minHeight\r\n  const borderWidth = props.borderWidth\r\n\r\n  let fixedHeight = 0\r\n\r\n  if (thead.value || aboveTfoot.value || belowTfoot.value) {\r\n    if (thead.value) {\r\n      fixedHeight = thead.value.offsetHeight\r\n    }\r\n\r\n    if (aboveTfoot.value) {\r\n      fixedHeight += aboveTfoot.value.offsetHeight\r\n    }\r\n\r\n    if (belowTfoot.value) {\r\n      fixedHeight = belowTfoot.value.offsetHeight\r\n    }\r\n  } else {\r\n    // one row as head placeholder\r\n    fixedHeight = props.rowHeight || props.rowMinHeight\r\n  }\r\n\r\n  fixedHeight += 2 * borderWidth\r\n\r\n  if (isDefined(height)) {\r\n    bodyHeight.value = height - fixedHeight\r\n  } else {\r\n    bodyHeight.value = undefined\r\n  }\r\n\r\n  if (isDefined(minHeight)) {\r\n    bodyMinHeight.value = Math.min(minHeight, height ?? Infinity) - fixedHeight\r\n  } else {\r\n    bodyMinHeight.value = 0\r\n  }\r\n}\r\n\r\nfunction handleMainScroll(payload: NativeScrollPayload) {\r\n  if (state.barScrolling) return\r\n\r\n  if (payload.type !== 'vertical') {\r\n    handleXScroll(payload)\r\n  }\r\n\r\n  if (payload.type !== 'horizontal') {\r\n    handleYScroll(payload)\r\n  }\r\n}\r\n\r\nfunction handleXScroll({ clientX, percentX }: { clientX: number, percentX: number }) {\r\n  if (state.barScrolling) return\r\n\r\n  xScrollPercent.value = percentX\r\n  setBodyXScroll(clientX)\r\n  syncBarScroll()\r\n  emitEvent(props.onScroll, {\r\n    type: 'horizontal',\r\n    client: clientX,\r\n    percent: percentX,\r\n  })\r\n}\r\n\r\nfunction handleYScroll({ clientY, percentY }: { clientY: number, percentY: number }) {\r\n  if (state.barScrolling) return\r\n\r\n  yScrollPercent.value = percentY\r\n  setBodyYScroll(clientY)\r\n  syncBarScroll()\r\n  emitYScroll(clientY, percentY)\r\n}\r\n\r\nfunction handleXBarScroll(percent: number) {\r\n  if (!mainScroll.value) return\r\n\r\n  const client = (mainScroll.value.xScrollLimit * percent) / 100\r\n\r\n  xScrollPercent.value = percent\r\n  setBodyXScroll(client)\r\n  emitEvent(props.onScroll, { type: 'horizontal', client, percent })\r\n}\r\n\r\nfunction handleYBarScroll(percent: number) {\r\n  const { totalHeight } = state\r\n  const client = (percent * (totalHeight - (bodyScrollHeight.value ?? 0))) / 100\r\n\r\n  yScrollPercent.value = percent\r\n  setBodyYScroll(client)\r\n  emitYScroll(client, percent)\r\n}\r\n\r\nfunction emitYScroll(client: number, percent: number) {\r\n  runInLocked()\r\n  nextFrameOnce(computeRenderRows)\r\n  emitEvent(props.onScroll, { type: 'vertical', client, percent })\r\n}\r\n\r\nfunction handleResize() {\r\n  if (mainScroll.value?.content) {\r\n    bodyWidth.value = mainScroll.value.content.offsetWidth\r\n  }\r\n\r\n  isMounted && refresh()\r\n}\r\n\r\nfunction increaseColumn(column: TableColumnOptions) {\r\n  tempColumns.add(column)\r\n}\r\n\r\nfunction decreaseColumn(column: TableColumnOptions) {\r\n  tempColumns.delete(column)\r\n}\r\n\r\nfunction increaseSummary(summary: TableSummaryOptions) {\r\n  tempSummaries.add(summary)\r\n}\r\n\r\nfunction decreaseSummary(summary: TableSummaryOptions) {\r\n  tempSummaries.delete(summary)\r\n}\r\n\r\nfunction updateColumns() {\r\n  runInLocked(() => {\r\n    setColumns(allColumns.value)\r\n    isMounted && computeTableWidth()\r\n    nextTick(() => {\r\n      hasDragColumn.value = getters.hasDragColumn\r\n    })\r\n  })\r\n}\r\n\r\nfunction setColumnProp(key: Key, prop: string, value: any) {\r\n  mutations.setColumnProp(key, prop, value)\r\n}\r\n\r\nfunction updateSummaries() {\r\n  runInLocked(() => {\r\n    setSummaries(allSummaries.value)\r\n  })\r\n}\r\n\r\nfunction setSummaryProp(key: Key, prop: string, value: any) {\r\n  mutations.setSummaryProp(key, prop, value)\r\n}\r\n\r\nfunction getTableElement() {\r\n  return wrapper.value\r\n}\r\n\r\nfunction refreshXScroll() {\r\n  mainScroll.value?.refresh()\r\n  xHeadScroll.value?.refresh()\r\n  xAboveScroll.value?.refresh()\r\n  xBelowScroll.value?.refresh()\r\n}\r\n\r\nfunction emitRowCheck(payload: TableRowPayload & { checked: boolean }) {\r\n  emitEvent(props.onRowCheck, payload)\r\n}\r\n\r\nfunction emitAllRowCheck(checked: boolean, partial: boolean) {\r\n  emitEvent(props.onRowCheckAll, checked, partial)\r\n}\r\n\r\nfunction emitRowExpand(payload: TableRowPayload & { expanded: boolean }) {\r\n  emitEvent(props.onRowExpand, payload)\r\n}\r\n\r\nfunction emitRowTreeExpand(payload: TableRowPayload & { expanded: boolean }) {\r\n  emitEvent(props.onRowTreeExpand, payload)\r\n}\r\n\r\nfunction emitRowFilter() {\r\n  const { columns, filters } = state\r\n  const columnMap = listToMap(columns, 'key')\r\n  const profiles = Array.from(filters.keys())\r\n    .filter(key => filters.get(key)!.active)\r\n    .map(key => {\r\n      const column = columnMap[key as string]\r\n\r\n      return {\r\n        name: column.name,\r\n        key: column.key,\r\n        meta: column.meta!,\r\n        active: filters.get(key)!.active!,\r\n      }\r\n    })\r\n\r\n  computeRenderRows(true)\r\n  emitEvent(\r\n    props.onRowFilter,\r\n    profiles,\r\n    getters.filteredData.map(row => row.data),\r\n  )\r\n}\r\n\r\nfunction emitRowSort() {\r\n  const { columns, sorters } = state\r\n  const columnMap = listToMap(columns, 'key')\r\n  const profiles = Array.from(sorters.keys())\r\n    .filter(key => sorters.get(key)!.type)\r\n    .map(key => {\r\n      const column = columnMap[key as string]\r\n      const sorter = sorters.get(key)!\r\n\r\n      return {\r\n        name: column.name,\r\n        key: column.key,\r\n        meta: column.meta!,\r\n        type: sorter.type!,\r\n        order: sorter.order,\r\n      }\r\n    })\r\n\r\n  computeRenderRows(true)\r\n  emitEvent(\r\n    props.onRowSort,\r\n    profiles,\r\n    getters.sortedData.map(row => row.data),\r\n  )\r\n}\r\n\r\nlet dragState: {\r\n  draggingRow: TableRowState,\r\n  tableRect: DOMRect,\r\n  willDropRow: TableRowState | null,\r\n  dropType: DropType,\r\n  dropped: boolean,\r\n} | null\r\n\r\nfunction handleRowDragStart(rowInstance: TableRowInstance, event: DragEvent) {\r\n  dragState = {\r\n    draggingRow: rowInstance.row,\r\n    tableRect: wrapper.value!.getBoundingClientRect(),\r\n    willDropRow: null,\r\n    dropType: DropType.BEFORE,\r\n    dropped: false,\r\n  }\r\n\r\n  setDragging(true)\r\n  emitEvent(props.onRowDragStart, rowInstance.row.data, event)\r\n}\r\n\r\nfunction handleRowDragOver(rowInstance: TableRowInstance, event: DragEvent) {\r\n  if (!dragState || !rowInstance.el) return\r\n\r\n  const dropRowRect = rowInstance.el.getBoundingClientRect()\r\n  const tableRect = dragState.tableRect\r\n  const prevPercent = state.disabledTree ? 0.5 : 0.25\r\n  const nextPercent = state.disabledTree ? 0.5 : 0.75\r\n  const distance = event.clientY - dropRowRect.top\r\n  const dropRowHeight = dropRowRect.height\r\n\r\n  let dropType: DropType\r\n  let indicatorTop = -9999\r\n  let isIndicatorShow = true\r\n\r\n  if (distance < dropRowHeight * prevPercent) {\r\n    dropType = DropType.BEFORE\r\n    indicatorTop = dropRowRect.top - tableRect.top\r\n  } else if (distance >= dropRowHeight * nextPercent) {\r\n    dropType = DropType.AFTER\r\n    indicatorTop = dropRowRect.bottom - tableRect.top\r\n  } else {\r\n    dropType = DropType.INNER\r\n    isIndicatorShow = false\r\n  }\r\n\r\n  if (indicator.value) {\r\n    indicator.value.style.top = `${indicatorTop - 2}px`\r\n  }\r\n\r\n  dragState.willDropRow = rowInstance.row\r\n  dragState.dropType = dropType\r\n\r\n  indicatorShow.value = isIndicatorShow\r\n  indicatorType.value = dropType\r\n\r\n  emitEvent(props.onRowDragOver, rowInstance.row.data, event)\r\n}\r\n\r\nfunction isLeftInsideRight(left: TableRowState, right: TableRowState) {\r\n  if (!left || !right) return true\r\n\r\n  while (left) {\r\n    if (left === right || left.key === right.key) {\r\n      return true\r\n    }\r\n\r\n    left = getParentRow(left.key)!\r\n  }\r\n\r\n  return false\r\n}\r\n\r\nfunction handleRowDrop(rowInstance: TableRowInstance, event: DragEvent) {\r\n  if (!dragState) return\r\n\r\n  const { draggingRow, willDropRow, dropType } = dragState\r\n\r\n  if (!willDropRow || isLeftInsideRight(willDropRow, draggingRow)) return\r\n\r\n  let currentKey: Key\r\n  let parent: TableRowState | null\r\n\r\n  if (draggingRow) {\r\n    parent = getParentRow(draggingRow.key)\r\n\r\n    if (!parent) {\r\n      parent = {\r\n        children: state.treeRowData,\r\n      } as TableRowState\r\n    }\r\n\r\n    currentKey = draggingRow.key\r\n    removeArrayItem(parent.children, item => item.key === currentKey)\r\n\r\n    if (!parent.children?.length) {\r\n      parent.treeExpanded = false\r\n    }\r\n  }\r\n\r\n  if (dropType === DropType.INNER) {\r\n    if (!Array.isArray(willDropRow.children)) {\r\n      willDropRow.children = []\r\n    }\r\n\r\n    const children = Array.from(willDropRow.children)\r\n\r\n    children.push(draggingRow)\r\n\r\n    willDropRow.children = children\r\n    willDropRow.treeExpanded = true\r\n    draggingRow.parent = willDropRow.key\r\n  } else {\r\n    currentKey = willDropRow.key\r\n    parent = getParentRow(willDropRow.key)\r\n\r\n    if (!parent) {\r\n      parent = {\r\n        children: state.treeRowData,\r\n      } as TableRowState\r\n    }\r\n\r\n    const index = parent.children.findIndex(row => row.key === currentKey)\r\n\r\n    if (~index) {\r\n      parent.children.splice(+(dropType === DropType.AFTER) + index, 0, draggingRow)\r\n\r\n      draggingRow.parent = parent.key\r\n    }\r\n  }\r\n\r\n  dragState.dropped = true\r\n\r\n  refreshRowDepth()\r\n  flatTreeRows()\r\n  refreshRowIndex()\r\n  emitEvent(props.onRowDrop, rowInstance.row.data, dropType!, event)\r\n}\r\n\r\nfunction handleRowDragEnd(event: DragEvent) {\r\n  if (!dragState) return\r\n\r\n  const { draggingRow, dropped } = dragState\r\n\r\n  dragState = null\r\n  indicatorShow.value = false\r\n\r\n  nextTick(() => {\r\n    const allDataPayload = dropped ? getCurrentData() : state.data\r\n\r\n    setDragging(false)\r\n    dropped && emit('update:data', allDataPayload)\r\n    emitEvent(props.onRowDragEnd, draggingRow.data, allDataPayload, event)\r\n  })\r\n}\r\n\r\nfunction emitRowEvent(type: MouseEventType, payload: TableRowPayload) {\r\n  emitEvent(props[`onRow${type}`], payload)\r\n}\r\n\r\nfunction emitCellEvent(type: MouseEventType, payload: TableCellPayload) {\r\n  emitEvent(props[`onCell${type}`], payload)\r\n}\r\n\r\nfunction emitHeadEvent(type: MouseEventType, payload: TableHeadPayload) {\r\n  emitEvent(props[`onHead${type}`], payload)\r\n}\r\n\r\nfunction emitColResize(type: MoveEventType, payload: TableColResizePayload) {\r\n  emitEvent(props[`onColResize${type}`], payload)\r\n}\r\n\r\nfunction emitFootEvent(type: MouseEventType, payload: TableFootPayload) {\r\n  emitEvent(props[`onFoot${type}`], payload)\r\n}\r\n\r\nfunction computeRenderRows(force = false) {\r\n  const { totalHeight, bodyYScroll, heightBITree } = state\r\n  const { processedData } = getters\r\n  const rowCount = processedData.length\r\n\r\n  if (!props.virtual) {\r\n    setRenderRows(0, rowCount, force)\r\n\r\n    return\r\n  }\r\n\r\n  const viewHeight = Math.max(\r\n    Math.min(bodyHeight.value || 0, bodyScrollHeight.value || 0),\r\n    bodyMinHeight.value,\r\n  )\r\n\r\n  if (!viewHeight) {\r\n    setRenderRows(0, 0, force)\r\n  }\r\n\r\n  let viewStart = bodyYScroll\r\n  let viewEnd = bodyYScroll + viewHeight\r\n\r\n  if (viewEnd > totalHeight) {\r\n    viewEnd = totalHeight\r\n    viewStart = viewEnd - viewHeight\r\n  }\r\n\r\n  const start = heightBITree.boundIndex(viewStart)\r\n  const end = heightBITree.boundIndex(viewEnd)\r\n  const renderStart = Math.max(start - props.bufferCount, 0)\r\n  const renderEnd = Math.min(end + props.bufferCount + 1, rowCount)\r\n\r\n  setRenderRows(renderStart, renderEnd, force)\r\n}\r\n\r\nfunction refresh() {\r\n  return runInLocked(() => {\r\n    nextTick(computeTableWidth)\r\n    setTimeout(() => {\r\n      computeBodyHeight()\r\n      refreshPercentScroll()\r\n      nextFrameOnce(computeRenderRows)\r\n    }, 0)\r\n  })\r\n}\r\n\r\nasync function runInLocked(handler = noop, delay = 250) {\r\n  clearTimeout(timer.locked)\r\n\r\n  setLocked(true)\r\n  await handler()\r\n\r\n  return new Promise<void>(resolve => {\r\n    timer.locked = setTimeout(() => {\r\n      setLocked(false)\r\n      resolve()\r\n    }, delay)\r\n  })\r\n}\r\n\r\nfunction refreshPercentScroll() {\r\n  clearTimeout(timer.scroll)\r\n\r\n  timer.scroll = setTimeout(() => {\r\n    const { totalHeight, bodyYScroll } = state\r\n\r\n    yScrollPercent.value = Math.max(\r\n      Math.min((bodyYScroll / (totalHeight - (bodyScrollHeight.value ?? 0) || 1)) * 100, 100),\r\n      0,\r\n    )\r\n    syncBarScroll()\r\n    nextTick(() => {\r\n      computeBodyHeight()\r\n    })\r\n    runInLocked()\r\n    nextFrameOnce(computeRenderRows)\r\n  }, 10)\r\n}\r\n\r\nfunction getSelected() {\r\n  const data = state.rowData\r\n  const selectedData = []\r\n\r\n  for (let i = 0, len = data.length; i < len; ++i) {\r\n    const row = data[i]\r\n\r\n    if (row.checked) {\r\n      selectedData.push(row.data)\r\n    }\r\n  }\r\n\r\n  return selectedData\r\n}\r\n\r\nfunction setRowChecked(keyOrData: Key | Record<any, any>, checked?: boolean) {\r\n  const row = queryRow(keyOrData)\r\n\r\n  if (!row || getters.disableCheckRows.has(row.key)) return\r\n\r\n  handleCheck(row.key, checked ?? !row.checked)\r\n}\r\n\r\nfunction setRowTreeExpanded(keyOrData: Key | Record<any, any>, expanded?: boolean) {\r\n  const row = queryRow(keyOrData)\r\n\r\n  if (!row) return\r\n\r\n  runInLocked()\r\n  setTreeExpanded(row.key, expanded ?? !row.treeExpanded)\r\n}\r\n\r\nfunction renderTableSlot({ name }: { name: string }) {\r\n  return renderSlot(slots as Slots, name)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"table\"\r\n    :style=\"style\"\r\n    :aria-rowcount=\"props.data.length\"\r\n  >\r\n    <div v-show=\"false\" role=\"none\" aria-hidden>\r\n      <slot></slot>\r\n      <template\r\n        v-for=\"(column, index) in props.columns\"\r\n        :key=\"(column as TableColumnOptions).key ?? `__inner-column-${index}`\"\r\n      >\r\n        <TableColumnGroup v-if=\"'children' in column\" v-bind=\"column\"></TableColumnGroup>\r\n        <TableColumn v-else v-bind=\"column\" :id-key=\"column.key\"></TableColumn>\r\n      </template>\r\n      <TableSummary\r\n        v-for=\"({ key, ...others }, index) in props.summaries\"\r\n        v-bind=\"others\"\r\n        :key=\"`__inner-summary-${index}`\"\r\n        :id-key=\"key\"\r\n      ></TableSummary>\r\n    </div>\r\n    <div ref=\"thead\" :class=\"nh.be('head-wrapper')\">\r\n      <NativeScroll\r\n        ref=\"xHeadScroll\"\r\n        inherit\r\n        mode=\"horizontal\"\r\n        scroll-only\r\n        :class=\"[nh.be('wrapper'), props.scrollClass.horizontal]\"\r\n        :scroll-x=\"state.bodyXScroll\"\r\n        @scroll=\"handleXScroll\"\r\n      >\r\n        <div\r\n          v-if=\"state.leftFixedColumns.length\"\r\n          :class=\"{\r\n            [nh.bem('fixed', 'left')]: true,\r\n            [nh.bem('fixed', 'active')]: leftFixedActive,\r\n          }\"\r\n        >\r\n          <TableHead fixed=\"left\"></TableHead>\r\n        </div>\r\n        <TableHead></TableHead>\r\n        <div\r\n          v-if=\"state.rightFixedColumns.length\"\r\n          :class=\"{\r\n            [nh.bem('fixed', 'right')]: true,\r\n            [nh.bem('fixed', 'active')]: rightFixedActive,\r\n          }\"\r\n        >\r\n          <TableHead fixed=\"right\"></TableHead>\r\n        </div>\r\n      </NativeScroll>\r\n    </div>\r\n    <div\r\n      v-if=\"state.aboveSummaries.length\"\r\n      ref=\"aboveTfoot\"\r\n      :class=\"[nh.be('foot-wrapper'), nh.bem('foot-wrapper', 'above')]\"\r\n    >\r\n      <NativeScroll\r\n        ref=\"xAboveScroll\"\r\n        inherit\r\n        mode=\"horizontal\"\r\n        scroll-only\r\n        :class=\"[nh.be('wrapper'), props.scrollClass.horizontal]\"\r\n        :scroll-x=\"state.bodyXScroll\"\r\n        @scroll=\"handleXScroll\"\r\n      >\r\n        <div\r\n          v-if=\"state.leftFixedColumns.length\"\r\n          :class=\"{\r\n            [nh.bem('fixed', 'left')]: true,\r\n            [nh.bem('fixed', 'active')]: leftFixedActive,\r\n          }\"\r\n        >\r\n          <TableFoot fixed=\"left\" above></TableFoot>\r\n        </div>\r\n        <TableFoot above></TableFoot>\r\n        <div\r\n          v-if=\"state.rightFixedColumns.length\"\r\n          :class=\"{\r\n            [nh.bem('fixed', 'right')]: true,\r\n            [nh.bem('fixed', 'active')]: rightFixedActive,\r\n          }\"\r\n        >\r\n          <TableFoot fixed=\"right\" above></TableFoot>\r\n        </div>\r\n      </NativeScroll>\r\n    </div>\r\n    <div\r\n      :class=\"[\r\n        nh.be('body-wrapper'),\r\n        state.totalHeight >= bodyMinHeight && nh.bem('body-wrapper', 'scrolled'),\r\n      ]\"\r\n      :style=\"{\r\n        ...(!bodyScrollHeight && state.totalHeight\r\n          ? {\r\n            height: `${state.totalHeight}px`,\r\n            transition:\r\n              props.noTransition || state.locked\r\n                ? undefined\r\n                : `height ${nh.gnv('transition-base')}`,\r\n          }\r\n          : undefined),\r\n        minHeight: `${bodyMinHeight}px`,\r\n      }\"\r\n    >\r\n      <NativeScroll\r\n        ref=\"mainScroll\"\r\n        inherit\r\n        mode=\"both\"\r\n        scroll-only\r\n        observe-deep\r\n        :class=\"[nh.be('wrapper'), props.scrollClass.major]\"\r\n        :bar-class=\"nh.bem('bar', 'horizontal')\"\r\n        :height=\"bodyScrollHeight\"\r\n        :scroll-x=\"state.bodyXScroll\"\r\n        :scroll-y=\"state.bodyYScroll\"\r\n        @scroll=\"handleMainScroll\"\r\n        @x-enabled-change=\"xScrollEnabled = $event\"\r\n        @y-enabled-change=\"yScrollEnabled = $event\"\r\n        @resize=\"handleResize\"\r\n      >\r\n        <div\r\n          v-if=\"state.leftFixedColumns.length\"\r\n          :class=\"{\r\n            [nh.bem('fixed', 'left')]: true,\r\n            [nh.bem('fixed', 'active')]: leftFixedActive,\r\n          }\"\r\n          :style=\"{ minHeight: `${state.totalHeight}px` }\"\r\n        >\r\n          <TableBody fixed=\"left\">\r\n            <template v-if=\"slots.empty || props.slots.empty\" #empty=\"{ isFixed }\">\r\n              <slot name=\"empty\" :is-fixed=\"isFixed\">\r\n                <Renderer :renderer=\"props.slots.empty\" :data=\"{ isFixed }\"></Renderer>\r\n              </slot>\r\n            </template>\r\n          </TableBody>\r\n        </div>\r\n        <TableBody>\r\n          <template v-if=\"slots.empty || props.slots.empty\" #empty=\"{ isFixed }\">\r\n            <slot name=\"empty\" :is-fixed=\"isFixed\">\r\n              <Renderer :renderer=\"props.slots.empty\" :data=\"{ isFixed }\"></Renderer>\r\n            </slot>\r\n          </template>\r\n        </TableBody>\r\n        <div\r\n          v-if=\"state.rightFixedColumns.length\"\r\n          :class=\"{\r\n            [nh.bem('fixed', 'right')]: true,\r\n            [nh.bem('fixed', 'active')]: rightFixedActive,\r\n          }\"\r\n          :style=\"{ minHeight: `${state.totalHeight}px` }\"\r\n        >\r\n          <TableBody fixed=\"right\">\r\n            <template v-if=\"slots.empty || props.slots.empty\" #empty=\"{ isFixed }\">\r\n              <slot name=\"empty\" :is-fixed=\"isFixed\">\r\n                <Renderer :renderer=\"props.slots.empty\" :data=\"{ isFixed }\"></Renderer>\r\n              </slot>\r\n            </template>\r\n          </TableBody>\r\n        </div>\r\n      </NativeScroll>\r\n    </div>\r\n    <div\r\n      v-if=\"state.belowSummaries.length\"\r\n      ref=\"belowTfoot\"\r\n      :class=\"[nh.be('foot-wrapper'), nh.bem('foot-wrapper', 'below')]\"\r\n    >\r\n      <NativeScroll\r\n        ref=\"xBelowScroll\"\r\n        inherit\r\n        mode=\"horizontal\"\r\n        scroll-only\r\n        :class=\"[nh.be('wrapper'), props.scrollClass.horizontal]\"\r\n        :bar-class=\"nh.bem('bar', 'horizontal')\"\r\n        :bar-fade=\"props.barFade\"\r\n        :scroll-x=\"state.bodyXScroll\"\r\n        @scroll=\"handleXScroll\"\r\n      >\r\n        <div\r\n          v-if=\"state.leftFixedColumns.length\"\r\n          :class=\"{\r\n            [nh.bem('fixed', 'left')]: true,\r\n            [nh.bem('fixed', 'active')]: leftFixedActive,\r\n          }\"\r\n        >\r\n          <TableFoot fixed=\"left\"></TableFoot>\r\n        </div>\r\n        <TableFoot></TableFoot>\r\n        <div\r\n          v-if=\"state.rightFixedColumns.length\"\r\n          :class=\"{\r\n            [nh.bem('fixed', 'right')]: true,\r\n            [nh.bem('fixed', 'active')]: rightFixedActive,\r\n          }\"\r\n        >\r\n          <TableFoot fixed=\"right\"></TableFoot>\r\n        </div>\r\n      </NativeScroll>\r\n    </div>\r\n    <Scrollbar\r\n      v-if=\"props.useXBar && useXScroll\"\r\n      ref=\"xScrollbar\"\r\n      inherit\r\n      placement=\"bottom\"\r\n      :class=\"nh.bem('bar', 'horizontal')\"\r\n      :fade=\"props.barFade\"\r\n      :disabled=\"!xScrollEnabled\"\r\n      :bar-length=\"xBarLength\"\r\n      :style=\"{ bottom: `${footHeight}px` }\"\r\n      @scroll-start=\"setBarScrolling(true)\"\r\n      @scroll=\"handleXBarScroll\"\r\n      @scroll-end=\"setBarScrolling(false)\"\r\n    ></Scrollbar>\r\n    <Scrollbar\r\n      v-if=\"props.useYBar && bodyScrollHeight\"\r\n      ref=\"yScrollbar\"\r\n      inherit\r\n      placement=\"right\"\r\n      :class=\"nh.bem('bar', 'vertical')\"\r\n      :fade=\"props.barFade\"\r\n      :disabled=\"!yScrollEnabled\"\r\n      :bar-length=\"yBarLength\"\r\n      :style=\"{\r\n        top: headHeight ? `${headHeight}px` : undefined,\r\n        bottom: footHeight ? `${footHeight}px` : undefined,\r\n      }\"\r\n      @scroll-start=\"setBarScrolling(true)\"\r\n      @scroll=\"handleYBarScroll\"\r\n      @scroll-end=\"setBarScrolling(false)\"\r\n    ></Scrollbar>\r\n    <div\r\n      v-if=\"props.rowDraggable || hasDragColumn\"\r\n      v-show=\"indicatorShow\"\r\n      ref=\"indicator\"\r\n      :class=\"[\r\n        nh.be('indicator'),\r\n        indicatorType === 'before' && nh.bem('indicator', 'before'),\r\n        indicatorType === 'after' && nh.bem('indicator', 'after'),\r\n      ]\"\r\n    ></div>\r\n    <div\r\n      v-if=\"state.colResizable === 'lazy'\"\r\n      v-show=\"state.colResizing\"\r\n      :class=\"nh.be('resize-indicator')\"\r\n      :style=\"{ left: `${state.resizeLeft}px` }\"\r\n    ></div>\r\n  </div>\r\n</template>\r\n","import type {\r\n  Data,\r\n  TableColumnOptions,\r\n  TableFilterOptions,\r\n  TableSorterOptions,\r\n  TableSummaryOptions,\r\n} from './symbol'\r\n\r\nexport function defineTableFilter<D = Data, Val extends string | number = string | number>(\r\n  filter: TableFilterOptions<D, Val>,\r\n) {\r\n  return filter as TableFilterOptions<any, any>\r\n}\r\n\r\nexport function defineTableSorter<D = Data>(sorter: TableSorterOptions<D>) {\r\n  return sorter as TableSorterOptions<any>\r\n}\r\n\r\nexport function defineTableColumn<D = Data, Val extends string | number = string | number>(\r\n  column: TableColumnOptions<D, Val>,\r\n) {\r\n  return column\r\n}\r\n\r\nexport function defineTableColumns<D = Data, Val extends string | number = string | number>(\r\n  columns: TableColumnOptions<D, Val>[],\r\n) {\r\n  return columns\r\n}\r\n\r\nexport function defineTableSummary<D = Data, Val extends string | number = string | number>(\r\n  summary: TableSummaryOptions<D, Val>,\r\n) {\r\n  return summary\r\n}\r\n\r\nexport function defineTableSummaries<D = Data, Val extends string | number = string | number>(\r\n  summaries: TableSummaryOptions<D, Val>[],\r\n) {\r\n  return summaries\r\n}\r\n\r\nexport {\r\n  /** @deprecated Please use `defineTableFilter` to replace it */\r\n  defineTableFilter as defineFilter,\r\n  /** @deprecated Please use `defineTableSorter` to replace it */\r\n  defineTableSorter as defineSorter,\r\n  /** @deprecated Please use `defineTableColumn` to replace it */\r\n  defineTableColumn as defineColumn,\r\n  /** @deprecated Please use `defineTableColumns` to replace it */\r\n  defineTableColumns as defineColumns,\r\n  /** @deprecated Please use `defineTableSummary` to replace it */\r\n  defineTableSummary as defineSummary,\r\n  /** @deprecated Please use `defineTableSummaries` to replace it */\r\n  defineTableSummaries as defineSummaries,\r\n}\r\n","<script setup lang=\"ts\">\r\nimport { Renderer } from '@/components/renderer'\r\nimport { TabNav } from '@/components/tab-nav'\r\nimport { TabNavItem } from '@/components/tab-nav-item'\r\n\r\nimport { computed, onMounted, provide, reactive, ref, toRef, watch } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { debounceMinor, isFunction, isNull } from '@vexip-ui/utils'\r\nimport { tabsProps } from './props'\r\nimport { TABS_STATE } from './symbol'\r\n\r\nimport type { ItemState, TabsSlots } from './symbol'\r\n\r\ntype ChangeEvent = (label: string | number) => void\r\n\r\ndefineOptions({ name: 'Tabs' })\r\n\r\nconst _props = defineProps(tabsProps)\r\nconst props = useProps('tabs', _props, {\r\n  active: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  card: false,\r\n  align: 'left',\r\n  placement: 'top',\r\n  closable: false,\r\n  showAdd: false,\r\n  lazy: false,\r\n  lazyLoad: false,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:active'])\r\n\r\nconst slots = defineSlots<TabsSlots>()\r\n\r\nconst nh = useNameHelper('tabs')\r\n\r\nconst currentActive = ref(props.active)\r\nconst currentIndex = ref(0)\r\nconst itemStates = reactive(new Set<ItemState>())\r\nconst inTransition = ref(false)\r\n\r\nconst itemList = computed(() => Array.from(itemStates))\r\n\r\nconst refreshLabels = debounceMinor(() => {\r\n  itemList.value.forEach((item, index) => {\r\n    if (isNull(item.label)) {\r\n      item.label = index + 1\r\n    }\r\n  })\r\n\r\n  if (itemList.value.length >= 1 && isActiveEmpty()) {\r\n    currentActive.value = itemList.value[0].label\r\n  }\r\n})\r\nconst computeIndex = debounceMinor(() => {\r\n  const index = itemList.value.findIndex(item => item.label === currentActive.value)\r\n\r\n  if (~index) {\r\n    currentIndex.value = index\r\n  }\r\n})\r\n\r\nprovide(\r\n  TABS_STATE,\r\n  reactive({\r\n    currentActive,\r\n    lazy: toRef(props, 'lazy'),\r\n    lazyLoad: toRef(props, 'lazyLoad'),\r\n    handleActive,\r\n    increaseItem,\r\n    decreaseItem,\r\n    refreshLabels,\r\n  }),\r\n)\r\n\r\nwatch(\r\n  () => props.active,\r\n  value => {\r\n    currentActive.value = value\r\n  },\r\n)\r\n\r\nonMounted(computeIndex)\r\n\r\ndefineExpose({\r\n  currentActive,\r\n  inTransition,\r\n  itemList,\r\n  handleActive,\r\n  handleAdd,\r\n  handleClose,\r\n})\r\n\r\nfunction isActiveEmpty() {\r\n  return isNull(currentActive.value) || currentActive.value === ''\r\n}\r\n\r\nfunction increaseItem(item: ItemState) {\r\n  itemStates.add(item)\r\n  refreshLabels()\r\n}\r\n\r\nfunction decreaseItem(item: ItemState) {\r\n  itemStates.delete(item)\r\n  refreshLabels()\r\n}\r\n\r\nfunction handleActive(label: string | number) {\r\n  currentActive.value = label\r\n\r\n  computeIndex()\r\n  emit('update:active', label)\r\n  emitEvent(props.onChange as ChangeEvent, label)\r\n}\r\n\r\nfunction handleAdd() {\r\n  emitEvent(props.onAdd)\r\n}\r\n\r\nfunction handleClose(label: string | number) {\r\n  emitEvent(props.onClose as ChangeEvent, label)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"[nh.b(), nh.bm(props.placement), props.inherit && nh.bm('inherit')]\">\r\n    <div :class=\"nh.be('header')\">\r\n      <TabNav\r\n        inherit\r\n        :active=\"currentActive\"\r\n        :card=\"props.card\"\r\n        :align=\"props.align\"\r\n        :placement=\"props.placement\"\r\n        :closable=\"props.closable\"\r\n        :show-add=\"props.showAdd\"\r\n        @change=\"handleActive\"\r\n        @add=\"handleAdd\"\r\n        @close=\"handleClose\"\r\n      >\r\n        <template v-if=\"slots.prefix || props.slots.prefix\" #prefix>\r\n          <slot name=\"prefix\">\r\n            <Renderer :renderer=\"props.slots.prefix\"></Renderer>\r\n          </slot>\r\n        </template>\r\n        <TabNavItem\r\n          v-for=\"(item, index) in itemList\"\r\n          :key=\"index\"\r\n          :label=\"item.label\"\r\n          :icon=\"item.icon\"\r\n          :disabled=\"item.disabled\"\r\n          :closable=\"item.closable\"\r\n        >\r\n          <template v-if=\"isFunction(item.labelRenderer)\">\r\n            <Renderer\r\n              :renderer=\"item.labelRenderer\"\r\n              :data=\"{ label: item.label, disabled: item.disabled }\"\r\n            ></Renderer>\r\n          </template>\r\n          <template v-else>\r\n            {{ item.name || item.label }}\r\n          </template>\r\n        </TabNavItem>\r\n        <template v-if=\"slots.suffix || props.slots.suffix\" #suffix>\r\n          <slot name=\"suffix\">\r\n            <Renderer :renderer=\"props.slots.suffix\"></Renderer>\r\n          </slot>\r\n        </template>\r\n        <template v-if=\"slots.add || props.slots.add\">\r\n          <slot name=\"add\">\r\n            <Renderer :renderer=\"props.slots.add\"></Renderer>\r\n          </slot>\r\n        </template>\r\n        <template v-if=\"slots.marker || props.slots.marker\">\r\n          <slot name=\"marker\">\r\n            <Renderer :renderer=\"props.slots.marker\"></Renderer>\r\n          </slot>\r\n        </template>\r\n      </TabNav>\r\n    </div>\r\n    <div\r\n      :class=\"{\r\n        [nh.be('main')]: true,\r\n        [nh.bem('main', 'transition')]: inTransition\r\n      }\"\r\n      @transitionend=\"inTransition = false\"\r\n    >\r\n      <slot></slot>\r\n    </div>\r\n  </div>\r\n</template>\r\n","import {\r\n  booleanProp,\r\n  booleanStringProp,\r\n  buildProps,\r\n  classProp,\r\n  eventProp,\r\n  iconProp,\r\n  localeProp,\r\n  stateProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\n\r\nexport const textareaProps = buildProps({\r\n  state: stateProp,\r\n  locale: localeProp('input'),\r\n  value: String,\r\n  placeholder: String,\r\n  rows: Number,\r\n  noResize: booleanProp,\r\n  autofocus: booleanProp,\r\n  spellcheck: booleanProp,\r\n  autocomplete: booleanStringProp,\r\n  readonly: booleanProp,\r\n  disabled: booleanProp,\r\n  debounce: booleanProp,\r\n  delay: Number,\r\n  maxLength: Number,\r\n  hideCount: booleanProp,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingLock: booleanProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  sync: booleanProp,\r\n  controlClass: classProp,\r\n  controlAttrs: Object as PropType<Record<string, any>>,\r\n  name: String,\r\n  onFocus: eventProp<(event: FocusEvent) => void>(),\r\n  onBlur: eventProp<(event: FocusEvent) => void>(),\r\n  onInput: eventProp<(value: string) => void>(),\r\n  onChange: eventProp<(value: string) => void>(),\r\n  onEnter: eventProp(),\r\n  onKeyDown: eventProp<(event: KeyboardEvent) => void>(),\r\n  onKeyPress: eventProp<(event: KeyboardEvent) => void>(),\r\n  onKeyUp: eventProp<(event: KeyboardEvent) => void>(),\r\n  onCompositionStart: eventProp<(event: CompositionEvent) => void>(),\r\n  onCompositionEnd: eventProp<(event: CompositionEvent) => void>(),\r\n})\r\n\r\nexport type TextareaProps = ExtractPropTypes<typeof textareaProps>\r\nexport type TextareaCProps = ConfigurableProps<TextareaProps>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { useFieldStore } from '@/components/form'\r\n\r\nimport { computed, ref, toRef, watch } from 'vue'\r\n\r\nimport {\r\n  createIconProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { debounce, isNull, throttle, toNumber } from '@vexip-ui/utils'\r\nimport { textareaProps } from './props'\r\n\r\ndefineOptions({ name: 'Textarea' })\r\n\r\nconst { idFor, state, labelId, disabled, loading, validateField, getFieldValue, setFieldValue } =\r\n  useFieldStore<string>(() => textarea.value?.focus())\r\n\r\nconst _props = defineProps(textareaProps)\r\nconst props = useProps('textarea', _props, {\r\n  state: createStateProp(state),\r\n  locale: null,\r\n  value: {\r\n    default: () => getFieldValue(),\r\n    static: true,\r\n  },\r\n  placeholder: null,\r\n  rows: 2,\r\n  noResize: false,\r\n  autofocus: false,\r\n  spellcheck: false,\r\n  autocomplete: false,\r\n  readonly: false,\r\n  disabled: () => disabled.value,\r\n  debounce: false,\r\n  delay: null,\r\n  maxLength: 0,\r\n  hideCount: false,\r\n  loading: () => loading.value,\r\n  loadingIcon: createIconProp(),\r\n  loadingLock: false,\r\n  loadingEffect: null,\r\n  sync: false,\r\n  controlClass: null,\r\n  controlAttrs: null,\r\n  name: {\r\n    default: '',\r\n    static: true,\r\n  },\r\n})\r\n\r\nconst emit = defineEmits(['update:value'])\r\n\r\nconst nh = useNameHelper('textarea')\r\nconst locale = useLocale('input', toRef(props, 'locale'))\r\nconst icons = useIcons()\r\n\r\nconst focused = ref(false)\r\nconst currentValue = ref(props.value)\r\nconst currentLength = ref(props.value ? props.value.length : 0)\r\nconst composing = ref(false)\r\n\r\nconst textarea = ref<HTMLTextAreaElement>()\r\n\r\nlet lastValue = props.value\r\n\r\nconst isReadonly = computed(() => {\r\n  return (props.loading && props.loadingLock) || props.readonly\r\n})\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.ns('input-vars')]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm('focused')]: focused.value,\r\n    [nh.bm('disabled')]: props.disabled,\r\n    [nh.bm('readonly')]: isReadonly.value,\r\n    [nh.bm('loading')]: props.loading,\r\n    [nh.bm('no-resize')]: props.noResize,\r\n    [nh.bm(props.state)]: props.state !== 'default',\r\n  }\r\n})\r\nconst autoComplete = computed(() => {\r\n  return typeof props.autocomplete === 'boolean'\r\n    ? props.autocomplete\r\n      ? 'on'\r\n      : 'off'\r\n    : props.autocomplete\r\n})\r\n\r\nwatch(\r\n  () => props.value,\r\n  value => {\r\n    currentValue.value = value\r\n    lastValue = value\r\n    limitValueLength()\r\n  },\r\n)\r\n\r\ndefineExpose({\r\n  idFor,\r\n  currentValue,\r\n  currentLength,\r\n  composing,\r\n  isReadonly,\r\n  textarea,\r\n  copyValue,\r\n  focus: (options?: FocusOptions) => textarea.value?.focus(options),\r\n  blur: () => textarea.value?.blur(),\r\n})\r\n\r\nfunction handleFocus(event: FocusEvent) {\r\n  focused.value = true\r\n  emitEvent(props.onFocus, event)\r\n}\r\n\r\nfunction handleBlur(event: FocusEvent) {\r\n  focused.value = false\r\n  emitEvent(props.onBlur, event)\r\n}\r\n\r\nfunction handleChange(event: Event) {\r\n  const type = event.type as 'change' | 'input'\r\n\r\n  if (composing.value) {\r\n    if (type === 'input') return\r\n\r\n    composing.value = false\r\n  }\r\n\r\n  currentValue.value = (event.target as HTMLTextAreaElement).value\r\n  limitValueLength()\r\n\r\n  if (type === 'change') {\r\n    if (lastValue === currentValue.value) return\r\n\r\n    lastValue = currentValue.value\r\n\r\n    if (!props.sync) {\r\n      emit('update:value', currentValue.value)\r\n      setFieldValue(currentValue.value)\r\n    }\r\n\r\n    emitEvent(props.onChange, currentValue.value)\r\n\r\n    if (!props.sync) {\r\n      validateField()\r\n    }\r\n  } else {\r\n    if (props.sync) {\r\n      emit('update:value', currentValue.value)\r\n      setFieldValue(currentValue.value)\r\n    }\r\n\r\n    emitEvent(props.onInput, currentValue.value)\r\n\r\n    if (props.sync) {\r\n      validateField()\r\n    }\r\n  }\r\n}\r\n\r\nfunction handleEnter() {\r\n  emitEvent(props.onEnter)\r\n}\r\n\r\nfunction handleKeyDown(event: KeyboardEvent) {\r\n  emitEvent(props.onKeyDown, event)\r\n}\r\n\r\nfunction handleKeyPress(event: KeyboardEvent) {\r\n  emitEvent(props.onKeyPress, event)\r\n}\r\n\r\nfunction handleKeyUp(event: KeyboardEvent) {\r\n  emitEvent(props.onKeyUp, event)\r\n}\r\n\r\nfunction limitValueLength() {\r\n  let value = currentValue.value\r\n\r\n  if (isNull(value)) {\r\n    currentLength.value = 0\r\n\r\n    return\r\n  }\r\n\r\n  const maxLength = props.maxLength\r\n\r\n  if (maxLength && value.length > maxLength) {\r\n    value = value.slice(0, maxLength)\r\n  }\r\n\r\n  currentLength.value = value.length\r\n  currentValue.value = value\r\n}\r\n\r\nfunction copyValue() {\r\n  const textarea = document.createElement('textarea')\r\n\r\n  textarea.style.height = '0'\r\n  textarea.setAttribute('readonly', 'readonly')\r\n  textarea.value = currentValue.value\r\n  document.body.appendChild(textarea)\r\n  textarea.select()\r\n\r\n  const isSuccess = document.execCommand('copy')\r\n\r\n  document.body.removeChild(textarea)\r\n\r\n  return isSuccess\r\n}\r\n\r\nconst delay = toNumber(props.delay)\r\nconst handleInput = props.debounce\r\n  ? debounce(handleChange, delay || 100)\r\n  : throttle(handleChange, delay || 16)\r\n\r\nfunction handleCompositionStart(event: CompositionEvent) {\r\n  composing.value = true\r\n  emitEvent(props.onCompositionStart, event)\r\n}\r\n\r\nfunction handleCompositionEnd(event: CompositionEvent) {\r\n  if (composing.value) {\r\n    composing.value = false\r\n\r\n    if (textarea.value) {\r\n      textarea.value.dispatchEvent(new Event('input'))\r\n    }\r\n  }\r\n\r\n  emitEvent(props.onCompositionStart, event)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div :id=\"idFor\" :class=\"className\" @click=\"textarea?.focus()\">\r\n    <textarea\r\n      v-bind=\"props.controlAttrs\"\r\n      ref=\"textarea\"\r\n      :class=\"[nh.be('control'), props.controlAttrs?.class, props.controlClass]\"\r\n      :value=\"currentValue\"\r\n      :rows=\"props.rows\"\r\n      :autofocus=\"props.autofocus\"\r\n      :autocomplete=\"autoComplete\"\r\n      :spellcheck=\"props.spellcheck\"\r\n      :disabled=\"props.disabled\"\r\n      :readonly=\"isReadonly\"\r\n      :placeholder=\"props.placeholder ?? locale.placeholder\"\r\n      :maxlength=\"props.maxLength > 0 ? props.maxLength : undefined\"\r\n      :name=\"props.name || props.controlAttrs?.name\"\r\n      :aria-labelledby=\"labelId\"\r\n      @blur=\"handleBlur\"\r\n      @focus=\"handleFocus\"\r\n      @keyup.enter=\"handleEnter\"\r\n      @keyup=\"handleKeyUp\"\r\n      @keypress=\"handleKeyPress\"\r\n      @keydown=\"handleKeyDown\"\r\n      @input=\"handleInput\"\r\n      @change=\"handleChange\"\r\n      @compositionstart=\"handleCompositionStart\"\r\n      @compositionend=\"handleCompositionEnd\"\r\n    ></textarea>\r\n    <div :class=\"nh.be('extra')\">\r\n      <Transition :name=\"nh.ns('fade')\" appear>\r\n        <div v-if=\"props.loading\" :class=\"nh.be('loading')\">\r\n          <Icon\r\n            v-bind=\"icons.loading\"\r\n            :effect=\"props.loadingEffect || icons.loading.effect\"\r\n            :icon=\"props.loadingIcon || icons.loading.icon\"\r\n            label=\"loading\"\r\n          ></Icon>\r\n        </div>\r\n      </Transition>\r\n      <div v-if=\"props.maxLength > 0 && !props.hideCount\" :class=\"nh.be('count')\">\r\n        <slot name=\"count\" :value=\"currentValue\">\r\n          {{ props.maxLength === Infinity ? currentLength : `${currentLength}/${props.maxLength}` }}\r\n        </slot>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n","import { getCountWord, makeSentence } from '@vexip-ui/config'\r\nimport {\r\n  DAY_ON_MILLISECONDS,\r\n  HOUR_ON_MILLISECONDS,\r\n  MINUTE_ON_MILLISECONDS,\r\n  SECOND_ON_MILLISECONDS,\r\n} from '@vexip-ui/utils'\r\n\r\nimport type { Ref } from 'vue'\r\n\r\nexport interface TimeAgoRecord {\r\n  datetime: Date,\r\n  timeAgo: Ref<string>,\r\n  locale: Ref<Record<string, string>>,\r\n  wordSpace: Ref<boolean>,\r\n  interval: false | number,\r\n  updated: number,\r\n}\r\n\r\nlet id = 1\r\n\r\nexport function getId() {\r\n  return id++\r\n}\r\n\r\nconst recordMap = new Map<number, TimeAgoRecord>()\r\n\r\nlet timer: ReturnType<typeof setInterval>\r\nlet isRunning: boolean\r\n\r\nexport function subscribe(id: number, record: TimeAgoRecord) {\r\n  recordMap.set(id, record)\r\n\r\n  if (recordMap.size && !isRunning) {\r\n    clearInterval(timer)\r\n\r\n    timer = setInterval(() => {\r\n      isRunning = true\r\n\r\n      const current = Date.now()\r\n\r\n      recordMap.forEach(record => {\r\n        if (!record.interval) return\r\n\r\n        if (current - record.updated > record.interval) {\r\n          record.timeAgo.value = computeTimeAgo(\r\n            record.datetime,\r\n            current,\r\n            record.locale.value,\r\n            record.wordSpace.value,\r\n          )\r\n          record.updated = current\r\n        }\r\n      })\r\n    }, 5000)\r\n  }\r\n}\r\n\r\nexport function unsubscribe(id: number) {\r\n  recordMap.delete(id)\r\n\r\n  if (!recordMap.size) {\r\n    clearInterval(timer)\r\n    isRunning = false\r\n  }\r\n}\r\n\r\nexport function computeTimeAgo(\r\n  date: Date,\r\n  current: number,\r\n  locale: Record<string, string>,\r\n  wordSpace: boolean,\r\n) {\r\n  const diff = Math.abs(current - date.getTime())\r\n  const type = current > date.getTime() ? locale.ago : locale.late\r\n\r\n  let label: string\r\n  let usedDiff: number\r\n  let noFormat = false\r\n\r\n  if (diff < 10 * SECOND_ON_MILLISECONDS) {\r\n    label = locale.justNow\r\n    noFormat = true\r\n  } else if (diff < MINUTE_ON_MILLISECONDS) {\r\n    label = locale.second\r\n    usedDiff = Math.floor(diff / SECOND_ON_MILLISECONDS)\r\n  } else if (diff < HOUR_ON_MILLISECONDS) {\r\n    label = locale.minute\r\n    usedDiff = Math.floor(diff / MINUTE_ON_MILLISECONDS)\r\n  } else if (diff < DAY_ON_MILLISECONDS) {\r\n    label = locale.hour\r\n    usedDiff = Math.floor(diff / HOUR_ON_MILLISECONDS)\r\n  } else if (diff < 30 * DAY_ON_MILLISECONDS) {\r\n    usedDiff = Math.floor(diff / DAY_ON_MILLISECONDS)\r\n\r\n    if (usedDiff === 1) {\r\n      label = locale.yesterday\r\n      noFormat = true\r\n    } else {\r\n      label = locale.days\r\n    }\r\n  } else if (diff < 365 * DAY_ON_MILLISECONDS) {\r\n    usedDiff = Math.floor(diff / (30 * DAY_ON_MILLISECONDS))\r\n\r\n    if (usedDiff === 1) {\r\n      label = locale.lastMonth\r\n      noFormat = true\r\n    } else {\r\n      label = locale.months\r\n    }\r\n  } else {\r\n    usedDiff = Math.floor(diff / 365 / DAY_ON_MILLISECONDS)\r\n\r\n    if (usedDiff === 1) {\r\n      label = locale.lastYear\r\n      noFormat = true\r\n    } else {\r\n      label = locale.years\r\n    }\r\n  }\r\n\r\n  if (noFormat) {\r\n    return label\r\n  }\r\n\r\n  return makeSentence(`${getCountWord(label, usedDiff!)} ${type}`, wordSpace)\r\n}\r\n","import { booleanNumberProp, booleanStringProp, buildProps, localeProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { Dateable } from '@vexip-ui/utils'\r\n\r\nexport const timeAgoProps = buildProps({\r\n  locale: localeProp('timeAgo'),\r\n  datetime: [String, Number, Date] as PropType<Dateable>,\r\n  interval: booleanNumberProp,\r\n  title: booleanStringProp,\r\n  titleFormat: String,\r\n})\r\n\r\nexport type TimeAgoProps = ExtractPropTypes<typeof timeAgoProps>\r\nexport type TimeAgoCProps = ConfigurableProps<TimeAgoProps, 'datetime'>\r\n","<script setup lang=\"ts\">\r\nimport { computed, onBeforeUnmount, ref, toRef, watch } from 'vue'\r\n\r\nimport { useLocale, useNameHelper, useProps, useWordSpace } from '@vexip-ui/config'\r\nimport { format, toDate } from '@vexip-ui/utils'\r\nimport { computeTimeAgo, getId, subscribe, unsubscribe } from './helper'\r\nimport { timeAgoProps } from './props'\r\n\r\nimport type { Dateable } from '@vexip-ui/utils'\r\n\r\ndefineOptions({ name: 'TimeAgo' })\r\n\r\nconst _props = defineProps(timeAgoProps)\r\nconst props = useProps('timeAgo', _props, {\r\n  locale: null,\r\n  datetime: {\r\n    default: () => Date.now(),\r\n    static: true,\r\n  },\r\n  interval: {\r\n    default: false,\r\n    validator: value => typeof value === 'boolean' || value >= 1,\r\n  },\r\n  title: false,\r\n  titleFormat: 'yyyy-MM-dd HH:mm:ss',\r\n})\r\n\r\nconst nh = useNameHelper('time-ago')\r\nconst datetime = toDateValue(props.datetime)\r\nconst locale = useLocale('timeAgo', toRef(props, 'locale'))\r\nconst wordSpace = useWordSpace()\r\nconst timeAgo = ref(computeTimeAgo(datetime, Date.now(), locale.value, wordSpace.value))\r\n\r\nconst id = getId()\r\nconst record = {\r\n  datetime,\r\n  timeAgo,\r\n  locale,\r\n  wordSpace,\r\n  interval: parseInterval(props.interval),\r\n  updated: Date.now(),\r\n}\r\n\r\nconst currentTitle = computed(() => {\r\n  if (!props.title) return undefined\r\n\r\n  if (typeof props.title === 'string') return props.title\r\n\r\n  return format(props.datetime, props.titleFormat)\r\n})\r\n\r\nsubscribe(id, record)\r\n\r\nwatch(\r\n  () => props.datetime,\r\n  value => {\r\n    record.datetime = toDateValue(value)\r\n    timeAgo.value = computeTimeAgo(datetime, Date.now(), locale.value, wordSpace.value)\r\n  },\r\n)\r\nwatch(\r\n  () => props.interval,\r\n  value => {\r\n    record.interval = parseInterval(value)\r\n  },\r\n)\r\n\r\nonBeforeUnmount(() => {\r\n  unsubscribe(id)\r\n})\r\n\r\nfunction parseInterval(interval: boolean | number) {\r\n  return interval && (interval === true ? 1e4 : interval * 1000)\r\n}\r\n\r\nfunction toDateValue(value: Dateable) {\r\n  if (typeof value === 'string') {\r\n    value = value.replace(/-/g, '/')\r\n  }\r\n\r\n  return toDate(value)\r\n}\r\n\r\ndefineExpose({ timeAgo })\r\n</script>\r\n\r\n<template>\r\n  <span :class=\"[nh.b(), props.inherit && nh.bm('inherit')]\" :title=\"currentTitle\">\r\n    {{ timeAgo }}\r\n  </span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed, ref } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { doubleDigits } from '@vexip-ui/utils'\r\nimport { handleKeyEnter } from './helper'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { LocaleConfig } from '@vexip-ui/config'\r\nimport type { TimeType } from './symbol'\r\n\r\ndefineOptions({ name: 'TimeControl' })\r\n\r\nconst props = defineProps({\r\n  unitType: {\r\n    type: String as PropType<TimeType | ''>,\r\n    default: '',\r\n  },\r\n  enabled: {\r\n    type: Object as PropType<Record<TimeType, boolean>>,\r\n    default: () => ({}),\r\n  },\r\n  activated: {\r\n    type: Object as PropType<Record<TimeType, boolean>>,\r\n    default: () => ({}),\r\n  },\r\n  timeValue: {\r\n    type: Object as PropType<Record<TimeType, number>>,\r\n    default: () => ({}),\r\n  },\r\n  separator: {\r\n    type: String,\r\n    default: ':',\r\n  },\r\n  visible: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  focused: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  filler: {\r\n    type: String,\r\n    default: '-',\r\n    validator: (value: string) => value.length === 1,\r\n  },\r\n  steps: {\r\n    type: Array as PropType<number[]>,\r\n    default: () => [1, 1, 1],\r\n  },\r\n  ctrlSteps: {\r\n    type: Array as PropType<number[]>,\r\n    default: () => [5, 5, 5],\r\n  },\r\n  labels: {\r\n    type: Object as PropType<Partial<Record<TimeType, string>>>,\r\n    default: () => ({}),\r\n  },\r\n  hasError: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  placeholder: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n  readonly: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  labeledBy: {\r\n    type: String,\r\n    default: undefined,\r\n  },\r\n  locale: {\r\n    type: Object as PropType<LocaleConfig['timePicker']>,\r\n    default: () => ({}),\r\n  },\r\n})\r\n\r\nconst emit = defineEmits([\r\n  'input',\r\n  'plus',\r\n  'minus',\r\n  'enter',\r\n  'cancel',\r\n  'unit-focus',\r\n  'unit-blur',\r\n  'prev-unit',\r\n  'next-unit',\r\n  'blur',\r\n])\r\n\r\nconst nh = useNameHelper('time-picker')\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nconst label = computed(() => props.locale.ariaLabel ?? {})\r\nconst isActivated = computed(() => {\r\n  return (Object.keys(props.enabled) as TimeType[]).every(type => {\r\n    return !props.enabled[type] || props.activated[type]\r\n  })\r\n})\r\nconst formattedHour = computed(() => {\r\n  return formatValue('hour')\r\n})\r\nconst formattedMinute = computed(() => {\r\n  return formatValue('minute')\r\n})\r\nconst formattedSecond = computed(() => {\r\n  return formatValue('second')\r\n})\r\n\r\ndefineExpose({\r\n  isActivated,\r\n  wrapper,\r\n  focus: () => {\r\n    wrapper.value?.focus()\r\n  },\r\n  blur: () => {\r\n    wrapper.value?.blur()\r\n  },\r\n})\r\n\r\nfunction formatValue(type: TimeType) {\r\n  return props.activated[type]\r\n    ? doubleDigits(props.timeValue[type])\r\n    : `${props.filler}${props.filler}`\r\n}\r\n\r\nfunction getUnitFocusClass(type: TimeType) {\r\n  return props.visible && props.unitType === type ? nh.bem('unit', 'focused') : null\r\n}\r\n\r\nfunction handleInputFocus(type: TimeType) {\r\n  if (props.readonly) return\r\n\r\n  emit('unit-focus', type)\r\n}\r\n\r\nfunction handleInput(event: KeyboardEvent) {\r\n  if (!props.visible) return\r\n\r\n  const type = handleKeyEnter(event)\r\n\r\n  if (props.readonly) {\r\n    switch (type) {\r\n      case 'ok': {\r\n        emit('enter')\r\n        break\r\n      }\r\n      case 'esc': {\r\n        emit('cancel')\r\n        break\r\n      }\r\n    }\r\n\r\n    return\r\n  }\r\n\r\n  switch (type) {\r\n    case 'next': {\r\n      emit('next-unit')\r\n      break\r\n    }\r\n    case 'prev': {\r\n      emit('prev-unit')\r\n      break\r\n    }\r\n    case 'up': {\r\n      emit('minus', event.ctrlKey)\r\n      break\r\n    }\r\n    case 'down': {\r\n      emit('plus', event.ctrlKey)\r\n      break\r\n    }\r\n    case 'ok': {\r\n      handleEnter()\r\n      break\r\n    }\r\n    case 'esc': {\r\n      handleCancel()\r\n      break\r\n    }\r\n    default: {\r\n      if (typeof type === 'number') {\r\n        emit('input', type)\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nfunction handleEnter() {\r\n  emit('enter')\r\n}\r\n\r\nfunction handleCancel() {\r\n  emit('cancel')\r\n}\r\n\r\nfunction handleBlur() {\r\n  emit('blur')\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"wrapper\"\r\n    :class=\"[nh.be('input'), hasError && nh.bem('input', 'error')]\"\r\n    role=\"none\"\r\n    tabindex=\"-1\"\r\n    @keydown=\"handleInput\"\r\n    @blur=\"handleBlur\"\r\n  >\r\n    <div v-if=\"!focused && !isActivated\" :class=\"nh.be('placeholder')\">\r\n      {{ placeholder }}\r\n    </div>\r\n    <template v-else>\r\n      <div\r\n        v-if=\"enabled.hour\"\r\n        :class=\"[nh.be('unit'), getUnitFocusClass('hour')]\"\r\n        role=\"spinbutton\"\r\n        :aria-label=\"label.hour\"\r\n        :aria-valuenow=\"props.timeValue.hour\"\r\n        :aria-valuetext=\"formattedHour\"\r\n        :aria-valuemin=\"0\"\r\n        :aria-valuemax=\"23\"\r\n        :aria-labelledby=\"labeledBy\"\r\n        @click=\"handleInputFocus('hour')\"\r\n      >\r\n        {{ formattedHour }}\r\n      </div>\r\n      <div\r\n        v-if=\"labels.hour\"\r\n        :class=\"nh.be('label')\"\r\n        aria-hidden\r\n        @click=\"handleInputFocus('hour')\"\r\n      >\r\n        {{ labels.hour }}\r\n      </div>\r\n      <template v-if=\"enabled.minute\">\r\n        <div v-if=\"enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\r\n          {{ separator }}\r\n        </div>\r\n        <div\r\n          :class=\"[nh.be('unit'), getUnitFocusClass('minute')]\"\r\n          role=\"spinbutton\"\r\n          :aria-label=\"label.minute\"\r\n          :aria-valuenow=\"props.timeValue.minute\"\r\n          :aria-valuetext=\"formattedMinute\"\r\n          :aria-valuemin=\"0\"\r\n          :aria-valuemax=\"59\"\r\n          :aria-labelledby=\"labeledBy\"\r\n          @click=\"handleInputFocus('minute')\"\r\n        >\r\n          {{ formattedMinute }}\r\n        </div>\r\n        <div\r\n          v-if=\"labels.minute\"\r\n          :class=\"nh.be('label')\"\r\n          aria-hidden\r\n          @click=\"handleInputFocus('minute')\"\r\n        >\r\n          {{ labels.minute }}\r\n        </div>\r\n      </template>\r\n      <template v-if=\"enabled.second\">\r\n        <div v-if=\"enabled.minute || enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\r\n          {{ separator }}\r\n        </div>\r\n        <div\r\n          :class=\"[nh.be('unit'), getUnitFocusClass('second')]\"\r\n          role=\"spinbutton\"\r\n          :aria-label=\"label.second\"\r\n          :aria-valuenow=\"props.timeValue.second\"\r\n          :aria-valuetext=\"formattedSecond\"\r\n          :aria-valuemin=\"0\"\r\n          :aria-valuemax=\"59\"\r\n          :aria-labelledby=\"labeledBy\"\r\n          @click=\"handleInputFocus('second')\"\r\n        >\r\n          {{ formattedSecond }}\r\n        </div>\r\n        <div\r\n          v-if=\"labels.second\"\r\n          :class=\"nh.be('label')\"\r\n          aria-hidden\r\n          @click=\"handleInputFocus('second')\"\r\n        >\r\n          {{ labels.second }}\r\n        </div>\r\n      </template>\r\n    </template>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Button } from '@/components/button'\r\nimport { Icon } from '@/components/icon'\r\nimport { Popper } from '@/components/popper'\r\nimport { useFieldStore } from '@/components/form'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, nextTick, reactive, ref, toRef, watch } from 'vue'\r\n\r\nimport TimeWheel from './time-wheel.vue'\r\nimport TimeControl from './time-control.vue'\r\nimport {\r\n  createIconProp,\r\n  createSizeProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  makeSentence,\r\n  useIcons,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n  useWordSpace,\r\n} from '@vexip-ui/config'\r\nimport {\r\n  placementWhileList,\r\n  useClickOutside,\r\n  useHover,\r\n  usePopper,\r\n  useSetTimeout,\r\n} from '@vexip-ui/hooks'\r\nimport { USE_TOUCH, boundRange, callIfFunc, doubleDigits, toAttrValue } from '@vexip-ui/utils'\r\nimport { timePickerProps } from './props'\r\nimport { useColumn, useTimeBound } from './helper'\r\nimport { TIME_REG } from './symbol'\r\n\r\nimport type { PopperExposed } from '@/components/popper'\r\nimport type { TimePickerChangeEvent, TimePickerSlots, TimeType } from './symbol'\r\n\r\ndefineOptions({ name: 'TimePicker' })\r\n\r\nconst {\r\n  idFor,\r\n  labelId,\r\n  state,\r\n  disabled,\r\n  loading,\r\n  size,\r\n  validateField,\r\n  clearField,\r\n  getFieldValue,\r\n  setFieldValue,\r\n} = useFieldStore<string | string[]>(() => reference.value?.focus())\r\n\r\nconst nh = useNameHelper('time-picker')\r\n\r\nconst _props = defineProps(timePickerProps)\r\nconst props = useProps('timePicker', _props, {\r\n  size: createSizeProp(size),\r\n  state: createStateProp(state),\r\n  locale: null,\r\n  visible: false,\r\n  placement: {\r\n    default: 'bottom-start',\r\n    validator: value => placementWhileList.includes(value),\r\n  },\r\n  transfer: false,\r\n  format: 'HH:mm:ss',\r\n  separator: ':',\r\n  value: {\r\n    default: () => getFieldValue(),\r\n    static: true,\r\n  },\r\n  filler: {\r\n    default: '-',\r\n    validator: value => value.length === 1,\r\n  },\r\n  clearable: false,\r\n  noAction: false,\r\n  noArrow: false,\r\n  pointer: USE_TOUCH,\r\n  candidate: {\r\n    default: 3,\r\n    validator: value => [0, 1, 2, 3].includes(value),\r\n  },\r\n  steps: () => [1, 1, 1],\r\n  labels: () => ({}),\r\n  shortcuts: () => [],\r\n  range: null,\r\n  disabled: () => disabled.value,\r\n  transitionName: () => nh.ns('drop'),\r\n  confirmText: null,\r\n  cancelText: null,\r\n  ctrlSteps: () => [5, 5, 5],\r\n  prefix: createIconProp(),\r\n  prefixColor: '',\r\n  suffix: createIconProp(),\r\n  suffixColor: '',\r\n  noSuffix: false,\r\n  exchange: false,\r\n  loading: () => loading.value,\r\n  loadingIcon: createIconProp(),\r\n  loadingLock: false,\r\n  loadingEffect: null,\r\n  min: null,\r\n  max: null,\r\n  outsideClose: true,\r\n  outsideCancel: false,\r\n  placeholder: null,\r\n  unitReadonly: false,\r\n  popperAlive: null,\r\n  shortcutsPlacement: 'left',\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:value', 'update:visible'])\r\n\r\nconst slots = defineSlots<TimePickerSlots>()\r\n\r\nconst locale = useLocale('timePicker', toRef(props, 'locale'))\r\nconst icons = useIcons()\r\nconst wordSpace = useWordSpace()\r\n\r\nconst placement = toRef(props, 'placement')\r\nconst transfer = toRef(props, 'transfer')\r\nconst currentVisible = ref(props.visible)\r\nconst focused = ref(false)\r\nconst lastValue = ref('')\r\nconst startState = createTimeState()\r\nconst endState = createTimeState()\r\nconst currentState = ref<'start' | 'end'>('start')\r\nconst staticWheel = ref(false)\r\n\r\nconst { timer } = useSetTimeout()\r\n\r\nconst wrapper = useClickOutside(handleClickOutside)\r\nconst popper = ref<PopperExposed>()\r\nconst { reference, transferTo, updatePopper } = usePopper({\r\n  placement,\r\n  transfer,\r\n  wrapper,\r\n  popper: computed(() => popper.value?.wrapper),\r\n  isDrop: true,\r\n})\r\nconst { isHover } = useHover(reference)\r\nconst { isTimeDisabled } = useTimeBound(toRef(props, 'min'), toRef(props, 'max'))\r\n\r\nconst startInput = ref<InstanceType<typeof TimeControl>>()\r\nconst endInput = ref<InstanceType<typeof TimeControl>>()\r\n\r\nconst startPlaceholder = computed(() => {\r\n  if (props.placeholder) {\r\n    return Array.isArray(props.placeholder) ? props.placeholder[0] : props.placeholder\r\n  }\r\n\r\n  const { select, start, time } = locale.value.placeholder\r\n\r\n  return makeSentence(props.range ? `${start} ${time}` : `${select} ${time}`, wordSpace.value)\r\n})\r\nconst endPlaceholder = computed(() => {\r\n  if (props.placeholder) {\r\n    return Array.isArray(props.placeholder)\r\n      ? props.placeholder[1] || props.placeholder[0]\r\n      : props.placeholder\r\n  }\r\n\r\n  const { end, time } = locale.value.placeholder\r\n\r\n  return makeSentence(`${end} ${time}`, wordSpace.value)\r\n})\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.ns('input-vars'),\r\n    nh.bs('vars'),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('disabled')]: props.disabled,\r\n      [nh.bm(props.size)]: props.size !== 'default',\r\n      [nh.bm('no-hour')]: !startState.enabled.hour,\r\n      [nh.bm('no-minute')]: !startState.enabled.minute,\r\n      [nh.bm('no-second')]: !startState.enabled.second,\r\n      [nh.bm('visible')]: currentVisible.value,\r\n      [nh.bm(props.state)]: props.state !== 'default',\r\n      [nh.bm('is-range')]: props.range,\r\n    },\r\n  ]\r\n})\r\nconst readonly = computed(() => props.loading && props.loadingLock)\r\nconst selectorClass = computed(() => {\r\n  const baseCls = nh.be('selector')\r\n\r\n  return {\r\n    [baseCls]: true,\r\n    [`${baseCls}--disabled`]: props.disabled,\r\n    [`${baseCls}--readonly`]: readonly.value,\r\n    [`${baseCls}--loading`]: props.loading,\r\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\r\n    [`${baseCls}--focused`]: focused.value,\r\n    [`${baseCls}--${props.state}`]: props.state !== 'default',\r\n  }\r\n})\r\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\r\nconst currentValue = computed(() => {\r\n  const values = [startState, endState].map(state => {\r\n    return Object.values(state.timeValue).map(doubleDigits).join(':')\r\n  })\r\n\r\n  return props.range ? values : values[0]\r\n})\r\nconst showClear = computed(() => {\r\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && !!lastValue.value\r\n})\r\nconst startError = computed(() => {\r\n  const { hour, minute, second } = startState.timeValue\r\n\r\n  return (\r\n    isTimeDisabled.hour(hour) ||\r\n    isTimeDisabled.minute(hour, minute) ||\r\n    isTimeDisabled.second(hour, minute, second)\r\n  )\r\n})\r\nconst endError = computed(() => {\r\n  if (!props.range) return false\r\n\r\n  const { hour, minute, second } = endState.timeValue\r\n\r\n  return (\r\n    isTimeDisabled.hour(hour) ||\r\n    isTimeDisabled.minute(hour, minute) ||\r\n    isTimeDisabled.second(hour, minute, second)\r\n  )\r\n})\r\n\r\nwatch(\r\n  () => props.value,\r\n  value => {\r\n    parseValue(value)\r\n    lastValue.value = (Array.isArray(value) ? value[0] || value[1] : value) ? getStringValue() : ''\r\n  },\r\n  { immediate: true },\r\n)\r\nwatch(() => props.format, parseFormat, { immediate: true })\r\nwatch(\r\n  () => props.visible,\r\n  value => {\r\n    currentVisible.value = value\r\n  },\r\n)\r\nwatch(currentVisible, value => {\r\n  if (value) {\r\n    updatePopper()\r\n  }\r\n})\r\nwatch(focused, value => {\r\n  if (value) {\r\n    emitEvent(props.onFocus)\r\n  } else {\r\n    emitEvent(props.onBlur)\r\n  }\r\n})\r\nwatch(currentState, value => {\r\n  if (!props.unitReadonly && currentVisible.value) {\r\n    emitEvent(props.onChangeCol, getCurrentState().column, value)\r\n  }\r\n})\r\nwatch(\r\n  () => startState.column,\r\n  value => {\r\n    if (!props.unitReadonly && currentVisible.value && currentState.value === 'start') {\r\n      emitEvent(props.onChangeCol, value, 'start')\r\n    }\r\n  },\r\n)\r\nwatch(\r\n  () => endState.column,\r\n  value => {\r\n    if (!props.unitReadonly && currentVisible.value && currentState.value === 'end') {\r\n      emitEvent(props.onChangeCol, value, 'end')\r\n    }\r\n  },\r\n)\r\nwatch(\r\n  () => props.disabled,\r\n  value => {\r\n    if (value) {\r\n      setVisible(false)\r\n      handleBlur()\r\n    }\r\n  },\r\n)\r\nwatch(readonly, value => {\r\n  if (value) {\r\n    setVisible(false)\r\n  }\r\n})\r\n\r\ndefineExpose({\r\n  idFor,\r\n  isHover,\r\n  currentVisible,\r\n  focused,\r\n  startState,\r\n  endState,\r\n  currentState,\r\n  currentValue,\r\n  startError,\r\n  endError,\r\n  wrapper,\r\n  reference,\r\n  popper,\r\n  start: startInput,\r\n  end: endInput,\r\n  updatePopper,\r\n  focus: (options?: FocusOptions) => reference.value?.focus(options),\r\n  blur: () => reference.value?.blur(),\r\n})\r\n\r\nfunction createTimeState() {\r\n  const { currentColumn, enabled, resetColumn, enterColumn } = useColumn([\r\n    'hour',\r\n    'minute',\r\n    'second',\r\n  ] as TimeType[])\r\n\r\n  const timeValue = reactive({\r\n    hour: 0,\r\n    minute: 0,\r\n    second: 0,\r\n  })\r\n  const activated = reactive({\r\n    hour: false,\r\n    minute: false,\r\n    second: false,\r\n  })\r\n\r\n  return reactive({\r\n    column: currentColumn,\r\n    enabled,\r\n    activated,\r\n    timeValue,\r\n    resetColumn,\r\n    enterColumn,\r\n  })\r\n}\r\n\r\nfunction getCurrentState() {\r\n  return currentState.value === 'start' ? startState : endState\r\n}\r\n\r\nfunction parseValue<T extends string | null>(value: T | T[]) {\r\n  if (!Array.isArray(value)) {\r\n    value = [value, value]\r\n  }\r\n\r\n  const defaultDate = new Date()\r\n\r\n  for (let i = 0; i < 2; ++i) {\r\n    const match = TIME_REG.exec(value[i] || '')\r\n    const state = i === 0 ? startState : endState\r\n    const { timeValue } = state\r\n\r\n    if (match) {\r\n      toggleActivated(true, i === 0 ? 'start' : 'end')\r\n\r\n      const hour = parseInt(match[1])\r\n      const minute = match[2] ? parseInt(match[2].slice(1)) : 0\r\n      const second = match[3] ? parseInt(match[3].slice(1)) : 0\r\n\r\n      const date = new Date(2000, 1, 1, hour, minute, second)\r\n\r\n      timeValue.hour = date.getHours()\r\n      timeValue.minute = date.getMinutes()\r\n      timeValue.second = date.getSeconds()\r\n    } else {\r\n      timeValue.hour = defaultDate.getHours()\r\n      timeValue.minute = defaultDate.getMinutes()\r\n      timeValue.second = defaultDate.getSeconds()\r\n\r\n      toggleActivated(false, i === 0 ? 'start' : 'end')\r\n    }\r\n\r\n    if (!props.range) break\r\n  }\r\n}\r\n\r\nfunction parseFormat() {\r\n  ;[startState, endState].forEach(state => {\r\n    state.enabled.hour = props.format.includes('H')\r\n    state.enabled.minute = props.format.includes('m')\r\n    state.enabled.second = props.format.includes('s')\r\n  })\r\n}\r\n\r\nfunction toggleActivated(value: boolean, valueType?: 'start' | 'end') {\r\n  const states = valueType\r\n    ? valueType === 'start'\r\n      ? [startState]\r\n      : [endState]\r\n    : [startState, endState]\r\n\r\n  states.forEach(state => {\r\n    ;(Object.keys(state.activated) as TimeType[]).forEach(type => {\r\n      state.activated[type] = value\r\n    })\r\n  })\r\n}\r\n\r\nfunction getStringValue() {\r\n  return Array.isArray(currentValue.value) ? currentValue.value.join('|') : currentValue.value\r\n}\r\n\r\nfunction verifyTime() {\r\n  if (startError.value || (props.range && endError.value)) {\r\n    parseValue(props.value)\r\n  }\r\n}\r\n\r\nfunction setVisible(visible: boolean) {\r\n  if (currentVisible.value === visible) return\r\n\r\n  currentVisible.value = visible\r\n\r\n  emit('update:visible', visible)\r\n  emitEvent(props.onToggle, visible)\r\n}\r\n\r\nfunction emitChange() {\r\n  verifyTime()\r\n\r\n  if (lastValue.value !== getStringValue()) {\r\n    lastValue.value = getStringValue()\r\n\r\n    toggleActivated(true)\r\n    emit('update:value', currentValue.value)\r\n    setFieldValue(currentValue.value)\r\n    emitEvent(props.onChange as TimePickerChangeEvent, currentValue.value)\r\n    validateField()\r\n  }\r\n}\r\n\r\nfunction handleFocused() {\r\n  if (props.disabled) return\r\n\r\n  focused.value = true\r\n\r\n  timer.focus = setTimeout(() => {\r\n    if (focused.value) {\r\n      if (currentState.value === 'start') {\r\n        startInput.value?.focus()\r\n      } else {\r\n        endInput.value?.focus()\r\n      }\r\n    }\r\n  }, 120)\r\n}\r\n\r\nfunction handleBlur() {\r\n  clearTimeout(timer.focus)\r\n\r\n  focused.value = false\r\n  startInput.value?.blur()\r\n  endInput.value?.blur()\r\n}\r\n\r\nfunction showPanel(event: Event) {\r\n  if (props.disabled || readonly.value) return\r\n\r\n  const target = event.target as Node\r\n\r\n  setVisible(true)\r\n  handleFocused()\r\n\r\n  if (wrapper.value && target) {\r\n    const units = Array.from(wrapper.value.querySelectorAll(`.${nh.be('unit')}`))\r\n\r\n    if (!units.some(unit => unit === target || unit.contains(target))) {\r\n      startState.column = null\r\n      endState.column = null\r\n    }\r\n  }\r\n}\r\n\r\nfunction finishInput(shouldChange = true) {\r\n  setVisible(false)\r\n\r\n  shouldChange && emitChange()\r\n  startState.resetColumn()\r\n  endState.resetColumn()\r\n}\r\n\r\nfunction handleClear(finish = true) {\r\n  if (props.disabled || readonly.value) return\r\n\r\n  if (props.clearable) {\r\n    nextTick(() => {\r\n      const emitValue = props.range ? ([] as string[]) : ''\r\n\r\n      parseValue(null)\r\n      finish && finishInput(false)\r\n      emit('update:value', emitValue)\r\n      emitEvent(props.onChange as TimePickerChangeEvent, emitValue)\r\n      emitEvent(props.onClear)\r\n      clearField(emitValue)\r\n      finish && handleBlur()\r\n\r\n      lastValue.value = ''\r\n\r\n      nextTick(() => {\r\n        toggleActivated(false)\r\n      })\r\n    })\r\n  }\r\n}\r\n\r\nfunction handleWheelChange(type: TimeType) {\r\n  if (currentVisible.value) {\r\n    getCurrentState().activated[type] = true\r\n  }\r\n}\r\n\r\nfunction handleInputFocus(type: TimeType) {\r\n  getCurrentState().column = type\r\n}\r\n\r\nfunction handleInput(value: number) {\r\n  const state = getCurrentState()\r\n  const type = state.column\r\n\r\n  if (!type) return\r\n\r\n  handleInputNumber(type, value)\r\n\r\n  if (state.column !== 'second' && state.timeValue[type] >= 10) {\r\n    state.enterColumn('next', false)\r\n  }\r\n}\r\n\r\nfunction handleInputNumber(type: TimeType, number: number) {\r\n  const state = getCurrentState()\r\n  const prev = state.timeValue[type]\r\n\r\n  if (state.activated[type] && prev > 0 && prev < 10) {\r\n    state.timeValue[type] = prev * 10 + number\r\n  } else {\r\n    state.timeValue[type] = number\r\n  }\r\n\r\n  verifyValue(type)\r\n\r\n  state.activated[type] = true\r\n  emitEvent(props.onInput, type, state.timeValue[type])\r\n}\r\n\r\nfunction verifyValue(type: TimeType) {\r\n  const timeValue = getCurrentState().timeValue\r\n\r\n  timeValue[type] = boundRange(timeValue[type], 0, type === 'hour' ? 23 : 59)\r\n  timeValue[type] = Math.round(timeValue[type] / getStep(type)) * getStep(type)\r\n}\r\n\r\nfunction handlePlus(ctrlKey: boolean) {\r\n  const state = getCurrentState()\r\n  const type = state.column\r\n\r\n  if (!type) return\r\n\r\n  if (state.enabled[type]) {\r\n    state.timeValue[type] += ctrlKey ? getCtrlStep(type) : getStep(type)\r\n\r\n    verifyValue(type)\r\n    emitEvent(props.onPlus, type, state.timeValue[type])\r\n  }\r\n}\r\n\r\nfunction handleMinus(ctrlKey: boolean) {\r\n  const state = getCurrentState()\r\n  const type = state.column\r\n\r\n  if (!type) return\r\n\r\n  if (state.enabled[type]) {\r\n    state.timeValue[type] -= ctrlKey ? getCtrlStep(type) : getStep(type)\r\n\r\n    verifyValue(type)\r\n    emitEvent(props.onMinus, type, state.timeValue[type])\r\n  }\r\n}\r\n\r\nfunction getStep(type: TimeType) {\r\n  return props.steps[type === 'hour' ? 0 : type === 'minute' ? 1 : 2] || 1\r\n}\r\n\r\nfunction getCtrlStep(type: TimeType) {\r\n  return props.ctrlSteps[type === 'hour' ? 0 : type === 'minute' ? 1 : 2] || 1\r\n}\r\n\r\nfunction fallbackFocus() {\r\n  requestAnimationFrame(() => {\r\n    handleBlur()\r\n    reference.value?.focus()\r\n  })\r\n}\r\n\r\nfunction handleEnter() {\r\n  fallbackFocus()\r\n  finishInput()\r\n  emitEvent(props.onEnter)\r\n}\r\n\r\nfunction handleCancel() {\r\n  fallbackFocus()\r\n  parseValue(props.value)\r\n  finishInput(false)\r\n  emitEvent(props.onCancel)\r\n}\r\n\r\nfunction handleShortcut(index: number) {\r\n  const { value, name } = props.shortcuts[index]\r\n  const parsedValue = callIfFunc(value)\r\n\r\n  fallbackFocus()\r\n  parseValue(parsedValue)\r\n  emitEvent(props.onShortcut as (name: string, value: string | string[]) => void, name, parsedValue)\r\n  finishInput()\r\n}\r\n\r\nfunction toggleCurrentState(type: 'start' | 'end') {\r\n  currentState.value = type\r\n}\r\n\r\nfunction enterColumn(type: 'prev' | 'next') {\r\n  if (props.range) {\r\n    if (type === 'prev' && currentState.value === 'start' && !startState.column) {\r\n      toggleCurrentState('end')\r\n    }\r\n\r\n    const state = getCurrentState()\r\n    const currentColumn = state.column\r\n\r\n    state.enterColumn(type, !currentColumn)\r\n\r\n    if (currentColumn === state.column) {\r\n      const isStart = currentState.value === 'start'\r\n      const otherState = isStart ? endState : startState\r\n\r\n      otherState.resetColumn(type === 'prev' ? 'second' : 'hour', type === 'prev')\r\n      toggleCurrentState(isStart ? 'end' : 'start')\r\n    }\r\n  } else {\r\n    startState.enterColumn(type)\r\n  }\r\n}\r\n\r\nfunction handleStartInput(type: TimeType) {\r\n  toggleCurrentState('start')\r\n  handleInputFocus(type)\r\n}\r\n\r\nfunction handleEndInput(type: TimeType) {\r\n  toggleCurrentState('end')\r\n  handleInputFocus(type)\r\n}\r\n\r\nfunction exchangeValue() {\r\n  ;(Object.keys(startState.timeValue) as TimeType[]).forEach(type => {\r\n    const temp = endState.timeValue[type]\r\n    endState.timeValue[type] = startState.timeValue[type]\r\n    startState.timeValue[type] = temp\r\n  })\r\n}\r\n\r\nfunction handleExchangeClick(event: MouseEvent) {\r\n  if (props.exchange) {\r\n    !currentVisible.value && event.stopPropagation()\r\n    exchangeValue()\r\n  }\r\n}\r\n\r\nfunction handleClickOutside() {\r\n  emitEvent(props.onClickOutside)\r\n\r\n  if (props.outsideClose && currentVisible.value) {\r\n    finishInput(!props.outsideCancel)\r\n    handleBlur()\r\n    emitEvent(props.onOutsideClose)\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :id=\"idFor\"\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"group\"\r\n    :aria-disabled=\"toAttrValue(props.disabled)\"\r\n    :aria-expanded=\"toAttrValue(currentVisible)\"\r\n    aria-haspopup=\"dialog\"\r\n    :aria-labelledby=\"labelId\"\r\n    @click=\"showPanel\"\r\n  >\r\n    <div\r\n      ref=\"reference\"\r\n      :class=\"selectorClass\"\r\n      tabindex=\"0\"\r\n      @keydown.space.prevent=\"showPanel\"\r\n      @keydown.backspace.prevent=\"handleClear(false)\"\r\n    >\r\n      <div\r\n        v-if=\"hasPrefix\"\r\n        :class=\"[nh.be('icon'), nh.be('prefix')]\"\r\n        :style=\"{ color: props.prefixColor }\"\r\n      >\r\n        <slot name=\"prefix\">\r\n          <Renderer :renderer=\"props.slots.prefix\">\r\n            <Icon :icon=\"props.prefix\"></Icon>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n      <div :class=\"nh.be('control')\">\r\n        <TimeControl\r\n          ref=\"startInput\"\r\n          :unit-type=\"currentState === 'start' ? startState.column! : ''\"\r\n          :enabled=\"startState.enabled\"\r\n          :activated=\"startState.activated\"\r\n          :time-value=\"startState.timeValue\"\r\n          :steps=\"props.steps\"\r\n          :ctrl-steps=\"props.ctrlSteps\"\r\n          :focused=\"focused\"\r\n          :visible=\"currentVisible\"\r\n          :separator=\"props.separator\"\r\n          :filler=\"props.filler\"\r\n          :labels=\"props.labels\"\r\n          :has-error=\"startError\"\r\n          :placeholder=\"startPlaceholder\"\r\n          :readonly=\"props.unitReadonly\"\r\n          :labeled-by=\"labelId\"\r\n          :locale=\"locale\"\r\n          @input=\"handleInput\"\r\n          @plus=\"handlePlus\"\r\n          @minus=\"handleMinus\"\r\n          @enter=\"handleEnter\"\r\n          @cancel=\"handleCancel\"\r\n          @unit-focus=\"handleStartInput\"\r\n          @prev-unit=\"enterColumn('prev')\"\r\n          @next-unit=\"enterColumn('next')\"\r\n          @blur=\"startState.column = null\"\r\n        ></TimeControl>\r\n        <template v-if=\"props.range\">\r\n          <div\r\n            :class=\"[nh.be('exchange'), props.exchange ? nh.bem('exchange', 'enabled') : '']\"\r\n            @click=\"handleExchangeClick\"\r\n          >\r\n            <slot name=\"exchange\">\r\n              <Renderer :renderer=\"props.slots.exchange\">\r\n                <Icon v-bind=\"icons.exchange\" style=\"padding-top: 1px\"></Icon>\r\n              </Renderer>\r\n            </slot>\r\n          </div>\r\n          <TimeControl\r\n            ref=\"endInput\"\r\n            :unit-type=\"currentState === 'end' ? endState.column! : ''\"\r\n            :enabled=\"endState.enabled\"\r\n            :activated=\"endState.activated\"\r\n            :time-value=\"endState.timeValue\"\r\n            :steps=\"props.steps\"\r\n            :ctrl-steps=\"props.ctrlSteps\"\r\n            :focused=\"focused\"\r\n            :visible=\"currentVisible\"\r\n            :separator=\"props.separator\"\r\n            :filler=\"props.filler\"\r\n            :labels=\"props.labels\"\r\n            :has-error=\"endError\"\r\n            :placeholder=\"endPlaceholder\"\r\n            :readonly=\"props.unitReadonly\"\r\n            :labeled-by=\"labelId\"\r\n            :locale=\"locale\"\r\n            @input=\"handleInput\"\r\n            @plus=\"handlePlus\"\r\n            @minus=\"handleMinus\"\r\n            @enter=\"handleEnter\"\r\n            @cancel=\"handleCancel\"\r\n            @unit-focus=\"handleEndInput\"\r\n            @prev-unit=\"enterColumn('prev')\"\r\n            @next-unit=\"enterColumn('next')\"\r\n            @blur=\"endState.column = null\"\r\n          ></TimeControl>\r\n        </template>\r\n      </div>\r\n      <div\r\n        v-if=\"!props.noSuffix\"\r\n        :class=\"[nh.be('icon'), nh.be('suffix')]\"\r\n        :style=\"{\r\n          color: props.suffixColor,\r\n          opacity: showClear || props.loading ? '0%' : ''\r\n        }\"\r\n      >\r\n        <slot name=\"suffix\">\r\n          <Renderer :renderer=\"props.slots.suffix\">\r\n            <Icon v-bind=\"icons.clock\" :icon=\"props.suffix || icons.clock.icon\"></Icon>\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n      <div\r\n        v-else-if=\"props.clearable || props.loading\"\r\n        :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\r\n      ></div>\r\n      <Transition :name=\"nh.ns('fade')\" appear>\r\n        <button\r\n          v-if=\"showClear\"\r\n          :class=\"[nh.be('icon'), nh.be('clear')]\"\r\n          type=\"button\"\r\n          tabindex=\"-1\"\r\n          :aria-label=\"locale.ariaLabel.clear\"\r\n          @click.stop=\"handleClear()\"\r\n        >\r\n          <Icon v-bind=\"icons.clear\"></Icon>\r\n        </button>\r\n        <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\r\n          <Icon\r\n            v-bind=\"icons.loading\"\r\n            :effect=\"props.loadingEffect || icons.loading.effect\"\r\n            :icon=\"props.loadingIcon || icons.loading.icon\"\r\n          ></Icon>\r\n        </div>\r\n      </Transition>\r\n    </div>\r\n    <Popper\r\n      ref=\"popper\"\r\n      :class=\"[nh.be('popper'), nh.bs('vars')]\"\r\n      :visible=\"currentVisible\"\r\n      :to=\"transferTo\"\r\n      :transition=\"props.transitionName\"\r\n      :alive=\"props.popperAlive ?? !transferTo\"\r\n      @click.stop=\"handleFocused\"\r\n      @before-enter=\"staticWheel = true\"\r\n      @before-leave=\"staticWheel = true\"\r\n      @after-enter=\"staticWheel = false\"\r\n      @after-leave=\"staticWheel = false\"\r\n    >\r\n      <div\r\n        :class=\"{\r\n          [nh.be('panel')]: true,\r\n          [nh.bem('panel', 'vertical')]:\r\n            props.shortcuts.length &&\r\n            (props.shortcutsPlacement === 'top' || props.shortcutsPlacement === 'bottom')\r\n        }\"\r\n        :aria-labelledby=\"labelId\"\r\n      >\r\n        <div\r\n          v-if=\"props.shortcuts.length\"\r\n          :class=\"[\r\n            nh.be('list'),\r\n            nh.bem('list', 'sub'),\r\n            nh.be('shortcuts'),\r\n            nh.bem('shortcuts', props.shortcutsPlacement)\r\n          ]\"\r\n        >\r\n          <div\r\n            v-for=\"(item, index) in props.shortcuts\"\r\n            :key=\"index\"\r\n            :class=\"nh.be('shortcut')\"\r\n            :title=\"item.name\"\r\n            @click=\"handleShortcut(index)\"\r\n          >\r\n            {{ item.name }}\r\n          </div>\r\n        </div>\r\n        <div :class=\"nh.be('list')\">\r\n          <div :class=\"nh.be('wheels')\">\r\n            <TimeWheel\r\n              v-model:hour=\"startState.timeValue.hour\"\r\n              v-model:minute=\"startState.timeValue.minute\"\r\n              v-model:second=\"startState.timeValue.second\"\r\n              :no-arrow=\"props.noArrow\"\r\n              :candidate=\"props.candidate\"\r\n              :steps=\"props.steps\"\r\n              :pointer=\"props.pointer\"\r\n              :disabled-time=\"isTimeDisabled\"\r\n              :no-transition=\"staticWheel\"\r\n              @change=\"handleWheelChange\"\r\n              @toggle-col=\"toggleCurrentState('start')\"\r\n            ></TimeWheel>\r\n            <TimeWheel\r\n              v-if=\"props.range\"\r\n              v-model:hour=\"endState.timeValue.hour\"\r\n              v-model:minute=\"endState.timeValue.minute\"\r\n              v-model:second=\"endState.timeValue.second\"\r\n              :no-arrow=\"props.noArrow\"\r\n              :candidate=\"props.candidate\"\r\n              :steps=\"props.steps\"\r\n              :pointer=\"props.pointer\"\r\n              :disabled-time=\"isTimeDisabled\"\r\n              :no-transition=\"staticWheel\"\r\n              @change=\"handleWheelChange\"\r\n              @toggle-col=\"toggleCurrentState('end')\"\r\n            ></TimeWheel>\r\n          </div>\r\n          <div v-if=\"!props.noAction\" :class=\"nh.be('action')\">\r\n            <Button\r\n              inherit\r\n              text\r\n              size=\"small\"\r\n              @click.stop=\"handleCancel\"\r\n            >\r\n              {{ props.cancelText || locale.cancel }}\r\n            </Button>\r\n            <Button\r\n              inherit\r\n              type=\"primary\"\r\n              size=\"small\"\r\n              :disabled=\"startError || endError\"\r\n              @click.stop=\"handleEnter\"\r\n            >\r\n              {{ props.confirmText || locale.confirm }}\r\n            </Button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </Popper>\r\n  </div>\r\n</template>\r\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { TimelineItemType } from './symbol'\r\n\r\nexport const timelineProps = buildProps({\r\n  pending: booleanProp,\r\n  dashed: booleanProp,\r\n  lineColor: String,\r\n  spacing: [Number, String],\r\n  flip: booleanProp,\r\n  horizontal: booleanProp,\r\n  alternate: booleanProp,\r\n  onSignalClick: eventProp<(label: string | number) => void>(),\r\n})\r\n\r\nexport type TimelineProps = ExtractPropTypes<typeof timelineProps>\r\nexport type TimelineCProps = ConfigurableProps<TimelineProps>\r\n\r\nexport const timelineItemProps = buildProps({\r\n  type: String as PropType<TimelineItemType>,\r\n  color: String,\r\n  label: [Number, String],\r\n  dashed: booleanProp,\r\n  lineColor: String,\r\n  spacing: [Number, String],\r\n  onSignalClick: eventProp<(label: string | number) => void>(),\r\n})\r\n\r\nexport type TimelineItemProps = ExtractPropTypes<typeof timelineItemProps>\r\nexport type TimelineItemCProps = ConfigurableProps<TimelineItemProps>\r\n","import type { InjectionKey } from 'vue'\r\n\r\nexport type TimelineItemType = 'primary' | 'info' | 'success' | 'error' | 'warning' | 'disabled'\r\n\r\nexport interface ItemState {\r\n  label: string | number,\r\n  index: number,\r\n  total: number,\r\n  height: number,\r\n}\r\n\r\nexport interface TimelineState {\r\n  dashed: boolean,\r\n  lineColor: string,\r\n  spacing: number | string,\r\n  alternate: boolean,\r\n  horizontal: boolean,\r\n  increaseItem: (item: ItemState) => void,\r\n  decreaseItem: (item: ItemState) => void,\r\n  handleSignalClick: (label: string | number) => void,\r\n}\r\n\r\nexport const TIMELINE_STATE = '__VXP_TIMELINE_STATE' as unknown as InjectionKey<TimelineState>\r\n\r\nexport const timelineItemTypes = Object.freeze<TimelineItemType[]>([\r\n  'primary',\r\n  'info',\r\n  'success',\r\n  'error',\r\n  'warning',\r\n  'disabled',\r\n])\r\n","<script setup lang=\"ts\">\r\nimport { computed, provide, reactive, toRef } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { debounceMinor, isNull } from '@vexip-ui/utils'\r\nimport { timelineProps } from './props'\r\nimport { TIMELINE_STATE } from './symbol'\r\n\r\nimport type { ItemState, TimelineState } from './symbol'\r\n\r\ndefineOptions({ name: 'Timeline' })\r\n\r\nconst _props = defineProps(timelineProps)\r\nconst props = useProps('timeline', _props, {\r\n  pending: false,\r\n  dashed: false,\r\n  lineColor: null,\r\n  spacing: null,\r\n  flip: false,\r\n  horizontal: false,\r\n  alternate: false,\r\n})\r\n\r\nconst nh = useNameHelper('timeline')\r\nconst itemStates = reactive(new Set<ItemState>())\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.b()]: true,\r\n    [nh.bs('vars')]: true,\r\n    [nh.bm('inherit')]: props.inherit,\r\n    [nh.bm('pending')]: props.pending,\r\n    [nh.bm('alternate')]: props.alternate,\r\n    [nh.bm('flip')]: props.flip,\r\n    [nh.bm('horizontal')]: props.horizontal,\r\n  }\r\n})\r\nconst height = computed(() => {\r\n  return Math.max(...Array.from(itemStates).map(state => state.height)) * 2\r\n})\r\n\r\ndefineExpose({ itemStates })\r\n\r\nconst refreshLabels = debounceMinor(() => {\r\n  const total = itemStates.size\r\n\r\n  Array.from(itemStates).forEach((item, index) => {\r\n    item.index = index + 1\r\n    item.total = total\r\n\r\n    if (isNull(item.label)) {\r\n      item.label = index + 1\r\n    }\r\n  })\r\n})\r\n\r\nconst state: TimelineState = reactive({\r\n  dashed: toRef(props, 'dashed'),\r\n  lineColor: toRef(props, 'lineColor'),\r\n  spacing: toRef(props, 'spacing'),\r\n  alternate: toRef(props, 'alternate'),\r\n  horizontal: toRef(props, 'horizontal'),\r\n  increaseItem,\r\n  decreaseItem,\r\n  handleSignalClick,\r\n})\r\n\r\nprovide(TIMELINE_STATE, state)\r\n\r\nfunction increaseItem(item: ItemState) {\r\n  itemStates.add(item)\r\n  refreshLabels()\r\n}\r\n\r\nfunction decreaseItem(item: ItemState) {\r\n  itemStates.delete(item)\r\n  refreshLabels()\r\n}\r\n\r\nfunction handleSignalClick(label: string | number) {\r\n  emitEvent(props.onSignalClick, label)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :class=\"className\"\r\n    :style=\"{ height: props.horizontal && props.alternate ? `${height}px` : undefined }\"\r\n  >\r\n    <slot></slot>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed, inject, onBeforeUnmount, onMounted, onUpdated, reactive, ref, watch } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { timelineItemProps } from './props'\r\nimport { TIMELINE_STATE, timelineItemTypes } from './symbol'\r\n\r\nimport type { ItemState } from './symbol'\r\n\r\ndefineOptions({ name: 'TimelineItem' })\r\n\r\nconst _props = defineProps(timelineItemProps)\r\nconst props = useProps('timelineItem', _props, {\r\n  type: {\r\n    default: 'primary',\r\n    validator: value => timelineItemTypes.includes(value),\r\n  },\r\n  color: '',\r\n  label: {\r\n    default: null,\r\n    static: true,\r\n  },\r\n  dashed: null,\r\n  lineColor: null,\r\n  spacing: null,\r\n})\r\n\r\ndefineSlots<{\r\n  default: () => any,\r\n  signal: () => any,\r\n  line: () => any,\r\n}>()\r\n\r\nconst timelineState = inject(TIMELINE_STATE, null)\r\n\r\nconst nh = useNameHelper('timeline')\r\nconst currentLabel = ref(props.label)\r\nconst content = ref<HTMLElement>()\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.be('item')]: true,\r\n    [nh.bem('item', props.type)]: timelineItemTypes.includes(props.type),\r\n  }\r\n})\r\nconst itemStyle = computed(() => {\r\n  const spacing = props.spacing || props.spacing === 0 ? props.spacing : timelineState?.spacing\r\n  const style: Record<string, any> = {\r\n    [nh.cv('item-span')]: typeof spacing === 'number' ? `${spacing}px` : spacing,\r\n  }\r\n\r\n  if (props.color) {\r\n    style[nh.cv('pointer-color')] = props.color\r\n    style[nh.cv('pointer-b-color')] = props.color\r\n  }\r\n\r\n  return style\r\n})\r\nconst lineStyle = computed(() => {\r\n  const isDashed = props.dashed ?? timelineState?.dashed ?? false\r\n  const color = props.lineColor ?? timelineState?.lineColor\r\n\r\n  return {\r\n    borderInlineStartStyle: isDashed ? ('dashed' as const) : undefined,\r\n    borderInlineStartColor: color,\r\n  }\r\n})\r\n\r\ndefineExpose({ currentLabel, content })\r\n\r\nif (timelineState) {\r\n  const state: ItemState = reactive({\r\n    label: currentLabel,\r\n    index: 0,\r\n    total: 0,\r\n    height: 0,\r\n  })\r\n\r\n  timelineState.increaseItem(state)\r\n\r\n  watch(() => timelineState.alternate, updateHeight)\r\n  watch(() => timelineState.horizontal, updateHeight)\r\n\r\n  onMounted(updateHeight)\r\n  onUpdated(updateHeight)\r\n\r\n  onBeforeUnmount(() => {\r\n    timelineState.decreaseItem(state)\r\n  })\r\n\r\n  function updateHeight() {\r\n    requestAnimationFrame(() => {\r\n      if (timelineState?.horizontal && content.value) {\r\n        state.height = content.value.scrollHeight\r\n      }\r\n    })\r\n  }\r\n}\r\n\r\nfunction handleSignalClick() {\r\n  emitEvent(props.onSignalClick, currentLabel.value)\r\n  timelineState?.handleSignalClick(currentLabel.value)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"className\" :style=\"itemStyle\">\r\n    <div :class=\"nh.be('signal')\" @click=\"handleSignalClick\">\r\n      <slot name=\"signal\">\r\n        <div :class=\"nh.be('pointer')\"></div>\r\n      </slot>\r\n    </div>\r\n    <div :class=\"nh.be('line')\" :style=\"lineStyle\">\r\n      <slot name=\"line\"></slot>\r\n    </div>\r\n    <div ref=\"content\" :class=\"nh.be('content')\">\r\n      <slot></slot>\r\n    </div>\r\n  </div>\r\n</template>\r\n","import { booleanProp, buildProps, classProp, iconProp, styleProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { IconMinorProps } from '@/components/icon'\r\nimport type { ToastOptions, ToastPosition } from './symbol'\r\n\r\nexport const toastProps = buildProps({\r\n  bodyWidth: Number,\r\n  icon: iconProp,\r\n  iconProps: Object as PropType<IconMinorProps>,\r\n  position: String as PropType<ToastPosition>,\r\n  transitionName: String,\r\n  closable: booleanProp,\r\n  maskClose: booleanProp,\r\n  showMask: booleanProp,\r\n  maskClass: classProp,\r\n  maskStyle: styleProp,\r\n  parseHtml: booleanProp,\r\n  renderer: Function as PropType<(options: ToastOptions) => any>,\r\n})\r\n\r\nexport type ToastProps = ExtractPropTypes<typeof toastProps>\r\nexport type ToastCProps = ConfigurableProps<ToastProps, 'renderer'>\r\n","import type { ComponentPublicInstance } from 'vue'\r\nimport type { ClassType, StyleType } from '@vexip-ui/config'\r\nimport type { IconMinorProps } from '@/components/icon'\r\n\r\nexport type ToastType = 'success' | 'warning' | 'error' | 'loading'\r\nexport type ToastPosition = 'top' | 'center' | 'bottom'\r\n\r\nexport interface ToastOptions extends Record<string, any> {\r\n  type?: ToastType | null,\r\n  content?: string,\r\n  icon?: Record<string, any> | (() => any) | null,\r\n  iconProps?: IconMinorProps,\r\n  position?: ToastPosition,\r\n  transitionName?: string,\r\n  closable?: boolean,\r\n  maskClose?: boolean,\r\n  showMask?: boolean,\r\n  maskClass?: ClassType,\r\n  maskStyle?: StyleType,\r\n  parseHtml?: boolean,\r\n  onClose?: () => void,\r\n}\r\n\r\nexport interface ToastInstance extends ComponentPublicInstance {\r\n  openToast: (options: ToastOptions) => Promise<void>,\r\n  closeToast: () => void,\r\n}\r\n\r\nexport const effectiveTypes = Object.freeze(['success', 'warning', 'error', 'loading'])\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, nextTick, onMounted, reactive } from 'vue'\r\n\r\nimport { createIconProp, useIcons, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\r\nimport { isFunction } from '@vexip-ui/utils'\r\nimport { toastProps } from './props'\r\nimport { effectiveTypes } from './symbol'\r\n\r\nimport type { ToastOptions, ToastType } from './symbol'\r\n\r\ndefineOptions({ name: 'Toast' })\r\n\r\nconst nh = useNameHelper('toast')\r\n\r\nconst _props = defineProps(toastProps)\r\nconst props = useProps('toast', _props, {\r\n  bodyWidth: 100,\r\n  icon: createIconProp(),\r\n  iconProps: () => ({}),\r\n  position: 'center',\r\n  transitionName: () => nh.ns('ease'),\r\n  closable: false,\r\n  maskClose: false,\r\n  showMask: false,\r\n  maskClass: null,\r\n  maskStyle: null,\r\n  renderer: {\r\n    default: null,\r\n    isFunc: true,\r\n    static: true,\r\n  },\r\n  parseHtml: false,\r\n})\r\n\r\nconst getIndex = useZIndex()\r\nconst icons = useIcons()\r\n\r\nconst predefinedIcons = computed(() => ({\r\n  success: icons.value.success,\r\n  warning: icons.value.warning,\r\n  error: icons.value.error,\r\n  loading: icons.value.loading,\r\n}))\r\n\r\nconst state = reactive({\r\n  visible: false,\r\n  zIndex: 0,\r\n  type: null as ToastType | null,\r\n  content: '',\r\n  icon: props.icon,\r\n  iconProps: props.iconProps as any,\r\n  position: props.position,\r\n  transition: props.transitionName,\r\n  closable: props.closable,\r\n  maskClose: props.maskClose,\r\n  showMask: props.showMask,\r\n  maskClass: props.maskClass as any,\r\n  maskStyle: props.maskStyle as any,\r\n  parseHtml: props.parseHtml,\r\n  textOnly: false,\r\n  renderer: props.renderer,\r\n  onClose: null as (() => void) | null,\r\n})\r\n\r\nconst mountedPromise = new Promise<void>(resolve => {\r\n  onMounted(() => {\r\n    nextTick(resolve)\r\n  })\r\n})\r\n\r\ndefineExpose({ state, openToast, closeToast, handleReset })\r\n\r\nasync function openToast(options: ToastOptions) {\r\n  await mountedPromise\r\n\r\n  state.zIndex = getIndex()\r\n  state.type = options.type ?? null\r\n  state.content = options.content ?? ''\r\n  state.icon = options.icon ?? props.icon\r\n  state.iconProps = options.iconProps ?? props.iconProps\r\n  state.position = options.position ?? props.position\r\n  state.transition = options.transitionName ?? props.transitionName\r\n  state.closable = options.closable ?? props.closable\r\n  state.maskClose = options.maskClose ?? props.maskClose\r\n  state.showMask = options.showMask ?? props.showMask\r\n  state.maskClass = options.maskClass ?? props.maskClass\r\n  state.maskStyle = options.maskStyle ?? props.maskStyle\r\n  state.parseHtml = options.parseHtml ?? props.parseHtml\r\n  state.renderer = isFunction(options.renderer) ? options.renderer : props.renderer\r\n  state.onClose = options.onClose || null\r\n\r\n  state.textOnly = !state.icon && !(state.type && effectiveTypes.includes(state.type))\r\n\r\n  if (isFunction(state.renderer)) {\r\n    const render = state.renderer\r\n\r\n    state.renderer = () => render(options)\r\n    state.textOnly = false\r\n  }\r\n\r\n  state.visible = true\r\n}\r\n\r\nfunction closeToast() {\r\n  state.visible = false\r\n\r\n  if (isFunction(state.onClose)) {\r\n    state.onClose()\r\n  }\r\n}\r\n\r\nfunction handleReset() {\r\n  if (state.visible) return\r\n\r\n  state.type = null\r\n  state.content = ''\r\n  state.icon = props.icon\r\n  state.iconProps = props.iconProps\r\n  state.position = props.position\r\n  state.transition = props.transitionName\r\n  state.closable = props.closable\r\n  state.maskClose = props.maskClose\r\n  state.showMask = props.showMask\r\n  state.maskClass = props.maskClass\r\n  state.maskStyle = props.maskStyle\r\n  state.parseHtml = props.parseHtml\r\n  state.textOnly = false\r\n  state.renderer = props.renderer\r\n  state.onClose = null\r\n}\r\n\r\nfunction handleWrapperClick() {\r\n  if (state.visible && state.closable) {\r\n    closeToast()\r\n  }\r\n}\r\n\r\nfunction handleMaskClick() {\r\n  if (state.visible && state.maskClose) {\r\n    closeToast()\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :class=\"{\r\n      [nh.b()]: true,\r\n      [nh.bs('vars')]: true,\r\n      [nh.bm('text-only')]: state.textOnly\r\n    }\"\r\n    role=\"alert\"\r\n    :style=\"{\r\n      zIndex: state.zIndex\r\n    }\"\r\n    aria-atomic=\"true\"\r\n    aria-live=\"assertive\"\r\n  >\r\n    <Transition :name=\"nh.ns('fade')\">\r\n      <div\r\n        v-if=\"state.showMask && state.visible\"\r\n        :class=\"[nh.be('mask'), state.maskClass]\"\r\n        :style=\"state.maskStyle\"\r\n        @click=\"handleMaskClick\"\r\n        @wheel.stop.prevent\r\n      ></div>\r\n    </Transition>\r\n    <Transition :name=\"state.transition\">\r\n      <div\r\n        v-if=\"state.visible\"\r\n        :class=\"{\r\n          [nh.be('wrapper')]: true,\r\n          [nh.bem('wrapper', state.position)]: state.position !== 'center',\r\n          [nh.bem('wrapper', 'closable')]: state.closable\r\n        }\"\r\n        @click=\"handleWrapperClick\"\r\n        @wheel.stop.prevent\r\n      >\r\n        <Renderer v-if=\"isFunction(state.renderer)\" :renderer=\"state.renderer\"></Renderer>\r\n        <template v-else>\r\n          <div\r\n            v-if=\"state.icon || (state.type && effectiveTypes.includes(state.type))\"\r\n            :class=\"nh.be('icon')\"\r\n          >\r\n            <Icon\r\n              v-if=\"state.icon\"\r\n              :icon=\"state.icon\"\r\n              :scale=\"1.8\"\r\n              v-bind=\"state.iconProps\"\r\n            ></Icon>\r\n            <Icon\r\n              v-else\r\n              v-bind=\"{ ...predefinedIcons[state.type!], scale: 1.8, ...state.iconProps }\"\r\n            ></Icon>\r\n          </div>\r\n          <div v-if=\"state.parseHtml\" :class=\"nh.be('content')\" v-html=\"state.content\"></div>\r\n          <div v-else :class=\"nh.be('content')\">\r\n            {{ state.content }}\r\n          </div>\r\n        </template>\r\n      </div>\r\n    </Transition>\r\n  </div>\r\n</template>\r\n","import { createApp, createVNode, markRaw, render } from 'vue'\r\n\r\nimport Component from './toast.vue'\r\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\r\nimport { destroyObject, isClient, noop, toNumber } from '@vexip-ui/utils'\r\n\r\nimport type { App, MaybeRef } from 'vue'\r\nimport type { MaybeInstance } from '@vexip-ui/hooks'\r\nimport type { ToastInstance, ToastOptions, ToastType } from './symbol'\r\n\r\nexport { toastProps } from './props'\r\n\r\nexport type { ToastProps, ToastCProps } from './props'\r\nexport type { ToastType, ToastOptions }\r\n\r\ntype FuzzyOptions = string | ToastOptions\r\n\r\ninterface AipMethod {\r\n  (options: ToastOptions): () => void,\r\n  (content: string, duration?: number): () => void,\r\n  /** @internal */\r\n  (options: FuzzyOptions, duration?: number): () => void,\r\n}\r\n\r\nconst conveniences: Record<ToastType, Record<string, any>> = {\r\n  success: {},\r\n  warning: {},\r\n  error: {},\r\n  loading: {\r\n    showMask: true,\r\n  },\r\n}\r\n\r\nexport class ToastManager {\r\n  name: string\r\n  defaults: Record<string, unknown>\r\n\r\n  open: AipMethod\r\n  success: AipMethod\r\n  warning: AipMethod\r\n  error: AipMethod\r\n  loading: AipMethod\r\n\r\n  private _mountedApp: App<unknown> | null\r\n  private _instance: ToastInstance | null\r\n  private _innerApp: App<unknown> | null\r\n  private _container: HTMLElement | null\r\n  private _timer: ReturnType<typeof setTimeout> | null\r\n  private _wrapper: HTMLElement | SVGElement | null\r\n  private _mountedEl: HTMLElement | null\r\n\r\n  constructor(options: Partial<ToastOptions> = {}) {\r\n    options = {\r\n      ...options,\r\n      duration: options.duration ? toNumber(options.duration) : 2000,\r\n    }\r\n\r\n    this._mountedApp = null\r\n    this._instance = null\r\n    this._innerApp = null\r\n    this._container = null\r\n    this._timer = null\r\n    this._wrapper = null\r\n    this._mountedEl = null\r\n    this.name = 'Toast'\r\n    this.defaults = {}\r\n\r\n    this.config(options)\r\n\r\n    this.open = (content: FuzzyOptions, duration?: number) => {\r\n      return this._open(null, content, duration)\r\n    }\r\n\r\n    this.success = (content: FuzzyOptions, duration?: number) => {\r\n      return this._open('success', content, duration)\r\n    }\r\n\r\n    this.warning = (content: FuzzyOptions, duration?: number) => {\r\n      return this._open('warning', content, duration)\r\n    }\r\n\r\n    this.error = (content: FuzzyOptions, duration?: number) => {\r\n      return this._open('error', content, duration)\r\n    }\r\n\r\n    this.loading = (content: FuzzyOptions, duration?: number) => {\r\n      return this._open('loading', content, duration)\r\n    }\r\n  }\r\n\r\n  close() {\r\n    this._timer && clearTimeout(this._timer)\r\n    this._getInstance()?.closeToast()\r\n  }\r\n\r\n  config(options: Record<string, unknown>) {\r\n    this.defaults = { ...this.defaults, ...options }\r\n  }\r\n\r\n  clone() {\r\n    const manager = new ToastManager(this.defaults)\r\n\r\n    manager._mountedApp = this._mountedApp\r\n\r\n    return manager\r\n  }\r\n\r\n  destroy() {\r\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\r\n    this._innerApp?.unmount()\r\n    this._container && render(null, this._container)\r\n    destroyObject(this)\r\n  }\r\n\r\n  isDestroyed() {\r\n    return false\r\n  }\r\n\r\n  install(app: App, options: Partial<ToastOptions> & { property?: string } = {}) {\r\n    const { property, ...others } = options\r\n\r\n    this.config(others)\r\n    this._mountedApp = app\r\n\r\n    if (property || !app.config.globalProperties.$toast) {\r\n      app.config.globalProperties[property || '$toast'] = this\r\n    }\r\n  }\r\n\r\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\r\n    if (!isClient) return\r\n\r\n    const el = unrefElement(target)\r\n\r\n    if (el) {\r\n      this._wrapper = el\r\n\r\n      if (this._instance) {\r\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\r\n      } else {\r\n        this._getInstance()\r\n      }\r\n    }\r\n  }\r\n\r\n  private _getInstance() {\r\n    if (!this._instance && isClient) {\r\n      if (!this._mountedApp) {\r\n        console.warn('[vexip-ui:Toast]: App missing, the plugin maybe not installed.')\r\n\r\n        this._container = document.createElement('div')\r\n        this._innerApp = createApp(Component)\r\n        this._instance = this._innerApp.mount(this._container) as ToastInstance\r\n      } else {\r\n        const vnode = createVNode(Component, null, null)\r\n\r\n        this._container = document.createElement('div')\r\n        vnode.appContext = this._mountedApp._context\r\n\r\n        render(vnode, this._container)\r\n\r\n        this._instance = proxyExposed<ToastInstance>(vnode)\r\n      }\r\n\r\n      this._mountedEl = this._container.firstElementChild as HTMLElement\r\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\r\n    }\r\n\r\n    return this._instance\r\n  }\r\n\r\n  private _open(type: null | ToastType, content: FuzzyOptions, _duration?: number) {\r\n    if (!isClient) {\r\n      return noop\r\n    }\r\n\r\n    this._timer && clearTimeout(this._timer)\r\n\r\n    const options = typeof content === 'string' ? { content, duration: _duration } : content\r\n    const convenienceOptions = type ? (conveniences[type] ?? {}) : {}\r\n\r\n    const userCloseFn = options.onClose\r\n    const onClose = () => {\r\n      this._timer && clearTimeout(this._timer)\r\n\r\n      if (typeof userCloseFn === 'function') {\r\n        return userCloseFn()\r\n      }\r\n    }\r\n\r\n    const toast = this._getInstance()!\r\n    const item: ToastOptions = {\r\n      ...this.defaults,\r\n      ...convenienceOptions,\r\n      ...options,\r\n      type: type ?? options.type,\r\n      onClose,\r\n    }\r\n\r\n    if (item.icon && typeof item.icon !== 'function') {\r\n      item.icon = markRaw(item.icon)\r\n    }\r\n\r\n    toast.openToast(item)\r\n\r\n    const duration = typeof item.duration === 'number' ? item.duration : 2000\r\n\r\n    if (duration >= 500) {\r\n      this._timer = setTimeout(() => {\r\n        toast.closeToast()\r\n      }, duration)\r\n    }\r\n\r\n    return () => {\r\n      this._timer && clearTimeout(this._timer)\r\n      toast.closeToast()\r\n    }\r\n  }\r\n}\r\n\r\nexport const Toast = new ToastManager()\r\n","import { booleanProp, booleanStringProp, buildProps, eventProp, localeProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { Placement } from '@vexip-ui/hooks'\r\nimport type { TourSignType, TourSlots, TourStepOptions, TourStepRenderFn, TourType } from './symbol'\r\n\r\nexport const tourProps = buildProps({\r\n  locale: localeProp('tour'),\r\n  active: booleanProp,\r\n  index: Number,\r\n  steps: Array as PropType<TourStepOptions[]>,\r\n  type: String as PropType<TourType>,\r\n  hideMask: booleanProp,\r\n  signType: String as PropType<TourSignType>,\r\n  padding: [Number, Array] as PropType<number | number[]>,\r\n  closable: booleanProp,\r\n  permeable: booleanProp,\r\n  transfer: booleanStringProp,\r\n  slots: Object as PropType<TourSlots>,\r\n  onToggle: eventProp<(active: boolean) => void>(),\r\n  onChange: eventProp<(index: number, step: TourStepOptions) => void>(),\r\n  onClose: eventProp(),\r\n  onMaskClick: eventProp<(event: MouseEvent) => void>(),\r\n})\r\n\r\nexport type TourProps = ExtractPropTypes<typeof tourProps>\r\nexport type TourCProps = ConfigurableProps<ExtractPropTypes<typeof tourProps>>\r\n\r\nexport const tourStepProps = buildProps({\r\n  target: [String, Object, Function] as PropType<string | object | (() => any)>,\r\n  placement: String as PropType<Placement>,\r\n  title: String,\r\n  content: String,\r\n  order: Number,\r\n  type: String as PropType<TourType>,\r\n  renderer: Function as PropType<TourStepRenderFn>,\r\n  onPrev: eventProp(),\r\n  onNext: eventProp(),\r\n})\r\n\r\nexport type TourStepProps = ExtractPropTypes<typeof tourStepProps>\r\nexport type TourStepCProps = ConfigurableProps<ExtractPropTypes<typeof tourStepProps>>\r\n","import type { InjectionKey, MaybeRef } from 'vue'\r\nimport type { MaybeElement, MaybeInstance, Placement } from '@vexip-ui/hooks'\r\nimport type { BubbleType } from '@/components/bubble'\r\n\r\nexport type TourType = BubbleType\r\nexport type TourSignType = 'dot' | 'bar' | 'count'\r\n\r\nexport interface TourVirtual {\r\n  getBoundingClientRect(): { top: number, left: number, width: number, height: number },\r\n}\r\n\r\nexport type TourTarget =\r\n  | MaybeRef<string | MaybeInstance | TourVirtual>\r\n  | (() => string | MaybeElement | TourVirtual)\r\n\r\nexport interface TourPayload {\r\n  start(): void,\r\n  prev(): void,\r\n  next(autoClose?: boolean): void,\r\n  close(): void,\r\n}\r\n\r\nexport type TourStepRenderFn = (payload: TourPayload) => any\r\n\r\nexport interface TourStepOptions {\r\n  target?: TourTarget,\r\n  placement?: Placement,\r\n  title?: string,\r\n  content?: string,\r\n  order?: number,\r\n  type?: TourType,\r\n  renderer?: TourStepRenderFn,\r\n}\r\n\r\nexport type TourSlotParams = TourPayload & { step: TourStepOptions, index: number }\r\nexport type TourCommonSLot = (params: TourSlotParams) => any\r\n\r\nexport interface TourState {\r\n  increaseStep(step: TourStepOptions): void,\r\n  decreaseStep(step: TourStepOptions): void,\r\n}\r\n\r\nexport interface TourSlots {\r\n  /**\r\n   * @internal\r\n   */\r\n  default?: () => any,\r\n  header?: TourCommonSLot,\r\n  title?: TourCommonSLot,\r\n  close?: TourCommonSLot,\r\n  body?: TourCommonSLot,\r\n  footer?: TourCommonSLot,\r\n  sign?: TourCommonSLot,\r\n  actions?: TourCommonSLot,\r\n}\r\n\r\nexport const TOUR_STATE = '___VXP_TOUR_STATE' as unknown as InjectionKey<TourState>\r\n","<script setup lang=\"ts\">\r\nimport { Bubble } from '@/components/bubble'\r\nimport { Button } from '@/components/button'\r\nimport { Icon } from '@/components/icon'\r\nimport { Masker } from '@/components/masker'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, provide, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\r\n\r\nimport {\r\n  emitEvent,\r\n  getStepByWord,\r\n  useIcons,\r\n  useId,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { unrefElement, useModifier, usePopper } from '@vexip-ui/hooks'\r\nimport { callIfFunc, decide, isClient, isFunction } from '@vexip-ui/utils'\r\nimport { tourProps } from './props'\r\nimport { TOUR_STATE } from './symbol'\r\n\r\nimport type { BubbleExposed } from '@/components/bubble'\r\nimport type { MaskerExposed } from '@/components/masker'\r\nimport type { TourSlots, TourStepOptions } from './symbol'\r\n\r\ndefineOptions({\r\n  name: 'Tour',\r\n  inheritAttrs: false,\r\n})\r\n\r\nconst _props = defineProps(tourProps)\r\nconst props = useProps('tour', _props, {\r\n  locale: null,\r\n  active: false,\r\n  index: {\r\n    static: true,\r\n    default: 0,\r\n    validator: value => value >= 0,\r\n  },\r\n  steps: {\r\n    static: true,\r\n    default: () => [],\r\n  },\r\n  type: 'default',\r\n  hideMask: false,\r\n  signType: 'dot',\r\n  padding: 10,\r\n  closable: true,\r\n  permeable: false,\r\n  transfer: false,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:active', 'update:index'])\r\n\r\ndefineSlots<TourSlots>()\r\n\r\nconst nh = useNameHelper('tour')\r\nconst locale = useLocale('tour', toRef(props, 'locale'))\r\nconst icons = useIcons()\r\n\r\nconst currentActive = ref(props.active)\r\nconst currentIndex = ref(props.index)\r\nconst tempSteps: Set<TourStepOptions> = reactive(new Set<any>())\r\nconst currentRect = ref<number[]>()\r\nconst sideRects = ref<(number | string)[][]>()\r\n\r\nconst masker = ref<MaskerExposed>()\r\nconst bubble = ref<BubbleExposed>()\r\nconst wrapper = computed(() => masker.value?.wrapper)\r\n\r\nuseModifier({\r\n  target: wrapper,\r\n  passive: false,\r\n  onKeyDown: (event, modifier) => {\r\n    if (!currentActive.value) return\r\n\r\n    decide(\r\n      [\r\n        [() => modifier.left || modifier.up, prev],\r\n        [() => modifier.right || modifier.down, next],\r\n        [() => modifier.escape, handleClose],\r\n      ],\r\n      {\r\n        beforeMatchAny: () => {\r\n          event.preventDefault()\r\n          event.stopPropagation()\r\n        },\r\n        afterMatchAny: modifier.resetAll,\r\n      },\r\n    )\r\n  },\r\n})\r\n\r\nconst allSteps = computed(() => {\r\n  return Array.from(tempSteps)\r\n    .concat(props.steps)\r\n    .sort((prev, next) => (prev.order || 0) - (next.order || 0))\r\n})\r\nconst currentStep = computed(() => allSteps.value[currentIndex.value])\r\nconst type = computed(() => {\r\n  const type = currentStep.value?.type || props.type\r\n\r\n  return type === 'default' ? undefined : type\r\n})\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    {\r\n      [nh.bm('hide-mask')]: props.hideMask,\r\n      [nh.bm('permeable')]: props.permeable,\r\n    },\r\n  ]\r\n})\r\nconst padding = computed(() => {\r\n  if (Array.isArray(props.padding)) {\r\n    return props.padding.length === 2\r\n      ? [props.padding[0], props.padding[1], props.padding[0], props.padding[1]]\r\n      : props.padding\r\n  } else {\r\n    return new Array<number>(4).fill(props.padding)\r\n  }\r\n})\r\nconst maskId = useId()\r\n\r\nconst { reference, placement, updatePopper } = usePopper({\r\n  wrapper,\r\n  placement: computed(() => currentStep.value?.placement || 'bottom'),\r\n  popper: computed(() => bubble.value?.$el),\r\n  arrow: computed(() => bubble.value?.arrow),\r\n  shift: { crossAxis: true },\r\n  autoUpdate: false,\r\n})\r\n\r\nwatch(\r\n  () => props.active,\r\n  value => {\r\n    if (value) {\r\n      start()\r\n    } else {\r\n      currentActive.value = value\r\n    }\r\n  },\r\n)\r\nwatch(\r\n  () => props.index,\r\n  value => {\r\n    currentIndex.value = Math.max(0, value)\r\n  },\r\n)\r\nwatch(\r\n  [currentActive, currentStep],\r\n  () => {\r\n    sideRects.value = undefined\r\n\r\n    if (!isClient || !currentActive.value || !currentStep.value) return\r\n\r\n    const target = unrefElement(callIfFunc(currentStep.value.target) as HTMLElement)\r\n\r\n    if (!target) {\r\n      currentRect.value = undefined\r\n      return\r\n    }\r\n\r\n    const { top, left, width, height } = target.getBoundingClientRect()\r\n\r\n    currentRect.value = [\r\n      left - padding.value[3],\r\n      top - padding.value[0],\r\n      width + padding.value[1] + padding.value[3],\r\n      height + padding.value[0] + padding.value[2],\r\n    ]\r\n\r\n    if (props.permeable) {\r\n      const [x, y, w, h] = currentRect.value\r\n\r\n      sideRects.value = [\r\n        [0, 0, '100%', y],\r\n        [x + w, 0, `calc(100% - ${x + w}px)`, '100%'],\r\n        [0, y + h, '100%', `calc(100% - ${y + h}px)`],\r\n        [0, 0, x, '100%'],\r\n      ]\r\n    }\r\n\r\n    updatePopper()\r\n  },\r\n  { immediate: true, flush: 'post' },\r\n)\r\n\r\nprovide(TOUR_STATE, {\r\n  increaseStep,\r\n  decreaseStep,\r\n})\r\n\r\ndefineExpose({\r\n  wrapper,\r\n  currentActive,\r\n  currentIndex,\r\n  currentStep,\r\n  allSteps,\r\n  start,\r\n  prev,\r\n  next,\r\n  close,\r\n})\r\n\r\nconst actions = { start, prev, next, close }\r\nconst slotParams = shallowReadonly(\r\n  reactive({\r\n    ...actions,\r\n    step: currentStep,\r\n    index: currentIndex,\r\n  }),\r\n)\r\n\r\nfunction increaseStep(step: TourStepOptions) {\r\n  tempSteps.add(step)\r\n}\r\n\r\nfunction decreaseStep(step: TourStepOptions) {\r\n  tempSteps.delete(step)\r\n}\r\n\r\nfunction start() {\r\n  if (currentActive.value) return\r\n\r\n  currentActive.value = true\r\n  emit('update:active', true)\r\n  emitEvent(props.onToggle, true)\r\n\r\n  if (currentIndex.value) {\r\n    currentIndex.value = 0\r\n    emit('update:index', 0)\r\n  }\r\n}\r\n\r\nfunction prev() {\r\n  if (!currentActive.value || currentIndex.value <= 0) return\r\n\r\n  --currentIndex.value\r\n  emit('update:index', currentIndex.value)\r\n  emitEvent(props.onChange, currentIndex.value, currentStep.value)\r\n}\r\n\r\nfunction next(autoClose = true) {\r\n  if (!currentActive.value) return\r\n\r\n  if (currentIndex.value >= allSteps.value.length - 1) {\r\n    if (autoClose) {\r\n      close()\r\n    }\r\n\r\n    return\r\n  }\r\n\r\n  ++currentIndex.value\r\n  emit('update:index', currentIndex.value)\r\n  emitEvent(props.onChange, currentIndex.value, currentStep.value)\r\n}\r\n\r\nfunction close() {\r\n  if (!currentActive.value) return\r\n\r\n  currentActive.value = false\r\n  emit('update:active', false)\r\n  emitEvent(props.onToggle, false)\r\n}\r\n\r\nfunction handleClose() {\r\n  if (!currentActive.value) return\r\n\r\n  close()\r\n  emitEvent(props.onClose)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div v-show=\"false\" role=\"none\" aria-hidden=\"true\">\r\n    <slot></slot>\r\n  </div>\r\n  <Masker\r\n    v-bind=\"$attrs\"\r\n    ref=\"masker\"\r\n    v-model:active=\"currentActive\"\r\n    :inherit=\"props.inherit\"\r\n    :class=\"className\"\r\n    :transfer=\"transfer\"\r\n    auto-remove\r\n    transition-name=\"\"\r\n    :disabled=\"props.hideMask\"\r\n    @show=\"updatePopper\"\r\n    @hide=\"currentRect = undefined\"\r\n    @mask-click=\"emitEvent(props.onMaskClick, $event)\"\r\n  >\r\n    <template #default=\"{ show }\">\r\n      <div\r\n        v-if=\"currentRect\"\r\n        ref=\"reference\"\r\n        :class=\"nh.be('reference')\"\r\n        role=\"none\"\r\n        aria-hidden=\"true\"\r\n        :style=\"{\r\n          top: `${currentRect[1]}px`,\r\n          left: `${currentRect[0]}px`,\r\n          width: `${currentRect[2]}px`,\r\n          height: `${currentRect[3]}px`\r\n        }\"\r\n      ></div>\r\n      <Transition appear :name=\"nh.ns('fade')\">\r\n        <Bubble\r\n          v-if=\"show && currentStep\"\r\n          ref=\"bubble\"\r\n          inherit\r\n          :class=\"[\r\n            nh.be('bubble'),\r\n            !currentRect && nh.bem('bubble', 'center'),\r\n            type && nh.bem('bubble', 'typed'),\r\n            type && nh.bem('bubble', type)\r\n          ]\"\r\n          :content-class=\"nh.be('step')\"\r\n          :placement=\"placement\"\r\n          :type=\"currentStep.type || props.type\"\r\n        >\r\n          <Renderer\r\n            v-if=\"isFunction(currentStep.renderer)\"\r\n            :renderer=\"currentStep.renderer\"\r\n            :data=\"actions\"\r\n          ></Renderer>\r\n          <template v-else>\r\n            <div :class=\"nh.be('header')\">\r\n              <slot name=\"header\" v-bind=\"slotParams\">\r\n                <Renderer :renderer=\"props.slots.header\" :data=\"slotParams\">\r\n                  <div :class=\"nh.be('title')\">\r\n                    <slot name=\"title\" v-bind=\"slotParams\">\r\n                      <Renderer :renderer=\"props.slots.title\" :data=\"slotParams\">\r\n                        {{ currentStep.title ?? getStepByWord(locale.stepCount, currentIndex) }}\r\n                      </Renderer>\r\n                    </slot>\r\n                  </div>\r\n                  <button\r\n                    v-if=\"props.closable\"\r\n                    type=\"button\"\r\n                    :class=\"nh.be('close')\"\r\n                    @click=\"handleClose\"\r\n                  >\r\n                    <slot name=\"close\" v-bind=\"slotParams\">\r\n                      <Renderer :renderer=\"props.slots.close\" :data=\"slotParams\">\r\n                        <Icon\r\n                          v-bind=\"icons.close\"\r\n                          :scale=\"+(icons.close.scale || 1) * 1.2\"\r\n                          label=\"close\"\r\n                        ></Icon>\r\n                      </Renderer>\r\n                    </slot>\r\n                  </button>\r\n                </Renderer>\r\n              </slot>\r\n            </div>\r\n            <div :class=\"nh.be('content')\">\r\n              <slot name=\"body\" v-bind=\"slotParams\">\r\n                <Renderer :renderer=\"props.slots.body\" :data=\"slotParams\">\r\n                  {{ currentStep.content }}\r\n                </Renderer>\r\n              </slot>\r\n            </div>\r\n            <div :class=\"nh.be('footer')\">\r\n              <slot name=\"footer\" v-bind=\"slotParams\">\r\n                <Renderer :renderer=\"props.slots.footer\" :data=\"slotParams\">\r\n                  <div :class=\"[nh.be('sign'), nh.bem('sign', props.signType)]\">\r\n                    <slot name=\"sign\" v-bind=\"slotParams\">\r\n                      <Renderer :renderer=\"props.slots.sign\" :data=\"slotParams\">\r\n                        <template v-if=\"props.signType === 'count'\">\r\n                          <span>{{ currentIndex + 1 }}</span>\r\n                          <span :class=\"nh.be('count-sep')\">/</span>\r\n                          <span>{{ allSteps.length }}</span>\r\n                        </template>\r\n                        <template v-else>\r\n                          <span\r\n                            v-for=\"n in allSteps.length\"\r\n                            :key=\"n\"\r\n                            :class=\"[\r\n                              nh.be(`sign-${props.signType === 'dot' ? 'dot' : 'bar'}`),\r\n                              n - 1 === currentIndex &&\r\n                                nh.bem(`sign-${props.signType === 'dot' ? 'dot' : 'bar'}`, 'active')\r\n                            ]\"\r\n                          ></span>\r\n                        </template>\r\n                      </Renderer>\r\n                    </slot>\r\n                  </div>\r\n                  <span style=\"flex: auto\" role=\"none\"></span>\r\n                  <slot name=\"actions\" v-bind=\"slotParams\">\r\n                    <Renderer :renderer=\"props.slots.actions\" :data=\"slotParams\">\r\n                      <Button\r\n                        v-if=\"currentIndex > 0\"\r\n                        inherit\r\n                        :class=\"[nh.be('action'), nh.bem('action', 'prev')]\"\r\n                        size=\"small\"\r\n                        :text=\"!!type\"\r\n                        @click=\"prev\"\r\n                      >\r\n                        {{ locale.prev }}\r\n                      </Button>\r\n                      <Button\r\n                        v-if=\"currentIndex <= allSteps.length - 1\"\r\n                        inherit\r\n                        :class=\"[nh.be('action'), nh.bem('action', 'next')]\"\r\n                        :type=\"type ? 'default' : 'primary'\"\r\n                        size=\"small\"\r\n                        @click=\"next()\"\r\n                      >\r\n                        {{ currentIndex === allSteps.length - 1 ? locale.done : locale.next }}\r\n                      </Button>\r\n                    </Renderer>\r\n                  </slot>\r\n                </Renderer>\r\n              </slot>\r\n            </div>\r\n          </template>\r\n        </Bubble>\r\n      </Transition>\r\n    </template>\r\n    <template #mask>\r\n      <svg style=\"width: 100%; height: 100%\">\r\n        <defs>\r\n          <mask :id=\"maskId\">\r\n            <rect\r\n              x=\"0\"\r\n              y=\"0\"\r\n              width=\"100%\"\r\n              height=\"100%\"\r\n              fill=\"white\"\r\n            />\r\n            <rect\r\n              v-if=\"currentRect\"\r\n              :class=\"[nh.be('hollow'), nh.bem('hollow', 'active')]\"\r\n              :x=\"currentRect[0]\"\r\n              :y=\"currentRect[1]\"\r\n              :width=\"currentRect[2]\"\r\n              :height=\"currentRect[3]\"\r\n              fill=\"black\"\r\n            />\r\n          </mask>\r\n        </defs>\r\n        <rect\r\n          x=\"0\"\r\n          y=\"0\"\r\n          width=\"100%\"\r\n          height=\"100%\"\r\n          fill=\"rgba(0, 0, 0, 45%)\"\r\n          :mask=\"`url(#${maskId})`\"\r\n        />\r\n        <g v-if=\"sideRects?.length\" fill=\"transparent\" style=\"pointer-events: auto\">\r\n          <rect\r\n            v-for=\"(rect, index) in sideRects\"\r\n            :key=\"index\"\r\n            :x=\"rect[0]\"\r\n            :y=\"rect[1]\"\r\n            :width=\"rect[2]\"\r\n            :height=\"rect[3]\"\r\n          />\r\n        </g>\r\n      </svg>\r\n    </template>\r\n  </Masker>\r\n</template>\r\n","import { defineComponent, inject, onBeforeUnmount, reactive, renderSlot, watch } from 'vue'\r\n\r\nimport { useProps } from '@vexip-ui/config'\r\nimport { tourStepProps } from './props'\r\nimport { TOUR_STATE } from './symbol'\r\n\r\nimport type { TourPayload, TourStepOptions } from './symbol'\r\n\r\ntype StepPropKey = keyof typeof tourStepProps\r\n\r\nconst propKeys = Object.keys(tourStepProps) as StepPropKey[]\r\nconst deepProps: StepPropKey[] = []\r\nconst ignoredProps: StepPropKey[] = ['renderer']\r\n\r\nconst funcProp = {\r\n  default: null,\r\n  isFunc: true,\r\n  static: true,\r\n}\r\n\r\nexport default defineComponent({\r\n  name: 'TourStep',\r\n  props: tourStepProps,\r\n  setup(_props, { slots }) {\r\n    const props = useProps('tourStep', _props, {\r\n      target: {\r\n        default: null,\r\n        static: true,\r\n      },\r\n      placement: 'bottom',\r\n      title: '',\r\n      content: '',\r\n      order: {\r\n        default: 0,\r\n        static: true,\r\n      },\r\n      type: 'default',\r\n      renderer: funcProp,\r\n    })\r\n\r\n    const tourState = inject(TOUR_STATE, null)\r\n    const options = reactive({}) as TourStepOptions\r\n\r\n    for (const key of propKeys) {\r\n      if (ignoredProps.includes(key)) continue\r\n\r\n      watch(\r\n        () => props[key],\r\n        value => {\r\n          ;(options[key as keyof TourStepOptions] as any) = value\r\n        },\r\n        { immediate: true, deep: deepProps.includes(key) },\r\n      )\r\n    }\r\n\r\n    watch(() => props.renderer, setRenderer)\r\n\r\n    setRenderer()\r\n\r\n    tourState?.increaseStep(options)\r\n\r\n    onBeforeUnmount(() => {\r\n      tourState?.decreaseStep(options)\r\n    })\r\n\r\n    function setRenderer() {\r\n      if (typeof slots.default === 'function') {\r\n        options.renderer = (payload: TourPayload) => renderSlot(slots, 'default', payload as any)\r\n      } else if (typeof props.renderer === 'function') {\r\n        options.renderer = props.renderer\r\n      } else {\r\n        options.renderer = undefined\r\n      }\r\n    }\r\n\r\n    return () => null\r\n  },\r\n})\r\n","import { Checkbox } from '@/components/checkbox'\r\nimport { CollapseTransition } from '@/components/collapse-transition'\r\nimport { Icon } from '@/components/icon'\r\nimport { Input } from '@/components/input'\r\nimport { NumberInput } from '@/components/number-input'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\nimport { VirtualList } from '@/components/virtual-list'\r\n\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  reactive,\r\n  ref,\r\n  renderSlot,\r\n  toRef,\r\n  watch,\r\n  watchEffect,\r\n} from 'vue'\r\n\r\nimport { stateProp, useIcons, useNameHelper } from '@vexip-ui/config'\r\nimport { useModifier, useRtl } from '@vexip-ui/hooks'\r\nimport { boundRange, decide } from '@vexip-ui/utils'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { VirtualListExposed } from '@/components/virtual-list'\r\nimport type { LocaleConfig } from '@vexip-ui/config'\r\nimport type { TransferOptionState } from './symbol'\r\n\r\nexport default defineComponent({\r\n  name: 'TransferPanel',\r\n  props: {\r\n    type: {\r\n      type: String as PropType<'source' | 'target'>,\r\n      default: null,\r\n    },\r\n    state: {\r\n      type: stateProp,\r\n      default: 'default',\r\n    },\r\n    selected: {\r\n      type: Set as PropType<Set<string | number>>,\r\n      default: () => new Set(),\r\n    },\r\n    paged: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    filter: {\r\n      type: Function as PropType<(value: string, options: TransferOptionState) => boolean>,\r\n      default: null,\r\n    },\r\n    disabled: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    title: {\r\n      type: String,\r\n      default: '',\r\n    },\r\n    options: {\r\n      type: Array as PropType<TransferOptionState[]>,\r\n      default: () => [],\r\n    },\r\n    emptyText: {\r\n      type: String,\r\n      default: '暂无数据',\r\n    },\r\n    optionHeight: {\r\n      type: Number,\r\n      default: 32,\r\n    },\r\n    deepState: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    loading: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    loadingIcon: {\r\n      type: [Object, Function],\r\n      default: null,\r\n    },\r\n    loadingLock: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    loadingEffect: {\r\n      type: String,\r\n      default: null,\r\n    },\r\n    locale: {\r\n      type: Object as PropType<LocaleConfig['transfer']>,\r\n      default: () => ({}),\r\n    },\r\n  },\r\n  emits: ['update:selected', 'select', 'enter', 'switch'],\r\n  setup(props, { slots, emit }) {\r\n    const nh = useNameHelper('transfer')\r\n    const icons = useIcons()\r\n\r\n    const { isRtl } = useRtl()\r\n\r\n    const currentSelected = ref(new Set(props.selected))\r\n    const pageSize = ref(10)\r\n    const currentPage = ref(1)\r\n    const currentMark = ref<string | number | null>(null)\r\n    const currentHitting = ref(-1)\r\n    const currentFilter = ref('')\r\n    const searching = ref(false)\r\n\r\n    const header = ref<HTMLElement>()\r\n    const body = ref<HTMLElement>()\r\n    const footer = ref<HTMLElement>()\r\n    const search = ref<HTMLElement>()\r\n    const input = ref<InstanceType<typeof Input>>()\r\n    const list = ref<VirtualListExposed>()\r\n\r\n    let bodyRealHeight = 0\r\n    let lastSelected: string | number | null = null\r\n    let keyUsed = false\r\n\r\n    const { target: wrapper, modifier } = useModifier({\r\n      passive: false,\r\n      onKeyDown: (event, modifier) => {\r\n        decide(\r\n          [\r\n            [\r\n              () => modifier.up || modifier.down,\r\n              () => {\r\n                if (!keyUsed && currentHitting.value < 0) {\r\n                  keyUsed = true\r\n\r\n                  if (lastSelected) {\r\n                    currentHitting.value = props.options.findIndex(\r\n                      option => option.value === lastSelected,\r\n                    )\r\n                  } else if (list.value) {\r\n                    currentHitting.value = Math.round(list.value.scrollOffset / props.optionHeight)\r\n                  }\r\n\r\n                  currentHitting.value = currentHitting.value === -1 ? 0 : currentHitting.value\r\n                } else {\r\n                  currentHitting.value = boundRange(\r\n                    findEnabledIndex(\r\n                      currentHitting.value + (modifier.up ? -1 : 1),\r\n                      modifier.up ? -1 : 1,\r\n                    ),\r\n                    0,\r\n                    currentOptions.value.length - 1,\r\n                  )\r\n                }\r\n\r\n                if (!props.paged) {\r\n                  ensureOptionInView(currentHitting.value, modifier.up ? 'top' : 'bottom')\r\n                }\r\n              },\r\n            ],\r\n            [\r\n              () => props.paged && (modifier.left || modifier.right) && event.ctrlKey,\r\n              () => {\r\n                handlePageChange(currentPage.value + (modifier.left ? -1 : 1))\r\n                currentHitting.value = 0\r\n              },\r\n            ],\r\n            [\r\n              () =>\r\n                (props.type === 'source' && modifier.right) ||\r\n                (props.type === 'target' && modifier.left),\r\n              () => {\r\n                keyUsed = false\r\n                currentHitting.value = -1\r\n                lastSelected = null\r\n                emit('switch')\r\n              },\r\n            ],\r\n            [\r\n              () => modifier.space,\r\n              () => {\r\n                const option = currentOptions.value[currentHitting.value]\r\n\r\n                if (option) {\r\n                  currentSelected.value[currentSelected.value.has(option.value) ? 'delete' : 'add'](\r\n                    option.value,\r\n                  )\r\n                  emitSelectedChange()\r\n                }\r\n              },\r\n            ],\r\n            [() => modifier.enter, () => emit('enter')],\r\n            [\r\n              () => typeof props.filter === 'function' && !!input.value && modifier['ctrl+f'],\r\n              () => {\r\n                event.stopPropagation()\r\n                input.value!.focus()\r\n              },\r\n            ],\r\n          ],\r\n          {\r\n            beforeMatchAny: () => event.preventDefault(),\r\n            afterMatchAny: modifier.resetAll,\r\n          },\r\n        )\r\n      },\r\n    })\r\n\r\n    const className = computed(() => {\r\n      return {\r\n        [nh.be('panel')]: true,\r\n        [nh.bem('panel', props.state)]: props.state !== 'default',\r\n        [nh.bem('panel', 'disabled')]: props.disabled,\r\n      }\r\n    })\r\n    const visibleOptions = computed(() => {\r\n      const filter = props.filter\r\n      const filterValue = currentFilter.value\r\n\r\n      if (filter && filterValue) {\r\n        return props.options.filter(option => filter(filterValue, option))\r\n      }\r\n\r\n      return props.options\r\n    })\r\n    const optionSize = computed(() => visibleOptions.value.length)\r\n    const pagedOptions = computed(() => {\r\n      return visibleOptions.value.slice(\r\n        (currentPage.value - 1) * pageSize.value,\r\n        currentPage.value * pageSize.value,\r\n      )\r\n    })\r\n    const currentOptions = computed(() => (props.paged ? pagedOptions.value : visibleOptions.value))\r\n    const totalPages = computed(() => Math.ceil(optionSize.value / (pageSize.value || 1)))\r\n\r\n    watch(\r\n      () => props.selected,\r\n      value => {\r\n        currentSelected.value = value\r\n      },\r\n    )\r\n    watch(optionSize, () => {\r\n      keyUsed = false\r\n      currentHitting.value = -1\r\n      lastSelected = null\r\n    })\r\n\r\n    const partial = ref(false)\r\n    const allSelected = ref(false)\r\n\r\n    watchEffect(() => {\r\n      const options = visibleOptions.value\r\n      const selected = currentSelected.value\r\n\r\n      let hasSelected = false\r\n      let hasUnselected = false\r\n\r\n      for (let i = 0, len = optionSize.value; i < len; ++i) {\r\n        const option = options[i]\r\n\r\n        if (!option.disabled) {\r\n          if (selected.has(option.value)) {\r\n            hasSelected = true\r\n          } else {\r\n            hasUnselected = true\r\n          }\r\n        }\r\n\r\n        if (hasSelected && hasUnselected) {\r\n          break\r\n        }\r\n      }\r\n\r\n      allSelected.value = hasSelected && !hasUnselected\r\n      partial.value = !allSelected.value && selected.size > 0\r\n    })\r\n\r\n    function computePageSize() {\r\n      requestAnimationFrame(() => {\r\n        const bodyEl = body.value || list.value?.wrapper\r\n\r\n        if (bodyEl) {\r\n          const style = getComputedStyle(bodyEl)\r\n          const paddingTop = parseInt(style.paddingTop)\r\n          const paddingBottom = parseInt(style.paddingBottom)\r\n          const innerHeight = bodyEl.offsetHeight - paddingTop - paddingBottom\r\n\r\n          bodyRealHeight = innerHeight\r\n          pageSize.value = Math.floor(innerHeight / (props.optionHeight || 1))\r\n        }\r\n      })\r\n    }\r\n\r\n    function toggleSelect(option: TransferOptionState) {\r\n      if (props.disabled || option.disabled) return\r\n\r\n      if (currentMark.value && modifier.shift) {\r\n        handleRangeSelect(currentMark.value, option.value)\r\n        return\r\n      }\r\n\r\n      if (currentSelected.value.has(option.value)) {\r\n        currentSelected.value.delete(option.value)\r\n      } else {\r\n        currentSelected.value.add(option.value)\r\n      }\r\n\r\n      keyUsed = false\r\n      currentHitting.value = -1\r\n      lastSelected = option.value\r\n      currentMark.value = option.value\r\n      emitSelectedChange()\r\n    }\r\n\r\n    function handleRangeSelect(start: string | number, end: string | number) {\r\n      const options = visibleOptions.value\r\n\r\n      let startIndex = -1\r\n      let endIndex = -1\r\n\r\n      for (let i = 0, len = options.length; i < len; ++i) {\r\n        const option = options[i]\r\n\r\n        if (option.value === start) {\r\n          startIndex = i\r\n        } else if (option.value === end) {\r\n          endIndex = i\r\n        }\r\n\r\n        if (startIndex > 0 && endIndex > 0) break\r\n      }\r\n\r\n      const method = currentSelected.value.has(options[startIndex]?.value) ? 'add' : 'delete'\r\n\r\n      if (startIndex > endIndex) {\r\n        ;[startIndex, endIndex] = [endIndex, startIndex]\r\n      }\r\n\r\n      for (let i = startIndex; i <= endIndex; ++i) {\r\n        const option = options[i]\r\n\r\n        if (!option.disabled) {\r\n          currentSelected.value[method](option.value)\r\n        }\r\n      }\r\n\r\n      emitSelectedChange()\r\n    }\r\n\r\n    function toggleSelectAll(event?: Event) {\r\n      event?.preventDefault()\r\n\r\n      if (props.disabled) return\r\n\r\n      if (allSelected.value) {\r\n        for (const option of visibleOptions.value) {\r\n          !option.disabled && currentSelected.value.delete(option.value)\r\n        }\r\n      } else {\r\n        for (const option of visibleOptions.value) {\r\n          !option.disabled && currentSelected.value.add(option.value)\r\n        }\r\n      }\r\n\r\n      currentMark.value = null\r\n      emitSelectedChange()\r\n    }\r\n\r\n    function handleReverse() {\r\n      if (props.disabled) return\r\n\r\n      if (partial.value) {\r\n        const prevSelected = new Set(currentSelected.value)\r\n\r\n        for (const option of visibleOptions.value) {\r\n          if (!option.disabled) {\r\n            if (prevSelected.has(option.value)) {\r\n              currentSelected.value.delete(option.value)\r\n            } else {\r\n              currentSelected.value.add(option.value)\r\n            }\r\n          }\r\n        }\r\n\r\n        currentMark.value = null\r\n        emitSelectedChange()\r\n      } else {\r\n        toggleSelectAll()\r\n      }\r\n    }\r\n\r\n    function handleBlur() {\r\n      currentMark.value = null\r\n      modifier.resetAll()\r\n    }\r\n\r\n    function emitSelectedChange() {\r\n      emit('update:selected', currentSelected.value)\r\n      emit('select')\r\n    }\r\n\r\n    function handlePageChange(page: number) {\r\n      currentPage.value = boundRange(page, 1, totalPages.value)\r\n    }\r\n\r\n    function queryEnabledIndex(index: number, step: number) {\r\n      const options = currentOptions.value\r\n      step = step / Math.abs(step)\r\n\r\n      while (options[index]?.disabled) {\r\n        index += step\r\n\r\n        if (index < 0 || index >= options.length) break\r\n      }\r\n\r\n      return index\r\n    }\r\n\r\n    function findEnabledIndex(index: number, sign: 1 | -1 = 1) {\r\n      const options = currentOptions.value\r\n\r\n      if (options[index]?.disabled) {\r\n        index = queryEnabledIndex(index, sign)\r\n\r\n        if (sign > 0 ? index >= options.length : index < 0) {\r\n          index = queryEnabledIndex(index, -sign)\r\n\r\n          // 全禁用\r\n          if (sign > 0 ? index < 0 : index >= options.length) index = -1\r\n        }\r\n      }\r\n\r\n      return index\r\n    }\r\n\r\n    function ensureOptionInView(index: number, direction: 'top' | 'bottom') {\r\n      const option = props.options[index]\r\n\r\n      if (props.paged || !option || !list.value) return\r\n\r\n      if (direction === 'bottom') {\r\n        const target = (index + 1) * props.optionHeight\r\n\r\n        if (list.value.scrollOffset + bodyRealHeight < target) {\r\n          list.value.scrollTo((index - pageSize.value + 1) * props.optionHeight)\r\n        }\r\n      } else {\r\n        const target = index * props.optionHeight\r\n\r\n        if (list.value.scrollOffset > target) {\r\n          list.value.scrollTo(target)\r\n        }\r\n      }\r\n    }\r\n\r\n    const slotParams = reactive({\r\n      type: toRef(props, 'type'),\r\n      currentPage,\r\n      pageSize,\r\n      totalPages,\r\n      allSelected,\r\n      partial,\r\n      selected: computed(() => Array.from(currentSelected.value)),\r\n      options: computed(() => visibleOptions.value),\r\n      toggleSelectAll,\r\n      handleReverse,\r\n    })\r\n\r\n    function renderOption({ option, index }: { option: TransferOptionState, index: number }) {\r\n      const disabled = props.disabled || option.disabled\r\n      const handleCheck = (event: MouseEvent) => {\r\n        event.preventDefault()\r\n        event.stopPropagation()\r\n        toggleSelect(option)\r\n      }\r\n\r\n      return (\r\n        <li\r\n          class={{\r\n            [nh.be('option')]: true,\r\n            [nh.bem('option', 'disabled')]: disabled,\r\n            [nh.bem('option', 'hitting')]: currentHitting.value === index,\r\n          }}\r\n          role={'option'}\r\n          aria-disabled={disabled ? 'true' : undefined}\r\n          onClick={() => toggleSelect(option)}\r\n        >\r\n          {renderSlot(slots, 'option', { type: props.type, option, index }, () => [\r\n            <Checkbox\r\n              key={1}\r\n              class={nh.be('checkbox')}\r\n              state={props.deepState ? props.state : undefined}\r\n              checked={currentSelected.value.has(option.value)}\r\n              disabled={disabled}\r\n              tab-index={-1}\r\n              onClick={handleCheck}\r\n            ></Checkbox>,\r\n            <span key={2} class={nh.be('label')}>\r\n              {renderSlot(slots, 'label', { type: props.type, option, index }, () => [\r\n                option.label,\r\n              ])}\r\n            </span>,\r\n          ])}\r\n        </li>\r\n      )\r\n    }\r\n\r\n    function renderHeader() {\r\n      return (\r\n        <div ref={header} class={nh.be('header')}>\r\n          {renderSlot(slots, 'header', slotParams, () => [\r\n            <>\r\n              <Checkbox\r\n                inherit\r\n                control\r\n                class={nh.be('checkbox')}\r\n                state={props.deepState ? props.state : undefined}\r\n                checked={allSelected.value}\r\n                partial={partial.value}\r\n                disabled={props.disabled}\r\n                tab-index={-1}\r\n                onClick={toggleSelectAll}\r\n              ></Checkbox>\r\n              <div\r\n                class={[nh.be('reverse'), props.disabled && nh.bem('reverse', 'disabled')]}\r\n                title={props.locale.reverse}\r\n                onClick={handleReverse}\r\n              >\r\n                <Icon\r\n                  {...icons.value.retweet}\r\n                  scale={+(icons.value.retweet.scale || 1) * 1.2}\r\n                ></Icon>\r\n              </div>\r\n              <div class={nh.be('counter')}>\r\n                {`${currentSelected.value.size}/${visibleOptions.value.length}`}\r\n              </div>\r\n              {(props.title || slots.title) && (\r\n                <span class={nh.be('title')}>\r\n                  {renderSlot(slots, 'title', slotParams, () => [props.title])}\r\n                </span>\r\n              )}\r\n              <CollapseTransition appear horizontal fade-effect>\r\n                {props.loading && (\r\n                  <div class={nh.be('loading')}>\r\n                    <Icon\r\n                      {...icons.value.loading}\r\n                      effect={props.loadingEffect || icons.value.loading.effect}\r\n                      icon={props.loadingIcon || icons.value.loading.icon}\r\n                      label={'loading'}\r\n                    ></Icon>\r\n                  </div>\r\n                )}\r\n              </CollapseTransition>\r\n            </>,\r\n          ])}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderFilter() {\r\n      if (typeof props.filter !== 'function') return null\r\n\r\n      const stop = (e: Event) => e.stopPropagation()\r\n      // const setFilter = (value: string) => (currentFilter.value = value)\r\n\r\n      return (\r\n        <div ref={search} class={nh.be('filter')}>\r\n          <Input\r\n            ref={input}\r\n            v-model:value={currentFilter.value}\r\n            inherit\r\n            clearable\r\n            sync\r\n            disabled={props.disabled}\r\n            placeholder={searching.value ? undefined : props.locale.search}\r\n            onKeydown={stop}\r\n            onFocus={() => (searching.value = true)}\r\n            onBlur={() => (searching.value = false)}\r\n          >\r\n            {{\r\n              suffix: () => <Icon {...icons.value.search}></Icon>,\r\n            }}\r\n          </Input>\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderBody() {\r\n      if (props.paged || slots.body) {\r\n        return (\r\n          <ResizeObserver throttle onResize={computePageSize}>\r\n            <ul ref={body} class={nh.be('body')} role={'listbox'}>\r\n              {renderSlot(slots, 'body', slotParams, () => [\r\n                pagedOptions.value.length ? (\r\n                  pagedOptions.value.map((option, index) => renderOption({ option, index }))\r\n                ) : (\r\n                  <div class={nh.be('empty')}>{props.emptyText || props.locale.empty}</div>\r\n                ),\r\n              ])}\r\n            </ul>\r\n          </ResizeObserver>\r\n        )\r\n      }\r\n\r\n      return (\r\n        <VirtualList\r\n          ref={list}\r\n          inherit\r\n          class={nh.be('body')}\r\n          items={visibleOptions.value}\r\n          item-size={props.optionHeight}\r\n          item-fixed\r\n          use-y-bar\r\n          id-key={'value'}\r\n          items-attrs={{ role: 'listbox', ariaLabel: props.type }}\r\n          onResize={computePageSize}\r\n        >\r\n          {{\r\n            default: ({ item, index }: { item: TransferOptionState, index: number }) =>\r\n              renderOption({ option: item, index }),\r\n            empty: () => <div class={nh.be('empty')}>{props.emptyText || props.locale.empty}</div>,\r\n          }}\r\n        </VirtualList>\r\n      )\r\n    }\r\n\r\n    function renderFooter() {\r\n      if (!props.paged && !slots.footer) return null\r\n\r\n      return (\r\n        <div ref={footer} class={nh.be('footer')}>\r\n          {renderSlot(slots, 'footer', slotParams, () => [\r\n            <div class={nh.be('pagination')}>\r\n              <Icon\r\n                {...(isRtl.value ? icons.value.angleRight : icons.value.angleLeft)}\r\n                class={[\r\n                  nh.be('page-plus'),\r\n                  currentPage.value <= 1 && nh.bem('page-plus', 'disabled'),\r\n                ]}\r\n                onClick={() => handlePageChange(currentPage.value - 1)}\r\n              ></Icon>\r\n              <NumberInput\r\n                inherit\r\n                value={currentPage.value}\r\n                class={nh.be('page-input')}\r\n                size={'small'}\r\n                min={1}\r\n                max={totalPages.value}\r\n                onChange={handlePageChange}\r\n              ></NumberInput>\r\n              <span style={'margin: 0 4px'}>{'/'}</span>\r\n              <span>{totalPages.value}</span>\r\n              <Icon\r\n                {...(isRtl.value ? icons.value.angleLeft : icons.value.angleRight)}\r\n                class={[\r\n                  nh.be('page-minus'),\r\n                  currentPage.value >= totalPages.value && nh.bem('page-minus', 'disabled'),\r\n                ]}\r\n                onClick={() => handlePageChange(currentPage.value + 1)}\r\n              ></Icon>\r\n            </div>,\r\n          ])}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    return () => (\r\n      <div ref={wrapper} class={className.value} tabindex={0} onBlur={handleBlur}>\r\n        {renderHeader()}\r\n        {renderFilter()}\r\n        {renderBody()}\r\n        {renderFooter()}\r\n      </div>\r\n    )\r\n  },\r\n})\r\n","import {\r\n  booleanProp,\r\n  buildProps,\r\n  eventProp,\r\n  iconProp,\r\n  localeProp,\r\n  stateProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { TransferFilter, TransferKeyConfig, TransferSlots } from './symbol'\r\n\r\nexport type RawOption = string | Record<string, any>\r\nexport type Values = (string | number)[]\r\n\r\nexport type SelectHandler = (\r\n  type: 'source' | 'target',\r\n  selected: { source: Values, target: Values },\r\n  data: { source: RawOption[], target: RawOption[] }\r\n) => void\r\n\r\nexport const transferProps = buildProps({\r\n  state: stateProp,\r\n  locale: localeProp('transfer'),\r\n  options: Array as PropType<RawOption[]>,\r\n  value: Array as PropType<Values>,\r\n  disabled: booleanProp,\r\n  paged: booleanProp,\r\n  filter: {\r\n    type: [Boolean, Function] as PropType<boolean | TransferFilter>,\r\n    default: null,\r\n  },\r\n  emptyText: String,\r\n  keyConfig: Object as PropType<TransferKeyConfig>,\r\n  optionHeight: Number,\r\n  ignoreCase: booleanProp,\r\n  sourceTitle: String,\r\n  targetTitle: String,\r\n  deepState: booleanProp,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingLock: booleanProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  slots: Object as PropType<TransferSlots>,\r\n  onChange: eventProp<(values: Values) => void>(),\r\n  onSelect: eventProp<SelectHandler>(),\r\n})\r\n\r\nexport type TransferProps = ExtractPropTypes<typeof transferProps>\r\nexport type TransferCProps = ConfigurableProps<TransferProps>\r\n","import { Button } from '@/components/button'\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { useFieldStore } from '@/components/form'\r\n\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  reactive,\r\n  ref,\r\n  renderSlot,\r\n  toRef,\r\n  watch,\r\n  watchEffect,\r\n} from 'vue'\r\n\r\nimport {\r\n  createIconProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { isNull } from '@vexip-ui/utils'\r\nimport { createSlotRender, useRtl } from '@vexip-ui/hooks'\r\nimport TransferPanel from './transfer-panel'\r\nimport { transferProps } from './props'\r\n\r\nimport type { TransferKeyConfig, TransferOptionState, TransferSlots } from './symbol'\r\n\r\nconst defaultKeyConfig: Required<TransferKeyConfig> = {\r\n  value: 'value',\r\n  label: 'label',\r\n  disabled: 'disabled',\r\n}\r\n\r\nexport default defineComponent({\r\n  name: 'Transfer',\r\n  props: transferProps,\r\n  emits: ['update:value'],\r\n  setup(_props, { slots, emit, expose }) {\r\n    const {\r\n      idFor,\r\n      labelId,\r\n      state,\r\n      disabled,\r\n      loading,\r\n      validateField,\r\n      getFieldValue,\r\n      setFieldValue,\r\n    } = useFieldStore<(string | number)[]>(() => source.value?.$el?.focus())\r\n\r\n    const props = useProps('transfer', _props, {\r\n      state: createStateProp(state),\r\n      locale: null,\r\n      options: {\r\n        default: () => [],\r\n        static: true,\r\n      },\r\n      value: {\r\n        default: () => getFieldValue(),\r\n        static: true,\r\n      },\r\n      disabled: () => disabled.value,\r\n      paged: false,\r\n      filter: false,\r\n      emptyText: null,\r\n      keyConfig: () => ({}),\r\n      optionHeight: {\r\n        default: 32,\r\n        validator: value => value > 0,\r\n      },\r\n      ignoreCase: false,\r\n      sourceTitle: null,\r\n      targetTitle: null,\r\n      deepState: false,\r\n      loading: () => loading.value,\r\n      loadingIcon: createIconProp(),\r\n      loadingLock: false,\r\n      loadingEffect: null,\r\n      slots: () => ({}),\r\n    })\r\n\r\n    const { isRtl } = useRtl()\r\n\r\n    const nh = useNameHelper('transfer')\r\n    const locale = useLocale('transfer', toRef(props, 'locale'))\r\n    const icons = useIcons()\r\n\r\n    const currentValue = ref<Set<string | number>>(null!)\r\n    const sourceSelected = ref(new Set<string | number>())\r\n    const targetSelected = ref(new Set<string | number>())\r\n    const sourceOptions = ref<TransferOptionState[]>([])\r\n    const targetOptions = ref<TransferOptionState[]>([])\r\n    const optionStates = ref<TransferOptionState[]>([])\r\n\r\n    const source = ref<InstanceType<typeof TransferPanel>>()\r\n    const target = ref<InstanceType<typeof TransferPanel>>()\r\n\r\n    const keyConfig = computed(() => ({ ...defaultKeyConfig, ...props.keyConfig }))\r\n\r\n    let optionValueMap = new Map<string | number, TransferOptionState>()\r\n    let emittedValue = props.value\r\n\r\n    const updateTrigger = ref(0)\r\n\r\n    watchEffect(() => {\r\n      /* eslint-disable @typescript-eslint/no-unused-expressions */\r\n      props.keyConfig.value\r\n      props.keyConfig.label\r\n      props.keyConfig.disabled\r\n\r\n      for (let i = 0, len = props.options.length; i < len; ++i) {\r\n        props.options[i]\r\n      }\r\n      /* eslint-enable */\r\n\r\n      updateTrigger.value++\r\n    })\r\n\r\n    watch(updateTrigger, initOptions, { immediate: true })\r\n\r\n    watchEffect(() => {\r\n      if (!currentValue.value.size) {\r\n        sourceOptions.value = Array.from(optionStates.value)\r\n        targetOptions.value = []\r\n        return\r\n      }\r\n\r\n      const selectedValues = new Set(currentValue.value)\r\n      const target: TransferOptionState[] = []\r\n      const source: TransferOptionState[] = []\r\n\r\n      for (const option of optionStates.value) {\r\n        if (selectedValues.has(option.value)) {\r\n          target.push(option)\r\n        } else {\r\n          source.push(option)\r\n        }\r\n      }\r\n\r\n      targetOptions.value = target\r\n      sourceOptions.value = source\r\n    })\r\n\r\n    function initOptions() {\r\n      const { value: valueKey, label: labelKey, disabled: disabledKey } = keyConfig.value\r\n      const oldMap = optionValueMap\r\n      const map = new Map<string | number, TransferOptionState>()\r\n\r\n      props.options.forEach(option => {\r\n        const rawOption = typeof option === 'string' ? { [valueKey]: option } : option\r\n        const value = rawOption[valueKey]\r\n\r\n        if (isNull(value)) return\r\n\r\n        const label = rawOption[labelKey] || String(value)\r\n        const { [disabledKey]: disabled = false } = rawOption\r\n        const oldState = oldMap.get(rawOption.value)\r\n        const optionState = reactive({\r\n          disabled,\r\n          value,\r\n          label,\r\n          hidden: oldState?.hidden ?? false,\r\n          hitting: oldState?.hitting ?? false,\r\n          data: option,\r\n        })\r\n\r\n        map.set(value, optionState)\r\n      })\r\n\r\n      optionValueMap = map\r\n      optionStates.value = Array.from(map.values())\r\n      currentValue.value = new Set(emittedValue)\r\n    }\r\n\r\n    const readonly = computed(() => props.loading && props.loadingLock)\r\n    const className = computed(() => {\r\n      return [\r\n        nh.b(),\r\n        nh.bs('vars'),\r\n        {\r\n          [nh.bm('inherit')]: props.inherit,\r\n          [nh.bm(props.state)]: props.state !== 'default',\r\n          [nh.bm('readonly')]: readonly.value,\r\n          [nh.bm('loading')]: props.loading,\r\n        },\r\n      ]\r\n    })\r\n    const actionType = computed(() => {\r\n      return props.deepState && props.state !== 'default' ? props.state : 'primary'\r\n    })\r\n    const toTargetEnabled = computed(() => !!sourceSelected.value.size)\r\n    const toSourceEnabled = computed(() => !!targetSelected.value.size)\r\n    const defaultFilter = computed(() => {\r\n      return props.ignoreCase\r\n        ? (value: string, option: TransferOptionState) =>\r\n          option.label.toLocaleLowerCase().includes(value)\r\n        : (value: string, option: TransferOptionState) => option.label.includes(value)\r\n    })\r\n    const sourceFilter = computed(() => getFilterMethod('source'))\r\n    const targetFilter = computed(() => getFilterMethod('target'))\r\n\r\n    watch(\r\n      () => props.value,\r\n      value => {\r\n        emittedValue = value\r\n        currentValue.value = new Set(emittedValue)\r\n      },\r\n    )\r\n\r\n    expose({\r\n      handleToTarget,\r\n      handleToSource,\r\n      handlePanelFocus,\r\n      handlePanelBlur,\r\n      focus: (options?: FocusOptions) => source.value?.$el?.focus(options),\r\n      blur: () => {\r\n        source.value?.$el?.blur()\r\n        target.value?.$el?.blur()\r\n      },\r\n    })\r\n\r\n    function getFilterMethod(type: 'source' | 'target') {\r\n      const filter = props.filter\r\n\r\n      if (!filter) return undefined\r\n\r\n      if (typeof filter === 'function') {\r\n        return (value: string, option: TransferOptionState) => filter(value, option, type)\r\n      }\r\n\r\n      return defaultFilter.value\r\n    }\r\n\r\n    function handleChange() {\r\n      emittedValue = Array.from(currentValue.value)\r\n\r\n      emit('update:value', emittedValue)\r\n      setFieldValue(emittedValue)\r\n      emitEvent(props.onChange, emittedValue)\r\n      validateField()\r\n    }\r\n\r\n    function handleToTarget() {\r\n      for (const value of sourceSelected.value) {\r\n        currentValue.value.add(value)\r\n      }\r\n\r\n      sourceSelected.value.clear()\r\n      handleChange()\r\n    }\r\n\r\n    function handleToSource() {\r\n      for (const value of targetSelected.value) {\r\n        currentValue.value.delete(value)\r\n      }\r\n\r\n      targetSelected.value.clear()\r\n      handleChange()\r\n    }\r\n\r\n    function handleSelect(type: 'source' | 'target') {\r\n      const selected = {\r\n        source: Array.from(sourceSelected.value),\r\n        target: Array.from(targetSelected.value),\r\n      }\r\n      const data = {\r\n        source: selected.source.map(value => optionValueMap.get(value)?.data ?? ''),\r\n        target: selected.target.map(value => optionValueMap.get(value)?.data ?? ''),\r\n      }\r\n\r\n      emitEvent(props.onSelect, type, selected, data)\r\n    }\r\n\r\n    function handlePanelFocus(type: 'source' | 'target') {\r\n      if (type === 'source') {\r\n        source.value?.$el.focus()\r\n      } else {\r\n        target.value?.$el.focus()\r\n      }\r\n    }\r\n\r\n    function handlePanelBlur() {\r\n      source.value?.$el.blur()\r\n      target.value?.$el.blur()\r\n    }\r\n\r\n    function getSlotRender(names: string[]) {\r\n      let renderer: unknown = createSlotRender(slots, names)\r\n\r\n      if (!renderer) {\r\n        for (const name of names) {\r\n          renderer = props.slots[name as keyof TransferSlots]\r\n          if (typeof renderer === 'function') {\r\n            break\r\n          }\r\n        }\r\n\r\n        return typeof renderer === 'function'\r\n          ? (params: any) => <Renderer renderer={renderer as any} data={params}></Renderer>\r\n          : null\r\n      }\r\n\r\n      return null\r\n    }\r\n\r\n    return () => {\r\n      return (\r\n        <div\r\n          id={idFor.value}\r\n          class={className.value}\r\n          role={'application'}\r\n          aria-labelledby={labelId.value}\r\n        >\r\n          <TransferPanel\r\n            ref={source}\r\n            v-model:selected={sourceSelected.value}\r\n            type={'source'}\r\n            class={nh.bem('panel', 'source')}\r\n            state={props.state}\r\n            paged={props.paged}\r\n            filter={sourceFilter.value}\r\n            disabled={props.disabled}\r\n            title={props.sourceTitle || locale.value.source}\r\n            options={sourceOptions.value}\r\n            empty-text={props.emptyText || locale.value.empty}\r\n            option-height={props.optionHeight}\r\n            ignore-case={props.ignoreCase}\r\n            deep-state={props.deepState}\r\n            loading={props.loading}\r\n            loading-icon={props.loadingIcon}\r\n            loading-lock={props.loadingLock}\r\n            loading-effect={props.loadingEffect}\r\n            locale={locale.value}\r\n            onSelect={() => handleSelect('source')}\r\n            onEnter={handleToTarget}\r\n            onSwitch={() => handlePanelFocus('target')}\r\n          >\r\n            {{\r\n              header: getSlotRender(['source-header', 'sourceHeader', 'header']),\r\n              title: getSlotRender(['source-title', 'sourceTitle', 'title']),\r\n              body: getSlotRender(['source-body', 'sourceBody', 'body']),\r\n              footer: getSlotRender(['source-footer', 'sourceFooter', 'footer']),\r\n              option: getSlotRender(['source-option', 'sourceOption', 'option']),\r\n              label: getSlotRender(['source-label', 'sourceLabel', 'label']),\r\n            }}\r\n          </TransferPanel>\r\n          <div class={nh.be('actions')}>\r\n            {renderSlot(slots, 'actions', { handleToTarget, handleToSource }, () => [\r\n              <Renderer renderer={props.slots.actions} data={{ handleToTarget, handleToSource }}>\r\n                <Button\r\n                  key={1}\r\n                  inherit\r\n                  class={nh.be('action')}\r\n                  type={actionType.value}\r\n                  size={'small'}\r\n                  disabled={props.disabled || !toTargetEnabled.value}\r\n                  loading={readonly.value}\r\n                  loading-icon={props.loadingIcon}\r\n                  loading-effect={props.loadingEffect}\r\n                  style={{ marginBottom: '6px' }}\r\n                  onClick={handleToTarget}\r\n                >\r\n                  {{\r\n                    icon: () => (\r\n                      <Icon\r\n                        {...(isRtl.value ? icons.value.angleLeft : icons.value.angleRight)}\r\n                        label={isRtl.value ? 'to left' : 'to right'}\r\n                      ></Icon>\r\n                    ),\r\n                  }}\r\n                </Button>\r\n                <Button\r\n                  key={2}\r\n                  inherit\r\n                  class={nh.be('action')}\r\n                  type={actionType.value}\r\n                  size={'small'}\r\n                  disabled={props.disabled || !toSourceEnabled.value}\r\n                  loading={readonly.value}\r\n                  loading-icon={props.loadingIcon}\r\n                  loading-effect={props.loadingEffect}\r\n                  style={{ margin: '0' }}\r\n                  onClick={handleToSource}\r\n                >\r\n                  {{\r\n                    icon: () => (\r\n                      <Icon\r\n                        {...(isRtl.value ? icons.value.angleRight : icons.value.angleLeft)}\r\n                        label={isRtl.value ? 'to right' : 'to left'}\r\n                      ></Icon>\r\n                    ),\r\n                  }}\r\n                </Button>\r\n              </Renderer>,\r\n            ])}\r\n          </div>\r\n          <TransferPanel\r\n            ref={target}\r\n            v-model:selected={targetSelected.value}\r\n            type={'target'}\r\n            class={nh.bem('panel', 'target')}\r\n            state={props.state}\r\n            paged={props.paged}\r\n            filter={targetFilter.value}\r\n            disabled={props.disabled}\r\n            title={props.targetTitle || locale.value.target}\r\n            options={targetOptions.value}\r\n            empty-text={props.emptyText || locale.value.empty}\r\n            option-height={props.optionHeight}\r\n            ignore-case={props.ignoreCase}\r\n            deep-state={props.deepState}\r\n            loading={props.loading}\r\n            loading-icon={props.loadingIcon}\r\n            loading-lock={props.loadingLock}\r\n            loading-effect={props.loadingEffect}\r\n            locale={locale.value}\r\n            onSelect={() => handleSelect('target')}\r\n            onEnter={handleToSource}\r\n            onSwitch={() => handlePanelFocus('source')}\r\n          >\r\n            {{\r\n              header: getSlotRender(['target-header', 'targetHeader', 'header']),\r\n              title: getSlotRender(['target-title', 'targetTitle', 'title']),\r\n              body: getSlotRender(['target-body', 'targetBody', 'body']),\r\n              footer: getSlotRender(['target-footer', 'targetFooter', 'footer']),\r\n              option: getSlotRender(['target-option', 'targetOption', 'option']),\r\n              label: getSlotRender(['target-label', 'targetLabel', 'label']),\r\n            }}\r\n          </TransferPanel>\r\n        </div>\r\n      )\r\n    }\r\n  },\r\n})\r\n","import type { InjectionKey } from 'vue'\r\n// import type { BITree } from '@vexip-ui/utils'\r\n\r\nexport type Key = string | number | symbol\r\nexport type Data = any\r\nexport type TreeNodeDropType = 'before' | 'inner' | 'after'\r\nexport type TreeLinkLine = 'dashed' | 'solid' | 'dotted' | 'none'\r\n\r\nexport interface TreeNodeKeyConfig {\r\n  id?: string,\r\n  parent?: string,\r\n  label?: string,\r\n  children?: string,\r\n  visible?: string,\r\n  selected?: string,\r\n  expanded?: string,\r\n  disabled?: string,\r\n  checked?: string,\r\n  loading?: string,\r\n  loaded?: string,\r\n  loadFail?: string,\r\n  readonly?: string,\r\n  arrow?: string,\r\n  checkbox?: string,\r\n  selectDisabled?: string,\r\n  expandDisabled?: string,\r\n  checkDisabled?: string,\r\n  isLeaf?: string,\r\n}\r\n\r\nexport const enum DropType {\r\n  BEFORE = 'before',\r\n  INNER = 'inner',\r\n  AFTER = 'after',\r\n}\r\n\r\nexport type TreeNodeProps<D = Data> = {\r\n  id: Key,\r\n  parent?: Key,\r\n  children: TreeNodeProps[],\r\n  visible: boolean,\r\n  selected: boolean,\r\n  expanded: boolean,\r\n  disabled: boolean,\r\n  checked: boolean,\r\n  loading: boolean,\r\n  loaded: boolean,\r\n  loadFail: boolean,\r\n  readonly: boolean,\r\n  arrow: boolean | 'auto',\r\n  checkbox: boolean,\r\n  selectDisabled: boolean,\r\n  expandDisabled: boolean,\r\n  checkDisabled: boolean,\r\n  isLeaf: boolean | 'auto',\r\n  data: D,\r\n  /** @internal */\r\n  partial: boolean,\r\n  /** @internal */\r\n  matched: boolean,\r\n  /** @internal */\r\n  childMatched: boolean,\r\n  /** @internal */\r\n  upperMatched: boolean,\r\n  /** @internal */\r\n  depth: number,\r\n  /** @internal */\r\n  last: boolean,\r\n  /** @internal */\r\n  upstreamLast: boolean[],\r\n  /** @internal */\r\n  lineIndexes: number[],\r\n}\r\n\r\nexport type TreeNodePostCreate<D = Data> = (node: TreeNodeProps<D>) => void\r\nexport type TreeNodeRenderFn<D = Data> = (params: { data: D, node: TreeNodeProps<D> }) => any\r\nexport type AsyncLoadFn<D = Data> = (\r\n  data: D,\r\n  node: Readonly<TreeNodeProps<D>>,\r\n) => void | boolean | Promise<any>\r\nexport type FilterFn<D = Data> = (data: D, node: TreeNodeProps<D>) => boolean\r\nexport type NodePropsFn<D = Data> = (data: D, node: TreeNodeProps<D>) => Data\r\n\r\nexport interface TreeCommonSlotParams {\r\n  data: Data,\r\n  node: TreeNodeProps,\r\n  depth: number,\r\n  focused: boolean,\r\n}\r\n\r\nexport interface TreeNodeSlotParams extends TreeCommonSlotParams {\r\n  /** @deprecated */\r\n  lineCount: number,\r\n  lineIndexes: number[],\r\n  toggleCheck: (checked?: boolean) => void,\r\n  toggleExpand: (expanded?: boolean) => Promise<void>,\r\n  toggleSelect: (able?: boolean) => Promise<void>,\r\n}\r\n\r\nexport interface TreeNodeInstance {\r\n  el?: HTMLElement | null,\r\n  arrow?: HTMLElement | null,\r\n  node: TreeNodeProps,\r\n}\r\n\r\nexport interface TreeNodeState {\r\n  el?: HTMLElement | null,\r\n  depth: number,\r\n  disabled: boolean,\r\n  readonly: boolean,\r\n}\r\n\r\nexport interface TreeCollapseProps {\r\n  id: symbol,\r\n  placeholder: true,\r\n  type: 'expand' | 'reduce',\r\n  height: number,\r\n  nodes: TreeNodeProps[],\r\n}\r\n\r\nexport interface TreeState {\r\n  arrow: boolean | 'auto',\r\n  checkbox: boolean,\r\n  suffixCheckbox: boolean,\r\n  noCascaded: boolean,\r\n  linkLine: false | TreeLinkLine,\r\n  virtual: boolean,\r\n  labelKey: string,\r\n  draggable: boolean,\r\n  floorSelect: boolean,\r\n  renderer: TreeNodeRenderFn,\r\n  prefixRenderer: TreeNodeRenderFn,\r\n  suffixRenderer: TreeNodeRenderFn,\r\n  arrowIcon: Record<string, any>,\r\n  blockEffect: boolean,\r\n  dragging: boolean,\r\n  boundAsyncLoad: boolean,\r\n  nodeStates: Map<Key, TreeNodeState>,\r\n  expanding: boolean,\r\n  keepSelected: boolean,\r\n  multiple: boolean,\r\n  getParentNode(node: TreeNodeProps): TreeNodeProps | null,\r\n  updateVisibleNodeEls(): void,\r\n  computeCheckedState(originNode: TreeNodeProps, able: boolean): void,\r\n  handleNodeClick(node: TreeNodeProps): void,\r\n  handleNodeSelect(node: TreeNodeProps): void,\r\n  handleNodeCancel(node: TreeNodeProps): void,\r\n  handleNodeExpand(node: TreeNodeProps): void,\r\n  handleNodeReduce(node: TreeNodeProps): void,\r\n  handleNodeContextmenu(event: MouseEvent, node: TreeNodeProps): void,\r\n  handleAsyncLoad(node: TreeNodeProps): Promise<boolean>,\r\n  handleNodeDragStart(nodeInstance: TreeNodeInstance): void,\r\n  handleNodeDragOver(nodeInstance: TreeNodeInstance, event: DragEvent): void,\r\n  handleNodeDrop(nodeInstance: TreeNodeInstance): void,\r\n  handleNodeDragEnd(nodeInstance: TreeNodeInstance): void,\r\n  handleHittingChange(type: 'up' | 'down'): void,\r\n  handleNodeHitting(nodeEl?: HTMLElement | null): void,\r\n  handleLabelClick(node: TreeNodeProps): void,\r\n}\r\n\r\nexport interface TreeSlots {\r\n  node?: (params: TreeNodeSlotParams) => any,\r\n  arrow?: (params: TreeCommonSlotParams) => any,\r\n  label?: (params: TreeCommonSlotParams) => any,\r\n  prefix?: (params: TreeCommonSlotParams) => any,\r\n  suffix?: (params: TreeCommonSlotParams) => any,\r\n  empty?: () => any,\r\n}\r\n\r\nexport const TREE_STATE = '__VXP_TREE_STATE' as unknown as InjectionKey<TreeState>\r\nexport const TREE_NODE_STATE = '__VXP_TREE_NODE_STATE' as unknown as InjectionKey<TreeNodeState>\r\n\r\nexport const defaultKeyConfig: Required<TreeNodeKeyConfig> = {\r\n  id: 'id',\r\n  parent: 'parent',\r\n  label: 'label',\r\n  children: 'children',\r\n  visible: 'visible',\r\n  selected: 'selected',\r\n  expanded: 'expanded',\r\n  disabled: 'disabled',\r\n  checked: 'checked',\r\n  loading: 'loading',\r\n  loaded: 'loaded',\r\n  loadFail: 'loadFail',\r\n  readonly: 'readonly',\r\n  arrow: 'arrow',\r\n  checkbox: 'checkbox',\r\n  selectDisabled: 'selectDisabled',\r\n  expandDisabled: 'expandDisabled',\r\n  checkDisabled: 'checkDisabled',\r\n  isLeaf: 'isLeaf',\r\n}\r\n","<script setup lang=\"ts\">\r\nimport { Checkbox } from '@/components/checkbox'\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, inject, nextTick, onBeforeUnmount, reactive, ref, watch } from 'vue'\r\n\r\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\r\nimport { useModifier, useRtl } from '@vexip-ui/hooks'\r\nimport { decide, isNull } from '@vexip-ui/utils'\r\nimport { TREE_STATE } from './symbol'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { TreeNodeProps } from './symbol'\r\n\r\ndefineOptions({ name: 'TreeNode', inheritAttrs: false })\r\n\r\nconst props = defineProps({\r\n  node: {\r\n    type: Object as PropType<TreeNodeProps>,\r\n    default: () => ({}),\r\n  },\r\n})\r\n\r\nconst treeState = inject(TREE_STATE)!\r\n\r\nconst nh = useNameHelper('tree')\r\nconst icons = useIcons()\r\n\r\nconst { isRtl } = useRtl()\r\n\r\nconst wrapper = ref<HTMLElement>()\r\nconst arrowEl = ref<HTMLElement>()\r\n\r\nconst parentState = computed(() => {\r\n  return props.node.parent ? treeState.nodeStates.get(props.node.parent) : undefined\r\n})\r\n\r\nuseModifier({\r\n  target: wrapper,\r\n  passive: false,\r\n  onKeyDown: (event, modifier) => {\r\n    if (treeState.expanding) return\r\n\r\n    decide(\r\n      [\r\n        [\r\n          () => modifier.up || modifier.down,\r\n          () => treeState.handleHittingChange(modifier.up ? 'up' : 'down'),\r\n        ],\r\n        [\r\n          () => modifier.left || modifier.right,\r\n          () => {\r\n            const hasChild = props.node.children?.length > 0\r\n\r\n            if (modifier.right && props.node.expanded && hasChild) {\r\n              treeState.handleHittingChange('down')\r\n            } else if (modifier.left && (!props.node.expanded || !hasChild)) {\r\n              treeState.handleNodeHitting(parentState.value?.el)\r\n            } else {\r\n              toggleExpanded(modifier.right)\r\n            }\r\n          },\r\n        ],\r\n        [() => hasCheckbox.value && modifier.space, handleToggleCheck],\r\n        [() => modifier.enter, handleToggleSelect],\r\n      ],\r\n      {\r\n        beforeMatchAny: () => {\r\n          event.preventDefault()\r\n          event.stopPropagation()\r\n        },\r\n        afterMatchAny: modifier.resetAll,\r\n      },\r\n    )\r\n  },\r\n})\r\n\r\nconst loaded = ref(!treeState.boundAsyncLoad || props.node.loaded)\r\nconst loadFail = ref(treeState.boundAsyncLoad && props.node.loadFail)\r\nconst dragging = ref(false)\r\nconst isDragOver = ref(false)\r\nconst focused = ref(false)\r\n\r\nconst isDisabled = computed(() => {\r\n  return (!treeState.noCascaded && parentState.value?.disabled) || props.node.disabled\r\n})\r\nconst isReadonly = computed(() => {\r\n  return (!treeState.noCascaded && parentState.value?.readonly) || props.node.readonly\r\n})\r\n// const depth = computed(() => parentState.depth + 1)\r\nconst secondary = computed(\r\n  () => !props.node.matched && (props.node.childMatched || props.node.upperMatched),\r\n)\r\nconst hasLinkLine = computed(() => !!treeState.linkLine && props.node.depth > 0)\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.be('node')]: true,\r\n    [nh.bem('node', 'last')]: props.node.last,\r\n    [nh.bem('node', 'focused')]: focused.value,\r\n    [nh.bem('node', 'selected')]: props.node.selected,\r\n    [nh.bem('node', 'expanded')]: props.node.expanded,\r\n    [nh.bem('node', 'disabled')]: isDisabled.value,\r\n    [nh.bem('node', 'readonly')]: isReadonly.value,\r\n    [nh.bem('node', 'secondary')]: secondary.value,\r\n    [nh.bem('node', 'dragging')]: dragging.value,\r\n    [nh.bem('node', 'drag-over')]: isDragOver.value,\r\n    [nh.bem('node', 'link-line')]: hasLinkLine.value,\r\n    [nh.bem('node', 'no-arrow')]: !hasArrow.value,\r\n    [nh.bem('node', 'is-floor')]: treeState.floorSelect && props.node.children?.length,\r\n    [nh.bem('node', 'loaded')]: loaded.value,\r\n    [nh.bem('node', 'load-fail')]: loadFail.value,\r\n  }\r\n})\r\nconst isLeaf = computed(() => {\r\n  const isLeaf = props.node.isLeaf\r\n\r\n  let leafSign: boolean | 'auto' = 'auto'\r\n  let asyncLoad = false\r\n\r\n  if (isNull(isLeaf) || isLeaf === 'auto') {\r\n    leafSign = 'auto'\r\n    asyncLoad = treeState.boundAsyncLoad\r\n  } else {\r\n    leafSign = isLeaf\r\n  }\r\n\r\n  return leafSign === 'auto'\r\n    ? !(props.node.children?.length || (asyncLoad && !loaded.value))\r\n    : !!leafSign\r\n})\r\nconst hasArrow = computed(() => {\r\n  return isNull(props.node.arrow) || props.node.arrow === 'auto'\r\n    ? treeState.arrow === 'auto'\r\n      ? !isLeaf.value\r\n      : treeState.arrow\r\n    : props.node.arrow\r\n})\r\nconst hasCheckbox = computed(() => {\r\n  const checkbox = props.node.checkbox\r\n\r\n  return isNull(checkbox) ? treeState.checkbox : checkbox\r\n})\r\n// const renderer = computed(() => treeState.renderer)\r\nconst suffixCheckbox = computed(() => treeState.suffixCheckbox)\r\nconst nodeState = reactive({\r\n  el: wrapper,\r\n  depth: computed(() => props.node.depth),\r\n  disabled: isDisabled,\r\n  readonly: isReadonly,\r\n})\r\n\r\nwatch([() => treeState.boundAsyncLoad, () => props.node.loaded], values => {\r\n  loaded.value = !values[0] || values[1]\r\n})\r\nwatch([() => treeState.boundAsyncLoad, () => props.node.loadFail], values => {\r\n  loadFail.value = !values[0] || values[1]\r\n})\r\nwatch(\r\n  () => props.node.id,\r\n  (value, prev) => {\r\n    treeState.nodeStates.delete(prev)\r\n    treeState.nodeStates.set(value, nodeState)\r\n  },\r\n)\r\n\r\ntreeState.nodeStates.set(props.node.id, nodeState)\r\n\r\nlet dragTimer: ReturnType<typeof setTimeout>\r\n\r\nonBeforeUnmount(() => {\r\n  clearTimeout(dragTimer)\r\n  treeState.nodeStates.set(props.node.id, nodeState)\r\n})\r\n\r\n// function updateVisible() {\r\n//   treeState.updateVisibleNodeEls()\r\n// }\r\n\r\nfunction setValue<T = unknown>(key: keyof TreeNodeProps, value: T) {\r\n  ;(props.node as any)[key] = value\r\n}\r\n\r\nfunction handleClick() {\r\n  treeState.handleNodeClick(props.node)\r\n\r\n  if (treeState.blockEffect) {\r\n    handleLabelClick()\r\n  }\r\n}\r\n\r\nfunction handleContextmenu(event: MouseEvent) {\r\n  treeState.handleNodeContextmenu(event, props.node)\r\n}\r\n\r\nfunction handleToggleCheck(able = !props.node.checked) {\r\n  if (isDisabled.value || props.node.checkDisabled) return\r\n\r\n  setValue('checked', able)\r\n  setValue('partial', false)\r\n\r\n  nextTick(() => {\r\n    treeState.computeCheckedState(props.node, able)\r\n  })\r\n}\r\n\r\nasync function toggleExpanded(able = !props.node.expanded) {\r\n  if (\r\n    treeState.expanding ||\r\n    props.node.loading ||\r\n    isDisabled.value ||\r\n    props.node.expandDisabled ||\r\n    isLeaf.value\r\n  ) {\r\n    return\r\n  }\r\n\r\n  if (able && treeState.boundAsyncLoad && !loaded.value) {\r\n    setValue('loading', true)\r\n\r\n    const result = await treeState.handleAsyncLoad(props.node)\r\n\r\n    asyncLoadCallback(result)\r\n  } else {\r\n    setValue('expanded', able)\r\n\r\n    if (able) {\r\n      treeState.handleNodeExpand(props.node)\r\n    } else {\r\n      treeState.handleNodeReduce(props.node)\r\n    }\r\n  }\r\n}\r\n\r\nasync function handleToggleSelect(able = !props.node.selected) {\r\n  if (isDisabled.value || props.node.selectDisabled) return\r\n\r\n  if (treeState.floorSelect) {\r\n    await toggleExpanded()\r\n    return\r\n  }\r\n\r\n  const selected = !isReadonly.value && able\r\n\r\n  if (selected || !treeState.keepSelected) {\r\n    setValue('selected', selected)\r\n  }\r\n\r\n  // 只读时也派发 select 事件\r\n  if (isReadonly.value || able) {\r\n    treeState.handleNodeSelect(props.node)\r\n  } else if (treeState.multiple || !treeState.keepSelected) {\r\n    treeState.handleNodeCancel(props.node)\r\n  }\r\n}\r\n\r\nfunction handleLabelClick() {\r\n  treeState.handleLabelClick(props.node)\r\n  handleToggleSelect()\r\n}\r\n\r\nfunction asyncLoadCallback(success = true) {\r\n  setValue('loading', false)\r\n  setValue('expanded', success !== false)\r\n\r\n  if (success !== false) {\r\n    setValue('loaded', true)\r\n    setValue('loadFail', false)\r\n\r\n    if (props.node.children?.length) {\r\n      treeState.handleNodeExpand(props.node)\r\n    } else {\r\n      setValue('arrow', false)\r\n    }\r\n  } else {\r\n    setValue('loadFail', true)\r\n  }\r\n}\r\n\r\nfunction getNodeState() {\r\n  return {\r\n    el: wrapper.value,\r\n    arrow: arrowEl.value,\r\n    node: props.node,\r\n  }\r\n}\r\n\r\nfunction handleDragStart() {\r\n  if (!treeState.draggable) return\r\n\r\n  dragging.value = true\r\n  treeState.handleNodeDragStart(getNodeState())\r\n}\r\n\r\nfunction handleDragOver(event: DragEvent) {\r\n  if (!treeState.draggable || !treeState.dragging) return\r\n\r\n  clearTimeout(dragTimer)\r\n  event.stopPropagation()\r\n  event.preventDefault()\r\n\r\n  isDragOver.value = true\r\n\r\n  treeState.handleNodeDragOver(getNodeState(), event)\r\n}\r\n\r\nfunction handleDragLeave(event: DragEvent) {\r\n  if (!treeState.draggable) return\r\n\r\n  clearTimeout(dragTimer)\r\n  event.preventDefault()\r\n\r\n  dragTimer = setTimeout(() => {\r\n    isDragOver.value = false\r\n  }, 100)\r\n}\r\n\r\nfunction handleDrop(event: DragEvent) {\r\n  if (!treeState.draggable || !treeState.dragging) return\r\n\r\n  clearTimeout(dragTimer)\r\n  event.stopPropagation()\r\n  event.preventDefault()\r\n\r\n  isDragOver.value = false\r\n\r\n  treeState.handleNodeDrop(getNodeState())\r\n}\r\n\r\nfunction handleDragEnd(event: DragEvent) {\r\n  if (!treeState.draggable || !treeState.dragging) return\r\n\r\n  event.stopPropagation()\r\n  dragging.value = false\r\n  treeState.handleNodeDragEnd(getNodeState())\r\n}\r\n</script>\r\n\r\n<template>\r\n  <li\r\n    v-bind=\"$attrs\"\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    :draggable=\"treeState.draggable\"\r\n    tabindex=\"-1\"\r\n    :aria-disabled=\"isDisabled\"\r\n    :aria-grabbed=\"treeState.draggable && dragging ? 'true' : undefined\"\r\n    :style=\"{ [nh.cv('depth')]: node.depth }\"\r\n    @click.left=\"handleClick\"\r\n    @contextmenu=\"handleContextmenu\"\r\n    @focus=\"focused = true\"\r\n    @blur=\"focused = false\"\r\n    @dragstart.stop=\"handleDragStart\"\r\n    @dragover=\"handleDragOver\"\r\n    @dragleave=\"handleDragLeave\"\r\n    @dragend=\"handleDragEnd\"\r\n    @drop=\"handleDrop\"\r\n  >\r\n    <slot\r\n      :data=\"node.data\"\r\n      :node=\"node\"\r\n      :depth=\"node.depth\"\r\n      :focused=\"focused\"\r\n      :line-count=\"0\"\r\n      :line-indexes=\"node.lineIndexes\"\r\n      :toggle-check=\"handleToggleCheck\"\r\n      :toggle-expand=\"toggleExpanded\"\r\n      :toggle-select=\"handleToggleSelect\"\r\n    >\r\n      <template v-if=\"hasLinkLine\">\r\n        <div\r\n          v-for=\"(lineIndex, index) in node.lineIndexes\"\r\n          :key=\"index\"\r\n          :class=\"[\r\n            nh.be('link-line'),\r\n            nh.bem('link-line', 'vertical'),\r\n            !index && nh.bem('link-line', 'first')\r\n          ]\"\r\n          :style=\"{ [nh.cv('link-line-index')]: lineIndex }\"\r\n          aria-hidden=\"true\"\r\n        ></div>\r\n\r\n        <div\r\n          :class=\"[nh.be('link-line'), nh.bem('link-line', 'horizontal')]\"\r\n          aria-hidden=\"true\"\r\n        ></div>\r\n      </template>\r\n      <div\r\n        :class=\"{\r\n          [nh.be('content')]: true,\r\n          [nh.bem('content', 'effect')]: treeState.blockEffect,\r\n          [nh.bem('content', 'disabled')]:\r\n            treeState.blockEffect && (isDisabled || node.selectDisabled)\r\n        }\"\r\n      >\r\n        <span\r\n          ref=\"arrowEl\"\r\n          :class=\"{\r\n            [nh.be('arrow')]: true,\r\n            [nh.bem('arrow', 'transparent')]: !node.loading && !hasArrow,\r\n            [nh.bem('arrow', 'expanded')]: node.expanded,\r\n            [nh.bem('arrow', 'disabled')]: isDisabled || node.expandDisabled\r\n          }\"\r\n          :aria-hidden=\"!node.loading && !hasArrow\"\r\n          @click.stop=\"toggleExpanded()\"\r\n        >\r\n          <Icon v-if=\"node.loading\" v-bind=\"icons.loading\" label=\"loading\"></Icon>\r\n          <slot\r\n            v-else\r\n            name=\"arrow\"\r\n            :data=\"node.data\"\r\n            :node=\"node\"\r\n            :depth=\"node.depth\"\r\n            :focused=\"focused\"\r\n          >\r\n            <Icon v-if=\"treeState.arrowIcon\" :icon=\"treeState.arrowIcon\"></Icon>\r\n            <Icon v-else v-bind=\"isRtl ? icons.angleLeft : icons.angleRight\"></Icon>\r\n          </slot>\r\n        </span>\r\n        <Checkbox\r\n          v-if=\"hasCheckbox && !suffixCheckbox\"\r\n          inherit\r\n          :class=\"nh.be('checkbox')\"\r\n          :tab-index=\"-1\"\r\n          :control=\"hasArrow\"\r\n          :checked=\"node.checked\"\r\n          :disabled=\"isDisabled || node.checkDisabled\"\r\n          :partial=\"node.partial\"\r\n          @click.prevent.stop=\"handleToggleCheck()\"\r\n        ></Checkbox>\r\n        <div\r\n          :class=\"{\r\n            [nh.be('label')]: true,\r\n            [nh.bem('label', 'effect')]: !treeState.blockEffect,\r\n            [nh.bem('label', 'disabled')]:\r\n              !treeState.blockEffect && (isDisabled || node.selectDisabled)\r\n          }\"\r\n          @click=\"!treeState.blockEffect && handleLabelClick()\"\r\n        >\r\n          <div v-if=\"treeState.prefixRenderer || $slots.prefix\" :class=\"nh.be('prefix')\">\r\n            <Renderer\r\n              v-if=\"treeState.prefixRenderer\"\r\n              :renderer=\"treeState.prefixRenderer\"\r\n              :data=\"{ node, depth: node.depth, data: node.data, focused }\"\r\n            ></Renderer>\r\n            <slot\r\n              v-else\r\n              name=\"prefix\"\r\n              :data=\"node.data\"\r\n              :node=\"node\"\r\n              :depth=\"node.depth\"\r\n              :focused=\"focused\"\r\n            ></slot>\r\n          </div>\r\n          <div :class=\"nh.be('text')\">\r\n            <Renderer\r\n              v-if=\"treeState.renderer\"\r\n              :renderer=\"treeState.renderer\"\r\n              :data=\"{ node, depth: node.depth, data: node.data, focused }\"\r\n            ></Renderer>\r\n            <slot\r\n              v-else\r\n              name=\"label\"\r\n              :data=\"node.data\"\r\n              :node=\"node\"\r\n              :depth=\"node.depth\"\r\n              :focused=\"focused\"\r\n            >\r\n              {{ node.data[treeState.labelKey] }}\r\n            </slot>\r\n          </div>\r\n          <div v-if=\"treeState.suffixRenderer || $slots.suffix\" :class=\"nh.be('suffix')\">\r\n            <Renderer\r\n              v-if=\"treeState.suffixRenderer\"\r\n              :renderer=\"treeState.suffixRenderer\"\r\n              :data=\"{ node, depth: node.depth, data: node.data, focused }\"\r\n            ></Renderer>\r\n            <slot\r\n              v-else\r\n              name=\"suffix\"\r\n              :data=\"node.data\"\r\n              :node=\"node\"\r\n              :depth=\"node.depth\"\r\n              :focused=\"focused\"\r\n            ></slot>\r\n          </div>\r\n        </div>\r\n        <Checkbox\r\n          v-if=\"hasCheckbox && suffixCheckbox\"\r\n          inherit\r\n          :class=\"[nh.be('checkbox'), nh.bem('checkbox', 'suffix')]\"\r\n          :tab-index=\"-1\"\r\n          :control=\"hasArrow\"\r\n          :checked=\"node.checked\"\r\n          :disabled=\"isDisabled || node.checkDisabled\"\r\n          :partial=\"node.partial\"\r\n          @click.prevent.stop=\"handleToggleCheck()\"\r\n        ></Checkbox>\r\n      </div>\r\n    </slot>\r\n  </li>\r\n</template>\r\n","import { booleanProp, buildProps, eventProp, iconProp, localeProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type {\r\n  AsyncLoadFn,\r\n  Data,\r\n  FilterFn,\r\n  NodePropsFn,\r\n  TreeLinkLine,\r\n  TreeNodeDropType,\r\n  TreeNodeKeyConfig,\r\n  TreeNodePostCreate,\r\n  TreeNodeProps,\r\n  TreeNodeRenderFn,\r\n  TreeSlots,\r\n} from './symbol'\r\n\r\nexport const treeProps = buildProps({\r\n  locale: localeProp('tree'),\r\n  arrow: {\r\n    type: [Boolean, String] as PropType<boolean | 'auto'>,\r\n    default: null,\r\n  },\r\n  data: Array as PropType<Data[]>,\r\n  noBuildTree: booleanProp,\r\n  emptyText: String,\r\n  disabled: booleanProp,\r\n  readonly: booleanProp,\r\n  checkbox: booleanProp,\r\n  suffixCheckbox: booleanProp,\r\n  renderer: Function as PropType<TreeNodeRenderFn>,\r\n  prefixRenderer: Function as PropType<TreeNodeRenderFn>,\r\n  suffixRenderer: Function as PropType<TreeNodeRenderFn>,\r\n  multiple: booleanProp,\r\n  indent: [String, Number],\r\n  accordion: booleanProp,\r\n  draggable: booleanProp,\r\n  appear: booleanProp,\r\n  floorSelect: booleanProp,\r\n  onAsyncLoad: Function as PropType<AsyncLoadFn>,\r\n  cacheNode: booleanProp,\r\n  rootId: [String, Number],\r\n  keyConfig: Object as PropType<TreeNodeKeyConfig>,\r\n  noCascaded: booleanProp,\r\n  filter: [String, Function] as PropType<string | FilterFn>,\r\n  ignoreCase: booleanProp,\r\n  nodeProps: [Object, Function] as PropType<Data | NodePropsFn>,\r\n  linkLine: {\r\n    type: [Boolean, String] as PropType<boolean | TreeLinkLine>,\r\n    default: null,\r\n  },\r\n  postCreate: Function as PropType<TreeNodePostCreate>,\r\n  virtual: booleanProp,\r\n  nodeMinHeight: Number,\r\n  useYBar: booleanProp,\r\n  noTransition: booleanProp,\r\n  arrowIcon: iconProp,\r\n  blockEffect: booleanProp,\r\n  filterLeaf: booleanProp,\r\n  keepSelected: booleanProp,\r\n  slots: Object as PropType<TreeSlots>,\r\n  onNodeChange: eventProp<(data: Data, node: TreeNodeProps, checked: boolean) => void>(),\r\n  onNodeClick: eventProp<(data: Data, node: TreeNodeProps) => void>(),\r\n  onNodeSelect: eventProp<(data: Data | Data[], node: TreeNodeProps | TreeNodeProps[]) => void>(),\r\n  onNodeCancel: eventProp<(data: Data, node: TreeNodeProps) => void>(),\r\n  onNodeExpand: eventProp<(data: Data, node: TreeNodeProps) => void>(),\r\n  onNodeReduce: eventProp<(data: Data, node: TreeNodeProps) => void>(),\r\n  onNodeContextmenu: eventProp<(event: MouseEvent, data: Data, node: TreeNodeProps) => void>(),\r\n  onDragStart: eventProp<(data: Data, node: TreeNodeProps) => void>(),\r\n  onDragOver: eventProp<(data: Data, node: TreeNodeProps) => void>(),\r\n  onDrop: eventProp<(data: Data, node: TreeNodeProps, type: TreeNodeDropType) => void>(),\r\n  onDragEnd: eventProp<(data: Data, node: TreeNodeProps) => void>(),\r\n  onLabelClick: eventProp<(data: Data, node: TreeNodeProps) => void>(),\r\n})\r\n\r\nexport type TreeProps = ExtractPropTypes<typeof treeProps>\r\nexport type TreeCProps = ConfigurableProps<TreeProps, 'data', 'onAsyncLoad'>\r\n","<script setup lang=\"ts\">\r\nimport { CollapseTransition } from '@/components/collapse-transition'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { VirtualList } from '@/components/virtual-list'\r\n\r\nimport {\r\n  computed,\r\n  nextTick,\r\n  onMounted,\r\n  provide,\r\n  reactive,\r\n  ref,\r\n  toRef,\r\n  watch,\r\n  watchEffect,\r\n} from 'vue'\r\n\r\nimport TreeNode from './tree-node.vue'\r\nimport { createIconProp, emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useMounted, useSetTimeout } from '@vexip-ui/hooks'\r\nimport {\r\n  debounce,\r\n  filterTree,\r\n  flatTree,\r\n  getGlobalCount,\r\n  getLast,\r\n  isNull,\r\n  isPromise,\r\n  mapTree,\r\n  queryAll,\r\n  removeArrayItem,\r\n  transformTree,\r\n  walkTree,\r\n} from '@vexip-ui/utils'\r\nimport { treeProps } from './props'\r\nimport { useCascadedChecked } from './hooks'\r\nimport { DropType, TREE_NODE_STATE, TREE_STATE, defaultKeyConfig } from './symbol'\r\n\r\nimport type { VirtualListExposed } from '@/components/virtual-list'\r\nimport type {\r\n  Data,\r\n  FilterFn,\r\n  Key,\r\n  TreeCollapseProps,\r\n  TreeNodeInstance,\r\n  TreeNodeProps,\r\n  TreeNodeState,\r\n  TreeSlots,\r\n} from './symbol'\r\n\r\ndefineOptions({ name: 'Tree' })\r\n\r\nconst _props = defineProps(treeProps)\r\nconst props = useProps('tree', _props, {\r\n  arrow: {\r\n    default: 'auto',\r\n    validator: value => typeof value === 'boolean' || value === 'auto',\r\n  },\r\n  data: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  noBuildTree: false,\r\n  emptyText: null,\r\n  disabled: false,\r\n  readonly: false,\r\n  checkbox: false,\r\n  suffixCheckbox: false,\r\n  renderer: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  prefixRenderer: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  suffixRenderer: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  multiple: false,\r\n  indent: '16px',\r\n  accordion: false,\r\n  draggable: false,\r\n  appear: false,\r\n  floorSelect: false,\r\n  onAsyncLoad: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  cacheNode: false,\r\n  rootId: null,\r\n  keyConfig: () => ({}),\r\n  noCascaded: false,\r\n  filter: '',\r\n  ignoreCase: false,\r\n  nodeProps: null,\r\n  linkLine: false,\r\n  postCreate: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  virtual: false,\r\n  nodeMinHeight: {\r\n    default: 26,\r\n    validator: value => value > 0,\r\n  },\r\n  useYBar: false,\r\n  noTransition: false,\r\n  arrowIcon: createIconProp(),\r\n  blockEffect: false,\r\n  filterLeaf: false,\r\n  keepSelected: false,\r\n  slots: () => ({}),\r\n})\r\n\r\nconst slots = defineSlots<TreeSlots>()\r\n\r\nconst nh = useNameHelper('tree')\r\nconst locale = useLocale('tree', toRef(props, 'locale'))\r\n\r\nconst nodeMap = new Map<Key, TreeNodeProps>()\r\nconst nodeDataMap = new Map<Data, TreeNodeProps>()\r\nconst treeNodes = ref<TreeNodeProps[]>([])\r\nconst flattedNodes = ref<TreeNodeProps[]>([])\r\nconst dragging = ref(false)\r\nconst indicatorShow = ref(false)\r\nconst keyConfig = reactive({ ...defaultKeyConfig })\r\nconst nodeStates = reactive(new Map<Key, TreeNodeState>())\r\nconst expanding = ref(false)\r\nconst expandingNodes = ref<TreeNodeProps[]>([])\r\nconst expandedNodeIds = ref(new Set<Key>())\r\n\r\nconst { timer } = useSetTimeout()\r\nconst { isMounted } = useMounted()\r\n\r\nconst virtualList = ref<VirtualListExposed>()\r\nconst trap = ref<HTMLElement>()\r\nconst indicator = ref<HTMLElement>()\r\n\r\nconst wrapper = computed(() => virtualList.value?.wrapper)\r\n\r\nlet visibleNodeEls: HTMLElement[] = []\r\n\r\nconst defaultNodeProperties = {\r\n  visible: true,\r\n  selected: false,\r\n  expanded: false,\r\n  disabled: false,\r\n  checked: false,\r\n  loading: false,\r\n  loaded: false,\r\n  loadFail: false,\r\n  readonly: false,\r\n  arrow: 'auto' as boolean | 'auto',\r\n  // will follow checkbox prop of tree when not set (be null)\r\n  checkbox: null! as boolean,\r\n  selectDisabled: false,\r\n  expandDisabled: false,\r\n  checkDisabled: false,\r\n  isLeaf: 'auto' as boolean | 'auto',\r\n}\r\n\r\nconst boundAsyncLoad = computed(() => typeof props.onAsyncLoad === 'function')\r\nconst linkLine = computed(() => {\r\n  return props.linkLine === true ? 'dashed' : props.linkLine === 'none' ? false : props.linkLine\r\n})\r\nconst style = computed(() => {\r\n  return {\r\n    [nh.cv('indent-width')]: typeof props.indent === 'number' ? `${props.indent}px` : props.indent,\r\n    [nh.cv('link-line-type')]: linkLine.value || undefined,\r\n  }\r\n})\r\nconst visibleNodes = computed(() => flatNodes(treeNodes.value))\r\nconst renderedNodes = computed(() => {\r\n  return expanding.value ? expandingNodes.value : visibleNodes.value\r\n})\r\nconst toNodeProps = computed(() => {\r\n  return typeof props.nodeProps === 'function' ? props.nodeProps : () => props.nodeProps\r\n})\r\n\r\nfunction createDefaultFilter(value: string) {\r\n  const pattern = props.ignoreCase ? String(value).toLocaleLowerCase() : value\r\n  const defaultFilter: FilterFn = data => {\r\n    const label = data[keyConfig.label]\r\n\r\n    return props.ignoreCase\r\n      ? String(label).toLocaleLowerCase().includes(pattern)\r\n      : String(label).includes(pattern)\r\n  }\r\n\r\n  return defaultFilter\r\n}\r\n\r\nconst updateVisibleNodeEls = debounce(() => {\r\n  if (wrapper.value) {\r\n    visibleNodeEls = queryAll(`.${nh.be('node')}`, wrapper.value)\r\n  }\r\n}, 300)\r\n\r\nlet disableExpand = false\r\n\r\nfunction disableExpandTick() {\r\n  disableExpand = true\r\n\r\n  nextTick(() => {\r\n    disableExpand = false\r\n  })\r\n}\r\nwatchEffect(() => {\r\n  const nodes = flattedNodes.value\r\n\r\n  disableExpandTick()\r\n\r\n  if (!props.filter) {\r\n    for (let i = 0, len = nodes.length; i < len; ++i) {\r\n      const node = nodes[i]\r\n\r\n      node.matched = true\r\n      node.childMatched = false\r\n      node.upperMatched = false\r\n    }\r\n  } else {\r\n    const filter =\r\n      typeof props.filter === 'function' ? props.filter : createDefaultFilter(props.filter)\r\n    const leafOnly = props.filterLeaf\r\n\r\n    for (let i = 0, len = nodes.length; i < len; ++i) {\r\n      const node = nodes[i]\r\n\r\n      if (leafOnly && !isLeafNode(node)) {\r\n        node.matched = false\r\n        node.childMatched = false\r\n        node.upperMatched = false\r\n\r\n        continue\r\n      }\r\n\r\n      const parent = node.parent ? nodeMap.get(node.parent) : undefined\r\n\r\n      node.matched = filter(node.data, node)\r\n      node.childMatched = false\r\n      node.upperMatched = !!parent && (parent.matched || parent.upperMatched)\r\n\r\n      if (node.matched) {\r\n        let upper = parent\r\n\r\n        while (upper && !upper.childMatched) {\r\n          upper.childMatched = true\r\n          upper.expanded = true\r\n          upper = upper.parent ? nodeMap.get(upper.parent) : undefined\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  resetExpanded()\r\n})\r\nwatchEffect(() => Object.assign(keyConfig, props.keyConfig))\r\nwatchEffect(() => {\r\n  const oldIds = expandedNodeIds.value\r\n  const ids = new Set<Key>()\r\n\r\n  let changed = false\r\n\r\n  for (const node of flattedNodes.value) {\r\n    if (node.expanded) {\r\n      ids.add(node.id)\r\n\r\n      if (!changed && !oldIds.has(node.id)) {\r\n        changed = true\r\n      }\r\n    }\r\n  }\r\n\r\n  if (changed || ids.size !== oldIds.size) {\r\n    expandedNodeIds.value = ids\r\n  }\r\n})\r\nwatch(\r\n  [\r\n    () => props.data,\r\n    () => props.data.length,\r\n    () => keyConfig.id,\r\n    () => keyConfig.children,\r\n    () => keyConfig.parent,\r\n    () => props.rootId,\r\n  ],\r\n  parseAndTransformData,\r\n  { immediate: true },\r\n)\r\nwatch(\r\n  [treeNodes, () => props.rootId],\r\n  () => {\r\n    flattedNodes.value = flatTree(treeNodes.value, {\r\n      keyField: 'id',\r\n      parentField: 'parent',\r\n      childField: 'children',\r\n      rootId: props.rootId,\r\n      injectId: false,\r\n      depthFirst: true,\r\n    })\r\n  },\r\n  { immediate: true },\r\n)\r\nwatch(expandedNodeIds, (value, prev) => {\r\n  if (props.noTransition) {\r\n    updateVisibleNodeEls()\r\n  }\r\n\r\n  if (props.noTransition || disableExpand || !wrapper.value) return\r\n\r\n  let addedId: Key | undefined\r\n  let removedId: Key | undefined\r\n\r\n  for (const id of value) {\r\n    if (!prev.has(id)) {\r\n      if (addedId != null) return\r\n\r\n      addedId = id\r\n    }\r\n  }\r\n\r\n  for (const id of prev) {\r\n    if (!value.has(id)) {\r\n      if (removedId != null) return\r\n\r\n      removedId = id\r\n    }\r\n  }\r\n\r\n  if (addedId == null && removedId == null) return\r\n  if (\r\n    (addedId && !nodeMap.get(addedId)?.children?.length) ||\r\n    (removedId && !nodeMap.get(removedId)?.children?.length)\r\n  )\r\n    return\r\n\r\n  clearTimeout(timer.expand)\r\n\r\n  transferring.value = false\r\n  expanding.value = true\r\n\r\n  let baseExpandedIds: Set<Key> | undefined\r\n\r\n  if (addedId != null) {\r\n    baseExpandedIds = prev\r\n  }\r\n\r\n  if (removedId != null) {\r\n    if (!baseExpandedIds) {\r\n      baseExpandedIds = value\r\n    } else {\r\n      baseExpandedIds = new Set(baseExpandedIds)\r\n      baseExpandedIds.delete(removedId)\r\n    }\r\n  }\r\n\r\n  const baseNodes = flatNodes(treeNodes.value, baseExpandedIds!)\r\n\r\n  const virtual = props.virtual\r\n  const viewHeight = wrapper.value.offsetHeight\r\n  const nodeHeight = props.nodeMinHeight || 1\r\n  const viewCount = Math.ceil(viewHeight / nodeHeight) + 1\r\n\r\n  const loop = [\r\n    addedId != null && { id: addedId, type: 'expand' },\r\n    removedId != null && { id: removedId, type: 'reduce' },\r\n  ]\r\n\r\n  for (const meta of loop) {\r\n    if (!meta) continue\r\n\r\n    const { id, type } = meta\r\n    const index = baseNodes.findIndex(node => node.id === id)\r\n\r\n    if (~index) {\r\n      const children = baseNodes[index].children\r\n\r\n      if (children?.length) {\r\n        const addedNodes = flatNodes(children, value)\r\n\r\n        baseNodes.splice(index + 1, 0, {\r\n          id: Symbol('TreeNodePlaceholder'),\r\n          collapse: true,\r\n          type,\r\n          height: virtual ? addedNodes.length * nodeHeight : undefined,\r\n          nodes: virtual ? addedNodes.slice(0, viewCount) : addedNodes,\r\n        } as any)\r\n      }\r\n    }\r\n  }\r\n\r\n  expandingNodes.value = baseNodes\r\n})\r\n\r\nprovide(\r\n  TREE_STATE,\r\n  reactive({\r\n    arrow: toRef(props, 'arrow'),\r\n    checkbox: toRef(props, 'checkbox'),\r\n    suffixCheckbox: toRef(props, 'suffixCheckbox'),\r\n    noCascaded: toRef(props, 'noCascaded'),\r\n    linkLine,\r\n    virtual: toRef(props, 'virtual'),\r\n    labelKey: toRef(keyConfig, 'label'),\r\n    draggable: toRef(props, 'draggable'),\r\n    floorSelect: toRef(props, 'floorSelect'),\r\n    renderer: toRef(props, 'renderer'),\r\n    prefixRenderer: toRef(props, 'prefixRenderer'),\r\n    suffixRenderer: toRef(props, 'suffixRenderer'),\r\n    arrowIcon: toRef(props, 'arrowIcon'),\r\n    blockEffect: toRef(props, 'blockEffect'),\r\n    dragging,\r\n    boundAsyncLoad,\r\n    nodeStates,\r\n    expanding,\r\n    keepSelected: toRef(props, 'keepSelected'),\r\n    multiple: toRef(props, 'multiple'),\r\n    getParentNode,\r\n    updateVisibleNodeEls,\r\n    computeCheckedState,\r\n    handleNodeClick,\r\n    handleNodeSelect,\r\n    handleNodeCancel,\r\n    handleNodeExpand,\r\n    handleNodeReduce,\r\n    handleNodeContextmenu,\r\n    handleAsyncLoad,\r\n    handleNodeDragStart,\r\n    handleNodeDragOver,\r\n    handleNodeDrop,\r\n    handleNodeDragEnd,\r\n    handleHittingChange,\r\n    handleNodeHitting,\r\n    handleLabelClick,\r\n  }),\r\n)\r\nprovide(\r\n  TREE_NODE_STATE,\r\n  reactive({\r\n    depth: -1,\r\n    disabled: toRef(props, 'disabled'),\r\n    readonly: toRef(props, 'readonly'),\r\n  }),\r\n)\r\n\r\ndefineExpose({\r\n  treeNodes,\r\n  flattedNodes,\r\n  dragging,\r\n  expanding,\r\n\r\n  virtualList,\r\n  trap,\r\n  indicator,\r\n\r\n  refreshScroll,\r\n  isLeafNode,\r\n  parseAndTransformData,\r\n  forceUpdateData,\r\n  syncNodeStateIntoData,\r\n  getCheckedNodes,\r\n  getCheckedNodeData,\r\n  getSelectedNodes,\r\n  getSelectedNodeData,\r\n  getExpandedNodes,\r\n  getDisabledNodes,\r\n  getParentNode,\r\n  getNodeChildren,\r\n  getSiblingNodes,\r\n  getPrevSiblingNode,\r\n  getNextSiblingNode,\r\n  getNodeByData,\r\n  expandNodeByData,\r\n  selectNodeByData,\r\n  checkNodeByData,\r\n  toggleNodeLoadingByData,\r\n  toggleAllExpanded,\r\n  getTreeData,\r\n  getFlattedData,\r\n  updateVisibleNodeEls,\r\n})\r\n\r\nonMounted(updateVisibleNodeEls)\r\n\r\nconst { updateCheckedUpward, updateCheckedDown } = useCascadedChecked({\r\n  getNode: key => nodeMap.get(key),\r\n  disableNode: node => node.disabled,\r\n})\r\n\r\nfunction getIndexId() {\r\n  return `__vxp-tree-key-${getGlobalCount()}`\r\n}\r\n\r\nfunction isLeafNode(node: TreeNodeProps) {\r\n  const isLeaf = node.isLeaf\r\n\r\n  let leafSign: boolean | 'auto' = 'auto'\r\n  let asyncLoad = false\r\n\r\n  if (isNull(isLeaf) || isLeaf === 'auto') {\r\n    leafSign = 'auto'\r\n    asyncLoad = boundAsyncLoad.value\r\n  } else {\r\n    leafSign = isLeaf\r\n  }\r\n\r\n  return leafSign === 'auto' ? !(node.children?.length || (asyncLoad && !node.loaded)) : !!leafSign\r\n}\r\n\r\nfunction flatNodes(nodes: TreeNodeProps[], expandedIds?: Set<Key>) {\r\n  const rootNodes = new Set(nodes)\r\n\r\n  return flatTree(nodes, {\r\n    keyField: 'id',\r\n    parentField: 'parent',\r\n    childField: 'children',\r\n    injectId: false,\r\n    depthFirst: true,\r\n    cascaded: true,\r\n    filter: node => {\r\n      if (rootNodes.has(node)) {\r\n        return node.matched || node.childMatched || node.upperMatched\r\n      }\r\n\r\n      const parentNode = getParentNode(node)\r\n\r\n      return (\r\n        node.visible &&\r\n        (node.matched || node.childMatched || node.upperMatched) &&\r\n        (!parentNode || (expandedIds ? expandedIds.has(parentNode.id) : parentNode.expanded))\r\n      )\r\n    },\r\n  })\r\n}\r\n\r\nfunction isCollapse(node: any): node is TreeCollapseProps {\r\n  return node.collapse\r\n}\r\n\r\nfunction refreshNodesDepth() {\r\n  walkTree(treeNodes.value, (node, depth) => {\r\n    node.depth = depth\r\n    node.lineIndexes = [0]\r\n\r\n    if (node.parent && nodeMap.has(node.parent)) {\r\n      const parent = nodeMap.get(node.parent)!\r\n\r\n      node.last = getLast(parent.children) === node\r\n      node.upstreamLast = [parent.last, ...parent.upstreamLast]\r\n    } else {\r\n      node.last = getLast(treeNodes.value) === node\r\n      node.upstreamLast = []\r\n    }\r\n\r\n    for (let i = 1; i < depth; ++i) {\r\n      if (!node.upstreamLast[i - 1]) {\r\n        node.lineIndexes.push(i)\r\n      }\r\n    }\r\n  })\r\n}\r\n\r\nfunction buildTreeNodes(nodes: TreeNodeProps[]) {\r\n  treeNodes.value = transformTree(nodes, {\r\n    keyField: 'id',\r\n    parentField: 'parent',\r\n    childField: 'children',\r\n    rootId: props.rootId,\r\n  })\r\n\r\n  refreshNodesDepth()\r\n}\r\n\r\nfunction parseAndTransformData() {\r\n  const idKey = keyConfig.id\r\n  const oldDataMap = new Map<Data, TreeNodeProps>()\r\n  const oldIdMap = new Map<any, TreeNodeProps>()\r\n\r\n  for (const node of nodeMap.values()) {\r\n    oldDataMap.set(node.data, node)\r\n    oldIdMap.set(node.data[idKey], node)\r\n  }\r\n\r\n  nodeMap.clear()\r\n  nodeDataMap.clear()\r\n\r\n  const nodes: TreeNodeProps[] = []\r\n\r\n  if (props.noBuildTree) {\r\n    walkTree(\r\n      props.data,\r\n      (item, _, parent) => {\r\n        const oldNode = oldDataMap.get(item)\r\n        const id = oldNode?.id ?? getIndexId()\r\n        const node = props.cacheNode\r\n          ? (oldNode ?? createNodeItem(item))\r\n          : createNodeItem(item, oldNode)\r\n\r\n        node.id = id\r\n        node.parent = parent ? nodeDataMap.get(parent)?.id : undefined\r\n\r\n        nodeMap.set(node.id, node)\r\n        nodes.push(node)\r\n        nodeDataMap.set(item, node)\r\n      },\r\n      { childField: keyConfig.children, depthFirst: true },\r\n    )\r\n  } else {\r\n    const data = props.data\r\n\r\n    for (let i = 0, len = data.length; i < len; ++i) {\r\n      const item = data[i]\r\n      const oldNode = oldDataMap.get(item) ?? oldIdMap.get(item[idKey])\r\n      const node = props.cacheNode\r\n        ? (oldNode ?? createNodeItem(item))\r\n        : createNodeItem(item, oldNode)\r\n\r\n      nodeMap.set(node.id, node)\r\n      nodes.push(node)\r\n      nodeDataMap.set(item, node)\r\n    }\r\n  }\r\n\r\n  buildTreeNodes(nodes)\r\n\r\n  if (!props.noCascaded) {\r\n    const checkedNodes = flattedNodes.value.filter(item => item.checked)\r\n\r\n    for (let i = 0, len = checkedNodes.length; i < len; ++i) {\r\n      const item = checkedNodes[i]\r\n      const parentKey = item.parent\r\n\r\n      updateCheckedDown(item.id)\r\n\r\n      if (parentKey && nodeMap.has(parentKey)) {\r\n        const parent = nodeMap.get(parentKey)!\r\n\r\n        if (!parent.checked) {\r\n          updateCheckedUpward(item.id)\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  resetExpanded()\r\n}\r\n\r\nfunction forceUpdateData() {\r\n  const nodes: TreeNodeProps[] = []\r\n\r\n  const {\r\n    id: idKey,\r\n    visible: visibleKey,\r\n    selected: selectedKey,\r\n    expanded: expandedKey,\r\n    disabled: disabledKey,\r\n    checked: checkedKey,\r\n    loading: loadingKey,\r\n    loaded: loadedKey,\r\n    loadFail: loadFailKey,\r\n    readonly: readonlyKey,\r\n    arrow: arrowKey,\r\n    checkbox: checkboxKey,\r\n    selectDisabled: selectDisabledKey,\r\n    expandDisabled: expandDisabledKey,\r\n    checkDisabled: checkDisabledKey,\r\n    isLeaf: isLeafKey,\r\n  } = keyConfig\r\n\r\n  const refresh = (node: TreeNodeProps, item: Data) => {\r\n    const {\r\n      [visibleKey]: visible = node.visible,\r\n      [selectedKey]: selected = node.selected,\r\n      [expandedKey]: expanded = node.expanded,\r\n      [disabledKey]: disabled = node.disabled,\r\n      [checkedKey]: checked = node.checked,\r\n      [loadingKey]: loading = node.loading,\r\n      [loadedKey]: loaded = node.loaded,\r\n      [loadFailKey]: loadFail = node.loadFail,\r\n      [readonlyKey]: readonly = node.readonly,\r\n      [arrowKey]: arrow = node.arrow,\r\n      [checkboxKey]: checkbox = node.checkbox,\r\n      [selectDisabledKey]: selectDisabled = node.selectDisabled,\r\n      [expandDisabledKey]: expandDisabled = node.expandDisabled,\r\n      [checkDisabledKey]: checkDisabled = node.checkDisabled,\r\n      [isLeafKey]: isLeaf = node.isLeaf,\r\n    } = item\r\n\r\n    node.visible = visible\r\n    node.selected = selected\r\n    node.expanded = expanded\r\n    node.disabled = disabled\r\n    node.checked = checked\r\n    node.loading = loading\r\n    node.loaded = loaded\r\n    node.loadFail = loadFail\r\n    node.readonly = readonly\r\n    node.arrow = arrow\r\n    node.checkbox = checkbox\r\n    node.selectDisabled = selectDisabled\r\n    node.expandDisabled = expandDisabled\r\n    node.checkDisabled = checkDisabled\r\n    node.isLeaf = isLeaf\r\n  }\r\n\r\n  if (props.noBuildTree) {\r\n    walkTree(\r\n      props.data,\r\n      (item, _, parent) => {\r\n        let node = nodeDataMap.get(item)\r\n\r\n        if (node) {\r\n          refresh(node, item)\r\n        } else {\r\n          node = createNodeItem(item)\r\n          node.id = getIndexId()\r\n          node.parent = parent ? nodeDataMap.get(parent)?.id : undefined\r\n\r\n          nodeMap.set(node.id, node)\r\n          nodeDataMap.set(item, node)\r\n        }\r\n\r\n        nodes.push(node)\r\n      },\r\n      { childField: keyConfig.children, depthFirst: true },\r\n    )\r\n  } else {\r\n    const data = props.data\r\n\r\n    for (let i = 0, len = data.length; i < len; ++i) {\r\n      const item = data[i]\r\n      const id = item[idKey] as Key\r\n\r\n      let node = nodeMap.get(id)\r\n\r\n      if (node) {\r\n        refresh(node, item)\r\n      } else {\r\n        node = createNodeItem(item)\r\n        nodeMap.set(id, node)\r\n      }\r\n\r\n      nodes.push(node)\r\n    }\r\n  }\r\n\r\n  buildTreeNodes(nodes)\r\n  resetExpanded()\r\n}\r\n\r\nfunction syncNodeStateIntoData() {\r\n  flattedNodes.value.forEach(node => {\r\n    if (!node.data) return\r\n\r\n    const { data, visible, selected, expanded, disabled, checked, loading, readonly } = node\r\n\r\n    data.visible = visible\r\n    data.selected = selected\r\n    data.expanded = expanded\r\n    data.disabled = disabled\r\n    data.checked = checked\r\n    data.loading = loading\r\n    data.readonly = readonly\r\n  })\r\n\r\n  resetExpanded()\r\n}\r\n\r\nfunction createNodeItem(data: Data, defaults = defaultNodeProperties): TreeNodeProps {\r\n  const {\r\n    id: idKey,\r\n    parent: parentKey,\r\n    visible: visibleKey,\r\n    selected: selectedKey,\r\n    expanded: expandedKey,\r\n    disabled: disabledKey,\r\n    checked: checkedKey,\r\n    loading: loadingKey,\r\n    loaded: loadedKey,\r\n    loadFail: loadFailKey,\r\n    readonly: readonlyKey,\r\n    arrow: arrowKey,\r\n    checkbox: checkboxKey,\r\n    selectDisabled: selectDisabledKey,\r\n    expandDisabled: expandDisabledKey,\r\n    checkDisabled: checkDisabledKey,\r\n    isLeaf: isLeafKey,\r\n  } = keyConfig\r\n\r\n  const {\r\n    [visibleKey]: visible = defaults.visible,\r\n    [selectedKey]: selected = defaults.selected,\r\n    [expandedKey]: expanded = defaults.expanded,\r\n    [disabledKey]: disabled = defaults.disabled,\r\n    [checkedKey]: checked = defaults.checked,\r\n    [loadingKey]: loading = defaults.loading,\r\n    [loadedKey]: loaded = defaults.loaded,\r\n    [loadFailKey]: loadFail = defaults.loadFail,\r\n    [readonlyKey]: readonly = defaults.readonly,\r\n    [arrowKey]: arrow = defaults.arrow,\r\n    [checkboxKey]: checkbox = defaults.checkbox,\r\n    [selectDisabledKey]: selectDisabled = defaults.selectDisabled,\r\n    [expandDisabledKey]: expandDisabled = defaults.expandDisabled,\r\n    [checkDisabledKey]: checkDisabled = defaults.checkDisabled,\r\n    [isLeafKey]: isLeaf = defaults.isLeaf,\r\n  } = data\r\n  const id = props.noBuildTree ? null : data[idKey]\r\n  const parent = props.noBuildTree ? null : data[parentKey]\r\n\r\n  const node = {\r\n    id,\r\n    parent,\r\n    data,\r\n    visible,\r\n    selected,\r\n    expanded,\r\n    disabled,\r\n    checked,\r\n    loading,\r\n    loaded,\r\n    loadFail,\r\n    readonly,\r\n    arrow,\r\n    checkbox,\r\n    selectDisabled,\r\n    expandDisabled,\r\n    checkDisabled,\r\n    isLeaf,\r\n  }\r\n\r\n  if (typeof props.postCreate === 'function') {\r\n    props.postCreate(node as TreeNodeProps)\r\n  }\r\n\r\n  return reactive({\r\n    ...node,\r\n    id,\r\n    parent,\r\n    children: [],\r\n    partial: false,\r\n    matched: false,\r\n    childMatched: false,\r\n    upperMatched: false,\r\n    depth: -1,\r\n    last: false,\r\n    // inLastCount: 0,\r\n    upstreamLast: [],\r\n    lineIndexes: [],\r\n  })\r\n}\r\n\r\nfunction computeCheckedState(originNode: TreeNodeProps, able: boolean) {\r\n  if (!props.noCascaded) {\r\n    const nodeList = [originNode].concat(\r\n      // 需要包含被禁用且被勾选的节点\r\n      flattedNodes.value.filter(item => (item.disabled || item.checkDisabled) && item.checked),\r\n    )\r\n\r\n    for (let i = 0, len = nodeList.length; i < len; ++i) {\r\n      const item = nodeList[i]\r\n\r\n      updateCheckedUpward(item.id)\r\n      updateCheckedDown(item.id)\r\n    }\r\n  }\r\n\r\n  emitEvent(props.onNodeChange, originNode.data, originNode, able)\r\n}\r\n\r\nfunction handleNodeClick(node: TreeNodeProps) {\r\n  emitEvent(props.onNodeClick, node.data, node)\r\n}\r\n\r\nfunction handleLabelClick(node: TreeNodeProps) {\r\n  emitEvent(props.onLabelClick, node.data, node)\r\n}\r\n\r\nfunction handleNodeSelect(node: TreeNodeProps) {\r\n  const selectedNodes = flattedNodes.value.filter(item => item.selected)\r\n\r\n  if (props.multiple) {\r\n    emitEvent(\r\n      props.onNodeSelect,\r\n      selectedNodes.map(item => item.data),\r\n      selectedNodes,\r\n    )\r\n  } else {\r\n    const currentId = node.id\r\n\r\n    for (let i = 0, len = selectedNodes.length; i < len; ++i) {\r\n      const item = selectedNodes[i]\r\n\r\n      item.selected = item.id === currentId\r\n    }\r\n\r\n    emitEvent(props.onNodeSelect, node.data, node)\r\n  }\r\n}\r\n\r\nfunction handleNodeCancel(node: TreeNodeProps) {\r\n  emitEvent(props.onNodeCancel, node.data, node)\r\n}\r\n\r\nfunction handleNodeExpand(node: TreeNodeProps) {\r\n  if (props.accordion) {\r\n    const siblingNodes = getSiblingNodes(node)\r\n\r\n    for (let i = 0, len = siblingNodes.length; i < len; ++i) {\r\n      siblingNodes[i].expanded = false\r\n    }\r\n  }\r\n\r\n  emitEvent(props.onNodeExpand, node.data, node)\r\n}\r\n\r\nfunction handleNodeReduce(node: TreeNodeProps) {\r\n  emitEvent(props.onNodeReduce, node.data, node)\r\n}\r\n\r\nfunction handleNodeContextmenu(event: MouseEvent, node: TreeNodeProps) {\r\n  emitEvent(props.onNodeContextmenu, event, node.data, node)\r\n}\r\n\r\nasync function handleAsyncLoad(node: TreeNodeProps) {\r\n  if (!boundAsyncLoad.value) return false\r\n\r\n  let result = props.onAsyncLoad(node.data, node)\r\n\r\n  if (isPromise(result)) {\r\n    result = await result\r\n  }\r\n\r\n  return result !== false\r\n}\r\n\r\nlet dragState: {\r\n  draggingNode: TreeNodeProps,\r\n  treeRect: DOMRect,\r\n  willDropNode: TreeNodeProps | null,\r\n  dropType: DropType,\r\n} | null = null\r\n\r\nfunction handleNodeDragStart(nodeInstance: TreeNodeInstance) {\r\n  if (!wrapper.value) return\r\n\r\n  dragState = {\r\n    draggingNode: nodeInstance.node,\r\n    treeRect: wrapper.value.getBoundingClientRect(),\r\n    willDropNode: null,\r\n    dropType: DropType.BEFORE,\r\n  }\r\n\r\n  dragging.value = true\r\n  emitEvent(props.onDragStart, nodeInstance.node.data, nodeInstance.node)\r\n}\r\n\r\nfunction handleNodeDragOver(nodeInstance: TreeNodeInstance, event: DragEvent) {\r\n  if (!dragState || !nodeInstance.el || !nodeInstance.arrow) return\r\n\r\n  const dropNodeRect = nodeInstance.el.getBoundingClientRect()\r\n  const treeRect = dragState.treeRect\r\n  const dropArrowRect = nodeInstance.arrow.getBoundingClientRect()\r\n  const prevPercent = 0.25\r\n  const nextPercent = 0.75\r\n  const distance = event.clientY - dropNodeRect.top\r\n  const dropNodeHeight = dropArrowRect.height\r\n\r\n  let dropType: DropType\r\n  let indicatorTop = -9999\r\n  let isIndicatorShow = true\r\n\r\n  if (distance < dropNodeHeight * prevPercent) {\r\n    dropType = DropType.BEFORE\r\n    indicatorTop = dropArrowRect.top - treeRect.top\r\n  } else if (distance > dropNodeHeight * nextPercent) {\r\n    dropType = DropType.AFTER\r\n    indicatorTop = dropArrowRect.bottom - treeRect.top\r\n  } else {\r\n    dropType = DropType.INNER\r\n    isIndicatorShow = false\r\n  }\r\n\r\n  if (indicator.value) {\r\n    indicator.value.style.top = `${indicatorTop}px`\r\n    indicator.value.style.insetInlineStart = `${dropArrowRect.right - treeRect.left}px`\r\n  }\r\n\r\n  dragState.willDropNode = nodeInstance.node\r\n  dragState.dropType = dropType\r\n\r\n  indicatorShow.value = isIndicatorShow\r\n  emitEvent(props.onDragOver, nodeInstance.node.data, nodeInstance.node)\r\n}\r\n\r\nfunction isLeftInsideRight(left: TreeNodeProps, right: TreeNodeProps) {\r\n  if (!left || !right) return true\r\n\r\n  while (left) {\r\n    if (left === right || left.id === right.id) {\r\n      return true\r\n    }\r\n\r\n    left = getParentNode(left)!\r\n  }\r\n\r\n  return false\r\n}\r\n\r\nfunction handleNodeDrop(nodeInstance: TreeNodeInstance) {\r\n  if (!dragState) return\r\n\r\n  const { draggingNode, willDropNode, dropType } = dragState\r\n\r\n  if (!willDropNode || isLeftInsideRight(willDropNode, draggingNode)) return\r\n\r\n  let currentId: Key\r\n  let parent: TreeNodeProps | null\r\n\r\n  if (draggingNode) {\r\n    parent = getParentNode(draggingNode)\r\n\r\n    if (!parent) {\r\n      parent = {\r\n        children: treeNodes.value,\r\n      } as TreeNodeProps\r\n    }\r\n\r\n    currentId = draggingNode.id as Key\r\n    removeArrayItem(parent.children, item => item.id === currentId)\r\n  }\r\n\r\n  if (dropType === DropType.INNER) {\r\n    if (!Array.isArray(willDropNode.children)) {\r\n      willDropNode.children = []\r\n    }\r\n\r\n    const children = Array.from(willDropNode.children as TreeNodeProps[])\r\n\r\n    children.push(draggingNode)\r\n\r\n    willDropNode.children = children\r\n    draggingNode.parent = willDropNode.id\r\n  } else {\r\n    parent = getParentNode(willDropNode)\r\n\r\n    if (!parent) {\r\n      parent = {\r\n        parent: undefined! as Key,\r\n        children: treeNodes.value,\r\n      } as TreeNodeProps\r\n    }\r\n\r\n    currentId = willDropNode.id\r\n    const index = parent.children.findIndex(item => item.id === currentId)\r\n\r\n    if (~index) {\r\n      parent.children.splice(+(dropType === DropType.AFTER) + index, 0, draggingNode)\r\n\r\n      draggingNode.parent = parent.id\r\n    }\r\n  }\r\n\r\n  refreshNodesDepth()\r\n  emitEvent(props.onDrop, nodeInstance.node.data, nodeInstance.node, dropType)\r\n}\r\n\r\nfunction handleNodeDragEnd(nodeInstance: TreeNodeInstance) {\r\n  dragging.value = true\r\n  indicatorShow.value = false\r\n  dragState = null\r\n  emitEvent(props.onDragEnd, nodeInstance.node.data, nodeInstance.node)\r\n}\r\n\r\nfunction handleHittingChange(type: 'up' | 'down') {\r\n  const activeEl = document.activeElement\r\n\r\n  if (!visibleNodeEls.length || !activeEl) return\r\n\r\n  const index = visibleNodeEls.findIndex(nodeEl => nodeEl === activeEl)\r\n\r\n  if (~index) {\r\n    visibleNodeEls[\r\n      (index + (type === 'up' ? -1 : 1) + visibleNodeEls.length) % visibleNodeEls.length\r\n    ]?.focus()\r\n  }\r\n}\r\n\r\nfunction handleNodeHitting(nodeEl?: HTMLElement | null) {\r\n  if (!nodeEl || !visibleNodeEls.length) return\r\n\r\n  if (visibleNodeEls.includes(nodeEl)) {\r\n    nodeEl.focus()\r\n  }\r\n}\r\n\r\nfunction handleScroll() {\r\n  // onScroll()\r\n  updateVisibleNodeEls()\r\n}\r\n\r\nfunction handleTreeFocus(event: FocusEvent) {\r\n  const target = event.target as HTMLElement\r\n\r\n  if (!visibleNodeEls.length || !target || !trap.value) {\r\n    return\r\n  }\r\n\r\n  if (target === trap.value) {\r\n    visibleNodeEls[0].focus()\r\n  }\r\n}\r\n\r\nfunction refreshScroll() {\r\n  virtualList.value?.refresh()\r\n}\r\n\r\nfunction resetExpanded() {\r\n  expanding.value = false\r\n  isMounted.value && updateVisibleNodeEls()\r\n}\r\n\r\nfunction afterExpand() {\r\n  if (props.virtual) {\r\n    resetExpanded()\r\n    return\r\n  }\r\n\r\n  transferring.value = true\r\n\r\n  requestAnimationFrame(() => {\r\n    resetExpanded()\r\n    timer.expand = setTimeout(() => {\r\n      transferring.value = false\r\n    }, 300)\r\n  })\r\n}\r\n\r\nfunction getCheckedNodes(includePartial = false): TreeNodeProps[] {\r\n  return flattedNodes.value.filter(item => item.checked || (includePartial && item.partial))\r\n}\r\n\r\nfunction getCheckedNodeData(includePartial = false) {\r\n  return getCheckedNodes(includePartial).map(node => node.data)\r\n}\r\n\r\nfunction getSelectedNodes(): TreeNodeProps[] {\r\n  return flattedNodes.value.filter(item => item.selected)\r\n}\r\n\r\nfunction getSelectedNodeData() {\r\n  return getSelectedNodes().map(node => node.data)\r\n}\r\n\r\nfunction getExpandedNodes(): TreeNodeProps[] {\r\n  return flattedNodes.value.filter(item => item.expanded)\r\n}\r\n\r\nfunction getDisabledNodes(): TreeNodeProps[] {\r\n  return flattedNodes.value.filter(item => item.disabled)\r\n}\r\n\r\nfunction getParentNode(node: TreeNodeProps): TreeNodeProps | null {\r\n  if (node.parent) {\r\n    return nodeMap.get(node.parent) ?? null\r\n  }\r\n\r\n  return null\r\n}\r\n\r\nfunction getNodeChildren(node: TreeNodeProps) {\r\n  return node.children\r\n}\r\n\r\nfunction getSiblingNodes(node: TreeNodeProps, includeSelf = false): TreeNodeProps[] {\r\n  const parent = getParentNode(node)\r\n\r\n  const currentId = node.id as Key\r\n  const parentId = parent ? (parent.id as Key) : null\r\n\r\n  return flattedNodes.value.filter(item => {\r\n    const isChild = parentId === null ? !item.parent : item.parent === parentId\r\n\r\n    if (isChild && !includeSelf) {\r\n      return item.id !== currentId\r\n    }\r\n\r\n    return isChild\r\n  })\r\n}\r\n\r\nfunction getPrevSiblingNode(node: TreeNodeProps): TreeNodeProps | null {\r\n  const parent = getParentNode(node)\r\n\r\n  if (!parent) return null\r\n\r\n  const currentId = node.id\r\n  const parentId = parent.id\r\n  const children = flattedNodes.value.filter(item => item.parent === parentId)\r\n\r\n  if (children && children.length) {\r\n    const index = children.findIndex(item => item.id === currentId)\r\n\r\n    if (index > 0) {\r\n      return children[index - 1]\r\n    }\r\n  }\r\n\r\n  return null\r\n}\r\n\r\nfunction getNextSiblingNode(node: TreeNodeProps): TreeNodeProps | null {\r\n  const parent = getParentNode(node)\r\n\r\n  if (!parent) return null\r\n\r\n  const currentId = node.id\r\n  const parentId = parent.id\r\n  const children = flattedNodes.value.filter(item => item.parent === parentId)\r\n\r\n  if (children && children.length) {\r\n    const index = children.findIndex(item => item.id === currentId)\r\n\r\n    if (!~index && index < children.length - 1) {\r\n      return children[index + 1]\r\n    }\r\n  }\r\n\r\n  return null\r\n}\r\n\r\nfunction getNodeByData<T extends Data>(data: T): TreeNodeProps | null {\r\n  if (props.noBuildTree) {\r\n    return flattedNodes.value.find(item => item.data === data) ?? null\r\n  }\r\n\r\n  const idKey = keyConfig.id\r\n\r\n  return (\r\n    flattedNodes.value.find(\r\n      item => item.data === data || item.data[idKey] === data[idKey as keyof T],\r\n    ) ?? null\r\n  )\r\n}\r\n\r\nfunction expandNodeByData<T extends Data>(data: T, expanded?: boolean, upstream = false) {\r\n  const node = getNodeByData(data)\r\n\r\n  if (node) {\r\n    node.expanded = isNull(expanded) ? !node.expanded : !!expanded\r\n\r\n    if (upstream) {\r\n      let parentNode = getParentNode(node)\r\n\r\n      while (parentNode) {\r\n        parentNode.expanded = node.expanded\r\n        parentNode = getParentNode(parentNode)\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nfunction selectNodeByData<T extends Data>(data: T, selected?: boolean) {\r\n  const node = getNodeByData(data)\r\n\r\n  if (node) {\r\n    node.selected = isNull(selected) ? !node.selected : !!selected\r\n  }\r\n}\r\n\r\nfunction checkNodeByData<T extends Data>(data: T, checked?: boolean) {\r\n  const node = getNodeByData(data)\r\n\r\n  if (node) {\r\n    node.checked = isNull(checked) ? !node.checked : !!checked\r\n\r\n    if (!props.noCascaded) {\r\n      const nodeList = [node].concat(\r\n        flattedNodes.value.filter(item => item.disabled && item.checked),\r\n      )\r\n\r\n      for (let i = 0, len = nodeList.length; i < len; ++i) {\r\n        const item = nodeList[i]\r\n\r\n        updateCheckedUpward(item.id)\r\n        updateCheckedDown(item.id)\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nfunction toggleNodeLoadingByData<T extends Data>(data: T, loading?: boolean) {\r\n  const node = getNodeByData(data)\r\n\r\n  if (node) {\r\n    node.checked = isNull(loading) ? !node.loading : !!loading\r\n  }\r\n}\r\n\r\nfunction toggleAllExpanded(expanded: boolean) {\r\n  for (const node of flattedNodes.value) {\r\n    if (!node.disabled && !node.expandDisabled && !node.loading && node.children?.length) {\r\n      node.expanded = expanded\r\n    }\r\n  }\r\n}\r\n\r\nfunction getTreeData(withFilter = false) {\r\n  return mapTree(\r\n    withFilter\r\n      ? filterTree(treeNodes.value, node => node.matched, {\r\n        childField: 'children',\r\n        leafOnly: props.filterLeaf,\r\n        isLeaf: isLeafNode,\r\n      })\r\n      : treeNodes.value,\r\n    node => ({ ...node.data }),\r\n  )\r\n}\r\n\r\nfunction getFlattedData(withFilter = false) {\r\n  return (\r\n    withFilter\r\n      ? flattedNodes.value.filter(node => node.matched || node.childMatched || node.upperMatched)\r\n      : flattedNodes.value\r\n  ).map(node => ({ ...node.data }))\r\n}\r\n\r\nconst transferring = ref(false)\r\n</script>\r\n\r\n<template>\r\n  <VirtualList\r\n    ref=\"virtualList\"\r\n    :class=\"[nh.b(), nh.bs('vars'), props.inherit && nh.bm('inherit')]\"\r\n    :inherit=\"props.inherit\"\r\n    :items=\"renderedNodes\"\r\n    :item-size=\"props.nodeMinHeight\"\r\n    items-tag=\"ul\"\r\n    :items-attrs=\"{ class: nh.be('list') }\"\r\n    :hide-bar=\"!props.useYBar\"\r\n    :ignore-resize=\"transferring\"\r\n    :disabled=\"!props.virtual\"\r\n    role=\"tree\"\r\n    tabindex=\"-1\"\r\n    :aria-disabled=\"props.disabled\"\r\n    :aria-readonly=\"props.readonly\"\r\n    :style=\"style\"\r\n    @scroll=\"handleScroll\"\r\n  >\r\n    <template #prefix-trap>\r\n      <div\r\n        ref=\"trap\"\r\n        tabindex=\"0\"\r\n        role=\"none\"\r\n        style=\"width: 0; height: 0; overflow: hidden; outline: none\"\r\n        @focus=\"handleTreeFocus\"\r\n      ></div>\r\n    </template>\r\n    <template #default=\"{ item: node }: { item: TreeNodeProps }\">\r\n      <CollapseTransition\r\n        v-if=\"isCollapse(node)\"\r\n        appear\r\n        :reverse=\"node.type === 'reduce'\"\r\n        @after-enter=\"afterExpand\"\r\n      >\r\n        <div :class=\"nh.be('collapse')\" :style=\"{ height: `${node.height}px` }\">\r\n          <TreeNode\r\n            v-for=\"(innerNode, index) in node.nodes\"\r\n            :key=\"innerNode.id ?? index\"\r\n            v-bind=\"toNodeProps(innerNode.data, innerNode)\"\r\n            :node=\"innerNode\"\r\n          >\r\n            <template v-if=\"slots.node || props.slots.node\" #default=\"payload\">\r\n              <slot name=\"node\" v-bind=\"payload\">\r\n                <Renderer :renderer=\"props.slots.node\" :data=\"payload\"></Renderer>\r\n              </slot>\r\n            </template>\r\n            <template v-if=\"slots.arrow || props.slots.arrow\" #arrow=\"payload\">\r\n              <slot name=\"arrow\" v-bind=\"payload\">\r\n                <Renderer :renderer=\"props.slots.arrow\" :data=\"payload\"></Renderer>\r\n              </slot>\r\n            </template>\r\n            <template v-if=\"slots.label || props.slots.label\" #label=\"payload\">\r\n              <slot name=\"label\" v-bind=\"payload\">\r\n                <Renderer :renderer=\"props.slots.label\" :data=\"payload\"></Renderer>\r\n              </slot>\r\n            </template>\r\n            <template v-if=\"slots.prefix || props.slots.prefix\" #prefix=\"payload\">\r\n              <slot name=\"prefix\" v-bind=\"payload\">\r\n                <Renderer :renderer=\"props.slots.prefix\" :data=\"payload\"></Renderer>\r\n              </slot>\r\n            </template>\r\n            <template v-if=\"slots.suffix || props.slots.suffix\" #suffix=\"payload\">\r\n              <slot name=\"suffix\" v-bind=\"payload\">\r\n                <Renderer :renderer=\"props.slots.suffix\" :data=\"payload\"></Renderer>\r\n              </slot>\r\n            </template>\r\n          </TreeNode>\r\n        </div>\r\n      </CollapseTransition>\r\n      <TreeNode v-else v-bind=\"toNodeProps(node.data, node)\" :node=\"node\">\r\n        <template v-if=\"slots.node || props.slots.node\" #default=\"payload\">\r\n          <slot name=\"node\" v-bind=\"payload\">\r\n            <Renderer :renderer=\"props.slots.node\" :data=\"payload\"></Renderer>\r\n          </slot>\r\n        </template>\r\n        <template v-if=\"slots.arrow || props.slots.arrow\" #arrow=\"payload\">\r\n          <slot name=\"arrow\" v-bind=\"payload\">\r\n            <Renderer :renderer=\"props.slots.arrow\" :data=\"payload\"></Renderer>\r\n          </slot>\r\n        </template>\r\n        <template v-if=\"slots.label || props.slots.label\" #label=\"payload\">\r\n          <slot name=\"label\" v-bind=\"payload\">\r\n            <Renderer :renderer=\"props.slots.label\" :data=\"payload\"></Renderer>\r\n          </slot>\r\n        </template>\r\n        <template v-if=\"slots.prefix || props.slots.prefix\" #prefix=\"payload\">\r\n          <slot name=\"prefix\" v-bind=\"payload\">\r\n            <Renderer :renderer=\"props.slots.prefix\" :data=\"payload\"></Renderer>\r\n          </slot>\r\n        </template>\r\n        <template v-if=\"slots.suffix || props.slots.suffix\" #suffix=\"payload\">\r\n          <slot name=\"suffix\" v-bind=\"payload\">\r\n            <Renderer :renderer=\"props.slots.suffix\" :data=\"payload\"></Renderer>\r\n          </slot>\r\n        </template>\r\n      </TreeNode>\r\n    </template>\r\n    <template #empty>\r\n      <div :class=\"nh.be('empty-tip')\">\r\n        <slot name=\"empty\">\r\n          <Renderer :renderer=\"props.slots.empty\">\r\n            {{ props.emptyText ?? locale.empty }}\r\n          </Renderer>\r\n        </slot>\r\n      </div>\r\n    </template>\r\n    <template #suffix-trap>\r\n      <div\r\n        v-if=\"props.draggable\"\r\n        v-show=\"indicatorShow\"\r\n        ref=\"indicator\"\r\n        :class=\"nh.be('indicator')\"\r\n      ></div>\r\n    </template>\r\n  </VirtualList>\r\n</template>\r\n","import {\r\n  booleanProp,\r\n  buildProps,\r\n  eventProp,\r\n  iconProp,\r\n  localeProp,\r\n  stateProp,\r\n  styleProp,\r\n} from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type {\r\n  BeforeSelect,\r\n  BeforeUpload,\r\n  RenderFn,\r\n  UploadFetchMethod,\r\n  UploadFileOptions,\r\n  UploadFileSlots,\r\n  UploadFileState,\r\n  UploadHttpError,\r\n  UploadListSlots,\r\n  UploadListType,\r\n  UploadSlots,\r\n} from './symbol'\r\n\r\nexport const uploadProps = buildProps({\r\n  state: stateProp,\r\n  locale: localeProp('upload'),\r\n  url: String,\r\n  fileList: Array as PropType<UploadFileOptions[]>,\r\n  multiple: booleanProp,\r\n  tip: String,\r\n  accept: [String, Array] as PropType<string | string[]>,\r\n  filter: [String, Array] as PropType<string | string[]>,\r\n  maxSize: Number,\r\n  field: String,\r\n  data: Object as PropType<Record<string, string | Blob>>,\r\n  headers: Object as PropType<Record<string, string>>,\r\n  withCredentials: booleanProp,\r\n  manual: booleanProp,\r\n  hiddenFiles: booleanProp,\r\n  countLimit: Number,\r\n  allowDrag: booleanProp,\r\n  onBeforeUpload: Function as PropType<BeforeUpload>,\r\n  onBeforeSelect: Function as PropType<BeforeSelect>,\r\n  iconRenderer: Function as PropType<RenderFn>,\r\n  selectToAdd: booleanProp,\r\n  listType: String as PropType<UploadListType>,\r\n  block: booleanProp,\r\n  loadingText: String,\r\n  directory: booleanProp,\r\n  pathField: String,\r\n  disabledClick: booleanProp,\r\n  buttonLabel: String,\r\n  disabled: booleanProp,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingLock: booleanProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  image: booleanProp,\r\n  defaultFiles: Array as PropType<UploadFileOptions[]>,\r\n  canPreview: Function as PropType<(file: UploadFileState) => boolean>,\r\n  listStyle: styleProp,\r\n  name: String,\r\n  customFetch: Function as PropType<UploadFetchMethod>,\r\n  slots: Object as PropType<UploadSlots>,\r\n  onExceed: eventProp<(files: UploadFileState[]) => void>(),\r\n  onChange: eventProp<(files: UploadFileState[]) => void>(),\r\n  onFilterError: eventProp<(files: UploadFileState) => void>(),\r\n  onSizeError: eventProp<(files: UploadFileState) => void>(),\r\n  onDelete: eventProp<(file: UploadFileState) => void>(),\r\n  onPreview: eventProp<(file: UploadFileState) => void>(),\r\n  onProgress: eventProp<(file: UploadFileState, percent: number) => void>(),\r\n  onSuccess: eventProp<(file: UploadFileState, response: any) => void>(),\r\n  onError: eventProp<(file: UploadFileState, error: UploadHttpError) => void>(),\r\n})\r\n\r\nexport type UploadProps = ExtractPropTypes<typeof uploadProps>\r\nexport type UploadCProps = ConfigurableProps<\r\n  UploadProps,\r\n  'url' | 'fileList',\r\n  'onBeforeUpload' | 'onBeforeSelect'\r\n>\r\n\r\nexport const uploadListProps = buildProps({\r\n  files: Array as PropType<UploadFileState[]>,\r\n  selectToAdd: booleanProp,\r\n  iconRenderer: Function as PropType<RenderFn>,\r\n  type: String as PropType<UploadListType>,\r\n  loadingText: String,\r\n  style: styleProp,\r\n  precision: Number,\r\n  canPreview: Function as PropType<(file: UploadFileState) => boolean>,\r\n  slots: Object as PropType<UploadListSlots>,\r\n  onDelete: eventProp<(file: UploadFileState) => void>(),\r\n  onPreview: eventProp<(file: UploadFileState) => void>(),\r\n})\r\n\r\nexport type UploadListProps = ExtractPropTypes<typeof uploadListProps>\r\nexport type UploadListCProps = ConfigurableProps<UploadListProps, 'files'>\r\n\r\nexport const uploadFileProps = buildProps({\r\n  locale: localeProp('upload'),\r\n  file: Object as PropType<UploadFileState>,\r\n  iconRenderer: Function as PropType<RenderFn>,\r\n  listType: String as PropType<UploadListType>,\r\n  loadingText: String,\r\n  selectToAdd: booleanProp,\r\n  precision: Number,\r\n  canPreview: Function as PropType<(file: UploadFileState) => boolean>,\r\n  slots: Object as PropType<UploadFileSlots>,\r\n  onDelete: eventProp<(file: UploadFileState) => void>(),\r\n  onPreview: eventProp<(file: UploadFileState) => void>(),\r\n})\r\n\r\nexport type UploadFileProps = ExtractPropTypes<typeof uploadFileProps>\r\nexport type UploadFileCProps = ConfigurableProps<UploadFileProps, 'file'>\r\n","import { computed } from 'vue'\r\n\r\nimport { useIcons } from '@vexip-ui/config'\r\n\r\nimport type { IconsConfig } from '@vexip-ui/config'\r\n\r\nconst iconConfig = new Map<keyof IconsConfig, string[]>()\r\n\r\n// iconConfig.set('fileWord', ['doc', 'docx'])\r\niconConfig.set('fileVideo', [\r\n  'mp4',\r\n  'flv',\r\n  'mkv',\r\n  'rm',\r\n  'rmvb',\r\n  'mov',\r\n  'mtv',\r\n  'wnv',\r\n  'avi',\r\n  '3gp',\r\n  'amv',\r\n  'dmv',\r\n])\r\n// iconConfig.set('filePdf', ['pdf'])\r\niconConfig.set('fileImage', [\r\n  'bmp',\r\n  'jpg',\r\n  'jpeg',\r\n  'png',\r\n  'tif',\r\n  'gif',\r\n  'pcx',\r\n  'tga',\r\n  'exif',\r\n  'fpx',\r\n  'svg',\r\n  'psd',\r\n  'cdr',\r\n  'pcd',\r\n  'dxf',\r\n  'ufo',\r\n  'eps',\r\n  'ai',\r\n  'raw',\r\n  'wmf',\r\n  'webp',\r\n])\r\n// iconConfig.set('fileExcel', ['xls', 'xlsx', 'xlsm', 'xlsb', 'xlam', 'csv'])\r\niconConfig.set(\r\n  'fileCode',\r\n  [\r\n    [\r\n      'json',\r\n      'xml',\r\n      'property',\r\n      'class',\r\n      'c',\r\n      'cpp',\r\n      'cc',\r\n      'cxx',\r\n      'h',\r\n      'hpp',\r\n      'hxx',\r\n      'cs',\r\n      'yml',\r\n      'yaml',\r\n      'ts',\r\n      'tsx',\r\n    ],\r\n    ['js', 'jsx', 'mjs', 'cjs', 'ts', 'tsx', 'mts', 'cts'],\r\n    ['css', 'styl', 'pcss'],\r\n    ['sass', 'scss'],\r\n    ['less'],\r\n    ['java', 'class', 'jsp'],\r\n    ['vue'],\r\n    ['html', 'htm'],\r\n    ['py', 'pyc', 'pyw', 'pyo', 'pyd'],\r\n  ].flat(),\r\n)\r\niconConfig.set('fileAudio', [\r\n  'cd',\r\n  'wave',\r\n  'aiff',\r\n  'mpeg',\r\n  'mp3',\r\n  'mpeg-4',\r\n  'midi',\r\n  'wma',\r\n  'ra',\r\n  'rm',\r\n  'rmx',\r\n  'vqf',\r\n  'amr',\r\n  'ape',\r\n  'flac',\r\n  'aac',\r\n])\r\niconConfig.set('fileZip', [\r\n  'rar',\r\n  'zip',\r\n  '7z',\r\n  'cab',\r\n  'arj',\r\n  'lzh',\r\n  'tar',\r\n  'gz',\r\n  'ace',\r\n  'uue',\r\n  'bz2',\r\n  'jar',\r\n  'iso',\r\n])\r\niconConfig.set(\r\n  'fileText',\r\n  [\r\n    ['doc', 'docx'],\r\n    ['xls', 'xlsx', 'xlsm', 'xlsb', 'xlam', 'csv'],\r\n    ['pdf', 'txt', 'md'],\r\n  ].flat(),\r\n)\r\niconConfig.set('file', ['default'])\r\n\r\nexport function useFileIcons(icons = useIcons()) {\r\n  return computed(() => {\r\n    const map: Record<string, Record<string, any>> = {}\r\n\r\n    for (const [iconName, types] of iconConfig.entries()) {\r\n      if (types?.length) {\r\n        for (const type of types) {\r\n          map[type] = icons.value[iconName]\r\n        }\r\n      }\r\n    }\r\n\r\n    return map\r\n  })\r\n}\r\n","import type { ComponentPublicInstance } from 'vue'\r\n\r\nexport type UploadListType = 'name' | 'detail' | 'thumbnail' | 'card'\r\nexport type UploadStatus = 'pending' | 'uploading' | 'fail' | 'success' | 'delete'\r\n\r\nexport type UploadSourceFile = File & { path?: string }\r\n\r\nexport type UploadHttpError = Error & {\r\n  response: any,\r\n  url: string,\r\n  status: number,\r\n  method: string,\r\n}\r\n\r\nexport const enum StatusType {\r\n  PENDING = 'pending',\r\n  UPLOADING = 'uploading',\r\n  FAIL = 'fail',\r\n  SUCCESS = 'success',\r\n  DELETE = 'delete',\r\n}\r\n\r\nexport interface UploadFileState {\r\n  id: string | number,\r\n  name: string,\r\n  size: number,\r\n  type: string,\r\n  base64: string | null,\r\n  status: UploadStatus,\r\n  percentage: number,\r\n  source: UploadSourceFile | null,\r\n  url: string | null,\r\n  path: string,\r\n  /**\r\n   * @deprecated\r\n   */\r\n  xhr: XMLHttpRequest | null,\r\n  response: any,\r\n  error: UploadHttpError | null,\r\n  abort: () => void,\r\n}\r\n\r\nexport type UploadFileOptions = Partial<Omit<UploadFileState, 'response' | 'error' | 'abort'>>\r\n\r\ntype MaybePromise<T> = T | Promise<T>\r\n\r\nexport type BeforeUpload = (\r\n  file: UploadFileState,\r\n  files: UploadFileState[],\r\n) => MaybePromise<boolean | Blob | UploadSourceFile | void>\r\nexport type BeforeSelect = (\r\n  file: UploadFileState,\r\n  files: UploadFileState[],\r\n) => MaybePromise<boolean | void>\r\nexport type RenderFn = (data: { file: UploadFileState }) => any\r\n\r\nexport interface UploadFetchOptions {\r\n  url: string,\r\n  file: UploadSourceFile,\r\n  headers?: Record<string, string>,\r\n  withCredentials?: boolean,\r\n  data?: Record<string, string | Blob>,\r\n  field?: string,\r\n  pathField?: string,\r\n  onProgress?: (percent: number) => void,\r\n  onSuccess?: (response: any) => void,\r\n  onError?: (error: UploadHttpError) => void,\r\n  onAbort?: () => void,\r\n}\r\n\r\n/**\r\n * Should return an abort method.\r\n */\r\nexport type UploadFetchMethod = (options: UploadFetchOptions) => () => void\r\n\r\nexport interface DirectoryEntity {\r\n  name: string,\r\n  fullPath: string,\r\n  isFile: boolean,\r\n  isDirectory: boolean,\r\n  file: (callback: (file: UploadSourceFile) => void) => void,\r\n\r\n  createReader: () => DirectoryReader,\r\n}\r\n\r\nexport interface DirectoryReader {\r\n  readEntries: (\r\n    onSuccess: (entities: DirectoryEntity[]) => void,\r\n    onError?: (errors: any) => void,\r\n  ) => void,\r\n}\r\n\r\nexport interface UploadExposed extends ComponentPublicInstance {\r\n  isDragOver: boolean,\r\n  execute: () => Promise<false | any[]>,\r\n  handleDelete: (file: UploadFileState) => void,\r\n  focus: (options?: FocusOptions) => void,\r\n  blur: () => void,\r\n}\r\n\r\nexport interface UploadListSlots {\r\n  item?: (params: { file: UploadFileState, status: UploadStatus, percentage: number }) => any,\r\n  icon?: (params: { file: UploadFileState, status: UploadStatus, percentage: number }) => any,\r\n  suffix?: () => any,\r\n}\r\n\r\nexport interface UploadFileSlots {\r\n  default?: (params: { file: UploadFileState, status: UploadStatus, percentage: number }) => any,\r\n  icon?: (params: { file: UploadFileState, status: UploadStatus, percentage: number }) => any,\r\n}\r\n\r\nexport interface UploadSlots extends Omit<UploadListSlots, 'suffix'> {\r\n  default?: (params: { isDragOver: boolean }) => any,\r\n  tip?: () => any,\r\n  cloud?: () => any,\r\n}\r\n\r\nexport const uploadListTypes = Object.freeze<UploadListType[]>([\r\n  'name',\r\n  'detail',\r\n  'thumbnail',\r\n  'card',\r\n])\r\n\r\n/**\r\n * @deprecated Use `UploadHttpError` to replace it\r\n */\r\nexport type HttpError = UploadHttpError\r\n/**\r\n * @deprecated Use `UploadSourceFile` to replace it\r\n */\r\nexport type SourceFile = UploadSourceFile\r\n/**\r\n * @deprecated Use `UploadFileState` to replace it\r\n */\r\nexport type FileState = UploadFileState\r\n/**\r\n * @deprecated Use `UploadFileOptions` to replace it\r\n */\r\nexport type FileOptions = UploadFileOptions\r\n","<script setup lang=\"ts\">\r\nimport { CollapseTransition } from '@/components/collapse-transition'\r\nimport { Icon } from '@/components/icon'\r\nimport { Progress } from '@/components/progress'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, reactive, shallowReadonly, toRef } from 'vue'\r\n\r\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { toFixed } from '@vexip-ui/utils'\r\nimport { uploadFileProps } from './props'\r\nimport { useFileIcons } from './file-icon'\r\nimport { StatusType, uploadListTypes } from './symbol'\r\n\r\nimport type { UploadFileSlots, UploadFileState } from './symbol'\r\n\r\ndefineOptions({ name: 'UploadFile' })\r\n\r\nconst imageExtRE = /\\.(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico)$/i\r\nconst imageBase64RE = /^data:image\\//\r\n\r\nfunction isImage(file: UploadFileState) {\r\n  if (file.type) {\r\n    return file.type.startsWith('image/')\r\n  }\r\n\r\n  const { name, url, base64 } = file\r\n\r\n  return !!(\r\n    imageExtRE.test(name) ||\r\n    (url && (imageExtRE.test(url) || imageBase64RE.test(url))) ||\r\n    (base64 && imageBase64RE.test(base64))\r\n  )\r\n}\r\n\r\nconst _props = defineProps(uploadFileProps)\r\nconst props = useProps('uploadFile', _props, {\r\n  locale: null,\r\n  file: {\r\n    default: () => ({}) as UploadFileState,\r\n    static: true,\r\n  },\r\n  iconRenderer: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  listType: {\r\n    default: 'name',\r\n    validator: value => uploadListTypes.includes(value),\r\n  },\r\n  loadingText: null,\r\n  selectToAdd: false,\r\n  precision: 2,\r\n  canPreview: {\r\n    default: isImage,\r\n    isFunc: true,\r\n  },\r\n  slots: () => ({}),\r\n})\r\n\r\ndefineSlots<UploadFileSlots>()\r\n\r\nconst nh = useNameHelper('upload')\r\nconst locale = useLocale('upload', toRef(props, 'locale'))\r\nconst icons = useIcons()\r\nconst fileIcons = useFileIcons(icons)\r\n\r\nconst useIconRenderer = computed(() => typeof props.iconRenderer === 'function')\r\nconst fileName = computed(() => props.file.path || props.file.name)\r\nconst status = computed(() => props.file.status)\r\nconst percentage = computed(() => toFixed(props.file.percentage, props.precision))\r\nconst showThumb = computed(() => isImage(props.file) && (props.file.url || props.file.base64))\r\n\r\nconst slotParams = shallowReadonly(\r\n  reactive({\r\n    file: toRef(props, 'file'),\r\n    status,\r\n    percentage,\r\n  }),\r\n)\r\n\r\nfunction getFileExtension(file: UploadFileState) {\r\n  return file.name.split('.').pop()!.toLocaleLowerCase()\r\n}\r\n\r\nfunction getFileIcon(file: UploadFileState, scale = 1) {\r\n  const extension = getFileExtension(file)\r\n  const icon = extension\r\n    ? fileIcons.value[extension] || fileIcons.value.default\r\n    : fileIcons.value.default\r\n\r\n  return { ...icon, scale: +(icon.scale || 1) * scale }\r\n}\r\n\r\nfunction handleDelete(file: UploadFileState) {\r\n  emitEvent(props.onDelete, file)\r\n}\r\n\r\nfunction handlePreview(file: UploadFileState) {\r\n  emitEvent(props.onPreview, file)\r\n}\r\n\r\nfunction imageToBase64(file: UploadFileState) {\r\n  if (!file.source || !isImage(props.file)) return\r\n\r\n  const reader = new FileReader()\r\n\r\n  reader.readAsDataURL(file.source)\r\n  reader.onload = () => {\r\n    if (file.status !== StatusType.DELETE) {\r\n      file.base64 = reader.result?.toString() ?? null\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <li\r\n    :class=\"[\r\n      nh.be('file'),\r\n      nh.bem('file', props.listType),\r\n      nh.bem('file', status),\r\n      props.inherit && nh.bem('file', 'inherit')\r\n    ]\"\r\n    :title=\"fileName\"\r\n    tabindex=\"-1\"\r\n  >\r\n    <slot v-bind=\"slotParams\">\r\n      <Renderer :renderer=\"props.slots.default\" :data=\"slotParams\">\r\n        <template v-if=\"props.listType === 'name'\">\r\n          <div :class=\"nh.be('label')\">\r\n            <div :class=\"[nh.be('icon'), nh.be('file-icon')]\">\r\n              <slot name=\"icon\" v-bind=\"slotParams\">\r\n                <Renderer :renderer=\"props.slots.icon\" :data=\"slotParams\">\r\n                  <Renderer\r\n                    v-if=\"useIconRenderer\"\r\n                    :renderer=\"props.iconRenderer\"\r\n                    :data=\"{ file: props.file }\"\r\n                  ></Renderer>\r\n                  <Icon v-else v-bind=\"getFileIcon(props.file)\"></Icon>\r\n                </Renderer>\r\n              </slot>\r\n            </div>\r\n            <span :class=\"nh.be('filename')\">\r\n              {{ fileName }}\r\n            </span>\r\n          </div>\r\n          <div :class=\"nh.be('actions')\">\r\n            <span\r\n              v-if=\"status === 'uploading'\"\r\n              style=\"margin-inline-end: 0.5em\"\r\n              :class=\"nh.be('percentage')\"\r\n            >\r\n              {{ `${percentage}%` }}\r\n            </span>\r\n            <div v-if=\"status === 'success'\" :class=\"[nh.be('icon'), nh.be('success')]\">\r\n              <Icon v-bind=\"icons.success\"></Icon>\r\n            </div>\r\n            <div v-else-if=\"status === 'fail'\" :class=\"[nh.be('icon'), nh.be('fail')]\">\r\n              <Icon v-bind=\"icons.warning\"></Icon>\r\n            </div>\r\n            <div v-else-if=\"status === 'uploading'\" :class=\"[nh.be('icon'), nh.be('loading')]\">\r\n              <Icon v-bind=\"icons.loading\"></Icon>\r\n            </div>\r\n            <button\r\n              type=\"button\"\r\n              :class=\"[nh.be('icon'), nh.be('close')]\"\r\n              :aria-label=\"locale.ariaLabel.delete\"\r\n              @click=\"handleDelete(props.file)\"\r\n            >\r\n              <Icon v-bind=\"icons.delete\"></Icon>\r\n            </button>\r\n          </div>\r\n          <div v-if=\"status === 'uploading'\" :class=\"nh.be('progress')\">\r\n            <Progress\r\n              inherit\r\n              info-type=\"none\"\r\n              :stroke-width=\"2\"\r\n              :percentage=\"props.file.percentage\"\r\n              :precision=\"props.precision\"\r\n            ></Progress>\r\n          </div>\r\n        </template>\r\n        <template v-else-if=\"props.listType === 'thumbnail' || props.listType === 'card'\">\r\n          <div :class=\"nh.be('card')\">\r\n            <div :class=\"nh.be('thumbnail')\">\r\n              <template v-if=\"status === 'uploading'\">\r\n                <div v-if=\"props.listType === 'thumbnail'\" :class=\"nh.be('progress')\">\r\n                  <span style=\"margin-bottom: 0.3em\">\r\n                    {{ props.loadingText ?? locale.uploading }}\r\n                  </span>\r\n                  <Progress\r\n                    inherit\r\n                    info-type=\"none\"\r\n                    :stroke-width=\"2\"\r\n                    :percentage=\"props.file.percentage\"\r\n                    :precision=\"props.precision\"\r\n                  ></Progress>\r\n                  <span style=\"margin-top: 3px\" :class=\"nh.be('percentage')\">\r\n                    {{ `${percentage}%` }}\r\n                  </span>\r\n                </div>\r\n                <Icon\r\n                  v-else\r\n                  v-bind=\"icons.loading\"\r\n                  :scale=\"+(icons.loading.scale || 1) * 1.8\"\r\n                  label=\"loading\"\r\n                ></Icon>\r\n              </template>\r\n              <img\r\n                v-else-if=\"showThumb\"\r\n                :class=\"nh.be('image')\"\r\n                :src=\"props.file.url || props.file.base64 || ''\"\r\n                :alt=\"fileName\"\r\n              />\r\n              <template v-else>\r\n                {{ imageToBase64(props.file) }}\r\n                <slot name=\"icon\" v-bind=\"slotParams\">\r\n                  <Renderer :renderer=\"props.slots.icon\" :data=\"slotParams\">\r\n                    <Renderer\r\n                      v-if=\"useIconRenderer\"\r\n                      :renderer=\"props.iconRenderer\"\r\n                      :data=\"{ file: props.file }\"\r\n                    ></Renderer>\r\n                    <Icon v-else v-bind=\"getFileIcon(props.file, 2.8)\"></Icon>\r\n                  </Renderer>\r\n                </slot>\r\n              </template>\r\n            </div>\r\n            <div v-if=\"props.listType === 'card'\" :class=\"nh.be('info')\">\r\n              <span :class=\"nh.be('filename')\">\r\n                {{ fileName }}\r\n              </span>\r\n              <CollapseTransition>\r\n                <div v-if=\"status === 'uploading'\" :class=\"nh.be('progress')\">\r\n                  <Progress\r\n                    inherit\r\n                    info-type=\"none\"\r\n                    :stroke-width=\"4\"\r\n                    :percentage=\"props.file.percentage\"\r\n                    :precision=\"props.precision\"\r\n                  ></Progress>\r\n                </div>\r\n              </CollapseTransition>\r\n            </div>\r\n            <div\r\n              v-if=\"props.listType === 'card' || status !== 'uploading'\"\r\n              :class=\"nh.be('actions')\"\r\n            >\r\n              <div v-if=\"props.listType === 'thumbnail'\" :class=\"nh.be('mask')\"></div>\r\n              <button\r\n                type=\"button\"\r\n                :class=\"[\r\n                  nh.be('icon'),\r\n                  nh.be('action'),\r\n                  {\r\n                    [nh.bem('action', 'disabled')]: !props.canPreview(props.file)\r\n                  }\r\n                ]\"\r\n                :disabled=\"!props.canPreview(props.file)\"\r\n                :aria-label=\"locale.ariaLabel.preview\"\r\n                @click=\"handlePreview(props.file)\"\r\n              >\r\n                <Icon v-bind=\"icons.preview\" :scale=\"+(icons.preview.scale || 1) * 1.4\"></Icon>\r\n              </button>\r\n              <button\r\n                type=\"button\"\r\n                :class=\"[nh.be('icon'), nh.be('action')]\"\r\n                :aria-label=\"locale.ariaLabel.delete\"\r\n                @click=\"handleDelete(props.file)\"\r\n              >\r\n                <Icon v-bind=\"icons.delete\" :scale=\"+(icons.delete.scale || 1) * 1.4\"></Icon>\r\n              </button>\r\n            </div>\r\n          </div>\r\n        </template>\r\n      </Renderer>\r\n    </slot>\r\n  </li>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Renderer } from '@/components/renderer'\r\nimport { UploadFile } from '@/components/upload-file'\r\n\r\nimport { computed } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { uploadListProps } from './props'\r\nimport { uploadListTypes } from './symbol'\r\n\r\nimport type { UploadFileState, UploadListSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'UploadList' })\r\n\r\nconst _props = defineProps(uploadListProps)\r\nconst props = useProps('uploadList', _props, {\r\n  files: {\r\n    default: () => [],\r\n    static: true,\r\n  },\r\n  selectToAdd: false,\r\n  iconRenderer: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  type: {\r\n    default: 'name',\r\n    validator: value => uploadListTypes.includes(value),\r\n  },\r\n  loadingText: null,\r\n  style: null,\r\n  precision: 2,\r\n  // 'canPreview' using UploadFile default\r\n  slots: () => ({}),\r\n})\r\n\r\nconst slots = defineSlots<UploadListSlots>()\r\n\r\nconst nh = useNameHelper('upload')\r\nconst transitionName = computed(() => nh.ns('fade'))\r\n\r\nfunction handleDelete(file: UploadFileState) {\r\n  emitEvent(props.onDelete, file)\r\n}\r\n\r\nfunction handlePreview(file: UploadFileState) {\r\n  emitEvent(props.onPreview, file)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <ul\r\n    :class=\"[nh.be('files'), nh.bs('vars'), props.inherit && nh.bem('files', 'inherit')]\"\r\n    :style=\"props.style\"\r\n  >\r\n    <Transition\r\n      v-for=\"item in props.files\"\r\n      :key=\"item.id\"\r\n      appear\r\n      :name=\"props.selectToAdd ? transitionName : undefined\"\r\n    >\r\n      <UploadFile\r\n        inherit\r\n        :file=\"item\"\r\n        :icon-renderer=\"props.iconRenderer\"\r\n        :list-type=\"props.type\"\r\n        :loading-text=\"props.loadingText\"\r\n        :select-to-add=\"props.selectToAdd\"\r\n        :precision=\"props.precision\"\r\n        :can-preview=\"props.canPreview\"\r\n        @delete=\"handleDelete\"\r\n        @preview=\"handlePreview\"\r\n      >\r\n        <template v-if=\"slots.item || props.slots.item\" #default=\"{ file, status, percentage }\">\r\n          <slot\r\n            name=\"item\"\r\n            :file=\"file\"\r\n            :status=\"status\"\r\n            :percentage=\"percentage\"\r\n          >\r\n            <Renderer\r\n              :renderer=\"props.slots.item\"\r\n              :data=\"{\r\n                file,\r\n                status,\r\n                percentage\r\n              }\"\r\n            ></Renderer>\r\n          </slot>\r\n        </template>\r\n        <template v-if=\"slots.icon || props.slots.icon\" #icon=\"{ file, status, percentage }\">\r\n          <slot\r\n            name=\"icon\"\r\n            :file=\"file\"\r\n            :status=\"status\"\r\n            :percentage=\"percentage\"\r\n          >\r\n            <Renderer :renderer=\"props.slots.icon\" :data=\"{ file, status, percentage }\"></Renderer>\r\n          </slot>\r\n        </template>\r\n      </UploadFile>\r\n    </Transition>\r\n    <slot name=\"suffix\">\r\n      <Renderer :renderer=\"props.slots.suffix\"></Renderer>\r\n    </slot>\r\n  </ul>\r\n</template>\r\n","import { has, isDefined, noop } from '@vexip-ui/utils'\r\n\r\nimport type { UploadFetchOptions, UploadHttpError } from './symbol'\r\n\r\nfunction getError(url: string, xhr: XMLHttpRequest) {\r\n  const message = `fail to post ${url} ${xhr.status}'`\r\n  const error = new Error(message) as UploadHttpError\r\n\r\n  error.response = getBody(xhr)\r\n  error.url = url\r\n  error.status = xhr.status\r\n  error.method = 'POST'\r\n\r\n  return error\r\n}\r\n\r\nfunction getBody(xhr: XMLHttpRequest) {\r\n  const text = xhr.responseText || xhr.response\r\n\r\n  if (!text) {\r\n    return text\r\n  }\r\n\r\n  try {\r\n    return JSON.parse(text)\r\n  } catch (e) {\r\n    return text\r\n  }\r\n}\r\n\r\nexport function upload(options: UploadFetchOptions) {\r\n  if (typeof XMLHttpRequest === 'undefined') {\r\n    return noop\r\n  }\r\n\r\n  const xhr = new XMLHttpRequest()\r\n  const url = options.url\r\n\r\n  if (xhr.upload && options.onProgress) {\r\n    xhr.upload.onprogress = event => {\r\n      let percent = 0\r\n\r\n      if (event.total > 0) {\r\n        percent = (event.loaded / event.total) * 100\r\n      }\r\n\r\n      options.onProgress!(percent)\r\n    }\r\n  }\r\n\r\n  const formData = new FormData()\r\n\r\n  if (options.data) {\r\n    const data = options.data\r\n\r\n    Object.keys(data).forEach(key => {\r\n      formData.append(key, data[key])\r\n    })\r\n  }\r\n\r\n  formData.append(options.field || 'file', options.file)\r\n  options.file.path && formData.append(options.pathField || 'path', options.file.path)\r\n\r\n  if (options.onError) {\r\n    xhr.onerror = () => {\r\n      options.onError!(getError(url, xhr))\r\n    }\r\n  }\r\n\r\n  xhr.onload = () => {\r\n    if (xhr.status < 200 || xhr.status >= 300) {\r\n      if (options.onError) {\r\n        options.onError(getError(url, xhr))\r\n      }\r\n\r\n      return\r\n    }\r\n\r\n    const body = getBody(xhr)\r\n\r\n    options.onSuccess?.(body)\r\n  }\r\n\r\n  if (options.onAbort) {\r\n    xhr.onabort = () => {\r\n      options.onAbort!()\r\n    }\r\n  }\r\n\r\n  xhr.open('POST', url, true)\r\n\r\n  if (options.withCredentials && 'withCredentials' in xhr) {\r\n    xhr.withCredentials = true\r\n  }\r\n\r\n  const headers = options.headers ?? {}\r\n\r\n  Object.keys(headers).forEach(header => {\r\n    if (has(headers, header) && isDefined(headers[header])) {\r\n      xhr.setRequestHeader(header, headers[header])\r\n    }\r\n  })\r\n\r\n  xhr.send(formData)\r\n\r\n  return () => xhr.abort()\r\n}\r\n","import { Button } from '@/components/button'\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { UploadList } from '@/components/upload-list'\r\nimport { useFieldStore } from '@/components/form'\r\n\r\nimport { computed, defineComponent, onBeforeUnmount, ref, renderSlot, toRef, watch } from 'vue'\r\n\r\nimport {\r\n  createIconProp,\r\n  createStateProp,\r\n  emitEvent,\r\n  useIcons,\r\n  useLocale,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { isClient, isDefined, isFalse, isPromise, noop, randomString } from '@vexip-ui/utils'\r\nimport { uploadProps } from './props'\r\nimport { upload } from './request'\r\nimport { StatusType, uploadListTypes } from './symbol'\r\n\r\nimport type { Ref } from 'vue'\r\nimport type {\r\n  DirectoryEntity,\r\n  UploadFileOptions,\r\n  UploadFileState,\r\n  UploadHttpError,\r\n  UploadSourceFile,\r\n} from './symbol'\r\n\r\nfunction getDefaultFileState(): UploadFileState {\r\n  return {\r\n    id: randomString(),\r\n    name: '',\r\n    size: 0,\r\n    type: '',\r\n    base64: null,\r\n    status: StatusType.PENDING,\r\n    percentage: 0,\r\n    source: null,\r\n    url: null,\r\n    path: '',\r\n    xhr: null,\r\n    response: null,\r\n    error: null,\r\n    abort: noop,\r\n  }\r\n}\r\n\r\nexport default defineComponent({\r\n  name: 'Upload',\r\n  props: uploadProps,\r\n  emits: ['update:file-list'],\r\n  setup(_props, { slots, emit, expose }) {\r\n    const {\r\n      idFor,\r\n      labelId,\r\n      state,\r\n      disabled,\r\n      loading,\r\n      size,\r\n      validateField,\r\n      getFieldValue,\r\n      setFieldValue,\r\n    } = useFieldStore<UploadFileOptions[]>(focus)\r\n\r\n    const props = useProps('upload', _props, {\r\n      state: createStateProp(state),\r\n      locale: null,\r\n      url: {\r\n        default: '',\r\n        static: true,\r\n      },\r\n      fileList: {\r\n        default: () => getFieldValue(),\r\n        static: true,\r\n      },\r\n      multiple: false,\r\n      tip: '',\r\n      accept: null,\r\n      filter: '',\r\n      maxSize: {\r\n        default: null,\r\n        validator: value => value >= 0,\r\n      },\r\n      field: 'file',\r\n      data: () => ({}),\r\n      headers: () => ({}),\r\n      withCredentials: false,\r\n      manual: false,\r\n      hiddenFiles: false,\r\n      countLimit: {\r\n        default: 0,\r\n        validator: value => value >= 0,\r\n      },\r\n      allowDrag: false,\r\n      onBeforeUpload: {\r\n        default: null,\r\n        isFunc: true,\r\n      },\r\n      onBeforeSelect: {\r\n        default: null,\r\n        isFunc: true,\r\n      },\r\n      iconRenderer: {\r\n        default: null,\r\n        isFunc: true,\r\n      },\r\n      selectToAdd: false,\r\n      listType: {\r\n        default: 'name',\r\n        validator: value => uploadListTypes.includes(value),\r\n      },\r\n      block: false,\r\n      loadingText: null,\r\n      directory: false,\r\n      pathField: 'path',\r\n      disabledClick: false,\r\n      buttonLabel: null,\r\n      disabled: () => disabled.value,\r\n      loading: () => loading.value,\r\n      loadingIcon: createIconProp(),\r\n      loadingLock: false,\r\n      loadingEffect: null,\r\n      image: false,\r\n      defaultFiles: () => [],\r\n      // canPreview: don't set, using UploadFile default value\r\n      listStyle: null,\r\n      name: {\r\n        default: '',\r\n        static: true,\r\n      },\r\n      customFetch: {\r\n        default: null,\r\n        isFunc: true,\r\n      },\r\n      slots: () => ({}),\r\n    })\r\n\r\n    const nh = useNameHelper('upload')\r\n    const locale = useLocale('upload', toRef(props, 'locale'))\r\n    const icons = useIcons()\r\n    const fileStates = ref([]) as Ref<UploadFileState[]>\r\n    const isDragOver = ref(false)\r\n\r\n    const input = ref<HTMLInputElement>()\r\n    const button = ref<InstanceType<typeof Button>>()\r\n    const panel = ref<HTMLElement>()\r\n\r\n    const readonly = computed(() => props.loading && props.loadingLock)\r\n    const className = computed(() => {\r\n      return [\r\n        nh.b(),\r\n        nh.bs('vars'),\r\n        nh.bm(`type-${props.listType}`),\r\n        {\r\n          [nh.bm('inherit')]: props.inherit,\r\n          [nh.bm(props.state)]: props.state !== 'default',\r\n          [nh.bm('multiple')]: props.multiple,\r\n          [nh.bm('drag')]: props.allowDrag,\r\n          [nh.bm('to-add')]: props.selectToAdd,\r\n          [nh.bm('block')]: props.block,\r\n          [nh.bm('drag-only')]: props.disabledClick,\r\n          [nh.bm('image')]: props.image,\r\n          [nh.bm('has-file')]: !props.hiddenFiles && renderFiles.value.length,\r\n          [nh.bm('readonly')]: readonly.value,\r\n          [nh.bm('loading')]: props.loading,\r\n        },\r\n      ]\r\n    })\r\n    const controlClass = computed(() => {\r\n      if (props.image) {\r\n        return {\r\n          [nh.be('image-control')]: true,\r\n          [nh.bem('image-control', 'drag-over')]: isDragOver.value,\r\n          [nh.bem('image-control', 'disabled')]: props.disabled,\r\n        }\r\n      }\r\n\r\n      return {\r\n        [nh.be('control')]: true,\r\n        [nh.bem('control', 'drag-over')]: isDragOver.value,\r\n      }\r\n    })\r\n    const acceptString = computed(() => {\r\n      const accept = props.image ? (props.accept?.length ? props.accept : 'image/*') : props.accept\r\n\r\n      return accept && (typeof accept === 'string' ? accept : accept.join())\r\n    })\r\n    const defaultList = computed(() => props.defaultFiles.map(file => createFileState(file)))\r\n    const renderFiles = computed(() => {\r\n      return defaultList.value\r\n        .concat(fileStates.value)\r\n        .filter(item => item.status !== StatusType.DELETE)\r\n    })\r\n\r\n    watch(\r\n      () => props.fileList,\r\n      value => {\r\n        const idMap = new Map<string | number, UploadFileState>()\r\n        const fileMap = new Map<UploadSourceFile, UploadFileState>()\r\n\r\n        for (const state of fileStates.value) {\r\n          if (isDefined(state.id)) {\r\n            idMap.set(state.id, state)\r\n          }\r\n\r\n          if (state.source) {\r\n            fileMap.set(state.source, state)\r\n          }\r\n        }\r\n\r\n        fileStates.value = (value || []).map(file =>\r\n          createFileState(\r\n            file,\r\n            file.id ? idMap.get(file.id) : file.source ? fileMap.get(file.source) : undefined,\r\n          ),\r\n        )\r\n        syncInputFiles()\r\n      },\r\n      { immediate: true, deep: true },\r\n    )\r\n\r\n    expose({\r\n      isDragOver,\r\n      execute,\r\n      handleDelete,\r\n      focus,\r\n      blur: () => {\r\n        button.value?.$el.blur()\r\n        panel.value?.blur()\r\n      },\r\n    })\r\n\r\n    function focus(options?: FocusOptions) {\r\n      if (button.value?.$el) {\r\n        button.value.$el.focus(options)\r\n      } else {\r\n        panel.value?.focus(options)\r\n      }\r\n    }\r\n\r\n    function handleClick() {\r\n      if (props.disabled || readonly.value) return\r\n\r\n      !props.disabledClick && input.value?.click()\r\n    }\r\n\r\n    function handleKeyDown(event: KeyboardEvent) {\r\n      const key = event.code || event.key\r\n\r\n      if (key === 'Enter' || key === 'Space') {\r\n        handleClick()\r\n      }\r\n    }\r\n\r\n    function handleInputChange(event: Event) {\r\n      const target = event.target as HTMLInputElement\r\n\r\n      if (target?.files) {\r\n        handleFilesChange(target.files)\r\n      }\r\n    }\r\n\r\n    async function handleFilesChange(inputFiles: FileList | UploadSourceFile[]) {\r\n      const originFiles = Array.from(inputFiles || []) as UploadSourceFile[]\r\n      const shouldAdd = props.selectToAdd\r\n      const files = shouldAdd ? Array.from(fileStates.value) : []\r\n\r\n      for (const file of originFiles) {\r\n        if (!file.path) {\r\n          file.path = file.webkitRelativePath\r\n        }\r\n\r\n        let fileState = getFileStateBySource(file)\r\n\r\n        if (fileState) {\r\n          if (\r\n            fileState.status !== StatusType.SUCCESS &&\r\n            fileState.status !== StatusType.UPLOADING\r\n          ) {\r\n            fileState.status = StatusType.PENDING\r\n          }\r\n        } else {\r\n          fileState = createFileState({\r\n            name: file.name,\r\n            size: file.size,\r\n            type: file.type,\r\n            source: file,\r\n          })\r\n        }\r\n\r\n        if (typeof props.onBeforeSelect === 'function') {\r\n          let result = props.onBeforeSelect(fileState, files)\r\n\r\n          if (isPromise(result)) {\r\n            result = await result\r\n          }\r\n\r\n          if (isFalse(result)) continue\r\n        }\r\n\r\n        if (!files.includes(fileState)) {\r\n          files.push(fileState)\r\n        }\r\n      }\r\n\r\n      const countLimit = props.countLimit\r\n\r\n      if (countLimit > 0 && files.length > countLimit) {\r\n        const exceedFiles = files.slice(countLimit)\r\n\r\n        emitEvent(props.onExceed, exceedFiles)\r\n        fileStates.value = files.slice(0, countLimit)\r\n      } else {\r\n        fileStates.value = files\r\n      }\r\n\r\n      syncInputFiles()\r\n      emitChangeEvent()\r\n\r\n      if (!props.manual) {\r\n        execute()\r\n      }\r\n    }\r\n\r\n    function emitChangeEvent() {\r\n      emit('update:file-list', fileStates.value)\r\n      setFieldValue(fileStates.value)\r\n      emitEvent(props.onChange, fileStates.value)\r\n      validateField()\r\n    }\r\n\r\n    function getFileStateBySource(file: UploadSourceFile) {\r\n      const { name, size, type } = file\r\n      const path = file.path || file.webkitRelativePath\r\n\r\n      return fileStates.value.find(({ source }) => {\r\n        return (\r\n          source &&\r\n          (source.path || source.webkitRelativePath) === path &&\r\n          source.name === name &&\r\n          source.size === size &&\r\n          source.type === type\r\n        )\r\n      })\r\n    }\r\n\r\n    function createFileState(\r\n      file: UploadFileOptions,\r\n      defaults = getDefaultFileState(),\r\n    ): UploadFileState {\r\n      const { id, name, size, type, base64, status, percentage, source, url, path } = file\r\n\r\n      Object.assign(defaults, {\r\n        id: id ?? defaults.id ?? randomString(),\r\n        name: name || '',\r\n        size: size || 0,\r\n        type: type || '',\r\n        base64: base64 || null,\r\n        status: status ?? StatusType.PENDING,\r\n        percentage: percentage || 0,\r\n        source: source || null,\r\n        url: url || null,\r\n        path: path || '',\r\n        xhr: null,\r\n        response: null,\r\n        error: null,\r\n      })\r\n\r\n      return defaults\r\n    }\r\n\r\n    function getFileExtension(file: UploadFileState) {\r\n      return file.name.split('.').pop()!.toLocaleLowerCase()\r\n    }\r\n\r\n    async function execute() {\r\n      if (!props.url || !verifyFiles()) {\r\n        return false\r\n      }\r\n\r\n      const uploadFiles = fileStates.value.filter(\r\n        item => item.status !== StatusType.SUCCESS && item.status !== StatusType.DELETE,\r\n      )\r\n      const requests: Promise<any>[] = []\r\n\r\n      for (const file of uploadFiles) {\r\n        requests.push(uploadFile(file).catch(noop))\r\n      }\r\n\r\n      return await Promise.all(requests).then(responses => responses.filter(response => response))\r\n    }\r\n\r\n    async function uploadFile(file: UploadFileState) {\r\n      if (typeof props.onBeforeUpload === 'function') {\r\n        let result = props.onBeforeUpload(\r\n          file,\r\n          fileStates.value.filter(\r\n            item => item.status !== StatusType.SUCCESS && item.status !== StatusType.DELETE,\r\n          ),\r\n        )\r\n\r\n        if (isPromise(result)) {\r\n          try {\r\n            result = await result\r\n          } catch (e) {\r\n            return\r\n          }\r\n        }\r\n\r\n        if (isFalse(result)) return\r\n\r\n        if (result instanceof Blob) {\r\n          if (result instanceof File) {\r\n            file.source = result\r\n          } else {\r\n            file.source = new File([result], file.name, {\r\n              type: file.type,\r\n            })\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!file.source) return\r\n\r\n      file.status = StatusType.UPLOADING\r\n\r\n      const { url, headers, withCredentials, data, field, pathField } = props\r\n\r\n      return await new Promise((resolve, reject) => {\r\n        file.abort = (props.customFetch || upload)({\r\n          url,\r\n          headers,\r\n          withCredentials,\r\n          data,\r\n          field,\r\n          pathField,\r\n          file: file.source!,\r\n          onProgress: percent => {\r\n            handleProgress(percent, file)\r\n          },\r\n          onSuccess: response => {\r\n            handleSuccess(response, file)\r\n            resolve(response)\r\n          },\r\n          onError: error => {\r\n            handleError(error, file)\r\n            reject(error)\r\n          },\r\n          onAbort: () => {\r\n            resolve(null)\r\n          },\r\n        })\r\n      })\r\n    }\r\n\r\n    function verifyFiles() {\r\n      const limitSize = props.maxSize ? props.maxSize * 1024 : Infinity\r\n      const filter =\r\n        typeof props.filter === 'string'\r\n          ? props.filter\r\n            ? [props.filter]\r\n            : []\r\n          : props.filter.filter(item => item)\r\n\r\n      for (let i = 0, len = fileStates.value.length; i < len; ++i) {\r\n        const file = fileStates.value[i]\r\n        const extension = getFileExtension(file)\r\n\r\n        if (filter.length && !filter.includes(extension)) {\r\n          emitEvent(props.onFilterError, file)\r\n\r\n          return false\r\n        }\r\n\r\n        if (file.size > limitSize) {\r\n          emitEvent(props.onSizeError, file)\r\n\r\n          return false\r\n        }\r\n      }\r\n\r\n      return true\r\n    }\r\n\r\n    function handleDelete(file: UploadFileState) {\r\n      file.status = StatusType.DELETE\r\n\r\n      file.abort?.()\r\n      syncInputFiles()\r\n      emitEvent(props.onDelete, file)\r\n      emitChangeEvent()\r\n    }\r\n\r\n    function handlePreview(file: UploadFileState) {\r\n      emitEvent(props.onPreview, file)\r\n    }\r\n\r\n    function syncInputFiles() {\r\n      if (!isClient) return\r\n\r\n      const dataTransfer = new DataTransfer()\r\n      fileStates.value = fileStates.value.filter(item => item.status !== StatusType.DELETE)\r\n\r\n      fileStates.value.forEach(item => {\r\n        item.source && dataTransfer.items.add(item.source)\r\n      })\r\n\r\n      if (input.value) {\r\n        input.value.files = dataTransfer.files\r\n      }\r\n    }\r\n\r\n    function handleProgress(percent: number, file: UploadFileState) {\r\n      if (file.status === StatusType.DELETE) return\r\n\r\n      file.percentage = percent\r\n\r\n      emitEvent(props.onProgress, file, percent)\r\n      emitChangeEvent()\r\n    }\r\n\r\n    function handleSuccess(response: any, file: UploadFileState) {\r\n      if (file.status === StatusType.DELETE) return\r\n\r\n      file.status = StatusType.SUCCESS\r\n      file.response = response\r\n      file.error = null\r\n\r\n      emitEvent(props.onSuccess, file, response)\r\n      emitChangeEvent()\r\n    }\r\n\r\n    function handleError(error: UploadHttpError, file: UploadFileState) {\r\n      if (file.status === StatusType.DELETE) return\r\n\r\n      file.status = StatusType.FAIL\r\n      file.error = error\r\n\r\n      emitEvent(props.onError, file, error)\r\n      emitChangeEvent()\r\n    }\r\n\r\n    let dragTimer: ReturnType<typeof setTimeout>\r\n\r\n    onBeforeUnmount(() => {\r\n      clearTimeout(dragTimer)\r\n    })\r\n\r\n    async function handleDrop(event: DragEvent) {\r\n      if (!props.allowDrag || props.disabled || readonly.value) return\r\n\r\n      clearTimeout(dragTimer)\r\n      event.preventDefault()\r\n\r\n      isDragOver.value = false\r\n\r\n      if (event.dataTransfer) {\r\n        const files = await collectDropFiles(event.dataTransfer)\r\n\r\n        files.length && handleFilesChange(files)\r\n      }\r\n    }\r\n\r\n    function handleDragEnter(event: DragEvent) {\r\n      if (!props.allowDrag || props.disabled || readonly.value) return\r\n\r\n      clearTimeout(dragTimer)\r\n      event.preventDefault()\r\n\r\n      isDragOver.value = true\r\n    }\r\n\r\n    function handleDragLeave(event: DragEvent) {\r\n      if (!props.allowDrag || props.disabled || readonly.value) return\r\n\r\n      event.preventDefault()\r\n\r\n      dragTimer = setTimeout(() => {\r\n        isDragOver.value = false\r\n      }, 100)\r\n    }\r\n\r\n    async function collectDropFiles(dataTransfer: DataTransfer) {\r\n      const { items, files } = dataTransfer\r\n\r\n      if (!items.length) return []\r\n\r\n      const collectedFiles: File[] = []\r\n      const dirLoop: Array<{ dir: DirectoryEntity, prefix: string }> = []\r\n      const processes: Promise<void>[] = []\r\n\r\n      for (let i = 0, len = items.length; i < len; ++i) {\r\n        const entity = items[i].webkitGetAsEntry?.()\r\n\r\n        // 内核不支持\r\n        if (!entity) return files\r\n\r\n        if (entity.isFile) {\r\n          collectedFiles.push(files[i])\r\n        } else {\r\n          dirLoop.push({ dir: entity as unknown as DirectoryEntity, prefix: '' })\r\n          // directories.push(entity as unknown as DirectoryEntity)\r\n        }\r\n      }\r\n\r\n      if (!props.directory || !dirLoop.length) return collectedFiles\r\n\r\n      const fileEntries: Array<{ entry: DirectoryEntity, prefix: string }> = []\r\n\r\n      let countLimit = props.countLimit - (props.selectToAdd ? fileStates.value.length : 0)\r\n      countLimit = Math.round(countLimit) > 0 ? countLimit : 100\r\n\r\n      const doProcess = () => {\r\n        while (dirLoop.length) {\r\n          const loop = dirLoop.shift()!\r\n          const dir = loop.dir\r\n          const prefix = loop.prefix ? `${loop.prefix}/${dir.name}` : dir.name\r\n          const reader = dir.createReader()\r\n\r\n          processes.push(\r\n            new Promise<void>(resolve => {\r\n              reader.readEntries(entries => {\r\n                entries.forEach(entry => {\r\n                  if (entry.isFile) {\r\n                    fileEntries.push({ entry, prefix })\r\n                  } else {\r\n                    dirLoop.push({ dir: entry, prefix })\r\n                  }\r\n                })\r\n\r\n                resolve()\r\n              })\r\n            }),\r\n          )\r\n        }\r\n      }\r\n\r\n      while (true) {\r\n        doProcess()\r\n        await Promise.all(processes)\r\n\r\n        if (!dirLoop.length || fileEntries.length >= countLimit) {\r\n          break\r\n        }\r\n      }\r\n\r\n      if (fileEntries.length > 0) {\r\n        return collectedFiles.concat(\r\n          await Promise.all(\r\n            fileEntries.map(\r\n              ({ entry, prefix }) =>\r\n                new Promise<File>(resolve =>\r\n                  entry.file(file => {\r\n                    file.path = `${prefix}/${file.name}`\r\n                    resolve(file)\r\n                  }),\r\n                ),\r\n            ),\r\n          ),\r\n        )\r\n      }\r\n\r\n      return collectedFiles\r\n    }\r\n\r\n    function preventDefault(event: Event) {\r\n      event.preventDefault()\r\n    }\r\n\r\n    function renderNormalAction() {\r\n      return !props.allowDrag && !props.disabledClick ? (\r\n        <>\r\n          <Button\r\n            ref={button}\r\n            inherit\r\n            size={size.value}\r\n            type={props.state}\r\n            disabled={props.disabled}\r\n            loading={props.loading}\r\n          >\r\n            {{\r\n              default: () => props.buttonLabel ?? locale.value.upload,\r\n              icon: () => <Icon {...icons.value.upload} />,\r\n              loading: () => (\r\n                <Icon\r\n                  {...icons.value.loading}\r\n                  class={nh.be('loading-icon')}\r\n                  effect={props.loadingEffect || icons.value.loading.effect}\r\n                  icon={props.loadingIcon || icons.value.loading.icon}\r\n                  label={'loading'}\r\n                />\r\n              ),\r\n            }}\r\n          </Button>\r\n          {renderSlot(slots, 'tip', undefined, () => [\r\n            <Renderer renderer={props.slots.tip}>\r\n              {props.tip && <p class={nh.be('tip')}>{props.tip}</p>}\r\n            </Renderer>,\r\n          ])}\r\n        </>\r\n      ) : (\r\n        <div\r\n          ref={panel}\r\n          class={[nh.be('drag-panel'), props.disabled && nh.bem('drag-panel', 'disabled')]}\r\n          tabindex={0}\r\n        >\r\n          {renderSlot(slots, 'cloud', undefined, () => [\r\n            <Renderer renderer={props.slots.cloud}>\r\n              <Icon\r\n                {...icons.value.uploadCloud}\r\n                class={[nh.be('cloud'), props.disabled && nh.bem('cloud', 'disabled')]}\r\n                scale={+(icons.value.uploadCloud.scale || 1) * 4}\r\n              />\r\n            </Renderer>,\r\n          ])}\r\n          {renderSlot(slots, 'tip', undefined, () => [\r\n            <Renderer renderer={props.slots.tip}>\r\n              <p class={nh.be('tip')}>{props.tip || locale.value.dragOrClick}</p>\r\n            </Renderer>,\r\n          ])}\r\n          <Icon\r\n            {...icons.value.loading}\r\n            class={nh.be('loading-icon')}\r\n            effect={props.loadingEffect || icons.value.loading.effect}\r\n            icon={props.loadingIcon || icons.value.loading.icon}\r\n            label={'loading'}\r\n            style={{ opacity: props.loading ? '100%' : '0%' }}\r\n          />\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderImageAction() {\r\n      return (\r\n        <button\r\n          class={[nh.be('image-action'), props.disabled && nh.bem('image-action', 'disabled')]}\r\n          type={'button'}\r\n        >\r\n          {renderSlot(\r\n            slots,\r\n            'default',\r\n            {\r\n              isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value,\r\n            },\r\n            () => [\r\n              <Renderer\r\n                renderer={props.slots.default}\r\n                data={{ isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value }}\r\n              >\r\n                {props.loading ? (\r\n                  <Icon\r\n                    {...icons.value.loading}\r\n                    class={nh.be('loading-icon')}\r\n                    effect={props.loadingEffect || icons.value.loading.effect}\r\n                    icon={props.loadingIcon || icons.value.loading.icon}\r\n                    label={'loading'}\r\n                    style={{ marginBottom: '6px' }}\r\n                  />\r\n                ) : (\r\n                  <Icon\r\n                    {...icons.value.plus}\r\n                    class={[nh.be('cloud'), props.disabled && nh.bem('cloud', 'disabled')]}\r\n                    scale={+(icons.value.plus.scale || 1) * 1.2}\r\n                    style={{ marginBottom: '6px' }}\r\n                  />\r\n                )}\r\n                <span>{props.buttonLabel ?? locale.value.upload}</span>\r\n              </Renderer>,\r\n            ],\r\n          )}\r\n        </button>\r\n      )\r\n    }\r\n\r\n    function renderControl() {\r\n      const HtmlTag = props.image ? 'li' : 'div'\r\n\r\n      return (\r\n        <HtmlTag\r\n          class={controlClass.value}\r\n          tabindex={-1}\r\n          onClick={handleClick}\r\n          onDrop={handleDrop}\r\n          onDragover={handleDragEnter}\r\n          onDragleave={handleDragLeave}\r\n          onKeydown={handleKeyDown}\r\n        >\r\n          {!props.disabledClick && (\r\n            <input\r\n              ref={input}\r\n              type={'file'}\r\n              class={nh.be('input')}\r\n              disabled={props.disabled}\r\n              multiple={props.multiple}\r\n              name={props.name}\r\n              accept={acceptString.value}\r\n              webkitdirectory={props.directory || undefined}\r\n              onChange={handleInputChange}\r\n              onSubmit={preventDefault}\r\n            />\r\n          )}\r\n          {props.image\r\n            ? renderImageAction()\r\n            : renderSlot(\r\n              slots,\r\n              'default',\r\n              {\r\n                isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value,\r\n              },\r\n              () => [\r\n                <Renderer\r\n                  renderer={props.slots.default}\r\n                  data={{\r\n                    isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value,\r\n                  }}\r\n                >\r\n                  {renderNormalAction()}\r\n                </Renderer>,\r\n              ],\r\n            )}\r\n        </HtmlTag>\r\n      )\r\n    }\r\n\r\n    function renderFileList() {\r\n      return (\r\n        <UploadList\r\n          inherit\r\n          files={renderFiles.value}\r\n          select-to-add={props.selectToAdd}\r\n          type={props.image ? 'thumbnail' : props.listType}\r\n          icon-renderer={props.iconRenderer}\r\n          loading-text={props.loadingText}\r\n          can-preview={props.canPreview}\r\n          style={props.listStyle}\r\n          onDelete={handleDelete}\r\n          onPreview={handlePreview}\r\n        >\r\n          {{\r\n            item:\r\n              slots.item || props.slots.item\r\n                ? (params: any) =>\r\n                  renderSlot(slots, 'item', params, () => [\r\n                    <Renderer renderer={props.slots.item} data={params}></Renderer>,\r\n                  ])\r\n                : null,\r\n            icon:\r\n              slots.icon || props.slots.icon\r\n                ? (params: any) =>\r\n                  renderSlot(slots, 'icon', params, () => [\r\n                    <Renderer renderer={props.slots.icon} data={params}></Renderer>,\r\n                  ])\r\n                : null,\r\n            suffix: () =>\r\n              props.image && (!props.countLimit || renderFiles.value.length < props.countLimit)\r\n                ? renderControl()\r\n                : null,\r\n          }}\r\n        </UploadList>\r\n      )\r\n    }\r\n\r\n    return () => (\r\n      <div id={idFor.value} class={className.value} role={'group'} aria-labelledby={labelId.value}>\r\n        {!props.image && renderControl()}\r\n        {!props.hiddenFiles && renderFileList()}\r\n      </div>\r\n    )\r\n  },\r\n  methods: {\r\n    execute: noop as () => Promise<false | any[]>,\r\n    handleDelete: noop as (file: UploadFileState) => void,\r\n    focus: noop as (options?: FocusOptions) => void,\r\n    blur: noop as () => void,\r\n  },\r\n})\r\n","import { booleanProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { FullScreenType } from '@/components/full-screen'\r\nimport type { IconEffect } from '@/components/icon'\r\nimport type { ClassType, ConfigurableProps } from '@vexip-ui/config'\r\nimport type {\r\n  VideoControlLayout,\r\n  VideoControlOption,\r\n  VideoControlType,\r\n  // VideoKernel,\r\n  VideoPlaybackRate,\r\n  VideoSegment,\r\n  VideoShortcutOptions,\r\n  VideoSlots,\r\n} from './symbol'\r\n\r\nexport const videoProps = buildProps({\r\n  src: String,\r\n  srcList: Array as PropType<string[]>,\r\n  noControls: booleanProp,\r\n  videoAttrs: Object,\r\n  time: Number,\r\n  volume: Number,\r\n  playbackRate: Number,\r\n  playbackRates: Array as PropType<(number | VideoPlaybackRate)[]>,\r\n  // kernel: Object as PropType<VideoKernel>,\r\n  controlLayout: Object as PropType<VideoControlLayout>,\r\n  poster: String,\r\n  video: Object as PropType<HTMLVideoElement>,\r\n  segments: Array as PropType<(number | VideoSegment)[]>,\r\n  loading: booleanProp,\r\n  loadingIcon: iconProp,\r\n  loadingEffect: String as PropType<IconEffect>,\r\n  shortcuts: Object as PropType<VideoShortcutOptions>,\r\n  slots: Object as PropType<VideoSlots>,\r\n  onPlay: eventProp(),\r\n  onPause: eventProp(),\r\n  onEnded: eventProp(),\r\n  onTimeChange: eventProp<(time: number) => void>(),\r\n  onVolumeChange: eventProp<(volume: number) => void>(),\r\n  onRateChange: eventProp<(rate: number) => void>(),\r\n  onToggleFlip: eventProp<(flip: boolean) => void>(),\r\n  onTogglePip: eventProp<(pip: boolean) => void>(),\r\n  onToggleFull: eventProp<(full: false | FullScreenType) => void>(),\r\n  onPrev: eventProp(),\r\n  onNext: eventProp(),\r\n  onRefresh: eventProp(),\r\n})\r\n\r\nexport type VideoProps = ExtractPropTypes<typeof videoProps>\r\nexport type VideoCProps = ConfigurableProps<ExtractPropTypes<typeof videoProps>>\r\n\r\nexport const videoControlProps = buildProps({\r\n  type: String as PropType<VideoControlType>,\r\n  label: String,\r\n  tipClass: [String, Array, Object] as PropType<ClassType>,\r\n  disabled: booleanProp,\r\n  shortcut: String,\r\n  focusable: booleanProp,\r\n  value: [Number, String],\r\n  options: Array as PropType<(string | VideoControlOption)[]>,\r\n  onClick: eventProp(),\r\n  onEnter: eventProp(),\r\n  onLeave: eventProp(),\r\n  onFocus: eventProp<(event: FocusEvent) => void>(),\r\n  onBlur: eventProp<(event: FocusEvent) => void>(),\r\n  onSelect: eventProp<(option: VideoControlOption) => void>(),\r\n})\r\n\r\nexport type VideoControlProps = ExtractPropTypes<typeof videoControlProps>\r\nexport type VideoControlCProps = ConfigurableProps<ExtractPropTypes<typeof videoControlProps>>\r\n","import type { InjectionKey } from 'vue'\r\n\r\nexport type VideoPresetControl =\r\n  | 'play'\r\n  | 'play-prev'\r\n  | 'play-next'\r\n  | 'refresh'\r\n  | 'timer'\r\n  | 'playback-rate'\r\n  | 'flip'\r\n  | 'volume'\r\n  | 'pip'\r\n  | 'full-window'\r\n  | 'full-browser'\r\nexport type VideoShortcutOptions = Partial<Record<VideoPresetControl, string>>\r\nexport type VideoControlName = VideoPresetControl | (string & {})\r\nexport type VideoControlConfig = VideoControlName | [VideoControlName, any]\r\n\r\nexport interface VideoControlLayout {\r\n  left?: VideoControlConfig[],\r\n  center?: VideoControlConfig[],\r\n  right?: VideoControlConfig[],\r\n}\r\n\r\nexport interface VideoPlaybackRate {\r\n  label?: string,\r\n  value: number,\r\n}\r\n\r\nexport type VideoControlType = 'button' | 'select' | 'panel'\r\n\r\nexport interface VideoControlOption {\r\n  value: string | number,\r\n  label?: string,\r\n  selectedLabel?: string,\r\n  disabled?: boolean,\r\n  divided?: boolean,\r\n  title?: string,\r\n}\r\n\r\nexport interface VideoSegment {\r\n  time: number,\r\n  title?: string,\r\n}\r\n\r\n// export interface VideoKernel {\r\n//   play: () => void,\r\n//   pause: () => void,\r\n//   mute: () => void,\r\n//   unmute: () => void,\r\n//   prev: () => void,\r\n//   next: () => void,\r\n//   refresh: () => void | boolean\r\n// }\r\n\r\nexport interface VideoState {\r\n  placeId?: string,\r\n  iconScale: number,\r\n  addShortcut: (key: string, cb: () => void) => () => void,\r\n}\r\n\r\nexport interface VideoSlots {\r\n  poster?: () => any,\r\n}\r\n\r\nconst defaultLayout: Required<VideoControlLayout> = {\r\n  left: ['play-prev', 'play', 'play-next', 'refresh', 'timer'],\r\n  center: [],\r\n  right: ['playback-rate', 'volume', 'flip', 'pip', 'full-window', 'full-browser'],\r\n}\r\n\r\nfor (const key of Object.keys(defaultLayout) as (keyof VideoControlLayout)[]) {\r\n  defaultLayout[key] = Object.freeze(defaultLayout[key]) as any\r\n}\r\n\r\nexport const videoDefaultControlLayout = Object.freeze(defaultLayout)\r\n\r\nexport const videoDefaultShortcuts = Object.freeze({\r\n  play: 'Space',\r\n  'play-prev': 'PageUp',\r\n  'play-next': 'PageDown',\r\n  refresh: 'R',\r\n  flip: 'C',\r\n  volume: 'M',\r\n  pip: 'P',\r\n  'full-window': 'G',\r\n  'full-browser': 'F',\r\n})\r\n\r\nexport const VIDEO_STATE = '__VXP_VIDEO_STATE' as unknown as InjectionKey<VideoState>\r\n","<script setup lang=\"ts\">\r\nimport { Option } from '@/components/option'\r\nimport { Tooltip } from '@/components/tooltip'\r\n\r\nimport { computed, inject, onBeforeUnmount, ref, watch } from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { listToMap } from '@vexip-ui/utils'\r\nimport { videoControlProps } from './props'\r\nimport { VIDEO_STATE } from './symbol'\r\n\r\nimport type { VideoControlOption } from './symbol'\r\n\r\ndefineOptions({ name: 'VideoControl' })\r\n\r\nconst _props = defineProps(videoControlProps)\r\nconst props = useProps('videoControl', _props, {\r\n  type: 'button',\r\n  label: {\r\n    static: true,\r\n    default: '',\r\n  },\r\n  tipClass: null,\r\n  disabled: false,\r\n  shortcut: {\r\n    static: true,\r\n    default: '',\r\n  },\r\n  focusable: false,\r\n  value: null,\r\n  options: () => [],\r\n})\r\n\r\ndefineSlots<{\r\n  selected: (params: { option: VideoControlOption }) => any,\r\n  default: () => any,\r\n  label: () => any,\r\n  panel: () => any,\r\n  option: (params: { option: VideoControlOption, index: number, selected: boolean }) => any,\r\n}>()\r\n\r\nconst nh = useNameHelper('video')\r\n\r\nconst videoState = inject(VIDEO_STATE)!\r\n\r\nconst currentValue = ref(props.value)\r\n\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.be('control')]: true,\r\n    [nh.bem('control', props.type)]: props.type !== 'button',\r\n    [nh.bem('control', 'disabled')]: props.disabled,\r\n  }\r\n})\r\nconst tipClass = computed(() => {\r\n  return props.type === 'button' ? nh.be('control-tip') : nh.be('control-panel')\r\n})\r\nconst objectOptions = computed(() => {\r\n  return props.options.map(option => {\r\n    return typeof option === 'string' ? { value: option } : option\r\n  })\r\n})\r\nconst optionMap = computed(() => listToMap(objectOptions.value, 'value', undefined, true))\r\nconst currentOption = computed(() => optionMap.value.get(currentValue.value))\r\n\r\nlet removeShortcut: (() => void) | undefined\r\n\r\nwatch(\r\n  () => props.shortcut,\r\n  value => {\r\n    removeShortcut?.()\r\n\r\n    if (value) {\r\n      removeShortcut = videoState.addShortcut(value, handleClick)\r\n    }\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\nonBeforeUnmount(() => removeShortcut?.())\r\n\r\nfunction handleClick() {\r\n  !props.disabled && emitEvent(props.onClick)\r\n}\r\n\r\nfunction handleSelect(option: VideoControlOption) {\r\n  if (props.disabled || option.disabled) return\r\n\r\n  currentValue.value = option.value\r\n  emitEvent(props.onSelect, option)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div :class=\"className\">\r\n    <Tooltip\r\n      :trigger=\"props.focusable ? 'hover-focus' : 'hover'\"\r\n      raw\r\n      shift\r\n      :transfer=\"videoState.placeId && `#${videoState.placeId}`\"\r\n      :tip-class=\"[tipClass, props.tipClass]\"\r\n      :no-hover=\"props.type === 'button'\"\r\n      :disabled=\"props.type === 'button' ? !props.label : props.disabled\"\r\n      @tip-enter=\"emitEvent(props.onEnter)\"\r\n      @tip-leave=\"emitEvent(props.onLeave)\"\r\n    >\r\n      <template #trigger>\r\n        <button\r\n          :class=\"nh.be('control-button')\"\r\n          type=\"button\"\r\n          @focus=\"emitEvent(props.onFocus, $event)\"\r\n          @blur=\"emitEvent(props.onBlur, $event)\"\r\n          @click=\"handleClick\"\r\n        >\r\n          <slot v-if=\"currentOption\" name=\"selected\" :option=\"currentOption\">\r\n            {{ currentOption.selectedLabel || currentOption.label || currentOption.value }}\r\n          </slot>\r\n          <slot v-else></slot>\r\n        </button>\r\n      </template>\r\n      <template v-if=\"props.type === 'button'\">\r\n        <span :class=\"nh.be('control-name')\">\r\n          <slot name=\"label\">\r\n            {{ props.label }}\r\n            <span v-if=\"props.shortcut\" :class=\"nh.be('control-shortcut')\">\r\n              {{ `(${props.shortcut})` }}\r\n            </span>\r\n          </slot>\r\n        </span>\r\n      </template>\r\n      <slot v-else name=\"panel\">\r\n        <ul v-if=\"props.type === 'select'\" :class=\"nh.be('control-options')\">\r\n          <Option\r\n            v-for=\"(option, index) in objectOptions\"\r\n            :key=\"option.value\"\r\n            :class=\"{\r\n              [nh.be('control-option')]: true,\r\n              [nh.bem('control-option', 'selected')]: option.value === currentValue,\r\n            }\"\r\n            :label=\"option.label\"\r\n            :value=\"option.value\"\r\n            :disabled=\"option.disabled\"\r\n            :divided=\"option.disabled\"\r\n            :title=\"option.title\"\r\n            no-hover\r\n            @select=\"handleSelect(option)\"\r\n          >\r\n            <slot\r\n              name=\"option\"\r\n              :option=\"option\"\r\n              :index=\"index\"\r\n              :selected=\"option.value === currentValue\"\r\n            >\r\n              {{ option.label || option.value }}\r\n            </slot>\r\n          </Option>\r\n        </ul>\r\n      </slot>\r\n    </Tooltip>\r\n  </div>\r\n</template>\r\n","import { doubleDigits, leaveNumber } from '@vexip-ui/utils'\r\n\r\nimport type { IconOptions, IconValue } from '@vexip-ui/config'\r\n\r\nexport function formatSeconds(seconds: number) {\r\n  if (seconds <= 0) return '00:00'\r\n\r\n  const remainders = leaveNumber(Math.ceil(seconds), 60, 2)\r\n\r\n  if (remainders.length < 2) {\r\n    remainders.unshift(0)\r\n  }\r\n\r\n  return remainders.length < 3\r\n    ? remainders.map(doubleDigits).join(':')\r\n    : remainders.map((r, i) => (i ? doubleDigits(r) : r)).join(':')\r\n}\r\n\r\nexport function mergeIconScale(scale: number, icon: IconOptions & { icon: IconValue }) {\r\n  return {\r\n    ...icon,\r\n    scale: +(icon.scale || 1) * scale,\r\n  }\r\n}\r\n","<script setup lang=\"ts\">\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\nimport { Slider } from '@/components/slider'\r\n\r\nimport { computed, ref } from 'vue'\r\n\r\nimport { getStepByWord, useLocale, useNameHelper } from '@vexip-ui/config'\r\nimport { useListener, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { boundRange, throttle } from '@vexip-ui/utils'\r\nimport { formatSeconds } from './helper'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { SliderExposed } from '@/components/slider'\r\nimport type { VideoSegment } from './symbol'\r\n\r\ninterface PointState {\r\n  start: number,\r\n  startPercent: number,\r\n  end: number,\r\n  endPercent: number,\r\n  duration: number,\r\n  durationPercent: number,\r\n  width: number,\r\n}\r\n\r\ndefineOptions({ name: 'VideoProgress' })\r\n\r\nconst props = defineProps({\r\n  time: {\r\n    type: Number,\r\n    default: 0,\r\n  },\r\n  duration: {\r\n    type: Number,\r\n    default: 0,\r\n  },\r\n  segments: {\r\n    type: Array as PropType<VideoSegment[]>,\r\n    default: () => [],\r\n  },\r\n  noPreview: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  previewSrc: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n})\r\n\r\nconst emit = defineEmits(['change'])\r\n\r\nconst nh = useNameHelper('video')\r\nconst locale = useLocale('video')\r\n\r\nconst { timer } = useSetTimeout()\r\n\r\nconst slidTime = ref(0)\r\nconst hovered = ref(false)\r\nconst hoveredTime = ref(0)\r\nconst indicatorLeft = ref(0)\r\nconst previewLeft = ref(0)\r\n\r\nlet paddingX = [0, 0]\r\nlet sliderWidth = 100\r\nlet previewWidth = 60\r\n\r\nconst wrapper = ref<HTMLElement>()\r\nconst slider = ref<SliderExposed>()\r\nconst sliderEl = computed(() => slider.value?.$el as HTMLElement | undefined)\r\nconst preview = ref<HTMLElement>()\r\n\r\nconst sliding = computed(() => !!slider.value?.sliding[1])\r\nconst percent = computed(() => {\r\n  return props.duration ? ((sliding.value ? slidTime.value : props.time) / props.duration) * 100 : 0\r\n})\r\nconst className = computed(() => {\r\n  return {\r\n    [nh.be('progress')]: true,\r\n    [nh.bem('progress', 'sliding')]: sliding.value,\r\n    [nh.bem('progress', 'disabled')]: props.duration <= 0,\r\n  }\r\n})\r\nconst points = computed<PointState[]>(() => {\r\n  const duration = Math.max(1, props.duration)\r\n\r\n  let times = props.segments.map(segment => segment.time)\r\n\r\n  if (!times.length) times = [0, duration]\r\n\r\n  times = times.at(-1) === duration ? times : [...times, duration]\r\n  times = times[0] === 0 ? times : [0, ...times]\r\n\r\n  const points: PointState[] = []\r\n\r\n  for (let i = 0, len = times.length - 1; i < len; ++i) {\r\n    const start = times[i]\r\n    const end = times[i + 1]\r\n    const pointDuration = end - start\r\n\r\n    points.push({\r\n      start,\r\n      startPercent: (start / duration) * 100,\r\n      end,\r\n      endPercent: (end / duration) * 100,\r\n      duration: pointDuration,\r\n      durationPercent: (pointDuration / duration) * 100,\r\n      width: ((end - start) / duration) * 100,\r\n    })\r\n  }\r\n\r\n  return points\r\n})\r\nconst segmentLabel = computed(() => {\r\n  const time = hoveredTime.value\r\n  const segments = props.segments\r\n\r\n  if (!segments.length) return ''\r\n\r\n  let index = -1\r\n\r\n  if (time <= 0) {\r\n    index = 0\r\n  } else {\r\n    for (let i = 1, len = segments.length; i < len; ++i) {\r\n      if (segments[i].time > time) {\r\n        index = i - 1\r\n        break\r\n      }\r\n    }\r\n  }\r\n\r\n  if (index < 0) {\r\n    index = segments.length - 1\r\n  }\r\n\r\n  const title = segments[index]?.title || getStepByWord(locale.value.chapterCount, index + 1)\r\n\r\n  return title && ` (${title})`\r\n})\r\n\r\nuseListener(sliderEl, 'pointerenter', () => {\r\n  clearTimeout(timer.hover)\r\n\r\n  timer.hover = setTimeout(() => {\r\n    hovered.value = true\r\n  }, 100)\r\n})\r\nuseListener(sliderEl, 'pointerleave', () => {\r\n  clearTimeout(timer.hover)\r\n\r\n  timer.hover = setTimeout(() => {\r\n    hovered.value = false\r\n  }, 100)\r\n})\r\nuseListener(\r\n  sliderEl,\r\n  'pointermove',\r\n  throttle((event: PointerEvent) => {\r\n    if (!sliding.value) {\r\n      processMoveOnTrack(event)\r\n    }\r\n  }),\r\n)\r\n\r\nfunction processMoveOnTrack(event: PointerEvent) {\r\n  if (!sliderEl.value) return\r\n\r\n  const offsetX = boundRange(\r\n    event.clientX - sliderEl.value.getBoundingClientRect().left,\r\n    0,\r\n    sliderWidth,\r\n  )\r\n\r\n  hoveredTime.value = (offsetX / sliderWidth) * props.duration\r\n  indicatorLeft.value = offsetX + paddingX[0]\r\n  previewLeft.value = boundRange(\r\n    offsetX - previewWidth * 0.5 + paddingX[0],\r\n    0,\r\n    sliderWidth - previewWidth + paddingX[0] + paddingX[1],\r\n  )\r\n}\r\n\r\nfunction onSliderResize(entry: ResizeObserverEntry) {\r\n  if (!wrapper.value) return\r\n\r\n  const style = getComputedStyle(wrapper.value)\r\n\r\n  paddingX = [parseFloat(style.paddingLeft), parseFloat(style.paddingRight)]\r\n  sliderWidth = entry.borderBoxSize?.[0]?.inlineSize ?? entry.contentRect.width\r\n}\r\n\r\nfunction onPreviewResize(entry: ResizeObserverEntry) {\r\n  previewWidth = entry.borderBoxSize?.[0]?.inlineSize ?? entry.contentRect.width\r\n}\r\n\r\nfunction handleChange(permillage: number) {\r\n  emit('change', (permillage / 1000) * props.duration)\r\n}\r\n\r\nconst onSlideMove = throttle(processMoveOnTrack)\r\n\r\nfunction onSlideStart() {\r\n  slidTime.value = props.time\r\n\r\n  document.addEventListener('pointermove', onSlideMove)\r\n  document.addEventListener('pointerup', onSlideEnd)\r\n}\r\n\r\nfunction onSlideEnd() {\r\n  document.removeEventListener('pointermove', onSlideMove)\r\n  document.removeEventListener('pointerup', onSlideEnd)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div ref=\"wrapper\" :class=\"className\">\r\n    <ResizeObserver :on-resize=\"onSliderResize\">\r\n      <Slider\r\n        ref=\"slider\"\r\n        :class=\"nh.be('progress-slider')\"\r\n        :value=\"percent * 10\"\r\n        :max=\"1000\"\r\n        :vertical=\"false\"\r\n        :range=\"false\"\r\n        hide-tip\r\n        trigger-fade\r\n        flip-marker\r\n        :disabled=\"duration <= 0\"\r\n        @change=\"handleChange\"\r\n        @pointerdown=\"onSlideStart\"\r\n      >\r\n        <template #filler=\"state\">\r\n          <div\r\n            v-for=\"(point, index) in points\"\r\n            :key=\"index\"\r\n            :class=\"nh.be('progress-segment')\"\r\n            :style=\"{ width: `${point.width}%` }\"\r\n          >\r\n            <div :class=\"nh.be('progress-track')\">\r\n              <div\r\n                :class=\"nh.be('progress-filler')\"\r\n                :style=\"{\r\n                  visibility: state.percent[1] < point.startPercent ? 'hidden' : undefined,\r\n                  transform: `translateX(${Math.min(\r\n                    (Math.max(state.percent[1] - point.startPercent, 0) / point.durationPercent) *\r\n                      100 -\r\n                      100,\r\n                    0,\r\n                  )}%) translateZ(0)`,\r\n                }\"\r\n              ></div>\r\n            </div>\r\n          </div>\r\n        </template>\r\n        <template #trigger>\r\n          <slot name=\"trigger\">\r\n            <div :class=\"nh.be('progress-trigger')\"></div>\r\n          </slot>\r\n        </template>\r\n      </Slider>\r\n    </ResizeObserver>\r\n    <div\r\n      :class=\"{\r\n        [nh.be('progress-indicator')]: true,\r\n        [nh.bem('progress-indicator', 'active')]: hovered && !sliding,\r\n      }\"\r\n      :style=\"{ transform: `translateX(${indicatorLeft}px) translateZ(0)` }\"\r\n    ></div>\r\n    <ResizeObserver v-if=\"!noPreview\" :on-resize=\"onPreviewResize\">\r\n      <div\r\n        ref=\"preview\"\r\n        :class=\"{\r\n          [nh.be('preview')]: true,\r\n          [nh.bem('preview', 'has-image')]: previewSrc,\r\n          [nh.bem('preview', 'active')]: hovered || sliding,\r\n        }\"\r\n        :style=\"{ transform: `translateX(${previewLeft}px) translateZ(0)` }\"\r\n      >\r\n        <slot name=\"preview\">\r\n          <div v-if=\"previewSrc\" :class=\"nh.be('preview-image')\">\r\n            <img :src=\"previewSrc\" />\r\n          </div>\r\n          <div :class=\"nh.be('preview-time')\">\r\n            {{ formatSeconds(hoveredTime) + segmentLabel }}\r\n          </div>\r\n        </slot>\r\n      </div>\r\n    </ResizeObserver>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Input } from '@/components/input'\r\n\r\nimport { computed, nextTick, onMounted, ref, watch } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { getRangeWidth, isValidNumber, toNumber } from '@vexip-ui/utils'\r\nimport { formatSeconds } from './helper'\r\n\r\ndefineOptions({ name: 'VideoTimer' })\r\n\r\nconst props = defineProps({\r\n  time: {\r\n    type: Number,\r\n    default: 0,\r\n  },\r\n  duration: {\r\n    type: Number,\r\n    default: 0,\r\n  },\r\n  disabled: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n})\r\n\r\nconst emit = defineEmits(['change'])\r\n\r\nconst nh = useNameHelper('video')\r\n\r\nconst currentTime = ref(props.time)\r\nconst editing = ref(false)\r\nconst width = ref(84)\r\nconst inputTime = ref('')\r\n\r\nconst input = ref<HTMLInputElement>()\r\nconst durationEl = ref<HTMLElement>()\r\n\r\nconst formattedTime = computed(() => formatSeconds(currentTime.value))\r\n\r\nwatch(\r\n  () => props.time,\r\n  value => {\r\n    currentTime.value = value\r\n  },\r\n)\r\nwatch(\r\n  () => props.disabled,\r\n  value => {\r\n    if (value) {\r\n      editing.value = false\r\n    }\r\n  },\r\n)\r\n\r\nonMounted(() => {\r\n  watch(\r\n    () => props.duration,\r\n    () => {\r\n      nextTick(() => {\r\n        width.value = durationEl.value ? getRangeWidth(durationEl.value) * 2 + 20 : 84\r\n      })\r\n    },\r\n    { immediate: true },\r\n  )\r\n})\r\n\r\nfunction handleClick() {\r\n  if (!props.disabled && !editing.value) {\r\n    editing.value = true\r\n    inputTime.value = formattedTime.value\r\n    nextTick(() => {\r\n      input.value?.focus()\r\n    })\r\n  }\r\n}\r\n\r\nfunction finishInput(confirm: boolean) {\r\n  editing.value = false\r\n\r\n  if (confirm) {\r\n    const units = inputTime.value.trim().split(':')\r\n\r\n    if (units.every(unit => isValidNumber(unit))) {\r\n      currentTime.value = units\r\n        .map(toNumber)\r\n        .reverse()\r\n        .slice(0, 3)\r\n        .reduce((seconds, unit, i) => seconds + 60 ** i * unit, 0)\r\n      currentTime.value = Math.min(currentTime.value, props.duration)\r\n      emit('change', currentTime.value)\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :class=\"[nh.be('control'), nh.be('timer'), props.disabled && nh.bem('control', 'disabled')]\"\r\n    :style=\"{ width: `${width}px` }\"\r\n    @click=\"handleClick\"\r\n  >\r\n    <Input\r\n      v-if=\"editing\"\r\n      ref=\"input\"\r\n      v-model:value=\"inputTime\"\r\n      :class=\"nh.be('timer-input')\"\r\n      size=\"small\"\r\n      transparent\r\n      @blur=\"finishInput(false)\"\r\n      @enter=\"finishInput(true)\"\r\n    ></Input>\r\n    <template v-else>\r\n      <span>\r\n        {{ formattedTime }}\r\n      </span>\r\n      <span :class=\"nh.be('timer-separator')\">/</span>\r\n      <span ref=\"durationEl\">\r\n        {{ formatSeconds(duration) }}\r\n      </span>\r\n    </template>\r\n  </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Slider } from '@/components/slider'\r\n\r\nimport { computed, inject, ref, watch } from 'vue'\r\n\r\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\r\nimport VideoControl from './video-control.vue'\r\nimport { mergeIconScale } from './helper'\r\nimport { VIDEO_STATE } from './symbol'\r\n\r\ndefineOptions({ name: 'VideoVolume' })\r\n\r\nconst props = defineProps({\r\n  volume: {\r\n    type: Number,\r\n    default: 1,\r\n  },\r\n})\r\n\r\nconst emit = defineEmits(['change'])\r\n\r\nconst nh = useNameHelper('video')\r\nconst icons = useIcons()\r\n\r\nconst videoState = inject(VIDEO_STATE)!\r\n\r\nconst currentVolume = ref(props.volume)\r\nconst muted = ref(false)\r\n// const visible = ref(true)\r\n\r\nconst volumeIcon = computed(() => {\r\n  return muted.value\r\n    ? icons.value.volumeMute\r\n    : currentVolume.value < 0.5\r\n      ? icons.value.volumeLow\r\n      : icons.value.volume\r\n})\r\n\r\nwatch(\r\n  () => props.volume,\r\n  value => {\r\n    currentVolume.value = value\r\n  },\r\n)\r\n\r\ndefineExpose({ toggleMute })\r\n\r\nlet prevVolume = currentVolume.value\r\n\r\nfunction toggleMute() {\r\n  if (muted.value) {\r\n    currentVolume.value = prevVolume <= 0 ? 0.5 : prevVolume\r\n  } else {\r\n    prevVolume = currentVolume.value\r\n    currentVolume.value = 0\r\n  }\r\n\r\n  muted.value = !muted.value\r\n\r\n  emit('change', currentVolume.value)\r\n}\r\n\r\nfunction handleSlide(value: number) {\r\n  value /= 100\r\n  prevVolume = value\r\n  currentVolume.value = value\r\n  muted.value = value <= 0\r\n\r\n  emit('change', currentVolume.value)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <VideoControl\r\n    :class=\"nh.be('volume')\"\r\n    type=\"panel\"\r\n    :tip-class=\"nh.be('volume-panel')\"\r\n    @click=\"toggleMute\"\r\n  >\r\n    <Icon v-bind=\"mergeIconScale(videoState.iconScale, volumeIcon)\"></Icon>\r\n    <template #panel>\r\n      <div :class=\"nh.be('volume-text')\">\r\n        {{ (currentVolume * 100).toFixed() }}\r\n      </div>\r\n      <Slider\r\n        :value=\"currentVolume * 100\"\r\n        :class=\"nh.be('volume-slider')\"\r\n        :min=\"0\"\r\n        :max=\"100\"\r\n        vertical\r\n        hide-tip\r\n        reverse\r\n        :range=\"false\"\r\n        @input=\"handleSlide\"\r\n      ></Slider>\r\n    </template>\r\n  </VideoControl>\r\n</template>\r\n","import { FullScreen } from '@/components/full-screen'\r\nimport { Icon } from '@/components/icon'\r\nimport { Progress } from '@/components/progress'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport {\r\n  Transition,\r\n  computed,\r\n  defineComponent,\r\n  nextTick,\r\n  onMounted,\r\n  provide,\r\n  reactive,\r\n  ref,\r\n  renderSlot,\r\n  shallowReadonly,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport VideoControl from './video-control.vue'\r\nimport VideoProgress from './video-progress.vue'\r\nimport VideoTimer from './video-timer.vue'\r\nimport VideoVolume from './video-volume.vue'\r\nimport { createSlotRender, useListener, useModifier, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { decide, decimalLength, isClient, noop, toCapitalCase, toNumber } from '@vexip-ui/utils'\r\nimport { videoProps } from './props'\r\nimport { VIDEO_STATE, videoDefaultControlLayout, videoDefaultShortcuts } from './symbol'\r\n\r\nimport type { FullScreenExposed, FullScreenType } from '@/components/full-screen'\r\nimport type { VideoControlConfig, VideoPlaybackRate } from './symbol'\r\n\r\nexport default defineComponent({\r\n  name: 'Video',\r\n  props: videoProps,\r\n  emits: ['update:src', 'update:time', 'update:volume', 'update:playback-rate'],\r\n  setup(_props, { slots, emit, expose }) {\r\n    const props = useProps('video', _props, {\r\n      src: {\r\n        static: true,\r\n        default: '',\r\n      },\r\n      srcList: {\r\n        static: true,\r\n        default: null,\r\n      },\r\n      noControls: false,\r\n      videoAttrs: null,\r\n      time: {\r\n        static: true,\r\n        default: 0,\r\n      },\r\n      volume: 1,\r\n      playbackRate: 1,\r\n      playbackRates: () => [0.5, 1, 1.25, 1.5, 2],\r\n      // kernel: null,\r\n      controlLayout: () => videoDefaultControlLayout,\r\n      poster: '',\r\n      video: {\r\n        static: true,\r\n        default: null,\r\n      },\r\n      segments: () => [],\r\n      loading: false,\r\n      loadingIcon: null,\r\n      loadingEffect: null,\r\n      shortcuts: () => ({}),\r\n      slots: () => ({}),\r\n    })\r\n\r\n    const nh = useNameHelper('video')\r\n    const locale = useLocale('video')\r\n    const icons = useIcons()\r\n\r\n    const { timer } = useSetTimeout()\r\n\r\n    const pipEnabled = isClient && document.pictureInPictureEnabled\r\n\r\n    const currentSrc = ref(\r\n      props.src || props.srcList?.[0] || (props.videoAttrs?.src as string) || '',\r\n    )\r\n    const playing = ref(false)\r\n    const currentTime = ref(props.time)\r\n    const canPlay = ref(false)\r\n    const duration = ref(0)\r\n    const currentVolume = ref(props.volume) // 0 ~ 1\r\n    const pip = ref(false)\r\n    const stateShow = ref(true)\r\n    // record the state is invisible (whether finish transition)\r\n    const stateHidden = ref(false)\r\n    const currentRate = ref(props.playbackRate)\r\n    // const loadedData = ref(false)\r\n    const interacting = ref(false)\r\n    const hasPlayed = ref(false)\r\n    const flipped = ref(false)\r\n    const iconScale = ref(1.3)\r\n\r\n    const screen = ref<FullScreenExposed>()\r\n    const wrapper = computed(() => screen.value?.wrapper as HTMLElement | undefined)\r\n    const video = ref<HTMLVideoElement>()\r\n    const volumeRef = ref<InstanceType<typeof VideoVolume>>()\r\n\r\n    const placeId = computed(() => screen.value?.placeId)\r\n    const full = computed<false | FullScreenType>(() => screen.value?.full ?? false)\r\n    const videoRef = computed<HTMLVideoElement | undefined>(() => video.value || props.video)\r\n\r\n    const shortcutRecord = reactive({} as Record<string, () => void>)\r\n    const shortcuts = computed(() => ({ ...videoDefaultShortcuts, ...props.shortcuts }))\r\n\r\n    function addShortcut(key: string, cb: () => void) {\r\n      if (shortcutRecord[key]) {\r\n        console.warn(`[vexip-ui:Video] duplicate shortcut key '${key}' and it will be ignored`)\r\n\r\n        return noop\r\n      }\r\n\r\n      shortcutRecord[key] = cb\r\n\r\n      return () => {\r\n        delete shortcutRecord[key]\r\n      }\r\n    }\r\n\r\n    useModifier({\r\n      target: wrapper,\r\n      passive: false,\r\n      onKeyDown: (event, modifier) => {\r\n        if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) return\r\n\r\n        decide(\r\n          [\r\n            [\r\n              () => modifier.up,\r\n              () => {\r\n                currentVolume.value = Math.min(1, currentVolume.value + 0.05)\r\n              },\r\n            ],\r\n            [\r\n              () => modifier.down,\r\n              () => (currentVolume.value = Math.max(0, currentVolume.value - 0.05)),\r\n            ],\r\n            [\r\n              () => modifier.right,\r\n              () => (currentTime.value = Math.min(duration.value, currentTime.value + 5)),\r\n            ],\r\n            [() => modifier.left, () => (currentTime.value = Math.max(0, currentTime.value - 5))],\r\n            [() => modifier[shortcuts.value.volume || 'M'], () => volumeRef.value?.toggleMute()],\r\n            ...Object.keys(shortcutRecord).map(key => {\r\n              return [() => modifier[key], shortcutRecord[key]] as [() => boolean, () => void]\r\n            }),\r\n          ],\r\n          { afterMatchAny: modifier.resetAll },\r\n        )\r\n      },\r\n    })\r\n\r\n    const className = computed(() => {\r\n      return [\r\n        nh.b(),\r\n        nh.bs('vars'),\r\n        {\r\n          [nh.bm('loading')]: props.loading,\r\n        },\r\n      ]\r\n    })\r\n    const playIcon = computed(() => (playing.value ? icons.value.pause : icons.value.play))\r\n    const stateIcon = computed(() => {\r\n      return playing.value ? icons.value.pauseState : icons.value.playState\r\n    })\r\n    const rateOptions = computed(() => {\r\n      const rates = props.playbackRates\r\n        .map(raw => {\r\n          const rate = typeof raw === 'number' ? { value: raw } : raw\r\n\r\n          rate.value = toNumber(rate.value)\r\n          rate.label =\r\n            rate.label || `${decimalLength(rate.value) ? rate.value : rate.value.toFixed(1)}x`\r\n\r\n          return rate\r\n        })\r\n        .filter(rate => rate.value > 0)\r\n        .sort((prev, next) => next.value - prev.value)\r\n\r\n      if (!rates.find(rate => rate.value === 1)) {\r\n        const index = rates.findIndex(rate => rate.value < 1)\r\n\r\n        rates.splice((index + rates.length) % rates.length, 0, { value: 1, label: '1.0x' })\r\n      }\r\n\r\n      return rates\r\n    })\r\n    const segments = computed(() => {\r\n      return props.segments\r\n        .map(segment => (typeof segment === 'number' ? { time: segment } : segment))\r\n        .filter(segment => segment.time >= 0 && segment.time <= duration.value)\r\n        .sort((prev, next) => prev.time - next.time)\r\n    })\r\n    const percent = computed(() => {\r\n      return duration.value ? (currentTime.value / duration.value) * 100 : 0\r\n    })\r\n    const srcFullList = computed(() => {\r\n      const src = props.src || (props.videoAttrs?.src as string) || ''\r\n\r\n      if (src && props.srcList && !props.srcList.includes(src)) {\r\n        return [src].concat(props.srcList)\r\n      }\r\n\r\n      return props.srcList || [src]\r\n    })\r\n    const srcIndex = computed(() => {\r\n      return srcFullList.value ? srcFullList.value.indexOf(currentSrc.value) : -1\r\n    })\r\n\r\n    const slotParams = shallowReadonly(\r\n      reactive({\r\n        playing,\r\n        currentTime,\r\n        currentVolume,\r\n        currentRate,\r\n        interacting,\r\n        flipped,\r\n        canPlay,\r\n        duration,\r\n        pip,\r\n        hasPlayed,\r\n        togglePlaying,\r\n        togglePip,\r\n        changeRate,\r\n        changeTime,\r\n        changeVolume,\r\n        toggleFull,\r\n      }),\r\n    )\r\n\r\n    watch(\r\n      () => props.src,\r\n      value => {\r\n        resetMetaState()\r\n        currentSrc.value = value\r\n      },\r\n      { flush: 'pre' },\r\n    )\r\n    watch(\r\n      () => props.time,\r\n      value => {\r\n        changeTime(value, false)\r\n      },\r\n    )\r\n    watch(\r\n      () => props.volume,\r\n      value => {\r\n        changeVolume(value, false)\r\n      },\r\n    )\r\n    watch(\r\n      () => props.playbackRate,\r\n      value => {\r\n        changeRate(value, false)\r\n      },\r\n    )\r\n    watch(playing, value => {\r\n      if (value) {\r\n        requestAnimationFrame(() => {\r\n          stateShow.value = false\r\n        })\r\n      } else {\r\n        stateShow.value = true\r\n      }\r\n    })\r\n    watch(canPlay, value => {\r\n      if (!value) {\r\n        playing.value = false\r\n      }\r\n    })\r\n    watch(stateShow, value => {\r\n      if (value) {\r\n        stateHidden.value = false\r\n      }\r\n    })\r\n\r\n    onMounted(() => {\r\n      nextTick(() => {\r\n        if (isClient && !videoRef.value && screen.value?.wrapper) {\r\n          video.value = (screen.value.wrapper as HTMLElement).querySelector('video') ?? undefined\r\n        }\r\n\r\n        if (videoRef.value && currentTime.value > 0) {\r\n          videoRef.value.currentTime = currentTime.value\r\n        }\r\n      })\r\n    })\r\n\r\n    provide(VIDEO_STATE, reactive({ placeId, iconScale, addShortcut }))\r\n\r\n    useListener(videoRef, 'canplay', () => {\r\n      canPlay.value = true\r\n      duration.value = videoRef.value?.duration ?? 0\r\n    })\r\n    useListener(videoRef, 'timeupdate', () => {\r\n      currentTime.value = videoRef.value?.currentTime ?? 0\r\n\r\n      emit('update:time', currentTime.value)\r\n      emitEvent(props.onTimeChange, currentTime.value)\r\n    })\r\n    useListener(videoRef, 'ended', handleEnded)\r\n    // useListener(videoRef, 'loadeddata', () => {\r\n    //   loadedData.value = true\r\n    // })\r\n    useListener(videoRef, 'enterpictureinpicture', () => {\r\n      pip.value = true\r\n      emitEvent(props.onTogglePip, true)\r\n    })\r\n    useListener(videoRef, 'leavepictureinpicture', () => {\r\n      pip.value = false\r\n      emitEvent(props.onTogglePip, false)\r\n    })\r\n\r\n    expose({\r\n      currentSrc,\r\n      playing,\r\n      currentTime,\r\n      duration,\r\n      pip,\r\n      interacting,\r\n      stateHidden,\r\n      wrapper,\r\n      video,\r\n      resetMetaState,\r\n    })\r\n\r\n    function togglePlaying(value = !playing.value) {\r\n      if (!canPlay.value) {\r\n        playing.value = false\r\n\r\n        return\r\n      }\r\n\r\n      playing.value = value\r\n\r\n      if (playing.value) {\r\n        hasPlayed.value = true\r\n        videoRef.value?.play()\r\n      } else {\r\n        videoRef.value?.pause()\r\n      }\r\n\r\n      wrapper.value?.focus()\r\n      emitEvent(playing.value ? props.onPlay : props.onPause)\r\n    }\r\n\r\n    function handleEnded() {\r\n      playing.value = false\r\n\r\n      videoRef.value?.pause()\r\n      emitEvent(props.onEnded)\r\n    }\r\n\r\n    async function togglePip() {\r\n      if (!pipEnabled || !videoRef.value) return\r\n\r\n      if (pip.value) {\r\n        await document.exitPictureInPicture()\r\n      } else {\r\n        await videoRef.value.requestPictureInPicture()\r\n      }\r\n    }\r\n\r\n    function changeRate(rate: number, dispatch = true) {\r\n      currentRate.value = rate\r\n\r\n      if (videoRef.value) {\r\n        videoRef.value.playbackRate = rate\r\n      }\r\n\r\n      if (dispatch) {\r\n        emit('update:playback-rate', rate)\r\n        emitEvent(props.onRateChange, rate)\r\n      }\r\n    }\r\n\r\n    function changeTime(time: number, dispatch = true) {\r\n      currentTime.value = time\r\n\r\n      if (videoRef.value && time !== videoRef.value.currentTime) {\r\n        videoRef.value.currentTime = time\r\n        time = videoRef.value.currentTime\r\n      }\r\n\r\n      if (dispatch) {\r\n        emit('update:time', time)\r\n        emitEvent(props.onTimeChange, time)\r\n      }\r\n    }\r\n\r\n    function changeVolume(volume: number, dispatch = true) {\r\n      currentVolume.value = volume\r\n\r\n      if (videoRef.value) {\r\n        videoRef.value.volume = volume\r\n      }\r\n\r\n      if (dispatch) {\r\n        emit('update:volume', volume)\r\n        emitEvent(props.onVolumeChange, volume)\r\n      }\r\n    }\r\n\r\n    function toggleFlip(value = !flipped.value, dispatch = true) {\r\n      flipped.value = value\r\n\r\n      if (dispatch) {\r\n        emitEvent(props.onToggleFlip, flipped.value)\r\n      }\r\n    }\r\n\r\n    function onFullChange(full: false | FullScreenType) {\r\n      nextTick(() => {\r\n        wrapper.value?.focus()\r\n        emitEvent(props.onToggleFull, full)\r\n      })\r\n    }\r\n\r\n    function resetMetaState() {\r\n      playing.value = false\r\n      currentTime.value = 0\r\n      canPlay.value = false\r\n      duration.value = 0\r\n      // loadedData.value = false\r\n      pip.value = false\r\n      hasPlayed.value = false\r\n\r\n      videoRef.value?.pause()\r\n    }\r\n\r\n    function handleInteract() {\r\n      clearTimeout(timer.interact)\r\n\r\n      interacting.value = true\r\n      timer.interact = setTimeout(() => {\r\n        interacting.value = false\r\n      }, 3000)\r\n    }\r\n\r\n    function handlePointerLeave() {\r\n      clearTimeout(timer.interact)\r\n      timer.interact = setTimeout(() => {\r\n        interacting.value = false\r\n      }, 500)\r\n    }\r\n\r\n    function adjustSrc(amount: number) {\r\n      const list = srcFullList.value\r\n\r\n      if (props.srcList) {\r\n        currentSrc.value = list[(srcIndex.value + amount + list.length) % list.length]\r\n        emit('update:src', currentSrc.value)\r\n      }\r\n    }\r\n\r\n    function playPrev() {\r\n      adjustSrc(-1)\r\n      emitEvent(props.onPrev)\r\n    }\r\n\r\n    function playNext() {\r\n      adjustSrc(1)\r\n      emitEvent(props.onNext)\r\n    }\r\n\r\n    function toggleFull(type: FullScreenType) {\r\n      screen.value?.toggle(type)\r\n    }\r\n\r\n    function handleRefresh() {\r\n      emitEvent(props.onRefresh)\r\n    }\r\n\r\n    function renderPlayPrev() {\r\n      return (\r\n        <VideoControl\r\n          class={nh.be('play-prev')}\r\n          label={locale.value.playPrev}\r\n          shortcut={shortcuts.value['play-prev']}\r\n          disabled={!!props.srcList && !srcIndex.value}\r\n          onClick={playPrev}\r\n        >\r\n          <Icon\r\n            {...icons.value.playPrev}\r\n            scale={+(icons.value.playPrev.scale || 1) * iconScale.value}\r\n          ></Icon>\r\n        </VideoControl>\r\n      )\r\n    }\r\n\r\n    function renderPlay() {\r\n      return (\r\n        <VideoControl\r\n          class={nh.be('play')}\r\n          label={playing.value ? locale.value.pause : locale.value.play}\r\n          shortcut={shortcuts.value.play}\r\n          disabled={!canPlay.value}\r\n          onClick={togglePlaying}\r\n        >\r\n          <Icon\r\n            {...playIcon.value}\r\n            scale={+(playIcon.value.scale || 1) * iconScale.value * 1.16}\r\n          ></Icon>\r\n        </VideoControl>\r\n      )\r\n    }\r\n\r\n    function renderPlayNext() {\r\n      return (\r\n        <VideoControl\r\n          class={nh.be('play-next')}\r\n          label={locale.value.playNext}\r\n          shortcut={shortcuts.value['play-next']}\r\n          disabled={!!props.srcList && srcIndex.value === srcFullList.value.length - 1}\r\n          onClick={playNext}\r\n        >\r\n          <Icon\r\n            {...icons.value.playNext}\r\n            scale={+(icons.value.playNext.scale || 1) * iconScale.value}\r\n          ></Icon>\r\n        </VideoControl>\r\n      )\r\n    }\r\n\r\n    function renderRefresh() {\r\n      return (\r\n        <VideoControl\r\n          class={nh.be('play-refresh')}\r\n          label={locale.value.refresh}\r\n          shortcut={shortcuts.value.refresh}\r\n          onClick={handleRefresh}\r\n        >\r\n          <Icon\r\n            {...icons.value.refresh}\r\n            scale={+(icons.value.refresh.scale || 1) * iconScale.value}\r\n          ></Icon>\r\n        </VideoControl>\r\n      )\r\n    }\r\n\r\n    function renderTimer() {\r\n      return (\r\n        <VideoTimer\r\n          time={currentTime.value}\r\n          duration={duration.value}\r\n          disabled={!canPlay.value}\r\n          onChange={changeTime}\r\n        ></VideoTimer>\r\n      )\r\n    }\r\n\r\n    function renderPlaybackRate() {\r\n      return (\r\n        <VideoControl\r\n          class={nh.be('playback-rate')}\r\n          type={'select'}\r\n          value={currentRate.value}\r\n          options={rateOptions.value}\r\n          onSelect={(rate: VideoPlaybackRate) => changeRate(rate.value)}\r\n        ></VideoControl>\r\n      )\r\n    }\r\n\r\n    function renderVolume() {\r\n      return (\r\n        <VideoVolume\r\n          ref={volumeRef}\r\n          volume={currentVolume.value}\r\n          onChange={changeVolume}\r\n        ></VideoVolume>\r\n      )\r\n    }\r\n\r\n    function renderFlip() {\r\n      return (\r\n        <VideoControl\r\n          class={nh.be('flip')}\r\n          label={locale.value.flip}\r\n          shortcut={shortcuts.value.flip}\r\n          onClick={toggleFlip}\r\n        >\r\n          <Icon\r\n            {...icons.value.flipX}\r\n            scale={+(icons.value.flipX.scale || 1) * iconScale.value}\r\n          ></Icon>\r\n        </VideoControl>\r\n      )\r\n    }\r\n\r\n    function renderPip() {\r\n      if (!pipEnabled || !video.value) return null\r\n\r\n      return (\r\n        <VideoControl\r\n          class={nh.be('pip')}\r\n          label={pip.value ? locale.value.exitPip : locale.value.requestPip}\r\n          shortcut={shortcuts.value.pip}\r\n          disabled={!canPlay.value}\r\n          onClick={togglePip}\r\n        >\r\n          <Icon {...icons.value.pip} scale={+(icons.value.pip.scale || 1) * iconScale.value}></Icon>\r\n        </VideoControl>\r\n      )\r\n    }\r\n\r\n    function renderFullWindow() {\r\n      return (\r\n        <VideoControl\r\n          class={nh.be('full-window')}\r\n          label={full.value === 'window' ? locale.value.fullWindowExit : locale.value.fullWindow}\r\n          shortcut={shortcuts.value['full-window']}\r\n          onClick={() => toggleFull('window')}\r\n        >\r\n          <Icon\r\n            {...icons.value.fullWindow}\r\n            scale={+(icons.value.fullWindow.scale || 1) * iconScale.value}\r\n          ></Icon>\r\n        </VideoControl>\r\n      )\r\n    }\r\n\r\n    function renderFullBrowser() {\r\n      return (\r\n        <VideoControl\r\n          class={nh.be('full-browser')}\r\n          label={full.value === 'browser' ? locale.value.fullScreenExit : locale.value.fullScreen}\r\n          shortcut={shortcuts.value['full-browser']}\r\n          onClick={() => toggleFull('browser')}\r\n        >\r\n          <Icon\r\n            {...icons.value.fullScreen}\r\n            scale={+(icons.value.fullScreen.scale || 1) * iconScale.value}\r\n          ></Icon>\r\n        </VideoControl>\r\n      )\r\n    }\r\n\r\n    function renderControl(name: VideoControlConfig) {\r\n      switch (name) {\r\n        case 'play-prev':\r\n          return renderPlayPrev()\r\n        case 'play':\r\n          return renderPlay()\r\n        case 'play-next':\r\n          return renderPlayNext()\r\n        case 'refresh':\r\n          return renderRefresh()\r\n        case 'timer':\r\n          return renderTimer()\r\n        case 'playback-rate':\r\n          return renderPlaybackRate()\r\n        case 'volume':\r\n          return renderVolume()\r\n        case 'flip':\r\n          return renderFlip()\r\n        case 'pip':\r\n          return renderPip()\r\n        case 'full-window':\r\n          return renderFullWindow()\r\n        case 'full-browser':\r\n          return renderFullBrowser()\r\n        default:\r\n          return createSlotRender(slots, [\r\n            `control-${name}`,\r\n            `control${toCapitalCase(name as string)}`,\r\n          ])?.(slotParams)\r\n      }\r\n    }\r\n\r\n    function renderControls() {\r\n      if (props.noControls) {\r\n        return (\r\n          <Progress\r\n            class={nh.be('progress-line')}\r\n            percentage={percent.value}\r\n            stroke-width={1}\r\n            info-type={'none'}\r\n          ></Progress>\r\n        )\r\n      }\r\n\r\n      return (\r\n        <div\r\n          class={{\r\n            [nh.be('controls')]: true,\r\n            [nh.bem('controls', 'collapsed')]: hasPlayed.value && !interacting.value,\r\n          }}\r\n        >\r\n          <section class={nh.be('controls-top')}>\r\n            <VideoProgress\r\n              time={currentTime.value}\r\n              duration={duration.value}\r\n              segments={segments.value}\r\n              onChange={changeTime}\r\n            ></VideoProgress>\r\n          </section>\r\n          <section class={nh.be('controls-bottom')}>\r\n            <div class={nh.be('controls-left')}>\r\n              {(props.controlLayout.left ?? videoDefaultControlLayout.left).map(renderControl)}\r\n            </div>\r\n            <div class={nh.be('controls-center')}>\r\n              {(props.controlLayout.center ?? videoDefaultControlLayout.center).map(renderControl)}\r\n            </div>\r\n            <div class={nh.be('controls-right')}>\r\n              {(props.controlLayout.right ?? videoDefaultControlLayout.right).map(renderControl)}\r\n            </div>\r\n          </section>\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderMain() {\r\n      return (\r\n        <div class={nh.be('main')}>\r\n          <div\r\n            class={[nh.be('player'), flipped.value && nh.bem('player', 'flipped')]}\r\n            onClick={() => togglePlaying()}\r\n          >\r\n            {renderSlot(slots, 'player', {}, () => [\r\n              <video\r\n                {...props.videoAttrs}\r\n                ref={video}\r\n                class={nh.be('video')}\r\n                src={currentSrc.value || props.videoAttrs?.src}\r\n              >\r\n                {renderSlot(slots, 'default')}\r\n              </video>,\r\n            ])}\r\n          </div>\r\n          {!hasPlayed.value && (props.poster || slots.poster || props.slots.poster) && (\r\n            <div class={nh.be('poster')}>\r\n              {renderSlot(slots, 'poster', undefined, () => [\r\n                <Renderer renderer={props.slots.poster}>\r\n                  <img src={props.poster} />\r\n                </Renderer>,\r\n              ])}\r\n            </div>\r\n          )}\r\n          <Transition name={nh.bs('state-effect')} onAfterLeave={() => (stateHidden.value = true)}>\r\n            {canPlay.value && stateShow.value && (\r\n              <div class={nh.be('state')}>\r\n                {renderSlot(slots, 'state', { active: stateShow.value }, () => [\r\n                  <Icon {...stateIcon.value} scale={+(stateIcon.value.scale || 1) * 5}></Icon>,\r\n                ])}\r\n              </div>\r\n            )}\r\n          </Transition>\r\n          <Transition name={nh.ns('fade')}>\r\n            {((!canPlay.value && !stateShow.value) || (props.loading && stateHidden.value)) && (\r\n              <div class={nh.be('loading')}>\r\n                {renderSlot(slots, 'loading', {}, () => [\r\n                  <Icon\r\n                    {...icons.value.loading}\r\n                    icon={props.loadingIcon || icons.value.loading.icon}\r\n                    label={'loading'}\r\n                    effect={props.loadingEffect || icons.value.loading.effect}\r\n                    scale={+(stateIcon.value.scale || 1) * 5}\r\n                  ></Icon>,\r\n                ])}\r\n              </div>\r\n            )}\r\n          </Transition>\r\n          {renderControls()}\r\n          {renderSlot(slots, 'extra')}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      return (\r\n        <FullScreen\r\n          ref={screen}\r\n          class={className.value}\r\n          tabindex={'-1'}\r\n          onToggle={onFullChange}\r\n          onPointermove={handleInteract}\r\n          onPointerleave={handlePointerLeave}\r\n        >\r\n          {{ default: renderMain }}\r\n        </FullScreen>\r\n      )\r\n    }\r\n  },\r\n})\r\n","import { booleanProp, buildProps, omitProps } from '@vexip-ui/config'\r\n\r\nimport type { ExtractPropTypes, PropType } from 'vue'\r\nimport type { ConfigurableProps } from '@vexip-ui/config'\r\nimport type { TitleLevel, TypographyType } from './symbol'\r\n\r\nexport const textProps = buildProps({\r\n  type: String as PropType<TypographyType>,\r\n  tag: String,\r\n  delete: booleanProp,\r\n  strong: booleanProp,\r\n  italic: booleanProp,\r\n  underline: booleanProp,\r\n  code: booleanProp,\r\n  mark: booleanProp,\r\n  disabled: booleanProp,\r\n  keyboard: booleanProp,\r\n  thin: booleanProp,\r\n  reversed: booleanProp,\r\n})\r\n\r\nexport type TextProps = ExtractPropTypes<typeof textProps>\r\nexport type TextCProps = ConfigurableProps<TextProps>\r\n\r\nexport const pProps = omitProps(textProps, ['tag', 'code'])\r\n\r\nexport type PProps = ExtractPropTypes<typeof pProps>\r\nexport type PCProps = ConfigurableProps<PProps>\r\n\r\nexport const strongProps = omitProps(textProps, ['tag', 'strong', 'code'])\r\n\r\nexport type StrongProps = ExtractPropTypes<typeof strongProps>\r\nexport type StrongCProps = ConfigurableProps<StrongProps>\r\n\r\nexport const titleProps = buildProps({\r\n  type: String as PropType<TypographyType>,\r\n  level: Number as PropType<TitleLevel>,\r\n  top: booleanProp,\r\n  marker: booleanProp,\r\n  aligned: booleanProp,\r\n  thin: booleanProp,\r\n  markerType: String,\r\n})\r\n\r\nexport type TitleProps = ExtractPropTypes<typeof titleProps>\r\nexport type TitleCProps = ConfigurableProps<TitleProps>\r\n\r\nexport const hProps = omitProps(titleProps, ['level'])\r\n\r\nexport const h1Props = hProps\r\nexport const h2Props = hProps\r\nexport const h3Props = hProps\r\nexport const h4Props = hProps\r\nexport const h5Props = hProps\r\nexport const h6Props = hProps\r\n\r\nexport type HProps = ExtractPropTypes<typeof hProps>\r\nexport type HCProps = ConfigurableProps<HProps>\r\n\r\nexport type H1Props = HProps\r\nexport type H2Props = HProps\r\nexport type H3Props = HProps\r\nexport type H4Props = HProps\r\nexport type H5Props = HProps\r\nexport type H6Props = HProps\r\n\r\nexport type H1CProps = HCProps\r\nexport type H2CProps = HCProps\r\nexport type H3CProps = HCProps\r\nexport type H4CProps = HCProps\r\nexport type H5CProps = HCProps\r\nexport type H6CProps = HCProps\r\n\r\nexport const blockquoteProps = buildProps({\r\n  type: String as PropType<TypographyType>,\r\n})\r\n\r\nexport type BlockquoteProps = ExtractPropTypes<typeof blockquoteProps>\r\nexport type BlockquoteCProps = ConfigurableProps<BlockquoteProps>\r\n\r\nexport const olProps = buildProps({\r\n  type: String as PropType<'a' | 'A' | 'i' | 'I' | '1'>,\r\n})\r\n\r\nexport type OLProps = ExtractPropTypes<typeof olProps>\r\nexport type OLCProps = ConfigurableProps<OLProps>\r\n\r\nexport const ulProps = buildProps({\r\n  listStyle: String,\r\n})\r\n\r\nexport type ULProps = ExtractPropTypes<typeof ulProps>\r\nexport type ULCProps = ConfigurableProps<ULProps>\r\n","import { computed, defineComponent } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { boundRange, isColor } from '@vexip-ui/utils'\r\nimport { titleProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'Title',\r\n  props: titleProps,\r\n  emits: [],\r\n  setup(_props, { slots }) {\r\n    const props = useProps('title', _props, {\r\n      type: 'default',\r\n      level: 5,\r\n      top: false,\r\n      marker: false,\r\n      aligned: false,\r\n      thin: false,\r\n      markerType: null,\r\n    })\r\n\r\n    const nh = useNameHelper('title')\r\n\r\n    const coloredMarker = computed(() => isColor(props.markerType))\r\n    const markerType = computed(() => props.markerType || props.type)\r\n    const className = computed(() => {\r\n      return {\r\n        [nh.b()]: true,\r\n        [nh.bs('vars')]: true,\r\n        [nh.bm('inherit')]: props.inherit,\r\n        [nh.bm(props.type)]: props.type !== 'default',\r\n        [nh.bm('top')]: props.top,\r\n        [nh.bm('marker')]: props.marker,\r\n        [nh.bm('aligned')]: props.aligned,\r\n        [nh.bm('thin')]: props.thin,\r\n        [nh.bm(`marker-${markerType.value}`)]:\r\n          !coloredMarker.value && markerType.value !== 'default',\r\n      }\r\n    })\r\n    const level = computed(() => boundRange(Math.round(props.level), 1, 6) || 5)\r\n    const style = computed(() => {\r\n      return coloredMarker.value\r\n        ? {\r\n          [nh.cv('marker-color')]: props.markerType,\r\n        }\r\n        : null\r\n    })\r\n\r\n    return () => {\r\n      const CustomTag = `h${level.value}` as any\r\n\r\n      return (\r\n        <CustomTag class={className.value} style={style.value}>\r\n          {slots.default?.()}\r\n        </CustomTag>\r\n      )\r\n    }\r\n  },\r\n})\r\n","import { computed, defineComponent, renderSlot } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { textProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'Text',\r\n  props: textProps,\r\n  emits: [],\r\n  setup(_props, { slots }) {\r\n    const props = useProps('text', _props, {\r\n      type: 'default',\r\n      tag: 'span',\r\n      delete: false,\r\n      strong: false,\r\n      italic: false,\r\n      underline: false,\r\n      code: false,\r\n      mark: false,\r\n      disabled: false,\r\n      keyboard: false,\r\n      thin: false,\r\n      reversed: false,\r\n    })\r\n\r\n    const nh = useNameHelper('text')\r\n\r\n    const className = computed(() => {\r\n      return {\r\n        [nh.b()]: true,\r\n        [nh.bs('vars')]: true,\r\n        [nh.bm('inherit')]: props.inherit,\r\n        [nh.bm(props.type)]: props.type !== 'default',\r\n        [nh.bm('delete')]: props.delete,\r\n        [nh.bm('strong')]: props.strong,\r\n        [nh.bm('italic')]: props.italic,\r\n        [nh.bm('underline')]: props.underline,\r\n        [nh.bm('code')]: props.code,\r\n        [nh.bm('mark')]: props.mark,\r\n        [nh.bm('disabled')]: props.disabled,\r\n        [nh.bm('keyboard')]: props.keyboard,\r\n        [nh.bm('thin')]: props.thin,\r\n        [nh.bm('reversed')]: props.reversed,\r\n      }\r\n    })\r\n\r\n    return () => {\r\n      const CustomTag = props.tag || ('span' as any)\r\n      const children = renderSlot(slots, 'default')\r\n\r\n      return props.code ? (\r\n        <code class={className.value}>{props.delete ? <del>{children}</del> : children}</code>\r\n      ) : props.keyboard ? (\r\n        <kbd class={className.value}>{props.delete ? <del>{children}</del> : children}</kbd>\r\n      ) : props.delete ? (\r\n        <del class={className.value}>{children}</del>\r\n      ) : (\r\n        <CustomTag class={className.value}>{children}</CustomTag>\r\n      )\r\n    }\r\n  },\r\n})\r\n","import { computed, defineComponent } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { blockquoteProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'Blockquote',\r\n  props: blockquoteProps,\r\n  emits: [],\r\n  setup(_props, { slots }) {\r\n    const props = useProps('blockquote', _props, {\r\n      type: 'default',\r\n    })\r\n\r\n    const nh = useNameHelper('blockquote')\r\n\r\n    const className = computed(() => {\r\n      return {\r\n        [nh.b()]: true,\r\n        [nh.bs('vars')]: true,\r\n        [nh.bm('inherit')]: props.inherit,\r\n        [nh.bm(props.type)]: props.type !== 'default',\r\n      }\r\n    })\r\n\r\n    return () => <blockquote class={className.value}>{slots.default?.()}</blockquote>\r\n  },\r\n})\r\n","import { defineComponent } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { olProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'OL',\r\n  props: olProps,\r\n  emits: [],\r\n  setup(_props, { slots }) {\r\n    const props = useProps('ol', _props, {\r\n      type: '1',\r\n    })\r\n\r\n    const nh = useNameHelper('ol')\r\n\r\n    return () => (\r\n      <ol class={[nh.b(), props.inherit && nh.bm('inherit')]} type={props.type}>\r\n        {slots.default?.()}\r\n      </ol>\r\n    )\r\n  },\r\n})\r\n","import { computed, defineComponent } from 'vue'\r\n\r\nimport { useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { ulProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'UL',\r\n  props: ulProps,\r\n  emits: [],\r\n  setup(_props, { slots }) {\r\n    const props = useProps('ul', _props, {\r\n      listStyle: 'circle',\r\n    })\r\n\r\n    const nh = useNameHelper('ul')\r\n\r\n    const className = computed(() => {\r\n      return {\r\n        [nh.b()]: true,\r\n        [nh.bm('inherit')]: props.inherit,\r\n        [nh.bm('no-marker')]: props.listStyle === 'none',\r\n      }\r\n    })\r\n\r\n    return () => (\r\n      <ul class={className.value} style={{ listStyleType: props.listStyle }}>\r\n        {slots.default?.()}\r\n      </ul>\r\n    )\r\n  },\r\n})\r\n","import { defineComponent } from 'vue'\r\n\r\nimport { useProps } from '@vexip-ui/config'\r\nimport Title from './title'\r\nimport { hProps } from './props'\r\n\r\nimport type { TitleLevel } from './symbol'\r\n\r\nfunction createHComponent(level: TitleLevel) {\r\n  return defineComponent({\r\n    name: `H${level}`,\r\n    props: hProps,\r\n    emits: [],\r\n    setup(_props, { slots }) {\r\n      const props = useProps(`h${level}`, _props, {\r\n        type: 'default',\r\n        top: false,\r\n        marker: false,\r\n        aligned: false,\r\n        thin: false,\r\n      })\r\n\r\n      return () => (\r\n        <Title {...props} level={level}>\r\n          {slots.default?.()}\r\n        </Title>\r\n      )\r\n    },\r\n  })\r\n}\r\n\r\nexport const H1 = createHComponent(1)\r\nexport const H2 = createHComponent(2)\r\nexport const H3 = createHComponent(3)\r\nexport const H4 = createHComponent(4)\r\nexport const H5 = createHComponent(5)\r\nexport const H6 = createHComponent(6)\r\n","import { defineComponent } from 'vue'\r\n\r\nimport { useProps } from '@vexip-ui/config'\r\nimport Text from './text'\r\nimport { pProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'P',\r\n  props: pProps,\r\n  emits: [],\r\n  setup(_props, { slots }) {\r\n    const props = useProps('p', _props, {\r\n      type: 'default',\r\n      delete: false,\r\n      strong: false,\r\n      italic: false,\r\n      underline: false,\r\n      mark: false,\r\n      disabled: false,\r\n      keyboard: false,\r\n      thin: false,\r\n      reversed: false,\r\n    })\r\n\r\n    return () => (\r\n      <Text {...props} tag={'p'}>\r\n        {slots.default?.()}\r\n      </Text>\r\n    )\r\n  },\r\n})\r\n","import { defineComponent } from 'vue'\r\n\r\nimport { useProps } from '@vexip-ui/config'\r\nimport Text from './text'\r\nimport { strongProps } from './props'\r\n\r\nexport default defineComponent({\r\n  name: 'Strong',\r\n  props: strongProps,\r\n  emits: [],\r\n  setup(_props, { slots }) {\r\n    const props = useProps('strong', _props, {\r\n      type: 'default',\r\n      delete: false,\r\n      italic: false,\r\n      underline: false,\r\n      mark: false,\r\n      disabled: false,\r\n      keyboard: false,\r\n      thin: false,\r\n      reversed: false,\r\n    })\r\n\r\n    return () => (\r\n      <Text {...props} tag={'strong'} strong>\r\n        {slots.default?.()}\r\n      </Text>\r\n    )\r\n  },\r\n})\r\n","import { computed, unref } from 'vue'\r\n\r\nimport {\r\n  configHoverDelay,\r\n  configIcons,\r\n  configLocale,\r\n  configNamespace,\r\n  configProps,\r\n  configZIndex,\r\n} from '@vexip-ui/config'\r\nimport { isEmpty, toCapitalCase } from '@vexip-ui/utils'\r\n\r\nimport type { App, MaybeRef } from 'vue'\r\nimport type { IconsOptions, LocaleConfig, LocaleOptions } from '@vexip-ui/config'\r\nimport type { PropsOptions } from './props'\r\n\r\nexport interface InstallOptions {\r\n  prefix?: string,\r\n  namespace?: MaybeRef<string>,\r\n  props?: MaybeRef<PropsOptions>,\r\n  locale?: MaybeRef<LocaleOptions>,\r\n  zIndex?: MaybeRef<number>,\r\n  icons?: MaybeRef<IconsOptions>,\r\n  hoverDelay?: MaybeRef<number>,\r\n}\r\n\r\nexport function buildInstall(components: any[] = [], defaultLocale?: LocaleConfig) {\r\n  return function install(app: App, options: InstallOptions = {}) {\r\n    const {\r\n      prefix = '',\r\n      namespace = '',\r\n      props = {},\r\n      locale = defaultLocale,\r\n      zIndex,\r\n      icons = {},\r\n      hoverDelay = 100,\r\n    } = options\r\n\r\n    const withDefaultLocale = computed(() => {\r\n      return { ...defaultLocale, ...unref(locale) }\r\n    })\r\n\r\n    configNamespace(namespace, app)\r\n    configProps(props, app)\r\n    configLocale(withDefaultLocale, app)\r\n    configIcons(icons, app)\r\n    configHoverDelay(hoverDelay, app)\r\n\r\n    if (typeof unref(zIndex) === 'number') {\r\n      configZIndex(zIndex!, app)\r\n    }\r\n\r\n    const normalizedPrefix = toCapitalCase(prefix || '')\r\n\r\n    components.forEach(component => {\r\n      if (typeof component === 'function' || typeof component.install === 'function') {\r\n        app.use(component)\r\n      } else {\r\n        app.component(`${normalizedPrefix}${component.name}`, component)\r\n      }\r\n    })\r\n  }\r\n}\r\n\r\n/**\r\n * Provide a props config for under components.\r\n *\r\n * @param props props config\r\n * @param app the app of Vue, will use app.provide if specify\r\n */\r\nfunction proxyConfigProps(props: MaybeRef<PropsOptions>, app?: App) {\r\n  !isEmpty(props) && configProps(props, app)\r\n}\r\n\r\n/**\r\n * Provide supported config for under components.\r\n *\r\n * @param config supported config\r\n * @param app the app of Vue, will use app.provide if specify\r\n */\r\nexport function provideConfig(\r\n  config: Omit<InstallOptions, 'prefix' | 'namespace'> = {},\r\n  app?: App,\r\n) {\r\n  const { props = {}, locale = {}, zIndex, icons = {} } = config\r\n\r\n  proxyConfigProps(props, app)\r\n  !isEmpty(locale) && configLocale(locale, app)\r\n  !isEmpty(icons) && configIcons(icons, app)\r\n\r\n  if (typeof unref(zIndex) === 'number') {\r\n    configZIndex(zIndex!, app)\r\n  }\r\n}\r\n\r\nexport { proxyConfigProps as configProps, configLocale, configZIndex, configIcons }\r\n","export const version = __VERSION__\r\n","import { installDirectives } from '@/directives'\n\nimport { Affix } from './affix'\nimport { Alert } from './alert'\nimport { Anchor } from './anchor'\nimport { AnchorLink } from './anchor-link'\nimport { AutoComplete } from './auto-complete'\nimport { Avatar } from './avatar'\nimport { AvatarGroup } from './avatar-group'\nimport { Badge } from './badge'\nimport { Breadcrumb } from './breadcrumb'\nimport { BreadcrumbItem } from './breadcrumb-item'\nimport { Bubble } from './bubble'\nimport { Button } from './button'\nimport { ButtonGroup } from './button-group'\nimport { Calendar } from './calendar'\nimport { CalendarPanel } from './calendar-panel'\nimport { Captcha } from './captcha'\nimport { CaptchaSlider } from './captcha-slider'\nimport { Card } from './card'\nimport { Carousel } from './carousel'\nimport { CarouselItem } from './carousel-item'\nimport { Cascader } from './cascader'\nimport { Cell } from './cell'\nimport { Checkbox } from './checkbox'\nimport { CheckboxGroup } from './checkbox-group'\nimport { Collapse } from './collapse'\nimport { CollapsePanel } from './collapse-panel'\nimport { CollapseTransition } from './collapse-transition'\nimport { ColorPicker } from './color-picker'\nimport { Column } from './column'\nimport { ConfigProvider } from './config-provider'\nimport { Confirm } from './confirm'\nimport { Contextmenu } from './contextmenu'\nimport { DatePicker } from './date-picker'\nimport { Divider } from './divider'\nimport { Drawer } from './drawer'\nimport { Dropdown } from './dropdown'\nimport { DropdownItem } from './dropdown-item'\nimport { DropdownList } from './dropdown-list'\nimport { Ellipsis } from './ellipsis'\nimport { Form } from './form'\nimport { FormItem } from './form-item'\nimport { FormReset } from './form-reset'\nimport { FormSubmit } from './form-submit'\nimport { FullScreen } from './full-screen'\nimport { Grid } from './grid'\nimport { Highlight } from './highlight'\nimport { Icon } from './icon'\nimport { Image } from './image'\nimport { ImageGroup } from './image-group'\nimport { ImageViewer } from './image-viewer'\nimport { Input } from './input'\nimport { Layout } from './layout'\nimport { LayoutAside } from './layout-aside'\nimport { LayoutFooter } from './layout-footer'\nimport { LayoutHeader } from './layout-header'\nimport { LayoutMain } from './layout-main'\nimport { Linker } from './linker'\nimport { Loading } from './loading'\nimport { Masker } from './masker'\nimport { Menu } from './menu'\nimport { MenuGroup } from './menu-group'\nimport { MenuItem } from './menu-item'\nimport { Message } from './message'\nimport { Modal } from './modal'\nimport { NativeScroll } from './native-scroll'\nimport { Notice } from './notice'\nimport { NumberInput } from './number-input'\nimport { Option } from './option'\nimport { OptionGroup } from './option-group'\nimport { Overflow } from './overflow'\nimport { Pagination } from './pagination'\nimport { Popper } from './popper'\nimport { Popup } from './popup'\nimport { Portal } from './portal'\nimport { Progress } from './progress'\nimport { Radio } from './radio'\nimport { RadioGroup } from './radio-group'\nimport { Renderer } from './renderer'\nimport { ResizeObserver } from './resize-observer'\nimport { Result } from './result'\nimport { Row } from './row'\nimport { Scroll } from './scroll'\nimport { Scrollbar } from './scrollbar'\nimport { Select } from './select'\nimport { Skeleton } from './skeleton'\nimport { SkeletonGroup } from './skeleton-group'\nimport { Slider } from './slider'\nimport { Space } from './space'\nimport { Spin } from './spin'\nimport { Split } from './split'\nimport { Switch } from './switch'\nimport { TabNav } from './tab-nav'\nimport { TabNavItem } from './tab-nav-item'\nimport { TabPanel } from './tab-panel'\nimport { Table } from './table'\nimport { TableColumn } from './table-column'\nimport { TableColumnGroup } from './table-column-group'\nimport { TableSummary } from './table-summary'\nimport { Tabs } from './tabs'\nimport { Tag } from './tag'\nimport { Textarea } from './textarea'\nimport { TimeAgo } from './time-ago'\nimport { TimePicker } from './time-picker'\nimport { Timeline } from './timeline'\nimport { TimelineItem } from './timeline-item'\nimport { Toast } from './toast'\nimport { Tooltip } from './tooltip'\nimport { Tour } from './tour'\nimport { TourStep } from './tour-step'\nimport { Transfer } from './transfer'\nimport { Tree } from './tree'\nimport { Upload } from './upload'\nimport { UploadFile } from './upload-file'\nimport { UploadList } from './upload-list'\nimport { Video } from './video'\nimport { Viewer } from './viewer'\nimport { VirtualList } from './virtual-list'\nimport { Wheel } from './wheel'\n\nimport { Blockquote, H1, H2, H3, H4, H5, H6, OL, P, Strong, Text, Title, UL } from './typography'\n\nimport { buildInstall } from './create'\n\nexport { version } from './version'\nexport * from './create'\n\nexport type { PropsOptions } from './props'\n\nconst components = [\n  Affix,\n  Alert,\n  Anchor,\n  AnchorLink,\n  AutoComplete,\n  Avatar,\n  AvatarGroup,\n  Badge,\n  Breadcrumb,\n  BreadcrumbItem,\n  Bubble,\n  Button,\n  ButtonGroup,\n  Calendar,\n  CalendarPanel,\n  Captcha,\n  CaptchaSlider,\n  Card,\n  Carousel,\n  CarouselItem,\n  Cascader,\n  Cell,\n  Checkbox,\n  CheckboxGroup,\n  Collapse,\n  CollapsePanel,\n  CollapseTransition,\n  ColorPicker,\n  Column,\n  ConfigProvider,\n  DatePicker,\n  Divider,\n  Drawer,\n  Dropdown,\n  DropdownItem,\n  DropdownList,\n  Ellipsis,\n  Form,\n  FormItem,\n  FormReset,\n  FormSubmit,\n  FullScreen,\n  Grid,\n  Highlight,\n  Icon,\n  Image,\n  ImageGroup,\n  ImageViewer,\n  Input,\n  Layout,\n  LayoutAside,\n  LayoutFooter,\n  LayoutHeader,\n  LayoutMain,\n  Linker,\n  Masker,\n  Menu,\n  MenuGroup,\n  MenuItem,\n  Modal,\n  NativeScroll,\n  NumberInput,\n  Option,\n  OptionGroup,\n  Overflow,\n  Pagination,\n  Popper,\n  Popup,\n  Portal,\n  Progress,\n  Radio,\n  RadioGroup,\n  Renderer,\n  ResizeObserver,\n  Result,\n  Row,\n  Scroll,\n  Scrollbar,\n  Select,\n  Skeleton,\n  SkeletonGroup,\n  Slider,\n  Space,\n  Spin,\n  Split,\n  Switch,\n  TabNav,\n  TabNavItem,\n  TabPanel,\n  Table,\n  TableColumn,\n  TableColumnGroup,\n  TableSummary,\n  Tabs,\n  Tag,\n  Textarea,\n  TimeAgo,\n  TimePicker,\n  Timeline,\n  TimelineItem,\n  Tooltip,\n  Tour,\n  TourStep,\n  Transfer,\n  Tree,\n  Upload,\n  UploadFile,\n  UploadList,\n  Video,\n  Viewer,\n  VirtualList,\n  Wheel,\n  // plugins\n  Confirm,\n  Contextmenu,\n  Loading,\n  Message,\n  Notice,\n  Toast,\n  // typography\n  Title,\n  Text,\n  Blockquote,\n  OL,\n  UL,\n  H1,\n  H2,\n  H3,\n  H4,\n  H5,\n  H6,\n  P,\n  Strong,\n  // directives\n  installDirectives,\n]\n\nexport const install = buildInstall(components)\n\nexport * from './affix'\nexport * from './alert'\nexport * from './anchor'\nexport * from './anchor-link'\nexport * from './auto-complete'\nexport * from './avatar'\nexport * from './avatar-group'\nexport * from './badge'\nexport * from './breadcrumb'\nexport * from './breadcrumb-item'\nexport * from './bubble'\nexport * from './button'\nexport * from './button-group'\nexport * from './calendar'\nexport * from './calendar-panel'\nexport * from './captcha'\nexport * from './captcha-slider'\nexport * from './card'\nexport * from './carousel'\nexport * from './carousel-item'\nexport * from './cascader'\nexport * from './cell'\nexport * from './checkbox'\nexport * from './checkbox-group'\nexport * from './collapse'\nexport * from './collapse-panel'\nexport * from './collapse-transition'\nexport * from './color-picker'\nexport * from './column'\nexport * from './config-provider'\nexport * from './confirm'\nexport * from './contextmenu'\nexport * from './date-picker'\nexport * from './divider'\nexport * from './drawer'\nexport * from './dropdown'\nexport * from './dropdown-item'\nexport * from './dropdown-list'\nexport * from './ellipsis'\nexport * from './form'\nexport * from './form-item'\nexport * from './form-reset'\nexport * from './form-submit'\nexport * from './full-screen'\nexport * from './grid'\nexport * from './highlight'\nexport * from './icon'\nexport * from './image'\nexport * from './image-group'\nexport * from './image-viewer'\nexport * from './input'\nexport * from './layout'\nexport * from './layout-aside'\nexport * from './layout-footer'\nexport * from './layout-header'\nexport * from './layout-main'\nexport * from './linker'\nexport * from './loading'\nexport * from './masker'\nexport * from './menu'\nexport * from './menu-group'\nexport * from './menu-item'\nexport * from './message'\nexport * from './modal'\nexport * from './native-scroll'\nexport * from './notice'\nexport * from './number-input'\nexport * from './option'\nexport * from './option-group'\nexport * from './overflow'\nexport * from './pagination'\nexport * from './popper'\nexport * from './popup'\nexport * from './portal'\nexport * from './progress'\nexport * from './radio'\nexport * from './radio-group'\nexport * from './renderer'\nexport * from './resize-observer'\nexport * from './result'\nexport * from './row'\nexport * from './scroll'\nexport * from './scrollbar'\nexport * from './select'\nexport * from './skeleton'\nexport * from './skeleton-group'\nexport * from './slider'\nexport * from './space'\nexport * from './spin'\nexport * from './split'\nexport * from './switch'\nexport * from './tab-nav'\nexport * from './tab-nav-item'\nexport * from './tab-panel'\nexport * from './table'\nexport * from './table-column'\nexport * from './table-column-group'\nexport * from './table-summary'\nexport * from './tabs'\nexport * from './tag'\nexport * from './textarea'\nexport * from './time-ago'\nexport * from './time-picker'\nexport * from './timeline'\nexport * from './timeline-item'\nexport * from './toast'\nexport * from './tooltip'\nexport * from './tour'\nexport * from './tour-step'\nexport * from './transfer'\nexport * from './tree'\nexport * from './typography'\nexport * from './upload'\nexport * from './upload-file'\nexport * from './upload-list'\nexport * from './video'\nexport * from './viewer'\nexport * from './virtual-list'\nexport * from './wheel'\n\nexport * from '@/directives'\n"],"names":["isClient","toString","hasOwnProperty","is","value","type","has","key","isDefined","isNull","isNaN","isTrue","isFalse","isObject","isPromise","isFunction","isEmpty","isElement","ssr","isIterable","noop","toTrue","toFalse","range","size","start","step","array","i","getType","randomString","length","chars","maxPos","string","decide","conditions","options","condition","callback","INTEGER_REG","NUMBER_REG","NUMBER_UNIT","COLOR_REG_3","COLOR_REG_4","RGB_REG","RGBA_REG","HSL_REG","HSLA_REG","HSV_REG","HSVA_REG","HEX_REG_3","HEX_REG_4","HEX_REG_6","HEX_REG_8","NAMED_COLORS","COLOR_NAMES","isColor","parseStringColor","color","toRgbString","named","match","r","g","b","normalizeRgb","normalizeAlpha","h","s","l","normalizeHsl","toHslString","v","normalizeHsv","toHsvString","convertHexToDecimal","parseColorToRgba","originColor","rgb","a","hslToRgb","hsvToRgb","boundRange","isPercentage","parsePercentage","q","p","hueToRgb","hslToHsv","hsvToHsl","f","t","mod","rgbToHsv","max","min","d","rgbToHex","allow3Char","hex","repairDigits","isRepetitive","rgbaToHex","allow4Char","convertDecimalToHex","mixColor","color1","color2","weight","rgba1","rgba2","originalWeight","normalizedWeight","alphaDistance","weight1","weight2","adjustAlpha","alpha","rgba","randomPreferColor","prefer","withAlpha","randomHardColor","str","number","percent","globalCount","getGlobalCount","lowBit","num","createBITree","tree","add","index","delta","sum","get","boundIndex","target","left","right","middle","total","numberRE","isValidNumber","strict","toNumber","padStartZeros","doubleDigits","decimalLength","eSplit","len","toFixed","decimal","snum","pointPos","nums","targetPos","multipleFixed","multiple","leaveNumber","divideBy","limit","remainders","count","random","toPrecision","precision","multipleInt","dLength","createOperation","operation","numbers","result","times","number1","number2","int1","int2","base","plus","minus","SECOND_ON_MILLISECONDS","MINUTE_ON_SECONDS","MINUTE_ON_MILLISECONDS","HOUR_ON_MINUTES","HOUR_ON_SECONDS","HOUR_ON_MILLISECONDS","DAY_ON_HOURS","DAY_ON_MINUTES","DAY_ON_SECONDS","DAY_ON_MILLS","DAY_ON_MILLISECONDS","WEEK_ON_DAYS","WEEK_ON_HOURS","WEEK_ON_MINUTES","WEEK_ON_SECONDS","WEEK_ON_MILLS","formatters","date","year","month","day","hour","minute","second","quarter","formatRegExp","quotationRegExp","toDate","any","format","pattern","matches","substring","firstCharacter","formatter","getTime","addDays","amount","rangeDate","dateRange","startOfDay","endOfDay","startOfWeek","startOn","difference","isLeapYear","getLastDayOfMonth","lastDay","startOfMonth","differenceDays","differenceWeeks","weekStartOn","deepClone","obj","cloneObject","temp","loopList","referenceMap","setProps","mapProps","parent","prop","data","cloned","item","entry","clonedEntry","defaultMessage","returnTrue","destroyObject","object","message","throwDestroyed","name","USE_TOUCH","getMaxTouchPoints","CLICK_TYPE","dispatchEvent","el","payload","Event","bubbles","cancelable","event","TABABLE_SELECTOR","ensureElement","queryAll","selector","root","contains","tel","isHidden","rect","isVisible","isDisabled","queryTabables","includeDisabled","isDis","getXPadding","computedStyle","getYBorder","getRangeWidth","rangeWidth","xPadding","toCssSize","toAttrValue","createEventEmitter","handlerMap","handler","handlers","logOnce","cache","logFn","warnCache","warnOnce","raf","cb","throttle","method","interval","invoke","args","debounceMinor","lastCall","timer","current","elapsed","debounce","delay","called","lastArgs","promise","frameCallbacks","frameArgsMap","flushFrameCallbacks","fn","nextFrameOnce","flexGapSupported","supportFlexGap","flex","imgLoadingSupported","supportImgLoading","ensureArray","callIfFunc","getLast","defaultAccessor","listToMap","list","accessor","useMap","normalizeAccessor","map","set","propAccessor","removeArrayItem","isFn","transformTree","keyField","childField","parentField","rootId","hasRootId","record","id","parentId","flatTree","depthFirst","injectId","buildId","filter","cascaded","forceInject","idCount","loop","childrenValue","children","filterResult","child","walkTree","depth","mapTree","clearChildren","newItem","filterTree","leafOnly","isLeaf","leaf","items","matched","defaultSortMethod","prev","next","sortByProps","props","sortedList","formattedProps","lastResult","params","desc","mergeObjects","sourceObj","targetObj","isNewObj","source","runQueueFrame","queue","cancelled","run","_a","toCapitalCase","_","char","PROVIDED_HOVER_DELAY","globalDelay","computed","getOrDefault","def","configHoverDelay","sourceDelay","app","unref","upstreamDelay","inject","provide","useHoverDelay","getCurrentInstance","zhCNLocale","PROVIDED_LOCALE","globalLocal","cached","getDefaultLocaleConfig","locale","configLocale","sourceLocale","upstreamLocale","useLocale","customLocale","useWordSpace","getCountWord","wordTemplate","words","getCountWordOnly","makeSentence","wordSpace","getStepByWord","toKebabCase","toCamelCase","p1","p2","toPascalCase","camelCase","mergeClasses","classes","className","defaultAttributes","Icon","strokeWidth","absoluteStrokeWidth","iconNode","slots","createLucideIcon","iconName","ArrowLeftRight","Calendar","Check","ChevronDown","ChevronLeft","ChevronRight","ChevronUp","ChevronsLeft","ChevronsRight","CircleAlert","CircleCheck","CircleHelp","CircleX","Clock","CloudUpload","Ellipsis","EyeOff","Eye","FileArchive","FileCode","FileImage","FileMusic","FileText","FileVideo","File","FlipHorizontal","FlipVertical","Fullscreen","Funnel","GripVertical","Image","IndentDecrease","IndentIncrease","Info","LoaderCircle","LogOut","Maximize","MessageCircleQuestion","Minimize","Minus","Moon","Pause","PictureInPicture","Play","Plus","RefreshCw","Repeat2","RotateCcw","RotateCw","Search","Siren","SkipBack","SkipForward","SquareMinus","SquarePlus","Sun","Trash2","Upload","UserRound","Volume1","Volume2","VolumeX","X","ZoomIn","ZoomOut","PROVIDED_ICONS","iconMap","Loader2","XCircle","Filter","MoreHorizontal","UploadCloud","HelpCircle","CheckCircle2","AlertCircle","PlusSquare","MinusSquare","Indent","Outdent","iconNames","globalIcons","icons","icon","configIcons","upstreamIcons","getCurrentScope","normalizedIcons","unrefIcons","config","normalizedIcon","markRaw","useIcons","cv","gcv","scv","useBEM","block","namespace","e","m","n","isVar","PROVIDED_NAMESPACE","globalNamespace","configNamespace","sourceNamespace","upstreamNamespace","useNamespace","useNameHelper","PROVIDED_ID_CONTER","VxpIDCounter","__publicField","defaultCounter","useId","customId","counter","shallowRef","watchEffect","readonly","PROVIDED_PROPS","eventPropRE","configProps","upstreamProps","providedProps","useProps","sourceProps","commonProps","keys","defs","propOptions","validator","defaultValue","isFunc","getValue","getDefault","watch","toWarnPrefix","reactive","booleanProp","booleanStringProp","booleanNumberProp","wrapProps","buildProps","omitProps","extra","omittedKeys","sizeProp","validSizeValues","sizeValidator","createSizeProp","stateProp","validStateValues","stateValidator","createStateProp","classProp","styleProp","eventTypes","eventProp","emitEvent","localeProp","_name","valueProp","valuesProp","iconProp","createIconProp","PROVIDED_Z_INDEX","initZIndex","rootStyle","cssZIndex","globalZIndex","configZIndex","sourceZIndex","zIndex","upstreamZIndex","useZIndex","iconProps","internalEffects","Object","freeze","angleRE","defineComponent","setup","_props","attrs","default","static","scale","title","label","flip","includes","effect","rotate","renderer","nh","effectCls","bm","computedScale","style","fontSize","renderDefault","iAttrs","class","role","undefined","_createVNode","renderSlot","rendererProps","Renderer","spinProps","__props","_useSlots","currentActive","ref","hasTip","maskStyle","delayTime","__expose","handleShow","handleHide","handleMaskClick","_unref","_createBlock","_Transition","_createElementBlock","_normalizeClass","_renderSlot","_ctx","_createElementVNode","_mergeProps","_createTextVNode","_toDisplayString","createSpin","binding","vnode","spin","createVNode","Spin","position","render","vLoading","nextTick","component","useListener","listener","normalizedOptions","remove","stopWatch","disabled","opts","stop","onScopeDispose","CLICK_OUTSIDE","elements","path","useClickOutside","useDisplay","displayInit","element","observer","onMounted","hiddenParentNode","queryOutsideHiddenElement","onBeforeUnmount","parentElement","isHiddenElement","createSlotRender","names","fallback","vnodes","flatVNodes","isVNode","Comment","createTextVNode","Fragment","unrefElement","plain","proxyExposed","_b","_c","functionsMap","supported","notSupportedResult","states","subscriptions","ELEMENT","EVENT","state","full","useFullScreen","targetRef","isRef","REQUEST","EXIT","old","exit","enter","force","toggle","useHover","wrapper","isHover","enterWrapper","leaveWrapper","observerCache","spaceRE","unitRE","useIntersection","threshold","margin","normalizeMargin","thresholdCache","marginCache","handleIntersect","disconnect","parts","part","entries","useManualRef","updateSet","manualRef","customRef","track","trigger","origin","update","newValue","triggerUpdate","defaultAliasMap","separatorRE","splitRE","internalProps","useModifier","autoReset","capture","passive","strictTarget","onKeyDown","onKeyUp","aliasMap","activeKeys","metaDeps","modifier","resetAll","setModifier","updateModifier","modifierProxy","receiver","useMounted","wait","isMounted","mount","disableEvent","useMoving","x","y","lazy","stopMouse","stopTouch","moving","internalState","throttleMove","updateState","move","end","clientX","clientY","xStart","yStart","clientXStart","clientYStart","deltaX","deltaY","sides","round","floor","createCoords","oppositeSideMap","oppositeAlignmentMap","clamp","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","getSideList","side","isStart","lr","rl","tb","bt","getOppositeAxisPlacements","flipAlignment","direction","expandPaddingObject","padding","getPaddingObject","rectToClientRect","width","height","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","computePosition","strategy","middleware","platform","validMiddleware","statefulPlacement","middlewareData","resetCount","nextX","nextY","reset","detectOverflow","_await$platform$isEle","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","offset","shouldAddOffset","alignmentOffset","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflow","overflows","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","_overflowsData$","ignoreCrossAxisOverflow","hasInitialMainAxisOverflow","resetPlacement","_overflowsData$filter2","currentSideAxis","acc","getSideOffsets","isAnySideFullyClipped","hide","offsets","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","hasWindow","getNodeName","node","isNode","getWindow","_node$ownerDocument","getDocumentElement","isHTMLElement","isShadowRoot","isOverflowElement","overflowX","overflowY","display","getComputedStyle","isTableElement","isTopLayer","isContainingBlock","elementOrCss","webkit","isWebKit","css","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","top","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","ignoreScrollbarX","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","body","getViewportRect","visualViewport","visualViewportBased","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","onMove","io","timeoutId","cleanup","_io","refresh","skip","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","ratio","autoUpdate","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","hide$1","arrow$1","mergedOptions","platformWithCache","computePosition$1","resizeObservers","hasActiveObservations","ro","hasSkippedObservations","msg","deliverResizeLoopError","ResizeObserverBoxOptions","ResizeObserverSize","inlineSize","blockSize","DOMRectReadOnly","bottom","rectangle","isSVG","scope","isReplacedElement","global","scrollRegexp","verticalRegexp","IE","parseDimension","pixel","switchSizes","zeroBoxes","calculateBoxSizes","forceRecalculation","cs","svg","removePadding","canScrollVertically","canScrollHorizontally","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTop","borderRight","borderBottom","borderLeft","horizontalPadding","verticalPadding","horizontalBorderArea","verticalBorderArea","horizontalScrollbarThickness","verticalScrollbarThickness","widthReduction","heightReduction","contentWidth","contentHeight","borderBoxWidth","borderBoxHeight","boxes","calculateBoxSize","observedBox","borderBoxSize","contentBoxSize","devicePixelContentBoxSize","ResizeObserverEntry","calculateDepthForNode","broadcastActiveObservations","shallowestDepth","callbacks","ot","targetDepth","_i","callbacks_1","gatherActiveObservationsAtDepth","process","notify","queueMicroTask","toggle_1","el_1","queueResizeObserver","watching","isWatching","CATCH_PERIOD","observerConfig","events","time","timeout","scheduled","Scheduler","_this","until","elementsHaveResized","scheduler","updateCount","skipNotifyOnElement","ResizeObservation","ResizeObserverDetail","observerMap","getObservationIndex","observationTargets","ResizeObserverController","detail","firstObservation","lastObservation","ResizeObserver","handleResize","observeResize","unobserveResize","useResize","unobserve","computedRtl","elId","useRtl","initObserver","content","placementWhileList","usePopper","initOptions","transfer","isDrop","popper","arrowRef","transferTo","isRtl","wrapperEl","popperEl","setTransferTo","updatePopper","updatePopperInternal","arrowEl","setPopperDropOrigin","offsetOptions","shiftOptions","activePlacement","resolve","styleId","elClass","activeThemes","themeWidths","prevStyle","rootClass","varsClass","useSetTimeout","useSetInterval","useRaf","useTimerRecord","useVirtual","itemSize","itemFixed","idKey","defaultKeyAt","bufferSize","indexMap","itemList","visibleHeight","heightDiffMap","heightTree","heightDiff","treeUpdateDep","scrollOffset","startIndex","visibleItems","unrefItems","endIndex","listStyle","fixed","itemsStyle","scrollToKey","syncScrollOffset","handleScroll","handleItemResize","prevHeight","diff","prevTop","scrollTo","behavior","scrollBy","scrollToIndex","ensureIndexInView","viewTop","viewHeight","viewBottom","ensureKeyInView","createObserver","useThrottle","throttleResize","vResize","getHandler","prevOptions","installDirectives","affixProps","lastScroller","handleLastScroller","targetAffix","clearLastScroller","instance","container","isRawViewer","scroller","affixHeight","affixWidth","scrollTop","clientHeight","transform","affixStyle","fixedStyle","_top","_bottom","_target","updateContainer","removeListener","wrapperRect","targetRect","handleContainerScroll","_container","refName","exposeProxy","exposed","proxy","_scroller","refTemp","collapseProps","collapsePanelProps","collapseTransitionProps","CollapseTransition","enterStage","leaveStage","duration","timing","marginTop","marginBottom","scrollHeight","transition","enterRecord","leaveRecord","Transition","$el","alertProps","alertTypes","predefinedIcons","closed","hidden","scrollDuration","scrollWidth","scrollEl","hasTitle","hasIcon","black","baseColor","iconComp","scrollStyle","startScroll","handleClose","handleAfterLeave","contentRect","handleScrollEnd","anchorProps","anchorLinkProps","baseIndentWidth","LINK_STATE","ANCHOR_STATE","anchorState","parentLinkState","indent","active","link","toRef","linkClass","linkStyle","handleSelect","to","$slots","_Fragment","_renderList","_component_AnchorLink","animateScrollTo","from","distance","emit","__emit","animating","markerTop","linkStates","prevScrollTop","increaseLink","decreaseLink","handleActive","computeMarkerPosition","viewer","_d","getContainerEl","computeCurrentLink","containerTop","offsetList","currentLink","elementTop","containerEl","linkRect","wrapperTop","_openBlock","AnchorLink","rowProps","mediaProp","columnProps","breakPoints","ROW_STATE","justifyList","alignList","Row","horizontal","vertical","columnFlex","formProps","formItemProps","formSubmitProps","formResetProps","FORM_PROPS","FORM_FIELDS","FORM_ACTIONS","FIELD_OPTIONS","submitMethods","labelAligns","fieldSet","labelWidth","field","getLabelWidth","validate","validateFields","resetFields","clearError","clearFieldsError","getPropMap","propMap","validateItems","fields","validations","errors","handleSubmit","getValueByPath","lastKey","setValueByPath","defaultId","defaultState","defaultFalse","defaultSize","getEmptyActions","useFieldStore","onFocus","fieldOptions","clearField","DEFAULT_MESSAGE","N_100_200","IPV4_FIRST","IPV4_UNIT","IPV4_REG","HOST_REG","PARAM_REG","URL_REG","EMAIL_REG","TYPE_LIST","rules","model","validateAll","defaultMsg","rule","error","errorMessage","validateRequirement","validateEnumeration","validateType","enumSet","validateString","validateNumber","validateBoolean","validateInt","validateFloat","validateDate","validateUrl","validateEmail","inputProps","_isSlot","prototype","call","_isVNode","inputTypes","toNotNullString","String","emits","expose","idFor","labelId","loading","validateField","getFieldValue","setFieldValue","inputControl","focus","prefix","prefixColor","suffix","suffixColor","placeholder","autofocus","spellcheck","autocomplete","controlClass","maxLength","hideCount","before","after","plainPassword","clearable","loadingIcon","loadingLock","loadingEffect","transparent","sync","controlAttrs","initValue","focused","currentValue","showPassword","currentLength","beforeHover","afterHover","composing","control","lastValue","hasBefore","beforeAction","hasAfter","afterAction","basisClass","bs","inherit","wrapperClass","hasPrefix","hasSuffix","inputType","formattedValue","passwordIcon","plainText","cipherText","hasValue","showClear","autoComplete","limitValueLength","immediate","flush","input","copyValue","blur","getLatestValue","parseFloat","handleFocus","handleBlur","setTimeout","onBlur","emitChangeEvent","handleChange","setValue","onChange","onInput","slice","toggleShowPassword","handleClear","stopPropagation","onClear","handleEnter","onEnter","handlePrefixClick","onPrefixClick","handleSuffixClick","onSuffixClick","handleKeyDown","handleKeyPress","onKeyPress","handleKeyUp","handleCompositionStart","onCompositionStart","handleCompositionEnd","onCompositionEnd","document","createElement","setAttribute","appendChild","select","isSuccess","execCommand","removeChild","preventDefault","handleInput","renderPrefix","be","renderCustomSuffix","opacity","bem","renderSuffixAction","ariaLabel","clear","renderSuffix","_slot","ns","renderCount","Infinity","renderPlainPassword","password","renderControl","onClick","renderAside","buttonSlot","onMouseenter","onMouseleave","methods","scrollbarProps","ScrollbarType","ScrollbarType2","scrollbarPlacements","useTrack","currentScroll","trackSpeed","bar","tracking","barLength","onDown","onUp","onScroll","startAt","cursorAt","targetScroll","forward","processing","animateMoveBar","speedRate","computeSpeedRate","changed","verifyScroll","handleMouseDown","handleMouseMove","handleMouseUp","barRect","span","scrolling","handleTrackMouseDown","setScrollbarFade","handleWrapperMouseMove","wrapperElement","_cache","resizeObserverProps","ResizeObserver$1","observed","observe","nativeScrollProps","xFrom","xTo","yFrom","yTo","xDistance","yDistance","xStep","yStep","currentX","currentY","useScrollWrapper","mode","appear","scrollX","scrollY","onResize","onBeforeRefresh","onAfterRefresh","contentEl","percentX","percentY","xScrollLimit","yScrollLimit","enableXScroll","enableYScroll","xBarLength","yBarLength","computeContentSize","setScrollX","setScrollY","syncScroll","computePercent","entity","scrollToElement","elRect","scrollModes","MOVE_EVENT","UP_EVENT","inheritAttrs","scrollClass","scrollAttrs","pointer","useXBar","useYBar","barFade","barClass","autoplay","playWaiting","barDuration","useBarTrack","scrollTag","observeDeep","scrollOnly","emitter","usingBar","xBar","yBar","initialized","syncBarScroll","startAutoplay","slotParams","shallowReadonly","getState","ensureInView","canPlay","canAutoplay","stopAutoplay","playTimer","startTimer","endTimer","waiting","setScroll","playSpeed","requestAnimationFrame","clearTimeout","Number","willMutate","handleMutate","createMutation","MutationObserver","childList","clearMutation","onXEnabledChange","onYEnabledChange","getXScrollLimit","getYScrollLimit","addScrollListener","removeScrollListener","getCommonPayload","button","handlePointerDown","xScrollStartAt","yScrollStartAt","cursorXPosition","cursorYPosition","prepareScroll","addEventListener","handlePointerMove","handlePointerUp","onScrollStart","emitScrollEvent","removeEventListener","onScrollEnd","handleWheel","isVerticalScroll","isHorizontalScroll","sign","onWheel","maxLimit","scrollLeft","handleBarScrollStart","onBarScrollStart","handleBarScrollEnd","onBarScrollEnd","handleXBarScroll","onBarScroll","handleYBarScroll","querySelector","Promise","on","off","renderContent","Content","shiftKey","_slot2","Scrollbar","optionProps","optionGroupProps","selected","overflowProps","TEXT_VNODE","tag","attrFlag","maxCount","restCount","hiddenFlag","toggleDisplay","show","removeAttribute","computeHorizontalMargin","marginLeft","marginRight","computeHorizontalPadding","elOrStyle","Element","computeOuterWidth","lastOverflow","lastRestCount","counterEl","childCount","postRefresh","suffixEl","wrapperWidth","gap","columnGap","childWidths","totalWidth","counterMargin","childWidth","j","maxWidth","onRestChange","onToggle","syncCounterRef","nextElementSibling","CustomTag","itemSlot","staticItem","counterVNode","renderCounter","_Teleport","popperProps","_sfc_main$1x","Portal","getIndex","emitHookEvent","_component_Portal","$event","_withDirectives","_hoisted_1","_createCommentVNode","tagProps","tagTypes","components","border","closable","simple","circle","prefixBg","suffixBg","white","getPropertyValue","nv","cvm","onClose","renderClose","close","backgroundColor","borderColor","tooltipProps","noArrow","transitionName","visible","outsideClose","noHover","tipClass","tipStyle","raw","tipAlive","reverse","virtual","tooltipId","hoverDelay","currentVisible","rendering","triggerWidth","hovered","useFocus","originalTrigger","triggerEl","Array","fill","Math","handleClickOutside","toggleVisible","handleTriggerEnter","handleTriggerLeave","handleTriggerClick","handleTriggerFocus","handleTriggerBlur","computeTriggerWidth","getActiveState","hover","onTipEnter","onTipLeave","onClickOutside","onOutsideClose","syncTriggerRef","syncRendering","Wrapper","triggers","triggerVNode","renderTrigger","mergeProps","Popper","virtualListProps","NativeScroll","listTag","itemsTag","itemsAttrs","hideBar","lockItems","ignoreResize","toRefs","onItemResize","renderList","keyIndexMap","itemsClass","itemsOtherStyle","ListTag","ItemsTag","bind","renderingItems","prefixTrap","suffixTrap","selectProps","defaultKeyConfig","isSameValue","oldValue","isNewArray","isOldArray","currentLabels","currentValues","currentIndex","baseOptions","currentFilter","anchorWidth","userOptions","restTagCount","restTipShow","dynamicOption","optionValues","hittingOption","optionStates","visibleOptions","keyConfig","nativeInput","filterInput","device","virtualList","restTip","cachedSelected","optionValueMap","emittedValue","updateTrigger","initOptionState","valueKey","labelKey","disabledKey","dividedKey","titleKey","groupKey","childrenKey","oldMap","option","rawOption","group","divided","oldState","optionState","initValueAndLabel","setVisible","updateHitting","totalOptions","showDynamic","selectorClass","baseCls","normalOptions","optionParentMap","previewOption","limited","showPlaceholder","getOptionFromMap","fitPopperWidth","initHittingIndex","syncInputValue","filterOptions","isSelected","normalizedValue","valueSet","selectedValues","selectedLabels","cachedValue","hitting","inputValue","ignoreCaseValue","parentMap","handleTagClose","handleRestTagClose","newOption","prevValue","handleFilterInput","hittingIndex","handleFilterKeyDown","toggleShowRestTip","_normalizeStyle","Overflow","_withCtx","Tag","Tooltip","Input","_normalizeProps","_guardReactiveProps","VirtualList","Option","autoCompleteProps","lastInput","isReadonly","filteredOptions","computeHitting","handleInputInternal","testOptionCanDrop","valid","beforeVisible","inClickProcess","beforeClick","handleClick","handleToggle","Select","onSelect","avatarProps","avatarGroupProps","GROUP_STATE","objectFitValues","groupState","loadFail","fallbackFail","text","scaleText","handleError","lastText","avatarEl","textEl","avatarWidth","avatarHeight","textWidth","textHeight","renderAvatars","restAvatars","Avatar","badgeProps","badgeTypes","hasSlot","showSub","handleBadgeClick","breadcrumbProps","breadcrumbItemProps","BREADCRUMB_STATE","breadcrumbState","currentLabel","separator","separatorRenderer","handleSeparatorClick","itemStates","route","meta","refreshLabels","increaseItem","decreaseItem","slotValue","propValue","BreadcrumbItem","bubbleProps","bubbleTypes","buttonProps","buttonGroupProps","buttonTypes","fieldActions","dashed","ghost","buttonType","noPulse","badge","pulsing","isLast","isIconOnly","colorMap","light2","dark1","opacity1","opacity3","opacity4","opacity7","opacity8","white8","white9","gnv","handleAnimationEnd","renderLoadingIcon","renderSingleIcon","renderCollapseIcon","renderBadge","badgeType","Badge","Button","refreshIndexes","colProps","Column","rowState","numberInputProps","isNullOrNaN","getEmptyValue","inputting","plusHolding","minusHolding","plusDisabled","minusDisabled","changeStep","controlId","outOfRange","fade","preciseNumber","parseValue","setInputValue","boundValueRange","handleHold","change","plusNumber","minusNumber","cancelStep","stringValue","floatValue","empty","boundValue","emitUpdate","_withModifiers","weekDay","_withKeys","calendarPanelProps","calendarProps","startValue","endValue","hoveredDate","reversed","updateDateRange","setDateRange","isHovered","isPrevMonth","isNextMonth","isToday","isInRange","getWeekLabel","isSameRow","dateYear","dateMonth","handleHover","startTime","endTime","hoveredTime","selectedTime","minTime","maxTime","week","row","cell","CalendarCell","isPrev","isNext","matchedToday","inRange","cellParams","calendarValue","calendarYear","calendarMonth","formatYearInput","formatMonthInput","handleYearChange","handleMonthChange","CalendarPanel","NumberInput","_hoisted_2","captchaProps","captchaSliderProps","currentLeft","testing","resetting","testLoading","widthLimit","dragging","verifyPosition","matchTarget","customResult","isLoading","fillerStyle","triggerStyle","afterReset","squarePath","ctx","halfSide","puzzlePath","radius","shieldPath","heartPath","slideTarget","isArray","tip","successTip","failTip","image","tolerance","canvasSize","refreshIcon","onBeforeTest","texts","find","failLimit","remotePoint","useTrigger","triggerSize","triggerText","hideDelay","hollowShape","currentTarget","parseTarget","pointers","success","failed","failedCount","canvas","subCanvas","slider","usedTarget","imageLoading","imagePromise","pointerTargets","fontRate","imageLoaded","memoryCanvas","failLocked","subCanvasStyle","actionLocked","loadImage","drawImageNextFrame","console","warn","hideTrigger","drawImage","loadFlag","Date","now","flag","src","trim","startsWith","onload","finally","drawImageWithTexts","canvasEl","getContext","textBaseline","textAlign","font","lineWidth","strokeStyle","drawText","radian","save","translate","PI","fillStyle","fillText","strokeText","restore","metrics","measureText","xLimit","yLimit","fontBoundingBoxAscent","fontBoundingBoxDescent","prevX","prevY","abs","push","getHollowProcess","subCanvasEl","subCtx","pathCtx","clearRect","canvasRect","trackRect","widthFix","targetX","targetY","hollowProcess","beginPath","clipX","clipY","clipWidth","clipHeight","stroke","clip","xLeftWidth","translateFix","globalCompositeOperation","newImage","handleDragStart","onDragStart","handleDrag","onDrag","handleDragEnd","onDragEnd","handleSlideSuccess","onSuccess","handleSlideFail","onFail","handleRefresh","onRefresh","verifyPointers","xTolerance","yTolerance","flat","handleImageClick","clientWidth","canvasWidth","canvasHeight","offsetX","offsetY","cancelPointer","pop","handleTrigger","renderImage","TransitionGroup","fail","renderSlider","CaptchaSlider","slide","renderTextList","pointInOrder","renderFooter","renderPanel","doCaptcha","completed","cardProps","hasExtra","hasHeader","carouselProps","CAROUSEL_STATE","isLocked","arrowActive","listRect","itemRect","trackStyle","disabledPrev","disabledNext","arrowIcons","handleMouseEnter","handleMouseLeave","setAutoplay","updateItemRect","updateListRect","isItemActive","inTransition","shouldReset","computeItemRect","handleAfterMove","prevFix","nextFix","handlePrev","handleNext","itemLength","itemCount","targetIndex","prevActive","anchorIndex","back","handlePrevClick","handleNextClick","isPointerDisabled","carouselState","checkboxProps","checkboxGroupProps","currentChecked","currentPartial","controlState","computedSize","computedState","isLoadingLock","stateColor","opacity6","hasLabel","setCurrentChecked","increased","emitCheckEvent","checked","currentHitting","findEnabledIndex","ensureOptionInView","hasChildren","handleToggleCheck","listHeight","hoverTimer","computeListHeight","isCheckboxDisabled","queryEnabledIndex","optionHeight","Checkbox","cascaderProps","ID_KEY","PARENT_KEY","mergedValues","mergedLabels","isPopperShow","optionTree","isAsyncLoad","usingMerged","templateValues","templateLabels","optionList","optionIdMap","outsideClosed","prevClosedId","flattedOptions","initOptionStates","isAsync","createOptionStates","initOptionFull","queryChildrenLoaded","openedIds","optionsList","panelElList","selectorWidth","usingHover","outsideChanged","brief","updateMergedProps","originalOptions","updateCheckedUpward","updateCheckedDown","emitMultipleChange","onBeforeUpdate","handlePanelOpen","handleOptionSelect","handleOptionCheck","handlePanelBack","rawOptions","hasChildKey","hasChild","baseValues","values","briefLabel","isFlatArray","isComplexArray","processMerged","selectedOptions","firstValue","ids","queryUpstreamOptions","handleSingleSelect","originalOption","partial","dataList","queryArrayMeta","fullValue","handleTipClose","handlePanelKeyOpen","panel","handlePanelsEnter","CascaderPanel","layoutProp","gridProps","cellProps","currentBreakPoint","handleBreakPointChange","point","query","queryEntries","queryMap","media","GRID_STATE","Cell","gridState","layoutState","layoutKeys","defaultWidth","matchSize","queryBreakPointOptions","cellFlex","topSet","isPositionSet","rightSet","bottomSet","leftSet","parsePosition","breakPoint","valueMap","inputSet","controlSet","controlLabel","updateValue","updateControl","valueLength","increaseControl","decreaseControl","handleControlChange","setItemChecked","replaceValue","checkedValues","allValues","COLLAPSE_STATE","getIndexId","panelStates","currentExpanded","tab","tabs","clearExpanded","expandPanel","registerPanel","unregisterPanel","rawExpanded","expanded","updateItemExpanded","isSameExpanded","prevSet","collapseState","tabId","bodyId","useCard","useGhost","useArrowType","setExpanded","_sfc_main$19","currentTop","prevLeft","heightLimit","topStartAt","leftStartAt","editing","_sfc_main$18","_sfc_main$17","rgbString","colorPickerProps","defaultShortcuts","getDefaultHsv","currentAlpha","shortcutHitting","shortcutsFocused","palette","hue","alphaEl","shortcutEl","cancel","confirm","unitList","shortcutList","formattedColor","getFormattedColor","labelColor","handleConfirm","handlePaletteChange","handleHueChange","handleAlphaChange","handleInputColor","handleShortcutClick","toggleEditing","able","handleTabDown","activeEl","elList","unit","maybeEl","handleShortcutsFocus","handleShortcutsKeydown","shortcutCount","handleSpaceDown","handleEscDown","showLabel","ColorPalette","ColorHue","ColorAlpha","configProviderProps","theme","maskerProps","wrapperShow","topTrap","bottomTrap","maskShow","contentShow","stable","prevFocusedEl","afterOpen","afterClose","disableWheel","toggleActive","afterMaskOpen","afterMaskClose","afterContentOpen","afterContentClose","handleFocusIn","tabables","handleEscape","$attrs","positionType","positionValidator","positionProp","modalProps","isSpecified","normalizeStyle","maskerRect","modalRect","transformed","masker","footer","uselessTop","uselessLeft","header","transferRect","resizer","resizing","minHeight","transforms","wrapperStyle","transformOrigin","titleId","computeTop","computeLeft","handleCancel","setActive","findPositionalParent","currentHeight","currentWidth","withSize","offsetTop","offsetLeft","isConfirm","handleMaskClose","handleModalResize","box","Masker","useModal","appContext","headerRenderer","titleRenderer","closeRenderer","footerRenderer","onHide","createModal","createApp","Component","destroy","Modal","confirmProps","confirmButtonTypes","rendererR","beforeConfirmR","onConfirm","onCancel","mountedPromise","openConfirm","handleReset","ConfirmManager","manager","property","others","Confirm","SELECT_HANDLER","DROPDOWN_STATE","DropdownDrop","dropdownState","dropdownProps","dropdownItemProps","useLabel","rawLabel","setLabel","parentState","isNested","popperAlive","isAlive","setPlacement","labels","metaList","xPlacement","parentSelectHandler","isReference","baseClass","renderItemIcon","iconColor","renderItemShortcut","shortcut","renderGroupItem","Dropdown","onContextmenu","DropdownItem","angleLeft","angleRight","drop","DropdownList","some","c","renderItem","configs","openContextmenu","afterContextmenu","ContextmenuManager","innerApp","unmount","Contextmenu","DisabledType","DisabledType2","datePickerTypes","invalidDate","TIME_REG","numberKeys","isNumberKey","handleKeyEnter","isMatch","inputtedNumber","useColumn","colTypes","currentColumn","columnTypes","columnCount","enabled","findEnabledColumn","types","resetColumn","column","enterColumn","canLoop","rawTypes","defaultMin","defaultMax","useTimeBound","originMin","originMax","minUnits","maxUnits","isTimeDisabled","isHourDisabled","isMinuteDisabled","isSecondDisabled","isActivated","showTimeUnits","formattedYear","formatValue","formattedMonth","formattedDate","formattedHour","formattedMinute","formattedSecond","maxDateCount","dateUnitOrder","one","two","three","isYear","filler","getUnitFocusClass","handleInputFocus","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","scrollProps","isReady","refreshWrapper","computeWrapperSize","sizeType","titleCaseSizeType","promises","transitionDuration","waitDelay","precessScroll","handleTouchStart","moved","lastDate","signX","signY","handleBuffer","computedDelta","ensureScrollOffset","waitTransition","setDuration","_resolveDynamicComponent","WHEEL_STATE","wheelState","wheelProps","wrapperHeight","targetWidth","targetHeight","isInit","borderStyle","prevDisabled","isItemDisabled","nextDisabled","prevIcon","nextIcon","updateActive","findEnabledActive","computeSize","candidate","showCount","refreshScroll","targetXScroll","targetYScroll","queryEnabledActive","beforeScroll","aboutActive","handleItemClick","Scroll","WheelItem","currentHour","currentMinute","currentSecond","hourRange","minuteRange","secondRange","hourWheel","minuteWheel","secondWheel","updateTimeRange","refreshWheel","hourStep","minuteStep","secondStep","handleToggleColumn","wheel","Wheel","today","monthRange","rangeNumbers","currentPanel","hoveredYear","hoveredMonth","yearRange","shortcutsRect","panelStyle","startActivated","activated","endActivated","isDatetime","getStringValue","weekDays","refreshCalendar","getMonthLabel","togglePanel","adjustCalendar","handleShortcut","handleSelectDate","emitChange","handleSelectYear","isDisabledYear","handleSelectMonth","isDisabledMonth","handleStartTimeChange","handleEndTimeChange","handleDoublePrevClick","handleDoubleNextClick","handleHoverDate","isSelectedYear","isSelectedMonth","monthYear","dayCount","handleYearHover","handleMonthHover","isYearInRange","startYear","endYear","selectedYear","minYear","maxYear","isMonthInRange","startMonthYear","endMonthYear","hoveredMonthYear","selectedMonthYear","minMonthYear","maxMonthYear","valueType","handleShortcutsResize","weekParams","itemParams","TimeWheel","datePickerProps","timePickerProps","calendarLocale","datePickerLocale","startState","createDateState","endState","currentState","firstSelected","staticWheel","startInput","endInput","datePanel","mergedLocale","startPlaceholder","endPlaceholder","hoveredLarge","firstTime","hoverTime","rawValueToDate","startMinTime","startMaxTime","endMinTime","endMaxTime","startReversed","startTimeBound","endTimeBound","startError","isDateDisabled","endError","noActionMode","parseFormat","hasMonth","hasDate","getCurrentState","dateValue","valueRecord","activatedRecord","withTime","toggleActivated","parseDateUnitOrder","orderSet","inQuotation","parseTimeUnitEnabled","verifyDate","emitValues","formattedValues","valueFormat","timestamp","emitValue","finishInput","shouldChange","verifyValue","getStep","handleFocused","showPanel","units","toggleCurrentState","handleInputNumber","setActivatedTrue","isTimeType","handleAdjust","adjustType","ctrlKey","isPlus","getCtrlStep","computeDate","updateDateActivated","handlePlus","handleMinus","fallbackFocus","finish","handleDateHover","hoverDate","hoverValues","handlePanelChange","secondTime","verifyRangeValue","handleTimeChange","startDate","endDate","handleStartInput","handleEndInput","DateControl","DatePanel","titleParams","yearParams","monthParams","dateParams","dividerProps","hasText","drawerProps","drawerPlacements","moveTransition","ellipsisProps","ellipsisStyle","formActions","formFields","isError","errorTip","validating","disabledValidate","defaultSlotParams","isRequired","requiredTip","allRules","requiredRule","selfRules","formRules","isValidateAll","useAsterisk","hideLabel","labelAlign","computedLabelWidth","controlStyle","labelWidthDefined","instances","fieldObject","handleValidate","resetValue","handleValidateEnd","useRules","asyncValidate","handleLabelClick","isNative","actions","isInherit","submit","fullScreenProps","placeId","isEntered","fullType","browserEnter","browserExit","browserFull","customZIndex","Grid","parseSizeLayout","parseAutoLayout","highlightProps","keyWords","renderTexts","viewerProps","InternalActionName","defaultActionLayout","viewerDefaultActionLayout","toolbarActive","zoom","flipX","flipY","fullSupported","enterFull","exitFull","zoomOrigin","getActionProp","action","getActionClass","internalActions","handleRotate","toggleFlipX","toggleFlipY","handleZoom","toggleFull","toolbarVertical","layout","toolbarFade","toolbarClass","contentStyle","transitionStyle","allActions","deg","normalizeProps","containerRect","prevZoom","originX","originY","isFull","handleEnterToolbar","handleLeaveToolbar","Divider","imageProps","imageGroupProps","imageViewerProps","srcArray","verifyIndex","Viewer","skeletonProps","skeletonGroupProps","repeat","imageIcon","iconScale","spread","itemTag","parseSize","test","renderSkeleton","useImgLoading","showImg","currentSrc","viewerActive","showError","hasPreview","imageSrc","imgLoading","handleLoad","handlePreview","Skeleton","ImageViewer","imageStates","srcList","refreshIndex","breakpointProp","layoutProps","layoutAsideProps","layoutHeaderProps","layoutMainProps","layoutFooterProps","LAYOUT_STATE","rootEl","computeSeriesColors","colors","light","dark","useLayoutState","useMediaQuery","computedQuery","usedQuery","mediaQuery","useUpdateCounter","onUpdated","main","menuProps","menuItemProps","menuGroupProps","MENU_ITEM_STATE","MENU_GROUP_STATE","MENU_STATE","MenuGroup","defineAsyncComponent","MenuItem","menuState","parentItemState","groupExpanded","sonSelected","popperShow","propTransfer","inTransfer","markerType","isGroup","showGroup","labelStyle","isUsePopper","indentWidth","multiplier","isReduced","paddingInlineStart","groupType","tooltipDisabled","tooltipReverse","isHorizontal","dropTrigger","itemState","cachedExpanded","updateSonSelected","toggleGroupExpanded","doForEachItem","handleExpand","upstream","accordion","upward","mouseInList","reproduce","handlePopperHide","handleKeySelect","code","renderChildren","renderArrow","angleDown","renderItemArrow","renderLabel","_vShow","menuNh","titleStyle","onlyShowSlot","menus","renderMenuItems","ellipsis","menuMarkerTypes","reduced","router","manualRoute","menuItemSet","Set","rest","routes","parseRoutesToMenus","currentRoute","handleMenuReduce","handleMenuExpand","expandItemByLabel","routeMeta","menu","delete","onExpand","onReduce","firstExpandedItem","selectedItem","renderMenuItem","renderMenus","MenuRest","switchProps","signalStyle","logo","signName","user","userDropped","avatarCircle","signType","darkMode","currentSignType","currentUserDropped","currentColor","getBaseColor","isDark","isLayout","affixMatched","affixed","userActions","signOut","hasLeft","hasMenu","toggleExpanded","toggleReduced","handleColorChange","toggleUserDropped","expandMenuByLabel","classList","toggleTheme","onBeforeMount","handleUserActionSelect","onUserAction","handleSignTypeChange","changeInLock","onNavChange","onExpandedChange","onReducedChange","onColorChange","handleSignClick","onSignClick","dropped","onDroppedChange","handleMenuSelect","onMenuSelect","onToggleTheme","renderCheck","check","renderLayoutConfig","renderThemeConfig","Switch","renderColorConfig","renderUserAvatar","avatar","renderUserDrop","email","renderConfigs","navConfig","themeMode","majorColor","headerLeft","headerMain","Menu","headerRight","headerUser","linkerProps","linkerTypes","copyright","links","verticalLinks","horizontalMatched","renderLinks","footerLinks","Linker","subname","currentReduced","aside","hasTop","useExpand","computeScrollHeight","topHeight","bottomHeight","asideTop","asideBottom","outdent","expandHandler","expand","noAside","headerFixed","asideFixed","miniHeaderSign","fixedMain","fitWindow","innerClasses","noHeader","noMasker","locked","asideExpanded","asideReduced","section","expandMatched","signNameMatched","isHeaderMain","signInHeader","handleToggleTheme","handleUserAction","onContentResize","cancelChange","doChange","stopAndPrevent","renderSign","showSignName","renderHeader","LayoutHeader","onMousemove","sidebar","LayoutAside","renderMain","LayoutMain","LayoutFooter","renderMasker","renderWrapper","scrollbar","maxPercent","rafId","startLoading","setLoading","LoadingManager","Loading","DELETE_HANDLER","popupPlacements","handleDelete","pending","placementArray","deleteItem","getItemStyle","onOpen","queueOut","removeItem","currentVertical","existingItem","removeHeight","enterItem","leaveItem","PopupItem","itemData","effectiveTypes","assertiveTypes","startOffset","itemGap","popup","placementCenter","Popup","placementWhiteList","getKey","MessageManager","_duration","userCloseFn","userEnterFn","userLeaveFn","onLeave","setDelayClose","Message","NoticeManager","notice","Notice","paginationProps","PaginationMode","noBorder","background","pageSize","sizeOptions","isInteger","disableItem","turnPageCount","itemUnit","plugins","noTitle","midPagers","currentPageSize","LEFT","inPrevEllipsis","inNextEllipsis","jumpValue","itemElList","up","down","activeElement","findIndex","space","activeClass","beforeMatchAny","afterMatchAny","pagerCount","ceil","useEllipsis","prevTurnPageTitle","page","nextTurnPageTitle","prevEllipsisTarget","nextEllipsisTarget","sizeObjectOptions","perPage","pluginOrders","pagerPosition","jump","jumpInputWidth","pageCount","changeActive","computePagers","onPageSizeChange","anchor","querySelectorAll","cbe","cbem","parseInt","tabIndex","pagers","numberCount","criticalCount","unshift","CENTER","RIGHT","enterPrevEllipsis","leavePrevEllipsis","clickPrevEllipsis","enterNextEllipsis","leaveNextEllipsis","clickNextEllipsis","handleJumpPage","originActive","renderPrev","prevPage","renderNext","nextPage","renderPrevEllipsis","_slot3","anglesRight","anglesLeft","entered","renderNextEllipsis","_slot4","_slot5","onKeydownEnter","onKeydownSpace","renderTotalPlugin","order","renderSizePlugin","renderJumpPlugin","jumpTo","ItemTag","progressProps","infoTypes","strokeColor","useBubble","bubbleType","bubbleStyle","percentValue","Bubble","radioProps","radioGroupProps","radioShapes","radioGroupShapes","shape","isButton","registerInput","unregisterInput","Radio","resultProps","resultTypes","hasDescription","SkeletonGroup","isTipShow","tooltip","extraType","updateTooltip","showTooltip","hideTooltip","sliderProps","stepOneValue","sliding","triggerType","triggerShow","startTrigger","endTrigger","markerList","markers","marker","hasMarkerLabel","canDragRange","stepDigit","stepOneMin","stepOneMax","truthValue","stepOneTotal","triggerPercent","toPercent","startTriggerStyle","endTriggerStyle","commonSlotParams","lastInputValue","isEqualValue","isValueInRange","computedValue","nearest","nearestMarker","setTriggerFade","handlePointerEnter","handlePointerLeave","computePointedValue","client","handleTrackDown","downPercent","handleMove","handleMoveEnd","getPointStyle","getMarkerStyle","adjustValue","markerValue","SliderTrigger","spaceProps","useFlexGap","parseFlexStyle","inline","align","justify","noWrap","itemStyle","gapDisabled","varMap","hh","mhh","hv","mhv","alignItems","justifyContent","normalizedSize","lastIndex","justifySpace","notBetween","splitProps","_sfc_main$t","currentFull","guide","outer","computedMin","computedMax","setTransition","leftPaneStyle","rightPaneStyle","fullIcons","removeTransition","handleFull","_component_Icon","tabNavProps","tabNavItemProps","TAB_NAV_STATE","trackStyleMap","tabNavState","contentClass","isClosable","markerPosition","markerSize","updateMarkerPosition","markerStyle","scrollMode","isActiveEmpty","handleAdd","activeItem","TabNavItem","tabsProps","tabPanelProps","TABS_STATE","tabsState","loaded","lazyLoad","tableProps","tableColumnProps","tableColumnGroupProps","tableSummaryProps","DropType","DEFAULT_KEY_FIELD","TABLE_STORE","TABLE_ACTIONS","TABLE_SLOTS","TABLE_HEAD_PREFIX","TABLE_FOOT_PREFIX","COLUMN_GROUP_ACTIONS","noopFormatter","propKeys","aliases","ignoredProps","triggerProps","aligns","funcProp","TableColumn","selectionSize","tableAction","parentActions","aliasKey","filterWithoutMeta","setRenderer","setHeadRenderer","setFilterRenderer","setSummaryRenderer","rowIndex","TableColumnGroup","columns","Symbol","updateColumns","setColumnProp","increaseColumn","decreaseColumn","head","TableSummary","tableActions","tableSlots","customIcon","minWidth","getters","mutations","filterVisible","resizable","cellSpan","inLast","processColResize","table","buildEventPayload","typed","customClass","customStyle","totalWidths","colSpan","rowSpan","noFixed","padLeft","padRight","customAttrs","sorter","hasFilterActive","checkboxDisabled","isSelection","records","refreshXScroll","handleDblclick","handleContextmenu","handleSortAsc","handleSortDesc","handleFilter","handleFilterItemSelect","handleFilterCheck","handleFilterMultiple","activeValues","handleResetFilter","handleCheckAllRow","handleCellResize","TableIcon","isDragOver","rowEl","expandEl","rowKey","rowType","maxHeight","groupStyle","cellDraggable","rowDraggable","draggable","expandRenderer","hasExpand","setExpandHeight","updateTotalHeight","shouldProcessDrag","handleDragOver","handleDrop","handleDragLeave","afterExpand","allColumns","getRow","rowColumns","TableRow","TableHeadCell","isTreeColumn","isTypeColumn","isSelectionColumn","isOrderColumn","isExpandColumn","isDragColumn","handleCheckRow","single","handleExpandRow","handleDragRow","handleExpandTree","emptyStyle","rowHeight","rowMinHeight","colIndex","TableCell","summaries","heights","summaryData","summary","TableFootCell","useCascadedChecked","originNode","disable","defaultSummaryData","indexId","defaultIndexLabel","COLUMN_DEFAULT_WIDTH","COLUMN_DEFAULT_MIN_WIDTH","useStore","setColumns","setSummaries","setData","userData","filteredData","filterData","sortedData","sortData","processedData","pageData","visibleKeys","disableCheckRows","rowData","selectionColumn","disableExpandRows","expandColumn","disableDragRows","dragColumn","usingTree","hasDragColumn","rowDragging","getColumnsWidths","normalWidths","leftFixedWidths","rightFixedWidths","topFixedHeights","getSummariesHeights","bottomFixedHeights","indentedColumn","hasFixedColumn","isGroupColumn","buildSummaryKey","setSummaryProp","setDataKey","setCurrentPage","setPageSize","setRowClass","setRowStyle","setRowAttrs","setCellClass","setCellStyle","setCellAttrs","setHeadClass","setHeadStyle","setHeadAttrs","setFootClass","setFootStyle","setFootAttrs","setTableWidth","setRowHeight","setRowMinHeight","setCellHeight","setVirtual","setRowDraggable","setBodyYScroll","setBodyXScroll","setBorder","setStripe","setHighlight","setRowProp","setLocale","setTooltipTheme","setTooltipWidth","setSingleSorter","setSingleFilter","setDragging","setKeyConfig","setDisabledTree","setNoCascaded","setColResizable","setCustomSorter","setCustomFilter","setColumnResizing","setResizeLeft","setExpandRenderer","setCellSpan","setSidePadding","setBorderWidth","setDataFilter","setEllipsis","setLocked","setBarScrolling","setHoveredRowKey","handleSort","clearSort","clearFilter","toggleFilterItemActive","refreshRowIndex","handleCheck","handleCheckAll","clearCheckAll","setRenderRows","collectUnderRows","setTreeExpanded","getParentRow","handleColumnResize","getCurrentData","createMinRowState","flatTreeRows","refreshRowDepth","triggerHeightChange","queryRow","computeCellSpan","widths","combinedWidths","columnWidth","rowMap","buildColumns","baseColumns","columnMap","existedTypes","getFixedOrder","build","_columns","validType","rowCount","sorters","filters","normalColumns","rightFixedColumns","leftFixedColumns","parseSorter","parseFilter","prevKeys","aboveSummaries","belowSummaries","summaryMap","oldDataKey","idMaps","childRow","clonedData","dataKey","disabledTree","oldDataMap","checkedKey","heightKey","expandedKey","treeExpandedKey","parseRow","treeExpanded","computePartial","currentPage","rowClass","rowStyle","rowAttrs","cellClass","cellStyle","cellAttrs","headClass","headStyle","headAttrs","footClass","footStyle","footAttrs","resized","flexColumns","flexWidth","fixedWidth","flexColumnCount","flexWidths","distributeWidths","usedWidth","baseWidth","col","w","currentTotal","canGrow","canShrink","epsilon","adjusted","adjustableIndices","adjustment","columnKey","noCascaded","spanFn","prevHoveredRow","newHoveredRow","computeChecked","rowList","checkedAll","partialCheckedAll","hasChecked","hasNotChecked","startRow","endRow","heightBITree","virtualData","prevData","added","removed","underRows","disableOthers","custom","formattedOptions","isActive","isSingle","usedFilter","usedData","usedFilterCount","isFilter","usedSorter","_key","lastColumnWidth","newWidth","tableWidth","deltaWidth","cellSpanMap","collapseMap","columnIndex","getSpan","masterKey","collapsed","masterSet","columnFixed","len1","len2","treeRowData","keyOrData","bodyHeight","bodyMinHeight","xScrollEnabled","yScrollEnabled","xScrollPercent","yScrollPercent","headHeight","footHeight","indicatorShow","indicatorType","tempColumns","tempSummaries","bodyWidth","mainScroll","xHeadScroll","xAboveScroll","xBelowScroll","thead","aboveTfoot","belowTfoot","indicator","xScrollbar","yScrollbar","allSummaries","syncToStoreProps","store","increaseSummary","decreaseSummary","getTableElement","emitRowCheck","emitAllRowCheck","emitRowExpand","emitRowTreeExpand","emitRowFilter","emitRowSort","handleRowDragStart","handleRowDragOver","handleRowDrop","handleRowDragEnd","emitRowEvent","emitCellEvent","emitHeadEvent","emitColResize","emitFootEvent","renderTableSlot","runInLocked","updateSummaries","mergedLocked","useXScroll","bodyScrollHeight","totalHeight","leftFixedActive","rightFixedActive","forceRefreshData","computeTableWidth","computeBodyHeight","refreshPercentScroll","watchCallback","handlerResize","getSelected","setRowChecked","setRowTreeExpanded","computeRenderRows","borderWidth","fixedHeight","handleMainScroll","handleXScroll","handleYScroll","emitYScroll","profiles","dragState","rowInstance","dropRowRect","tableRect","prevPercent","nextPercent","dropRowHeight","dropType","indicatorTop","isIndicatorShow","isLeftInsideRight","draggingRow","willDropRow","currentKey","allDataPayload","bodyYScroll","viewStart","viewEnd","renderStart","renderEnd","selectedData","TableHead","TableFoot","TableBody","_createSlots","defineTableFilter","defineTableSorter","defineTableColumn","defineTableColumns","defineTableSummary","defineTableSummaries","computeIndex","TabNav","textareaProps","textarea","getId","recordMap","isRunning","subscribe","computeTimeAgo","unsubscribe","usedDiff","noFormat","timeAgoProps","datetime","toDateValue","timeAgo","parseInterval","currentTitle","createTimeState","timeValue","defaultDate","verifyTime","handleWheelChange","parsedValue","exchangeValue","handleExchangeClick","TimeControl","timelineProps","timelineItemProps","TIMELINE_STATE","timelineItemTypes","handleSignalClick","timelineState","spacing","lineStyle","isDashed","updateHeight","toastProps","openToast","closeToast","handleWrapperClick","conveniences","ToastManager","convenienceOptions","toast","Toast","tourProps","tourStepProps","TOUR_STATE","tempSteps","currentRect","sideRects","bubble","allSteps","currentStep","maskId","increaseStep","decreaseStep","autoClose","deepProps","TourStep","tourState","paged","Boolean","Function","emptyText","deepState","currentSelected","currentMark","searching","search","bodyRealHeight","lastSelected","keyUsed","currentOptions","handlePageChange","emitSelectedChange","filterValue","optionSize","pagedOptions","totalPages","allSelected","hasSelected","hasUnselected","computePageSize","bodyEl","innerHeight","toggleSelect","handleRangeSelect","toggleSelectAll","handleReverse","prevSelected","renderOption","retweet","renderFilter","renderBody","transferProps","ignoreCase","sourceTitle","targetTitle","sourceSelected","targetSelected","sourceOptions","targetOptions","Map","forEach","actionType","toTargetEnabled","toSourceEnabled","defaultFilter","toLocaleLowerCase","sourceFilter","getFilterMethod","targetFilter","handleToTarget","handleToSource","handlePanelFocus","handlePanelBlur","getSlotRender","TransferPanel","onSwitch","TREE_STATE","TREE_NODE_STATE","treeState","hasCheckbox","handleToggleSelect","secondary","hasLinkLine","hasArrow","leafSign","asyncLoad","checkbox","suffixCheckbox","nodeState","dragTimer","asyncLoadCallback","getNodeState","lineIndex","treeProps","nodeMap","nodeDataMap","treeNodes","flattedNodes","nodeStates","expanding","expandingNodes","expandedNodeIds","trap","visibleNodeEls","defaultNodeProperties","boundAsyncLoad","linkLine","visibleNodes","flatNodes","renderedNodes","toNodeProps","createDefaultFilter","updateVisibleNodeEls","disableExpand","disableExpandTick","nodes","isLeafNode","upper","resetExpanded","oldIds","parseAndTransformData","addedId","removedId","transferring","baseExpandedIds","baseNodes","nodeHeight","viewCount","addedNodes","computeCheckedState","handleNodeClick","handleNodeSelect","handleNodeCancel","handleNodeExpand","handleNodeReduce","handleNodeContextmenu","handleAsyncLoad","handleNodeDragStart","handleNodeDragOver","handleNodeDrop","handleNodeDragEnd","handleHittingChange","handleNodeHitting","forceUpdateData","syncNodeStateIntoData","getCheckedNodes","getCheckedNodeData","getSelectedNodes","getSelectedNodeData","getExpandedNodes","getDisabledNodes","getNodeChildren","getSiblingNodes","getPrevSiblingNode","getNextSiblingNode","getNodeByData","expandNodeByData","selectNodeByData","checkNodeByData","toggleNodeLoadingByData","toggleAllExpanded","getTreeData","getFlattedData","expandedIds","rootNodes","isCollapse","refreshNodesDepth","buildTreeNodes","oldIdMap","oldNode","createNodeItem","checkedNodes","parentKey","visibleKey","selectedKey","loadingKey","loadedKey","loadFailKey","readonlyKey","arrowKey","checkboxKey","selectDisabledKey","expandDisabledKey","checkDisabledKey","isLeafKey","selectDisabled","expandDisabled","checkDisabled","defaults","nodeList","selectedNodes","currentId","siblingNodes","nodeInstance","dropNodeRect","treeRect","dropArrowRect","dropNodeHeight","draggingNode","willDropNode","nodeEl","handleTreeFocus","includePartial","includeSelf","isChild","withFilter","innerNode","TreeNode","uploadProps","uploadListProps","uploadFileProps","iconConfig","useFileIcons","StatusType","uploadListTypes","imageExtRE","imageBase64RE","isImage","file","url","base64","fileIcons","useIconRenderer","fileName","status","percentage","showThumb","getFileExtension","getFileIcon","extension","imageToBase64","reader","Progress","UploadFile","getError","xhr","getBody","upload","formData","headers","getDefaultFileState","PENDING","response","abort","fileList","accept","maxSize","withCredentials","manual","hiddenFiles","countLimit","allowDrag","onBeforeUpload","onBeforeSelect","iconRenderer","selectToAdd","listType","loadingText","directory","pathField","disabledClick","buttonLabel","defaultFiles","customFetch","fileStates","renderFiles","acceptString","join","defaultList","createFileState","concat","DELETE","idMap","fileMap","syncInputFiles","deep","execute","click","handleInputChange","files","handleFilesChange","inputFiles","originFiles","webkitRelativePath","fileState","getFileStateBySource","SUCCESS","UPLOADING","exceedFiles","onExceed","assign","split","verifyFiles","uploadFiles","requests","uploadFile","catch","all","then","responses","Blob","reject","onProgress","handleProgress","handleSuccess","onError","onAbort","limitSize","onFilterError","onSizeError","onDelete","onPreview","dataTransfer","DataTransfer","FAIL","collectDropFiles","handleDragEnter","collectedFiles","dirLoop","processes","webkitGetAsEntry","isFile","dir","fileEntries","doProcess","createReader","readEntries","renderNormalAction","cloud","uploadCloud","dragOrClick","renderImageAction","HtmlTag","renderFileList","UploadList","canPreview","videoProps","videoControlProps","defaultLayout","videoDefaultControlLayout","videoDefaultShortcuts","VIDEO_STATE","videoState","objectOptions","optionMap","currentOption","removeShortcut","formatSeconds","seconds","mergeIconScale","slidTime","indicatorLeft","previewLeft","paddingX","sliderWidth","previewWidth","sliderEl","preview","points","segment","pointDuration","segmentLabel","segments","processMoveOnTrack","onSliderResize","onPreviewResize","permillage","onSlideMove","onSlideStart","onSlideEnd","Slider","currentTime","inputTime","durationEl","formattedTime","currentVolume","muted","volumeIcon","toggleMute","prevVolume","handleSlide","VideoControl","noControls","videoAttrs","volume","playbackRate","playbackRates","controlLayout","poster","video","shortcuts","pipEnabled","pictureInPictureEnabled","playing","pip","stateShow","stateHidden","currentRate","interacting","hasPlayed","flipped","screen","volumeRef","videoRef","shortcutRecord","addShortcut","altKey","metaKey","playIcon","pause","play","stateIcon","pauseState","playState","rateOptions","rates","rate","sort","splice","srcFullList","srcIndex","indexOf","togglePlaying","togglePip","changeRate","changeTime","changeVolume","resetMetaState","onTimeChange","handleEnded","onTogglePip","onPlay","onPause","onEnded","exitPictureInPicture","requestPictureInPicture","dispatch","onRateChange","onVolumeChange","toggleFlip","onToggleFlip","onFullChange","onToggleFull","handleInteract","interact","adjustSrc","playPrev","onPrev","playNext","onNext","renderPlayPrev","renderPlay","renderPlayNext","renderRefresh","renderTimer","VideoTimer","renderPlaybackRate","renderVolume","VideoVolume","renderFlip","renderPip","exitPip","requestPip","renderFullWindow","fullWindowExit","fullWindow","renderFullBrowser","fullScreenExit","fullScreen","renderControls","VideoProgress","onAfterLeave","FullScreen","textProps","pProps","strongProps","titleProps","hProps","h1Props","h2Props","h3Props","h4Props","h5Props","h6Props","blockquoteProps","olProps","ulProps","level","aligned","thin","coloredMarker","strong","italic","underline","mark","keyboard","listStyleType","createHComponent","Title","H1","H2","H3","H4","H5","H6","Text","buildInstall","defaultLocale","withDefaultLocale","normalizedPrefix","proxyConfigProps","provideConfig","version","Affix","Alert","Anchor","AutoComplete","AvatarGroup","Breadcrumb","ButtonGroup","Captcha","Card","Carousel","CarouselItem","Cascader","CheckboxGroup","Collapse","CollapsePanel","ColorPicker","ConfigProvider","DatePicker","Drawer","Form","FormItem","FormReset","FormSubmit","Highlight","ImageGroup","Layout","OptionGroup","Pagination","RadioGroup","Result","Space","Split","TabPanel","Table","Tabs","Textarea","TimeAgo","TimePicker","Timeline","TimelineItem","Tour","Transfer","Tree","Video","Blockquote","OL","UL","P","Strong","install"],"mappings":"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","x_google_ignoreList":[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139]}