{"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.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/shared/src/utils.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/defaultAttributes.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/Icon.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/createLucideIcon.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/arrow-left-right.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/calendar.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/check.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-down.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-left.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-right.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-up.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/chevrons-left.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/chevrons-right.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-alert.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-check.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-help.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-x.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/clock.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/cloud-upload.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/ellipsis.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/eye-off.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/eye.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/file-archive.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/file-code.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/file-image.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/file-music.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/file-text.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/file-video.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/file.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/filter.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/flip-horizontal.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/flip-vertical.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/fullscreen.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/grip-vertical.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/image.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/indent-decrease.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/indent-increase.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/info.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/loader-circle.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/log-out.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/maximize.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/message-circle-question.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/minimize.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/minus.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/moon.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/pause.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/picture-in-picture.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/play.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/plus.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/refresh-cw.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/repeat-2.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/rotate-ccw.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/rotate-cw.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/search.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/siren.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/skip-back.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/skip-forward.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/square-minus.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/square-plus.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/sun.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/trash-2.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/upload.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/user-round.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/volume-1.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/volume-2.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/volume-x.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/x.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.3_/node_modules/lucide-vue-next/dist/esm/icons/zoom-in.js","../node_modules/.pnpm/lucide-vue-next@0.471.0_vue@3.5.13_typescript@5.7.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/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.6.9/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.6.13/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/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":["/** 当前环境是否为客户端 */\nexport const isClient = typeof window !== 'undefined'\n/** 当前环境是否为 IOS */\nexport const isIOS =\n  /* #__PURE__ */ isClient &&\n  window?.navigator?.userAgent &&\n  /iP(ad|hone|od)/.test(window.navigator.userAgent)\n\nconst toString = Object.prototype.toString\nconst hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * 判断一个值是否为指定的类型\n *\n * @param value 需判断的值\n * @param type 指定的类型，注意大小写\n *\n * @returns 类型是否匹配\n */\nexport function is(value: unknown, type: string) {\n  return toString.call(value) === `[object ${type}]`\n}\n\n/**\n * 判断一个对象是否包含指定的键值\n *\n * @param value 需判断的对象\n * @param key 指定的键值\n *\n * @returns 是否包含键值\n */\nexport function has(value: Record<string, any>, key: string | symbol): key is keyof typeof value {\n  return hasOwnProperty.call(value, key)\n}\n\n/**\n * 判断一个值是否已定义\n *\n * @param value 需判断的值\n *\n * @returns 是否已定义\n */\nexport function isDefined<T = unknown>(\n  value: T | undefined | null\n): value is Exclude<T, undefined | null> {\n  return value !== undefined && value !== null\n}\n\n/**\n * 判断一个值是否未被定义\n *\n * @param value 需判断的值\n *\n * @returns 是否未定义\n */\nexport function isNull(value: unknown): value is null | undefined {\n  return value === undefined || value === null\n}\n\n/**\n * 判断一个值是否为数字\n *\n * @param value 需判断的值\n *\n * @returns 是否为数字\n */\nexport function isNumber(value: unknown): value is number {\n  return typeof value === 'number'\n}\n\n/**\n * 判断一个值是否为 `NaN`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `NaN`\n */\nexport function isNaN(value: unknown): value is number {\n  return Number.isNaN(value)\n}\n\n/**\n * 判断一个值是否为字符串\n *\n * @param value 需判断的值\n *\n * @returns 是否为字符串\n */\nexport function isString(value: unknown): value is string {\n  return typeof value === 'string'\n}\n\n/**\n * 判断一个值是否为布尔值\n *\n * @param value 需判断的值\n *\n * @returns 是否为布尔值\n */\nexport function isBoolean(value: unknown): value is boolean {\n  return typeof value === 'boolean'\n}\n\n/**\n * 判断一个值是否为 `true`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `true`\n */\nexport function isTrue(value: unknown): value is true {\n  return value === true\n}\n\n/**\n * 判断一个值是否为 `false`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `false`\n */\nexport function isFalse(value: unknown): value is false {\n  return value === false\n}\n\n/**\n * 判断一个值是否为 `Symbol`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `Symbol`\n */\nexport function isSymbol(value: unknown): value is symbol {\n  return typeof value === 'symbol'\n}\n\n/**\n * 判断一个值是否为 `BigInt`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `BigInt`\n */\nexport function isBigInt(value: unknown): value is bigint {\n  return typeof value === 'bigint'\n}\n\n/**\n * 判断一个值是否为数组\n *\n * @param value 需判断的值\n *\n * @returns 是否为数组\n */\nexport function isArray<T = any>(value: unknown): value is T[] {\n  return Array.isArray(value)\n}\n\n/**\n * 判断一个值是否为对象\n *\n * 注意，`null` 与原生的特殊对象不被包含\n *\n * @param value 需判断的值\n *\n * @returns 是否为对象\n */\nexport function isObject<T extends Record<any, any> = Record<any, any>>(\n  value: unknown\n): value is T {\n  return is(value, 'Object')\n}\n\n/**\n * 判断一个值是否为 `Promise`\n *\n * 如果一个对象包含 `then` 和 `catch` 方法，则被认为是一个 `Promise`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `Promise`\n */\nexport function isPromise<T = any>(value: unknown): value is Promise<T> {\n  return (\n    !!value &&\n    typeof (value as any).then === 'function' &&\n    typeof (value as any).catch === 'function'\n  )\n}\n\n/**\n * 判断一个值是否为函数\n *\n * @param value 需判断的值\n *\n * @returns 是否为函数\n */\nexport function isFunction(value: unknown): value is (...any: any[]) => any {\n  return typeof value === 'function'\n}\n\n/**\n * 判断一个值是否为 `Set`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `Set`\n */\nexport function isSet<T = any>(value: unknown): value is Set<T> {\n  return is(value, 'Set')\n}\n\n/**\n * 判断一个值是否为 `Map`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `Map`\n */\nexport function isMap<K = any, V = any>(value: unknown): value is Map<K, V> {\n  return is(value, 'Map')\n}\n\n/**\n * 判断一个值是否为 `Date`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `Date`\n */\nexport function isDate(value: unknown): value is Date {\n  return is(value, 'Date')\n}\n\n/**\n * 判断一个值是否为正则\n *\n * @param value 需判断的值\n *\n * @returns 是否为正则\n */\nexport function isRegExp(value: unknown): value is RegExp {\n  return is(value, 'RegExp')\n}\n\n/**\n * 判断一个值是否为空\n *\n * - 如果这是一个数组或字符串，则 `length` 为 `0` 时为空\n * - 如果这是一个 `Set` 或 `Map`，则 `size` 为 `0` 时为空\n * - 如果这是一个对象，则无任何键值时为空\n * - 如果这是一个数字，则为 `NaN` 时为空\n * - 其余情况下，未定义时为空\n *\n * @param value 需判断的值\n *\n * @returns 是否为空\n */\nexport function isEmpty(value: unknown) {\n  if (Array.isArray(value) || typeof value === 'string') {\n    return value.length === 0\n  }\n\n  if (value instanceof Map || value instanceof Set) {\n    return value.size === 0\n  }\n\n  if (isObject(value)) {\n    return Object.keys(value).length === 0\n  }\n\n  if (typeof value === 'number') {\n    return isNaN(value)\n  }\n\n  return isNull(value)\n}\n\n/**\n * 判断一个值是否为 `Element`\n *\n * @param value 需判断的值\n * @param ssr 是否考虑服务端渲染\n *\n * @returns 是否为 `Element`\n */\nexport function isElement<T extends Element = Element>(value: unknown, ssr = false): value is T {\n  if (!ssr && !isClient) return false\n\n  return !!(value && 'nodeType' in (value as any))\n}\n\n/**\n * 判断一个值能否被迭代\n *\n * @param value 需判断的值\n *\n * @returns 能否被迭代\n */\nexport function isIterable(value: unknown) {\n  return isDefined(value) && typeof (value as any)[Symbol.iterator] === 'function'\n}\n\n/**\n * 一个空的占位函数\n */\nexport function noop(...args: any[]): any\nexport function noop() {}\n\n/**\n * 一个返回 `true` 的占位函数\n *\n * @returns `true`\n */\nexport function toTrue(...args: any[]): true\nexport function toTrue() {\n  return true\n}\n\n/**\n * 一个返回 `false` 的占位函数\n *\n * @returns `false`\n */\nexport function toFalse(...args: any[]): false\nexport function toFalse() {\n  return false\n}\n\n/**\n * 生成一个值递进的数组\n *\n * @param size 大小\n * @param start 开始的数值，默认为 1\n * @param step 跨度，默认为 1\n *\n * @returns 生成的数组\n */\nexport function range(size: number, start = 1, step = 1) {\n  const array: number[] = []\n\n  for (let i = 0; i < size; ++i) {\n    array.push(start + i * step)\n  }\n\n  return array\n}\n\n/**\n * 获取变量的类型\n *\n * @param value 任意变量\n *\n * @returns 变量的类型\n */\nexport function getType(value: unknown) {\n  return Object.prototype.toString.call(value).slice(8, -1)\n}\n\n/**\n * 根据长度生成一串随机的字符串\n *\n * @param length 字符串的长度\n *\n * @returns 生成的字符串\n */\nexport function randomString(length = 16) {\n  const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'\n  const maxPos = chars.length\n\n  let string = ''\n\n  while (length--) {\n    string += chars.charAt(Math.floor(Math.random() * maxPos))\n  }\n\n  return string\n}\n\n/**\n * 根据一系列判断条件，执行第一个为 `true` 的条件所对应的回调函数\n *\n * @param conditions 判断条件及回调函数\n * @param options 额外的选项\n *\n * @returns 是否匹配了任一条件\n */\nexport async function decide(\n  conditions: [boolean | (() => boolean), () => void | Promise<void>][],\n  options: {\n    /**\n     * 当匹配任意一个条件时，会在该条件对应的回调函数执行前执行\n     */\n    beforeMatchAny?: () => void | Promise<void>,\n    /**\n     * 当匹配任意一个条件时，会在该条件对应的回调函数执行完后执行\n     */\n    afterMatchAny?: () => void | Promise<void>\n  } = {}\n) {\n  if (conditions.length) {\n    for (const [condition, callback] of conditions) {\n      if (typeof condition === 'function' ? condition() : condition) {\n        if (typeof options.beforeMatchAny === 'function') {\n          await options.beforeMatchAny()\n        }\n\n        await callback()\n\n        if (typeof options.afterMatchAny === 'function') {\n          await options.afterMatchAny()\n        }\n\n        return true\n      }\n    }\n  }\n\n  return false\n}\n","import { isDefined } from './common'\n\ninterface RGB extends Record<any, any> {\n  r: number,\n  g: number,\n  b: number,\n  a?: number\n}\n\nexport interface RGBColor extends RGB {\n  a?: 1,\n  format?: 'name' | 'rgb'\n}\n\nexport interface RGBAColor extends RGB {\n  a: number,\n  format?: 'name' | 'rgba'\n}\n\nexport interface HEX3Color extends RGB {\n  a?: 1,\n  format?: 'name' | 'hex3'\n}\nexport interface HEX4Color extends RGB {\n  a: number,\n  format?: 'name' | 'hex4'\n}\nexport interface HEX6Color extends RGB {\n  a?: 1,\n  format?: 'name' | 'hex6'\n}\nexport interface HEX8Color extends RGB {\n  a: number,\n  format?: 'name' | 'hex8'\n}\n\ninterface HSL extends Record<any, any> {\n  h: number,\n  s: number,\n  l: number,\n  a?: number\n}\n\nexport interface HSLColor extends HSL {\n  a?: 1,\n  format?: 'name' | 'hsl'\n}\n\nexport interface HSLAColor extends HSL {\n  a: number,\n  format?: 'name' | 'hsla'\n}\n\ninterface HSV extends Record<any, any> {\n  h: number,\n  s: number,\n  v: number,\n  a?: number\n}\n\nexport interface HSVColor extends HSV {\n  a?: 1,\n  format?: 'name' | 'hsv'\n}\n\nexport interface HSVAColor extends HSV {\n  a: number,\n  format?: 'name' | 'hsva'\n}\n\nexport type Color =\n  | string\n  | RGBColor\n  | RGBAColor\n  | HSLColor\n  | HSLAColor\n  | HSVColor\n  | HSVAColor\n  | HEX3Color\n  | HEX4Color\n  | HEX6Color\n  | HEX8Color\n\nexport type ObjectColor = Exclude<Color, string>\n\nexport interface ColorMeta {\n  rgb: RGBColor,\n  hsl: HSLColor,\n  hsv: HSVColor,\n  hex: string,\n  alpha: number,\n  rgba: RGBAColor,\n  hsla: HSLAColor,\n  hsva: HSVAColor,\n  hex8: string,\n  gray: number,\n  origin: Color\n}\n\nexport type ColorType = 'hex' | 'rgb' | 'hsv' | 'hsl'\n\nconst INTEGER_REG = '[-\\\\+]?\\\\d+%?'\nconst NUMBER_REG = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?'\n\nconst NUMBER_UNIT = `(?:${NUMBER_REG})|(?:${INTEGER_REG})`\n\nconst COLOR_REG_3 = `[\\\\s|\\\\(]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})\\\\s*\\\\)?`\nconst COLOR_REG_4 = `[\\\\s|\\\\(]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})\\\\s*\\\\)?`\n\n// const UNIT_REG = new RegExp(NUMBER_UNIT)\n\n// const FORMAT_REG = /^((((?:rgb)|(?:hsl)|(?:hsv))a?)|hex[3468]?|name)$/\n\nexport const RGB_REG = new RegExp(`rgb${COLOR_REG_3}`)\nexport const RGBA_REG = new RegExp(`rgba${COLOR_REG_4}`)\nexport const HSL_REG = new RegExp(`hsl${COLOR_REG_4}`)\nexport const HSLA_REG = new RegExp(`hsla${COLOR_REG_4}`)\nexport const HSV_REG = new RegExp(`hsv${COLOR_REG_4}`)\nexport const HSVA_REG = new RegExp(`hsva${COLOR_REG_4}`)\n\nexport const HEX_REG_3 = /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/\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})$/\nexport const HEX_REG_6 = /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\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})$/\n\nexport const NAMED_COLORS = Object.freeze({\n  aliceblue: 'f0f8ff',\n  antiquewhite: 'faebd7',\n  aqua: '0ff',\n  aquamarine: '7fffd4',\n  azure: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '000',\n  blanchedalmond: 'ffebcd',\n  blue: '00f',\n  blueviolet: '8a2be2',\n  brown: 'a52a2a',\n  burlywood: 'deb887',\n  burntsienna: 'ea7e5d',\n  cadetblue: '5f9ea0',\n  chartreuse: '7fff00',\n  chocolate: 'd2691e',\n  coral: 'ff7f50',\n  cornflowerblue: '6495ed',\n  cornsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: '0ff',\n  darkblue: '00008b',\n  darkcyan: '008b8b',\n  darkgoldenrod: 'b8860b',\n  darkgray: 'a9a9a9',\n  darkgreen: '006400',\n  darkgrey: 'a9a9a9',\n  darkkhaki: 'bdb76b',\n  darkmagenta: '8b008b',\n  darkolivegreen: '556b2f',\n  darkorange: 'ff8c00',\n  darkorchid: '9932cc',\n  darkred: '8b0000',\n  darksalmon: 'e9967a',\n  darkseagreen: '8fbc8f',\n  darkslateblue: '483d8b',\n  darkslategray: '2f4f4f',\n  darkslategrey: '2f4f4f',\n  darkturquoise: '00ced1',\n  darkviolet: '9400d3',\n  deeppink: 'ff1493',\n  deepskyblue: '00bfff',\n  dimgray: '696969',\n  dimgrey: '696969',\n  dodgerblue: '1e90ff',\n  firebrick: 'b22222',\n  floralwhite: 'fffaf0',\n  forestgreen: '228b22',\n  fuchsia: 'f0f',\n  gainsboro: 'dcdcdc',\n  ghostwhite: 'f8f8ff',\n  gold: 'ffd700',\n  goldenrod: 'daa520',\n  gray: '808080',\n  green: '008000',\n  greenyellow: 'adff2f',\n  grey: '808080',\n  honeydew: 'f0fff0',\n  hotpink: 'ff69b4',\n  indianred: 'cd5c5c',\n  indigo: '4b0082',\n  ivory: 'fffff0',\n  khaki: 'f0e68c',\n  lavender: 'e6e6fa',\n  lavenderblush: 'fff0f5',\n  lawngreen: '7cfc00',\n  lemonchiffon: 'fffacd',\n  lightblue: 'add8e6',\n  lightcoral: 'f08080',\n  lightcyan: 'e0ffff',\n  lightgoldenrodyellow: 'fafad2',\n  lightgray: 'd3d3d3',\n  lightgreen: '90ee90',\n  lightgrey: 'd3d3d3',\n  lightpink: 'ffb6c1',\n  lightsalmon: 'ffa07a',\n  lightseagreen: '20b2aa',\n  lightskyblue: '87cefa',\n  lightslategray: '789',\n  lightslategrey: '789',\n  lightsteelblue: 'b0c4de',\n  lightyellow: 'ffffe0',\n  lime: '0f0',\n  limegreen: '32cd32',\n  linen: 'faf0e6',\n  magenta: 'f0f',\n  maroon: '800000',\n  mediumaquamarine: '66cdaa',\n  mediumblue: '0000cd',\n  mediumorchid: 'ba55d3',\n  mediumpurple: '9370db',\n  mediumseagreen: '3cb371',\n  mediumslateblue: '7b68ee',\n  mediumspringgreen: '00fa9a',\n  mediumturquoise: '48d1cc',\n  mediumvioletred: 'c71585',\n  midnightblue: '191970',\n  mintcream: 'f5fffa',\n  mistyrose: 'ffe4e1',\n  moccasin: 'ffe4b5',\n  navajowhite: 'ffdead',\n  navy: '000080',\n  oldlace: 'fdf5e6',\n  olive: '808000',\n  olivedrab: '6b8e23',\n  orange: 'ffa500',\n  orangered: 'ff4500',\n  orchid: 'da70d6',\n  palegoldenrod: 'eee8aa',\n  palegreen: '98fb98',\n  paleturquoise: 'afeeee',\n  palevioletred: 'db7093',\n  papayawhip: 'ffefd5',\n  peachpuff: 'ffdab9',\n  peru: 'cd853f',\n  pink: 'ffc0cb',\n  plum: 'dda0dd',\n  powderblue: 'b0e0e6',\n  purple: '800080',\n  rebeccapurple: '663399',\n  red: 'f00',\n  rosybrown: 'bc8f8f',\n  royalblue: '4169e1',\n  saddlebrown: '8b4513',\n  salmon: 'fa8072',\n  sandybrown: 'f4a460',\n  seagreen: '2e8b57',\n  seashell: 'fff5ee',\n  sienna: 'a0522d',\n  silver: 'c0c0c0',\n  skyblue: '87ceeb',\n  slateblue: '6a5acd',\n  slategray: '708090',\n  slategrey: '708090',\n  snow: 'fffafa',\n  springgreen: '00ff7f',\n  steelblue: '4682b4',\n  tan: 'd2b48c',\n  teal: '008080',\n  thistle: 'd8bfd8',\n  tomato: 'ff6347',\n  turquoise: '40e0d0',\n  violet: 'ee82ee',\n  wheat: 'f5deb3',\n  white: 'fff',\n  whitesmoke: 'f5f5f5',\n  yellow: 'ff0',\n  yellowgreen: '9acd32'\n})\n\nexport type ColorName = keyof typeof NAMED_COLORS\n\nexport const COLOR_NAMES = Object.freeze(new Set(Object.keys(NAMED_COLORS))) as Readonly<\n  Set<ColorName>\n>\n\n/**\n * 判断给定的字符串是否为一个合法颜色值\n *\n * @param value 原始字符串\n *\n * @returns 是否为合法颜色\n */\nexport function isColor(value: string): boolean {\n  value = String(value).trim().toLowerCase()\n\n  if (!value) {\n    return false\n  }\n\n  if (value === 'transparent' || NAMED_COLORS[value as ColorName]) {\n    return true\n  }\n\n  return (\n    value === 'transparent' ||\n    COLOR_NAMES.has(value as ColorName) ||\n    RGB_REG.test(value) ||\n    RGBA_REG.test(value) ||\n    HSL_REG.test(value) ||\n    HSLA_REG.test(value) ||\n    HSV_REG.test(value) ||\n    HSVA_REG.test(value) ||\n    HEX_REG_3.test(value) ||\n    HEX_REG_4.test(value) ||\n    HEX_REG_6.test(value) ||\n    HEX_REG_8.test(value)\n  )\n}\n\n/**\n * 将给定的字符串转化为 {@link ObjectColor}，无法转换时返回 null\n *\n * @param color 原始颜色字符串\n *\n * @returns 解析后的颜色对象\n */\nexport function parseStringColor(color: string): ObjectColor | null {\n  color = color.toString().trim().toLowerCase()\n\n  if (color === 'transparent') {\n    return { r: 0, g: 0, b: 0, a: 0, format: 'name', toString: toRgbString }\n  }\n\n  let named = false\n\n  if (NAMED_COLORS[color as ColorName]) {\n    color = NAMED_COLORS[color as ColorName]\n    named = true\n  }\n\n  let match\n\n  if ((match = RGB_REG.exec(color))) {\n    const { r, g, b } = normalizeRgb(match[1], match[2], match[3])\n\n    return {\n      r: r * 255,\n      g: g * 255,\n      b: b * 255,\n      format: 'rgb',\n      toString: toRgbString\n    }\n  }\n\n  if ((match = RGBA_REG.exec(color))) {\n    const { r, g, b } = normalizeRgb(match[1], match[2], match[3])\n\n    return {\n      r: r * 255,\n      g: g * 255,\n      b: b * 255,\n      a: normalizeAlpha(match[4]),\n      format: 'rgba',\n      toString: toRgbString\n    }\n  }\n\n  if ((match = HSL_REG.exec(color))) {\n    const { h, s, l } = normalizeHsl(match[0], match[1], match[3])\n\n    return { h: h * 360, s, l, format: 'hsl', toString: toHslString }\n  }\n\n  if ((match = HSLA_REG.exec(color))) {\n    const { h, s, l } = normalizeHsl(match[0], match[1], match[3])\n\n    return {\n      h: h * 360,\n      s,\n      l,\n      a: normalizeAlpha(match[4]),\n      format: 'hsla',\n      toString: toHslString\n    }\n  }\n\n  if ((match = HSV_REG.exec(color))) {\n    const { h, s, v } = normalizeHsv(match[0], match[1], match[3])\n\n    return { h: h * 360, s, v, format: 'hsv', toString: toHsvString }\n  }\n\n  if ((match = HSVA_REG.exec(color))) {\n    const { h, s, v } = normalizeHsv(match[0], match[1], match[3])\n\n    return {\n      h: h * 360,\n      s,\n      v,\n      a: normalizeAlpha(match[4]),\n      format: 'hsva',\n      toString: toHsvString\n    }\n  }\n\n  if ((match = HEX_REG_3.exec(color))) {\n    return {\n      r: parseInt(`${match[1]}${match[1]}`, 16),\n      g: parseInt(`${match[2]}${match[2]}`, 16),\n      b: parseInt(`${match[3]}${match[3]}`, 16),\n      format: named ? 'name' : 'hex3',\n      toString: toRgbString\n    }\n  }\n\n  if ((match = HEX_REG_4.exec(color))) {\n    return {\n      r: parseInt(`${match[1]}${match[1]}`, 16),\n      g: parseInt(`${match[2]}${match[2]}`, 16),\n      b: parseInt(`${match[3]}${match[3]}`, 16),\n      a: convertHexToDecimal(`${match[4]}${match[4]}`),\n      format: named ? 'name' : 'hex4',\n      toString: toRgbString\n    }\n  }\n\n  if ((match = HEX_REG_6.exec(color))) {\n    return {\n      r: parseInt(match[1], 16),\n      g: parseInt(match[2], 16),\n      b: parseInt(match[3], 16),\n      format: named ? 'name' : 'hex6',\n      toString: toRgbString\n    }\n  }\n\n  if ((match = HEX_REG_8.exec(color))) {\n    return {\n      r: parseInt(match[1], 16),\n      g: parseInt(match[2], 16),\n      b: parseInt(match[3], 16),\n      a: convertHexToDecimal(match[4]),\n      format: named ? 'name' : 'hex8',\n      toString: toRgbString\n    }\n  }\n\n  return null\n}\n\n/**\n * 将给定的 {@link Color} 解析为 {@link ColorMeta}\n *\n * @param color 原始颜色值\n *\n * @returns 解析后的颜色元数据\n */\nexport function parseColor(color: Color): ColorMeta {\n  const { a, ...rgb } = parseColorToRgba(color)\n\n  delete rgb.format\n\n  const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b)\n  const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b)\n  const hex = rgbToHex(rgb.r, rgb.g, rgb.b)\n\n  const hex8 = rgbaToHex(rgb.r, rgb.g, rgb.b, a)\n\n  return {\n    rgb: rgb as RGBColor,\n    hsl,\n    hsv,\n    hex,\n    alpha: a,\n    rgba: { ...rgb, a, format: 'rgba' },\n    hsla: { ...hsl, a, format: 'hsla' },\n    hsva: { ...hsv, a, format: 'hsva' },\n    hex8,\n    gray: rgbToGrayScale(rgb),\n    origin: color\n  }\n}\n\n/**\n * 将给定的 {@link Color} 解析为 {@link RGBAColor}\n *\n * @param originColor 原始颜色值\n *\n * @returns 解析后的 RGB 颜色对象\n */\nexport function parseColorToRgba(originColor: Color): RGBAColor {\n  let rgb: RGBColor = { r: 0, g: 0, b: 0 }\n  let a = 1\n  let color: Color | null\n\n  if (typeof originColor === 'string') {\n    color = parseStringColor(originColor)\n  } else {\n    color = originColor\n  }\n\n  if (color !== null && typeof color === 'object') {\n    if ('l' in color) {\n      rgb = hslToRgb(color.h, color.s, color.l)\n    } else if ('v' in color) {\n      rgb = hsvToRgb(color.h, color.s, color.v)\n    }\n\n    if ('a' in color) {\n      a = normalizeAlpha(color.a ?? 1)\n\n      if (Number.isNaN(a)) {\n        a = 1\n      }\n    }\n\n    rgb = color as RGBColor\n  }\n\n  return { ...rgb, a, format: 'rgba', toString: toRgbString }\n}\n\n/**\n * 将原始的 h、s、l 值标准化为 0 ~ 1 的值\n *\n * @param h 0 ~ 360\n * @param s 0 ~ 1，0% ~ 100%\n * @param l 0 ~ 1，0% ~ 100%\n *\n * @returns 标准化后的 HSL 对象\n */\nexport function normalizeHsl(h: number | string, s: number | string, l: number | string) {\n  return {\n    h: boundRange(h, 0, 360) / 360,\n    s: boundRange(isPercentage(s) ? parsePercentage(s) : s, 0, 1),\n    l: boundRange(isPercentage(l) ? parsePercentage(l) : l, 0, 1)\n  }\n}\n\n/**\n * 将原始的 r、g、b 值标准化为 0 ~ 1 的值\n *\n * @param r 0 ~ 255\n * @param g 0 ~ 255\n * @param b 0 ~ 255\n *\n * @returns 标准化后 RGB 对象\n */\nexport function normalizeRgb(r: number | string, g: number | string, b: number | string) {\n  return {\n    r: boundRange(r, 0, 255) / 255,\n    g: boundRange(g, 0, 255) / 255,\n    b: boundRange(b, 0, 255) / 255\n  }\n}\n\n/**\n * 将原始的 h、s、v 值标准化为 0 ~ 1 的值\n *\n * @param h 0 ~ 360\n * @param s 0 ~ 1，0% ~ 100%\n * @param v 0 ~ 1，0% ~ 100%\n *\n * @returns 标准化的 HSV 对象\n */\nexport function normalizeHsv(h: number | string, s: number | string, v: number | string) {\n  return {\n    h: boundRange(h, 0, 360) / 360,\n    s: boundRange(isPercentage(s) ? parsePercentage(s) : s, 0, 1),\n    v: boundRange(isPercentage(v) ? parsePercentage(v) : v, 0, 1)\n  }\n}\n\n/**\n * 将原始透明度值标准化为 0 ~ 1 的值\n *\n * @param a 0 ~ 1，0% ~ 100%\n *\n * @returns 标准化后的透明度\n */\nexport function normalizeAlpha(a: number | string) {\n  return boundRange(isPercentage(a) ? parsePercentage(a) : a, 0, 1)\n}\n\n/**\n * 将 HSL 颜色转换为 RGB 颜色\n *\n * @param h 0 ~ 360\n * @param s 0 ~ 1，0% ~ 100%\n * @param l 0 ~ 1，0% ~ 100%\n *\n * @returns 转换后的 RGB 颜色\n */\nexport function hslToRgb(h: number | string, s: number | string, l: number | string): RGBColor {\n  let r, g, b\n  ;({ h, s, l } = normalizeHsl(h, s, l))\n\n  if (s === 0) {\n    r = g = b = l\n  } else {\n    const q = l < 0.5 ? 1 * (1 + s) : l + s - l * s\n    const p = 2 * l - q\n\n    r = hueToRgb(p, q, h + 1 / 3)\n    g = hueToRgb(p, q, h)\n    b = hueToRgb(p, q, h - 1 / 3)\n  }\n\n  r *= 255\n  g *= 255\n  b *= 255\n\n  return { r, g, b, toString: toRgbString }\n}\n\n/**\n * 将 RGB 颜色转换为 HSL 颜色\n *\n * @param r 0 ~ 255\n * @param g 0 ~ 255\n * @param b 0 ~ 255\n *\n * @returns 转换后的 HSL 颜色\n */\nexport function rgbToHsl(r: number | string, g: number | string, b: number | string): HSLColor {\n  ;({ r, g, b } = normalizeRgb(r, g, b))\n\n  const max = Math.max(r, g, b)\n  const min = Math.min(r, g, b)\n  let h, s\n\n  const l = (max + min) / 2\n\n  if (max === min) {\n    h = s = 0\n  } else {\n    const d = max - min\n\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n\n    switch (max) {\n      case r: {\n        h = (g - b) / d + (g < b ? 6 : 0)\n        break\n      }\n      case g: {\n        h = (b - r) / d + 2\n        break\n      }\n      case b: {\n        h = (r - g) / d + 4\n        break\n      }\n      default: {\n        h = 0\n      }\n    }\n\n    h *= 60\n  }\n\n  return { h, s, l, toString: toHslString }\n}\n\n/**\n * 将 HSL 颜色转换为 HSV 颜色\n *\n * @param h 0 ~ 360\n * @param s 0 ~ 1，0% ~ 100%\n * @param l 0 ~ 1，0% ~ 100%\n *\n * @returns 转换后的 HSV 颜色\n */\nexport function hslToHsv(h: number | string, s: number | string, l: number | string): HSVColor {\n  ;({ h, s, l } = normalizeHsl(h, s, l))\n\n  const v = 0.5 * (2 * l + s * (1 - Math.abs(2 * l - 1)))\n\n  s = (2 * (v - l)) / v\n\n  return { h: h * 360, s, v, toString: toHsvString }\n}\n\n/**\n * 将 HSV 颜色转换为 HSL 颜色\n *\n * @param h 0 ~ 360\n * @param s 0 ~ 1，0% ~ 100%\n * @param v 0 ~ 1，0% ~ 100%\n *\n * @returns 转换后的 HSL 颜色\n */\nexport function hsvToHsl(h: number | string, s: number | string, v: number | string): HSLColor {\n  ;({ h, s, v } = normalizeHsv(h, s, v))\n\n  const l = 0.5 * v * (2 - s)\n\n  s = (v * s) / (1 - Math.abs(2 * l - 1))\n\n  return { h: h * 360, s, l, toString: toHslString }\n}\n\n/**\n * 将 HSV 颜色转换为 RGB 颜色\n *\n * @param h 0 ~ 360\n * @param s 0 ~ 1，0% ~ 100%\n * @param v 0 ~ 1，0% ~ 100%\n *\n * @returns 转换后的 RGB 颜色\n */\nexport function hsvToRgb(h: number | string, s: number | string, v: number | string): RGBColor {\n  ;({ h, s, v } = normalizeHsv(h, s, v))\n\n  h *= 6\n\n  const i = Math.floor(h)\n  const f = h - i\n  const p = v * (1 - s)\n  const q = v * (1 - f * s)\n  const t = v * (1 - (1 - f) * s)\n  const mod = i % 6\n\n  let r = [v, q, p, p, t, v][mod]\n  let g = [t, v, v, q, p, p][mod]\n  let b = [p, p, t, v, v, q][mod]\n\n  r *= 255\n  g *= 255\n  b *= 255\n\n  return { r, g, b, toString: toRgbString }\n}\n\n/**\n * 将 RGB 颜色转换为 HSV 颜色\n *\n * @param r 0 ~ 255\n * @param g 0 ~ 255\n * @param b 0 ~ 255\n *\n * @returns 转换后的 HSV 颜色\n */\nexport function rgbToHsv(r: number | string, g: number | string, b: number | string): HSVColor {\n  ;({ r, g, b } = normalizeRgb(r, g, b))\n\n  const max = Math.max(r, g, b)\n  const min = Math.min(r, g, b)\n\n  let h\n\n  const v = max\n  const d = max - min\n  const s = max === 0 ? 0 : d / max\n\n  if (max === min) {\n    h = 0\n  } else {\n    switch (max) {\n      case r: {\n        h = (g - b) / d + (g < b ? 6 : 0)\n        break\n      }\n      case g: {\n        h = (b - r) / d + 2\n        break\n      }\n      case b: {\n        h = (r - g) / d + 4\n        break\n      }\n      default: {\n        h = 0\n      }\n    }\n\n    h *= 60\n  }\n\n  return { h, s, v, toString: toHsvString }\n}\n\n/**\n * 将 RGB 颜色转换为 HEX 颜色\n *\n * @param r 0 ~ 255\n * @param g 0 ~ 255\n * @param b 0 ~ 255\n * @param allow3Char 是否允许 3 位的 HEX 值\n *\n * @returns 转换后的 HEX 颜色\n */\nexport function rgbToHex(\n  r: number | string,\n  g: number | string,\n  b: number | string,\n  allow3Char = false\n) {\n  ;({ r, g, b } = normalizeRgb(r, g, b))\n\n  const hex = [\n    repairDigits(Math.round(r * 255).toString(16)),\n    repairDigits(Math.round(g * 255).toString(16)),\n    repairDigits(Math.round(b * 255).toString(16))\n  ]\n\n  if (allow3Char && isRepetitive(hex[0]) && isRepetitive(hex[1]) && isRepetitive(hex[2])) {\n    return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0)\n  }\n\n  return '#' + hex.join('')\n}\n\n/**\n * 将 RGBA 颜色转换为 HEX 颜色\n *\n * @param r 0 ~ 255\n * @param g 0 ~ 255\n * @param b 0 ~ 255\n * @param a 0 ~ 1，0% ~ 100%\n * @param allow4Char 是否允许 4 位的 HEX 值\n *\n * @returns 转换后的 HEX 颜色\n */\nexport function rgbaToHex(\n  r: number | string,\n  g: number | string,\n  b: number | string,\n  a: number | string,\n  allow4Char = false\n) {\n  ;({ r, g, b } = normalizeRgb(r, g, b))\n\n  const hex = [\n    repairDigits(Math.round(r * 255).toString(16)),\n    repairDigits(Math.round(g * 255).toString(16)),\n    repairDigits(Math.round(b * 255).toString(16)),\n    repairDigits(convertDecimalToHex(normalizeAlpha(a)))\n  ]\n\n  if (\n    allow4Char &&\n    isRepetitive(hex[0]) &&\n    isRepetitive(hex[1]) &&\n    isRepetitive(hex[2]) &&\n    isRepetitive(hex[3])\n  ) {\n    return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0)\n  }\n\n  return '#' + hex.join('')\n}\n\n/**\n * 将两种颜色按照一定的比例混合\n *\n * @param color1 第一种颜色\n * @param color2 第二种颜色\n * @param weight 混合比例 0 ~ 1，越小则第一种颜色越少\n *\n * @returns 混合后的颜色\n */\nexport function mixColor(color1: Color, color2: Color, weight = 0.5): RGBAColor {\n  if (!color1 && !color2) return { r: 0, g: 0, b: 0, a: 1 }\n  if (!color1) return parseColorToRgba(color2)\n  if (!color2) return parseColorToRgba(color1)\n\n  const rgba1 = parseColorToRgba(color1)\n  const rgba2 = parseColorToRgba(color2)\n\n  const originalWeight = boundRange(weight, 0, 1)\n  const normalizedWeight = originalWeight * 2 - 1\n\n  const alphaDistance = rgba1.a - rgba2.a\n  const mixWeight =\n    normalizedWeight * alphaDistance === -1\n      ? normalizedWeight\n      : (normalizedWeight + alphaDistance) / (1 + normalizedWeight * alphaDistance)\n  const weight1 = (mixWeight + 1) / 2\n  const weight2 = 1 - weight1\n\n  return {\n    r: Math.round(rgba1.r * weight1 + rgba2.r * weight2),\n    g: Math.round(rgba1.g * weight1 + rgba2.g * weight2),\n    b: Math.round(rgba1.b * weight1 + rgba2.b * weight2),\n    a: Math.round(rgba1.a * originalWeight + rgba2.a * (1 - originalWeight)),\n    format: 'rgba',\n    toString: toRgbString\n  }\n}\n\n/**\n * 调整给定颜色值的透明度\n *\n * @param color 需要调整的颜色\n * @param alpha 调整后的透明度 0 ~ 1，0% ~ 100%\n *\n * @returns 调整后的颜色\n */\nexport function adjustAlpha(color: Color, alpha: number | string) {\n  const rgba = parseColorToRgba(color)\n\n  rgba.a = normalizeAlpha(alpha)\n\n  return rgba\n}\n\n/**\n * 随机生成一个颜色值\n *\n * @param withAlpha 是否具有透明度\n * @param type 颜色的类型\n *\n * @returns 生成的颜色字面值\n */\nexport function randomColor(withAlpha = false, type: ColorType = 'hex') {\n  const r = Math.round(Math.random() * 255)\n  const g = Math.round(Math.random() * 255)\n  const b = Math.round(Math.random() * 255)\n\n  if (type === 'hex') {\n    return withAlpha ? rgbaToHex(r, g, b, Math.random()) : rgbToHex(r, g, b)\n  }\n\n  let color: ObjectColor\n\n  if (type === 'hsl') {\n    color = rgbToHsl(r, g, b)\n  } else if (type === 'hsv') {\n    color = rgbToHsv(r, g, b)\n  } else {\n    color = Object.create({ r, g, b, toString: toRgbString })\n  }\n\n  if (withAlpha) {\n    ;(color as RGBAColor).a = Math.random()\n  }\n\n  return color.toString()\n}\n\n/**\n * 随机生成一个特定色调（冷暖色）的颜色值\n *\n * @param prefer 色调\n * @param withAlpha 是否具有透明度\n * @param type 颜色的类型\n *\n * @returns 生成的颜色字面值\n */\nexport function randomPreferColor(\n  prefer: 'hard' | 'soft',\n  withAlpha = false,\n  type: ColorType = 'hex'\n) {\n  const h = Math.round(Math.random() * 360)\n  const s = Math.round(prefer === 'hard' ? 80 + Math.random() * 20 : 20 + Math.random() * 70) / 100\n  const l = Math.round(prefer === 'hard' ? 40 + Math.random() * 20 : 80 + Math.random() * 15) / 100\n\n  if (type === 'hsl') {\n    return toHslString.bind({ h, s, l })()\n  }\n\n  let color!: ObjectColor\n\n  if (type === 'hex' || type === 'rgb') {\n    color = hslToRgb(h, s, l)\n\n    if (type === 'hex') {\n      const { r, g, b } = color\n\n      return withAlpha ? rgbaToHex(r, g, b, Math.random()) : rgbToHex(r, g, b)\n    }\n  } else if (type === 'hsv') {\n    color = hslToHsv(h, s, l)\n  }\n\n  if (withAlpha) {\n    ;(color as RGBAColor).a = Math.random()\n  }\n\n  return color.toString()\n}\n\n/**\n * 随机生成一个冷色调的颜色值\n *\n * @param withAlpha 是否具有透明度\n * @param type 颜色的类型\n *\n * @returns 生成的颜色字面值\n */\nexport function randomHardColor(withAlpha = false, type: ColorType = 'hex') {\n  return randomPreferColor('hard', withAlpha, type)\n}\n\n/**\n * 随机生成一个暖色调的颜色值\n *\n * @param withAlpha 是否具有透明度\n * @param type 颜色的类型\n *\n * @returns 生成的颜色字面值\n */\nexport function randomSoftColor(withAlpha = false, type: ColorType = 'hex') {\n  return randomPreferColor('soft', withAlpha, type)\n}\n\n/**\n * 获取给定颜色的灰度\n *\n * @param color 颜色字面值\n *\n * @returns 颜色的灰度\n */\nexport function toGrayScale(color: string) {\n  return rgbToGrayScale(parseColorToRgba(color))\n}\n\nfunction repairDigits(str: string) {\n  return str.length === 1 ? `0${str}` : str.toString()\n}\n\nfunction isRepetitive(string: string): boolean {\n  return string.charAt(0) === string.charAt(1)\n}\n\n// function testUnit(color: number | string): boolean {\n//   return UNIT_REG.test(color as string)\n// }\n\nfunction convertDecimalToHex(number: number | string): string {\n  return Math.round(parseFloat(number as string) * 255).toString(16)\n}\n\nfunction convertHexToDecimal(hex: string): number {\n  return parseInt(hex, 16) / 255\n}\n\nfunction boundRange(number: number | string, min: number, max: number): number {\n  return Math.max(min, Math.min(max, parseFloat(number as string)))\n}\n\nfunction hueToRgb(p: number, q: number, t: number): number {\n  if (t < 0) t += 1\n  if (t > 1) t -= 1\n  if (t < 1 / 6) return p + (q - p) * 6 * t\n  if (t < 1 / 2) return q\n  if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6\n\n  return p\n}\n\nfunction isPercentage(percent: number | string): boolean {\n  return String(percent).trim().includes('%')\n}\n\nfunction parsePercentage(percent: number | string): number {\n  const number = parseFloat(percent as string) / 100\n\n  return Number.isNaN(number) ? 0 : number\n}\n\nfunction toRgbString(this: RGB) {\n  if (isDefined(this.a) && this.a >= 0 && this.a < 1) {\n    return `rgba(${this.r}, ${this.g}, ${this.b}, ${this.a})`\n  }\n\n  return `rgb(${this.r}, ${this.g}, ${this.b})`\n}\n\nfunction toHslString(this: HSL) {\n  const s = `${this.s * 100}%`\n  const l = `${this.l * 100}%`\n\n  if (isDefined(this.a) && this.a >= 0 && this.a < 1) {\n    return `hsla(${this.h}, ${s}, ${l}, ${this.a})`\n  }\n\n  return `hsl(${this.h}, ${s}, ${l})`\n}\n\nfunction toHsvString(this: HSV) {\n  const s = `${this.s * 100}%`\n  const v = `${this.v * 100}%`\n\n  if (isDefined(this.a) && this.a >= 0 && this.a < 1) {\n    return `hsva(${this.h}, ${s}, ${v}, ${this.a})`\n  }\n\n  return `hsv(${this.h}, ${s}, ${v})`\n}\n\nfunction rgbToGrayScale(rgb: RGB) {\n  return (rgb.r * 0.2126 + rgb.g * 0.7152 + rgb.b * 0.0722) / 255\n}\n","let globalCount = 0\n\nexport function getGlobalCount() {\n  return globalCount++\n}\n\nexport function setGlobalCount(count: number) {\n  globalCount = Math.round(count)\n}\n\nexport function createCounter(count = 0) {\n  return {\n    getCount: () => count++,\n    setCount: (newCount: number) => {\n      count = newCount\n    }\n  }\n}\n","export interface BITree {\n  tree: number[],\n  /**\n   * 为第 index 个元素增减值\n   *\n   * @param index 索引值\n   * @param num 增减的值\n   */\n  add(index: number, num: number): void,\n  /**\n   * 求前 index 个元素的和\n   *\n   * @param index 索引值\n   *\n   * @returns 前 index 个元素的和\n   */\n  sum(index?: number): number,\n  /**\n   * 获取第 index 个元素的值\n   *\n   * @param index 索引值\n   *\n   * @returns 第 index 个元素的值\n   */\n  get(index: number): number,\n  /**\n   * 根据目标值寻找一个最接近的元素的索引值\n   *\n   * @param target 目标值\n   *\n   * @returns 最接近的元素的索引值\n   */\n  boundIndex(target: number): number\n}\n\nfunction lowBit(num: number) {\n  return num & -num\n}\n\n/**\n * 创建一个二叉索引树（Fenwick 树）对象\n *\n * 为了节省初始化性能开销，需确保元素最小值已知，其初始值为：元素最小值 * 元素总数\n *\n * @param length 树的大小，即元素的总数\n * @param min 规定元素的最小值\n *\n * @returns 二叉索引树对象\n */\nexport function createBITree(length: number, min = 0): BITree {\n  const tree: number[] = new Array(length + 1).fill(0)\n\n  function add(index: number, delta: number) {\n    if (!delta || index >= length) return\n\n    index += 1\n\n    while (index <= length) {\n      tree[index] += delta\n      index += lowBit(index)\n    }\n  }\n\n  function sum(index = length) {\n    if (index <= 0) return 0\n    if (index > length) index = length\n\n    let sum = index * min\n\n    while (index > 0) {\n      sum += tree[index]\n      index -= lowBit(index)\n    }\n\n    return sum\n  }\n\n  function get(index: number) {\n    return sum(index + 1) - sum(index)\n  }\n\n  function boundIndex(target: number) {\n    let left = 0\n    let right = length\n\n    while (right > left) {\n      const middle = Math.floor((left + right) / 2)\n      const total = sum(middle)\n\n      if (total > target) {\n        right = middle\n        continue\n      } else if (total < target) {\n        if (left === middle) {\n          return sum(left + 1) <= target ? left + 1 : left\n        }\n\n        left = middle\n      } else {\n        return middle\n      }\n    }\n\n    return left\n  }\n\n  return { tree, add, sum, get, boundIndex }\n}\n","import type { AnyCase } from './word-case'\n\nexport const numberRE = /^\\s*[+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?\\s*$/\n\n/**\n * 检测给定的值是否可以通过 parseFlat 或 Number 方法转为数字\n *\n * 开启严格模式则通过正则以更严格的方法判断\n *\n * @param value 需要检测的值\n * @param strict 是否为严格模式\n *\n * @returns 值是否可以转为数字\n */\nexport function isValidNumber(value: unknown, strict = false) {\n  if (typeof value === 'number') {\n    return !Number.isNaN(value)\n  }\n\n  if (strict) {\n    return numberRE.test(String(value))\n  }\n\n  return !Number.isNaN(parseFloat(value as string)) || !Number.isNaN(Number(value))\n}\n\n/**\n * 将给定的值转成数字，NaN 的情况将会处理成 0\n *\n * @param value 需要转换的值\n *\n * @returns 转换后的数字\n */\nexport function toNumber(value: unknown) {\n  let number = parseFloat(value as string)\n\n  if (Number.isNaN(number)) {\n    number = Number(value)\n  }\n\n  return Number.isNaN(number) ? 0 : number\n}\n\n/**\n * 为给定的整数开头填充 0，直至满足指定的长度\n *\n * @param number 需要处理的整数\n * @param length 填充至的长度\n *\n * @returns 填充后的字面值\n */\nexport function padStartZeros(number: number, length: number) {\n  if (length <= 0) {\n    return number.toString()\n  }\n\n  return `${number < 0 ? '-' : ''}${String(Math.abs(Math.round(number))).padStart(length, '0')}`\n}\n\n/**\n * 将小于 10 整数 N 变成 `0N` 的字符串，方法不会对入参校验\n *\n * @param number 需要处理的整数\n *\n * @returns 填充后的字面值\n */\nexport function doubleDigits(number: number) {\n  return padStartZeros(number, 2)\n}\n\n/**\n * 返回数字的小数位数\n *\n * @param number 指定的数字\n *\n * @returns 数字的小数位数\n */\nexport function decimalLength(number: number | string) {\n  // Get digit length of e\n  const eSplit = number.toString().split(/[eE]/)\n  const len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0)\n\n  return len > 0 ? len : 0\n}\n\n/**\n * Return decimal length of a number\n *\n * @param number The input number\n * @deprecated Using `decimalLength` to replace it\n */\nexport function digitLength(number: number | string) {\n  return decimalLength(number)\n}\n\n/**\n * 将给定的数字格式化为指定的位阶\n *\n * @param number 需要格式化的数字\n * @param segment 分隔的位数，默认为 3\n * @param separator 分隔的符号，默认为 ','\n *\n * @returns 格式化后的字面值\n */\nexport function segmentNumber(number: number | string, segment = 3, separator = ',') {\n  if (typeof number !== 'number') {\n    number = parseFloat(number)\n  }\n\n  if (Number.isNaN(number)) return '0'\n\n  let [integer, decimal] = String(number).split('.')\n\n  const formatRegExp = new RegExp(`(\\\\d+)(\\\\d{${segment}})`)\n\n  while (formatRegExp.test(integer)) {\n    integer = integer.replace(formatRegExp, `$1${separator}$2`)\n  }\n\n  decimal = decimal ? `.${decimal}` : ''\n\n  return `${integer}${decimal}`\n}\n\n/**\n * 将给定的实数保留一定的小数\n *\n * @param number 需要处理的实数\n * @param decimal 需要保留的小数\n *\n * @returns 保留小数后的值\n */\nexport function toFixed(number: number, decimal: number) {\n  if (decimal === 0) return Math.round(number)\n\n  let snum = number.toFixed(decimalLength(number))\n\n  const pointPos = snum.indexOf('.')\n\n  if (pointPos === -1) return number\n\n  const nums = snum.replace('.', '').split('')\n  const targetPos = pointPos + decimal\n  const datum = nums[targetPos]\n\n  if (!datum) return number\n\n  if (snum.charAt(targetPos + 1) === '5') {\n    snum = snum.substring(0, targetPos + 1) + '6'\n  } else {\n    snum = snum.substring(0, targetPos + 2)\n  }\n\n  return parseFloat(Number(snum).toFixed(decimal))\n}\n\n/**\n * 将给定的实数扩大一定的倍数并保留一定的小数\n *\n * @param number 要处理的实数\n * @param multiple 要扩大的倍数\n * @param decimal 要保留的小数\n *\n * @returns 扩大并保留小数后的值\n */\nexport function multipleFixed(number: number, multiple: number, decimal: number) {\n  return toFixed(number * multiple, decimal)\n}\n\n/**\n * 根据临界值对给定的数字进行舍入\n *\n * @param number 需要舍入的数\n * @param criticalValue 舍入的临界值 (0 ~ 1)，达到临界值进位反之舍弃\n *\n * @returns 舍入后的值\n */\nexport function round(number: number, criticalValue: number) {\n  if (criticalValue < 0 || criticalValue > 1) {\n    return Math.round(number)\n  }\n\n  const ceilValue = Math.ceil(number)\n\n  if (number + 1 - criticalValue >= ceilValue) {\n    return ceilValue\n  } else {\n    return Math.floor(number)\n  }\n}\n\n/**\n * 将给定的数字限定在指定的范围内\n *\n * @param number 需要限定范围的数\n * @param min 边界最小值，包含该值\n * @param max 边界最大值，包含该值\n *\n * @returns 限定在范围内的值\n */\nexport function boundRange(number: number | string, min: number, max: number) {\n  return Math.max(min, Math.min(max, parseFloat(number as string)))\n}\n\n/**\n * 将给定的被除数和除数，不断的取余直至达到次数限制或余数小于除数，返回系列余数\n *\n * @param number 被除数，需大于 0\n * @param divideBy 除数，需大于 1\n * @param limit 次数限制，默认为 0，小于 1 则不作限制\n *\n * @returns 相除过程的系列余数\n */\nexport function leaveNumber(number: number, divideBy: number, limit = 0) {\n  if (number <= 0 || divideBy <= 1) return [number]\n\n  if (limit < 1) {\n    limit = Infinity\n  }\n\n  const remainders: number[] = []\n  let count = 0\n\n  while (number >= divideBy && count < limit) {\n    remainders.push(number % divideBy)\n    number = Math.floor(number / divideBy)\n    ++count\n  }\n\n  remainders.push(number)\n\n  return remainders.reverse()\n}\n\n/**\n * 将给定的数字转换为序数词\n *\n * @param number 需要转换的数字\n *\n * @returns 转换后的序数词\n */\nexport function ordinalNumber(number: number) {\n  if (number < 0) {\n    return `${number}th`\n  }\n\n  const suffixes = ['th', 'st', 'nd', 'rd']\n  const rest = number % 100\n\n  return `${number}${suffixes[rest] || suffixes[number % 10] || suffixes[0]}`\n}\n\nexport type SizeUnitWithAuto = AnyCase<'B' | 'KB' | 'MB' | 'GB' | 'TB' | 'AUTO'>\nexport type SizeUnit = Exclude<SizeUnitWithAuto, AnyCase<'AUTO'>>\n\nconst SIZE_UNIT_WITH_AUTO = Object.freeze([\n  'B',\n  'KB',\n  'MB',\n  'GB',\n  'TB',\n  'AUTO'\n] as Uppercase<SizeUnitWithAuto>[])\n\n/**\n * 根据给定的 Byte 数值，将其格式化成指定单位的大小\n *\n * @param byte 需要计算的 Byte 数值\n * @param unit 格式化的单位\n * @param precision 结果的精度\n * @param joinUtil 是否加入单位\n *\n * @returns 格式化后的值\n */\nexport function formatByteSize(byte: number, unit?: SizeUnitWithAuto): number\nexport function formatByteSize(byte: number, unit?: SizeUnitWithAuto, precision?: number): number\nexport function formatByteSize(byte: number, unit?: SizeUnitWithAuto, joinUtil?: true): number\nexport function formatByteSize(\n  byte: number,\n  unit?: SizeUnitWithAuto,\n  joinUtil?: true,\n  precision?: number\n): number\nexport function formatByteSize(\n  byte: number,\n  unit: SizeUnitWithAuto = 'AUTO',\n  joinUtil: number | boolean = false,\n  precision?: number\n) {\n  if (typeof precision === 'undefined') {\n    if (typeof joinUtil === 'number') {\n      precision = joinUtil\n      joinUtil = false\n    } else {\n      precision = 2\n    }\n  }\n\n  let upperUnit = unit.toUpperCase() as Uppercase<SizeUnitWithAuto>\n  upperUnit = SIZE_UNIT_WITH_AUTO.includes(upperUnit) ? upperUnit : 'AUTO'\n\n  let power\n  switch (upperUnit) {\n    case 'AUTO':\n      power = 0\n      break\n    case 'KB':\n      power = 1\n      break\n    case 'MB':\n      power = 2\n      break\n    case 'GB':\n      power = 3\n      break\n    case 'TB':\n      power = 4\n      break\n    default:\n      return byte\n  }\n\n  let targetSize\n\n  if (!power) {\n    for (targetSize = byte; targetSize > 1024; ++power) {\n      if (power > 4) break\n      targetSize = targetSize / 1024\n    }\n  } else {\n    targetSize = byte / 1024 ** power\n  }\n\n  targetSize = toFixed(targetSize, precision)\n\n  return joinUtil\n    ? `${targetSize}${upperUnit === 'AUTO' ? SIZE_UNIT_WITH_AUTO[Math.min(power, 4)] : upperUnit}`\n    : targetSize\n}\n\n/**\n * 在给定的范围内随机一个数\n *\n * @param max 最大值\n * @param min 最小值，默认为 0\n *\n * @returns 生成的随机数\n */\nexport function random(max: number, min = 0) {\n  if (min === max) return min\n\n  if (min > max) {\n    ;[min, max] = [max, min]\n  }\n\n  return Math.random() * (max - min) + min\n}\n\n/**\n * 将数字处理为的指定的有效位数\n *\n * @param number 需要处理的数字\n * @param precision 数字的有效位数\n *\n * @returns 处理后的数字\n *\n * @example\n * ```ts\n * toPrecision(0.09999999999999998) === 0.1 // true\n * ```\n */\nexport function toPrecision(number: number | string, precision = 15) {\n  return +parseFloat(Number(number).toPrecision(precision))\n}\n\nfunction multipleInt(number: number | string) {\n  const snum = String(number)\n\n  if (!snum.includes('e')) {\n    return Number(snum.replace('.', ''))\n  }\n\n  const dLength = decimalLength(number)\n\n  return dLength > 0 ? toPrecision(Number(number) * 10 ** dLength) : Number(number)\n}\n\n/**\n * Create an operation to support rest params.\n *\n * @param operation The original operation\n */\nfunction createOperation(operation: (n1: number | string, n2: number | string) => number) {\n  return (...numbers: (number | string)[]) => {\n    let result = numbers[0] as number\n\n    for (let i = 1, len = numbers.length; i < len; ++i) {\n      result = operation(result, numbers[i])\n    }\n\n    return result\n  }\n}\n\n/**\n * 精确的乘法\n *\n * @param numbers 需要依次相乘的数字\n *\n * @returns 乘积\n */\nexport const times = createOperation((number1, number2) => {\n  const int1 = multipleInt(number1)\n  const int2 = multipleInt(number2)\n  const base = decimalLength(number1) + decimalLength(number2)\n  const int = int1 * int2\n\n  return int / 10 ** base\n})\n\n/**\n * 精确的加法\n *\n * @param numbers 需要依次相加的数字\n *\n * @returns 和\n */\nexport const plus = createOperation((number1, number2) => {\n  const base = 10 ** Math.max(decimalLength(number1), decimalLength(number2))\n\n  return (times(number1, base) + times(number2, base)) / base\n})\n\n/**\n * 精确的减法\n *\n * @param numbers 需要依次相减的数字\n *\n * @returns 差值\n */\nexport const minus = createOperation((number1, number2) => {\n  const base = 10 ** Math.max(decimalLength(number1), decimalLength(number2))\n\n  return (times(number1, base) - times(number2, base)) / base\n})\n\n/**\n * 精确的除法\n *\n * @param numbers 需要依次相除的数字\n *\n * @returns 商\n */\nexport const divide = createOperation((number1, number2) => {\n  const int1 = multipleInt(number1)\n  const int2 = multipleInt(number2)\n\n  return times(int1 / int2, toPrecision(10 ** (decimalLength(number2) - decimalLength(number1))))\n})\n","import { doubleDigits } from './number'\n\nexport type Dateable = number | string | Date\n\n/** @deprecated renames to `SECOND_ON_MILLISECONDS` */\nexport const SECOND_ON_MILLS = 1000\nexport const SECOND_ON_MILLISECONDS = 1000\n\nexport const MINUTE_ON_SECONDS = 60\n/** @deprecated renames to `MINUTE_ON_MILLISECONDS` */\nexport const MINUTE_ON_MILLS = MINUTE_ON_SECONDS * SECOND_ON_MILLISECONDS\nexport const MINUTE_ON_MILLISECONDS = MINUTE_ON_SECONDS * SECOND_ON_MILLISECONDS\n\nexport const HOUR_ON_MINUTES = 60\nexport const HOUR_ON_SECONDS = HOUR_ON_MINUTES * MINUTE_ON_SECONDS\n/** @deprecated renames to `HOUR_ON_MILLISECONDS` */\nexport const HOUR_ON_MILLS = HOUR_ON_SECONDS * SECOND_ON_MILLISECONDS\nexport const HOUR_ON_MILLISECONDS = HOUR_ON_SECONDS * SECOND_ON_MILLISECONDS\n\nexport const DAY_ON_HOURS = 24\nexport const DAY_ON_MINUTES = DAY_ON_HOURS * HOUR_ON_MINUTES\nexport const DAY_ON_SECONDS = DAY_ON_MINUTES * MINUTE_ON_SECONDS\n/** @deprecated renames to `DAY_ON_MILLISECONDS` */\nexport const DAY_ON_MILLS = DAY_ON_SECONDS * SECOND_ON_MILLISECONDS\nexport const DAY_ON_MILLISECONDS = DAY_ON_SECONDS * SECOND_ON_MILLISECONDS\n\nexport const WEEK_ON_DAYS = 7\nexport const WEEK_ON_HOURS = WEEK_ON_DAYS * DAY_ON_HOURS\nexport const WEEK_ON_MINUTES = WEEK_ON_HOURS * HOUR_ON_MINUTES\nexport const WEEK_ON_SECONDS = WEEK_ON_MINUTES * MINUTE_ON_SECONDS\n/** @deprecated renames to `WEEK_ON_MILLISECONDS` */\nexport const WEEK_ON_MILLS = WEEK_ON_SECONDS * SECOND_ON_MILLISECONDS\nexport const WEEK_ON_MILLISECONDS = WEEK_ON_SECONDS * SECOND_ON_MILLISECONDS\n\nexport const QUARTER_ON_MONTHS = 3\n\nexport const YEAR_ON_QUARTERS = 4\nexport const YEAR_ON_MONTHS = YEAR_ON_QUARTERS * QUARTER_ON_MONTHS\n\ntype Formatter = (date: Date, match: string) => string | number\n\ninterface Formatters {\n  [prop: string]: Formatter\n}\n\nconst formatters: Formatters = {\n  y(date, match) {\n    const year = date.getFullYear()\n\n    return match.length === 4 ? year : (year % 1000) % 100\n  },\n  M(date, match) {\n    const month = date.getMonth() + 1\n\n    return match.length === 2 ? doubleDigits(month) : month\n  },\n  d(date, match) {\n    const day = date.getDate()\n\n    return match.length === 2 ? doubleDigits(day) : day\n  },\n  H(date, match) {\n    const hour = date.getHours()\n\n    return match.length === 2 ? doubleDigits(hour) : hour\n  },\n  m(date, match) {\n    const minute = date.getMinutes()\n\n    return match.length === 2 ? doubleDigits(minute) : minute\n  },\n  s(date, match) {\n    const second = date.getSeconds()\n\n    return match.length === 2 ? doubleDigits(second) : second\n  },\n  q(date, match) {\n    const quarter = Math.ceil((date.getMonth() + 1) / 3)\n\n    return match.length === 2 ? doubleDigits(quarter) : quarter\n  }\n}\n\nconst formatRegExp = /[yMdHmsq](\\w)*|./g\nconst quotationRegExp = /'(.+?)'/g\n\n/**\n * 将任意可转为 `Date` 对象的变量转为一个新日期\n *\n * @param any 任意可转换的值\n * @param strict 是否在传入非法值时抛错\n *\n * @returns 转换后的 `Date` 对象\n */\nexport function toDate(any: Dateable, strict = false) {\n  const date = new Date(any)\n\n  if (strict && Number.isNaN(+date)) {\n    throw new RangeError('Invalid date value')\n  }\n\n  if (typeof any === 'string' && !any.includes(':')) {\n    date.setHours(0)\n    date.setMinutes(0)\n    date.setSeconds(0)\n  }\n\n  return date\n}\n\n/**\n * 将日期格式化成指定格式\n *\n * @param date 需要格式化的Date对象\n * @param pattern 格式化结构 年-y 月-M 日-d 时-H 分-m 秒-s 季度-q\n *\n * @returns 格式化后的字面值\n *\n * @example\n * ```ts\n * format(new Date(), 'yyyy-MM-dd')\n * ```\n *\n * @example\n * ```ts\n * format(Date.now(), 'yyyy-MM-dd\\'T\\'HH:mm:ss\\'Z\\'')\n * ```\n */\nexport function format(date: Dateable, pattern = 'yyyy-MM-dd HH:mm:ss') {\n  date = toDate(date)\n\n  const matches = pattern.match(formatRegExp)\n  const length = matches?.length\n\n  if (!length) {\n    return pattern\n  }\n\n  let i = 0\n  let result = ''\n\n  while (i < length) {\n    const substring = (matches as RegExpMatchArray)[i]\n    const firstCharacter = substring[0]\n    const formatter = formatters[firstCharacter]\n\n    if (formatter) {\n      result += formatter(date, substring)\n    } else {\n      result += substring\n    }\n\n    ++i\n  }\n\n  return result.replace(quotationRegExp, '$1')\n}\n\n/**\n * 获取日期的时间部分\n *\n * @param date 给定的日期\n *\n * @returns 日期的时间部分\n */\nexport function getTime(date: Dateable) {\n  date = toDate(date)\n\n  return `${doubleDigits(date.getHours())}:${doubleDigits(date.getMinutes())}:${doubleDigits(\n    date.getSeconds()\n  )}`\n}\n\n/**\n * 获取日期所在的季度\n *\n * @param date 给定的日期\n *\n * @returns 日期所在的季度\n */\nexport function getQuarter(date: Dateable) {\n  date = toDate(date)\n\n  return Math.floor(date.getMonth() / 3) + 1\n}\n\nconst weeksForChinese = ['日', '一', '二', '三', '四', '五', '六']\n\n/**\n * 获取中文星期\n *\n * @param date 给定的日期\n *\n * @returns 中文星期\n */\nexport function getChineseWeek(date: Date) {\n  return weeksForChinese[date.getDay()]\n}\n\n/**\n * 为日期增减给定的毫秒\n *\n * @param date 原始日期\n * @param amount 增减的毫秒\n *\n * @returns 修改后的日期\n */\nexport function addMilliseconds(date: Dateable, amount: number) {\n  date = toDate(date)\n  date.setTime(date.getTime() + amount)\n\n  return date\n}\n\n/**\n * 为日期增减给定的秒\n *\n * @param date 原始日期\n * @param amount 增减的秒\n *\n * @returns 修改后的日期\n */\nexport function addSeconds(date: Dateable, amount: number) {\n  amount *= SECOND_ON_MILLISECONDS\n\n  return addMilliseconds(date, amount)\n}\n\n/**\n * 为日期增减给定的分钟\n *\n * @param date 原始日期\n * @param amount 增减的分钟\n *\n * @returns 修改后的日期\n */\nexport function addMinutes(date: Dateable, amount: number) {\n  amount *= MINUTE_ON_SECONDS\n\n  return addSeconds(date, amount)\n}\n\n/**\n * 为日期增减给定的小时\n *\n * @param date 原始日期\n * @param amount 增减的小时\n *\n * @returns 修改后的日期\n */\nexport function addHours(date: Dateable, amount: number) {\n  amount *= HOUR_ON_MINUTES\n\n  return addMinutes(date, amount)\n}\n\n/**\n * 为日期增减给定的半天数（12小时）\n *\n * @param date 原始日期\n * @param amount 增减的半天数\n *\n * @returns 修改后的日期\n */\nexport function addHalfDays(date: Dateable, amount: number) {\n  amount *= 12\n\n  return addHours(date, amount)\n}\n\n/**\n * 为日期增减给定的天数\n *\n * @param date 原始日期\n * @param amount 增减的天数\n *\n * @returns 修改后的日期\n */\nexport function addDays(date: Dateable, amount: number) {\n  date = toDate(date)\n  amount = ~~amount\n\n  date.setDate(date.getDate() + amount)\n\n  return date\n}\n\n/**\n * 为日期增减给定的周数\n *\n * @param date 原始日期\n * @param amount 增减的周数\n *\n * @returns 修改后的日期\n */\nexport function addWeeks(date: Dateable, amount: number) {\n  amount *= WEEK_ON_DAYS\n\n  return addDays(date, amount)\n}\n\n/**\n * 为日期增减给定的月数\n *\n * @param date 原始日期\n * @param amount 增减的月数\n *\n * @returns 修改后的日期\n */\nexport function addMonths(date: Dateable, amount: number) {\n  date = toDate(date)\n  amount = ~~amount\n\n  date.setMonth(date.getMonth() + amount)\n\n  return date\n}\n\n/**\n * 为日期增减给定的季度（3个月）\n *\n * @param date 原始日期\n * @param amount 增减的季度\n *\n * @returns 修改后的日期\n */\nexport function addQuarters(date: Dateable, amount: number) {\n  amount *= QUARTER_ON_MONTHS\n\n  return addMonths(date, amount)\n}\n\n/**\n * 为日期增减给定的年份\n *\n * @param date 原始日期\n * @param amount 增减的年份\n *\n * @returns 修改后的日期\n */\nexport function addYears(date: Dateable, amount: number) {\n  amount *= YEAR_ON_MONTHS\n\n  return addMonths(date, amount)\n}\n\n/**\n * 生成一个天数递进的日期数组\n *\n * @param start 开始日期\n * @param size range 的大小, 默认 42 (一般电子日历为 6 行 7 列)\n * @param step range 的跨幅\n *\n * @returns 生成的日期数组\n */\nexport function rangeDate(start: Dateable, size = 42, step = 1) {\n  start = toDate(start)\n\n  const dateRange: Date[] = []\n\n  for (let i = 0; i < size; ++i) {\n    dateRange.push(addDays(start, i * step))\n  }\n\n  return dateRange\n}\n\n/**\n * 生成一个月份递进的日期数组\n *\n * @param start 开始日期\n * @param size range 的大小, 默认 12 (一年)\n * @param step range 的跨幅\n *\n * @returns 生成的日期数组\n */\nexport function rangeMonth(start: Dateable, size = 12, step = 1) {\n  start = toDate(start)\n\n  const dateRange: Date[] = []\n\n  for (let i = 0; i < size; ++i) {\n    dateRange.push(addMonths(start, i * step))\n  }\n\n  return dateRange\n}\n\n/**\n * 根据给定的日期获取上一个周日\n *\n * @param date 原始日期\n *\n * @returns 上一个周日\n */\nexport function getLastSunday(date: Date) {\n  const day = date.getDay() ?? 7\n\n  return addDays(date, -day)\n}\n\n/**\n * 获取给定的日期所在秒的开始日期（毫秒归零）\n *\n * @param date 原始日期\n *\n * @returns 新的开始日期\n */\nexport function startOfSecond(date: Dateable) {\n  date = toDate(date)\n  date.setMilliseconds(0)\n\n  return date\n}\n\n/**\n * 获取给定的日期所在分钟的开始日期 (秒归零)\n *\n * @param date 原始日期\n *\n * @returns 新的开始日期\n */\nexport function startOfMinute(date: Dateable) {\n  date = toDate(date)\n  date.setSeconds(0, 0)\n\n  return date\n}\n\n/**\n * 获取给定的日期所在小时的开始日期 (分钟归零)\n *\n * @param date 原始日期\n *\n * @returns 新的开始日期\n */\nexport function startOfHour(date: Dateable) {\n  date = toDate(date)\n  date.setMinutes(0, 0, 0)\n\n  return date\n}\n\n/**\n * 获取给定的日期所在天的开始日期\n *\n * @param date 原始日期\n *\n * @returns 新的开始日期\n */\nexport function startOfDay(date: Dateable) {\n  date = toDate(date)\n  date.setHours(0, 0, 0, 0)\n\n  return date\n}\n\n/**\n * 获取给定日期所在天的结束日期\n *\n * @param date 原始日期\n *\n * @returns 新的开始日期\n */\nexport function endOfDay(date: Dateable) {\n  date = toDate(date)\n  date.setHours(23, 59, 59, 999)\n\n  return date\n}\n\n/**\n * 获取给定的日期所在周的第一天的开始日期\n *\n * @param date 需要解析的时间\n * @param startOn 设定周的第一天，默认为周日\n *\n * @returns 新的开始日期\n */\nexport function startOfWeek(date: Dateable, startOn = 0) {\n  startOn = startOn % 7\n\n  if (startOn < 0) {\n    startOn += 7\n  }\n\n  date = toDate(date)\n\n  const day = date.getDay()\n  const difference = (day < startOn ? 7 : 0) + day - startOn\n\n  date.setDate(date.getDate() - difference)\n  date.setHours(0, 0, 0, 0)\n\n  return date\n}\n\n/**\n * 判断给定的年份是否为闰年\n *\n * @param year 原始年份\n *\n * @returns 是否为闰年\n */\nexport function isLeapYear(year: number) {\n  return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0\n}\n\n/**\n * 获取给定年份和月份的最后一天\n *\n * @param year 原始年份\n * @param month 原始月份\n *\n * @returns 最后一天\n */\nexport function getLastDayOfMonth(year: number, month: number) {\n  let lastDay: number\n\n  if (month < 7) {\n    if (month !== 2) {\n      lastDay = 30 + (month % 2)\n    } else {\n      if (isLeapYear(year)) {\n        lastDay = 29\n      } else {\n        lastDay = 28\n      }\n    }\n  } else {\n    lastDay = 31 - (month % 2)\n  }\n\n  return lastDay\n}\n\n/**\n * 获取给定的日期所在月份的第一天的开始日期\n *\n * @param date 原始日期\n * @param startOn 设定一个月的第一天，默认为 1 号\n *\n * @returns 新的开始日期\n */\nexport function startOfMonth(date: Dateable, startOn = 1) {\n  date = toDate(date)\n\n  const year = date.getFullYear()\n  const month = date.getMonth() + 1\n  const day = date.getDate()\n\n  const lastDay = getLastDayOfMonth(year, month)\n\n  startOn = startOn % lastDay\n\n  if (startOn < 0) {\n    startOn += lastDay\n  }\n\n  if (day < startOn) {\n    date.setMonth(month - 1)\n  }\n\n  date.setDate(startOn)\n  date.setHours(0, 0, 0, 0)\n\n  return date\n}\n\n/**\n * 获取给定日期所在季度的第一天的开始日期\n *\n * @param date 原始日期\n *\n * @returns 新的开始日期\n */\nexport function startOfQuarter(date: Dateable) {\n  date = toDate(date)\n\n  const quarter = getQuarter(date)\n\n  date.setDate(1)\n  date.setHours(0, 0, 0, 0)\n  date.setMonth((quarter - 1) * 3)\n\n  return date\n}\n\n/**\n * 获取给定日期所在年份的第一天的开始日期\n *\n * @param date 原始日期\n * @param startOn 设定年的开始月份，默认为一月\n *\n * @returns 新的开始日期\n */\nexport function startOfYear(date: Dateable, startOn = 0) {\n  startOn = startOn % 11\n\n  if (startOn < 0) {\n    startOn += 11\n  }\n\n  date = toDate(date)\n\n  const month = date.getMonth()\n  const difference = (month < startOn ? 11 : 0) + month - startOn\n\n  date.setMonth(date.getMonth() - difference)\n  date.setDate(1)\n  date.setHours(0, 0, 0, 0)\n\n  return date\n}\n\n/**\n * 比较两个日期相差的毫秒\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的毫秒数\n */\nexport function differenceMilliseconds(left: Dateable, right: Dateable) {\n  left = toDate(left)\n  right = toDate(right)\n\n  return right.getTime() - left.getTime()\n}\n\n/**\n * 比较两个日期相差的秒\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的秒数\n */\nexport function differenceSeconds(left: Dateable, right: Dateable) {\n  const diff = differenceMilliseconds(left, right) / SECOND_ON_MILLS\n\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\n/**\n * 比较两个日期相差的分钟\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的分钟数\n */\nexport function differenceMinutes(left: Dateable, right: Dateable) {\n  const diff = differenceMilliseconds(left, right) / MINUTE_ON_MILLS\n\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\n/**\n * 比较两个日期相差的小时\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的小时数\n */\nexport function differenceHours(left: Dateable, right: Dateable) {\n  const diff = differenceMilliseconds(left, right) / HOUR_ON_MILLS\n\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\n/**\n * 比较两个日期相差的天数\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的天数\n */\nexport function differenceDays(left: Dateable, right: Dateable) {\n  left = startOfDay(left)\n  right = startOfDay(right)\n\n  return (right.getTime() - left.getTime()) / DAY_ON_MILLS\n}\n\n/**\n * 比较两个日期相差的周\n *\n * @param left 原始日期\n * @param right 原始日期\n * @param weekStartOn 设定周的第一天，默认为周日\n *\n * @returns 相差的周数\n */\nexport function differenceWeeks(left: Dateable, right: Dateable, weekStartOn = 0) {\n  left = startOfWeek(left, weekStartOn)\n  right = startOfWeek(right, weekStartOn)\n\n  return (right.getTime() - left.getTime()) / WEEK_ON_MILLS\n}\n\n/**\n * 比较两个日期相差的月\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的月份\n */\nexport function differenceMonths(left: Dateable, right: Dateable) {\n  left = toDate(left)\n  right = toDate(right)\n\n  const yearDiff = right.getFullYear() - left.getFullYear()\n  const monthDiff = right.getMonth() - left.getMonth()\n\n  return yearDiff * 12 + monthDiff\n}\n\n/**\n * 比较两个日期相差的季度\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的季度\n */\nexport function differenceQuarters(left: Dateable, right: Dateable) {\n  left = toDate(left)\n  right = toDate(right)\n\n  const yearDiff = right.getFullYear() - left.getFullYear()\n  const quarterDiff = getQuarter(right) - getQuarter(left)\n\n  return yearDiff * 4 + quarterDiff\n}\n\n/**\n * 比较两个日期相差的年份\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的年份\n */\nexport function differenceYears(left: Dateable, right: Dateable) {\n  left = toDate(left)\n  right = toDate(right)\n\n  return right.getFullYear() - left.getFullYear()\n}\n\n/**\n * 升序比较两个日期大小，用于给数组的 sort 方法使用\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 比较后的结果，`-1` 则左侧小，`1` 则右侧小，`0` 则相等\n */\nexport function compareAsc(left: Dateable, right: Dateable) {\n  left = toDate(left)\n  right = toDate(right)\n\n  const diff = left.getTime() - right.getTime()\n\n  return diff < 0 ? -1 : diff > 0 ? 1 : diff\n}\n\n/**\n * 降序比较两个日期大小，用于给数组的 sort 方法使用\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 比较后的结果，`1` 则左侧小，`-1` 则右侧小，`0` 则相等\n */\nexport function compareDesc(left: Dateable, right: Dateable) {\n  return -compareAsc(left, right)\n}\n\n/**\n * 比较两个日期相差的完整秒\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整秒数\n */\nexport function differenceFullSeconds(left: Dateable, right: Dateable) {\n  left = startOfSecond(left)\n  right = startOfSecond(right)\n\n  return differenceSeconds(left, right)\n}\n\n/**\n * 比较两个日期相差的完整分钟\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整分钟数\n */\nexport function differenceFullMinutes(left: Dateable, right: Dateable) {\n  left = startOfMinute(left)\n  right = startOfMinute(right)\n\n  return differenceMinutes(left, right)\n}\n\n/**\n * 比较两个日期相差的完整小时\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整小时数\n */\nexport function differenceFullHours(left: Dateable, right: Dateable) {\n  left = startOfHour(left)\n  right = startOfHour(right)\n\n  return differenceHours(left, right)\n}\n\n/**\n * 比较两个日期相差的完整天\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整天数\n */\nexport function differenceFullDays(left: Dateable, right: Dateable) {\n  const sign = compareDesc(left, right)\n  const difference = Math.abs(differenceDays(left, right))\n\n  left = toDate(left)\n  left.setDate(left.getDate() + sign * difference)\n\n  const isLastNotFull = compareDesc(left, right) === -sign\n\n  return sign * (difference - (isLastNotFull ? 1 : 0))\n}\n\n/**\n * 比较两个日期相差的完整周\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整周数\n */\nexport function differenceFullWeeks(left: Dateable, right: Dateable) {\n  const diff = differenceFullDays(left, right) / WEEK_ON_DAYS\n\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\n/**\n * 比较两个日期相差的完整月\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整月份\n */\nexport function differenceFullMonths(left: Dateable, right: Dateable) {\n  const sign = compareDesc(left, right)\n  const difference = Math.abs(differenceMonths(left, right))\n\n  left = toDate(left)\n  left.setMonth(left.getMonth() + sign * difference)\n\n  const isLastNotFull = compareDesc(left, right) === -sign\n\n  return sign * (difference - (isLastNotFull ? 1 : 0))\n}\n\n/**\n * 比较两个日期相差的完整季度\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整季度\n */\nexport function differenceFullQuarters(left: Dateable, right: Dateable) {\n  const diff = differenceFullMonths(left, right) / 3\n\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\n/**\n * 比较两个日期相差的完整年份\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整年份\n */\nexport function differenceFullYears(left: Dateable, right: Dateable) {\n  const sign = compareDesc(left, right)\n  const difference = Math.abs(differenceYears(left, right))\n\n  left = toDate(left)\n  left.setFullYear(left.getFullYear() + sign * difference)\n\n  const isLastNotFull = compareDesc(left, right) === -sign\n\n  return sign * (difference - (isLastNotFull ? 1 : 0))\n}\n","import { getType, noop } from './common'\n\nexport interface DeepCloneOptions {\n  /**\n   * 一个自定义的克隆对象方法，用于处理方法内置以外的对象克隆，如 Class 的实例\n   *\n   * @param type 对象的类型，注意格式为大驼峰\n   * @param obj 原始对象\n   *\n   * @returns 克隆后对象\n   */\n  cloneObject?: (type: string, obj: unknown) => any\n}\n\n/**\n * 深度拷贝对象或数组\n *\n * @param obj 需要拷贝的对象或数组\n *\n * @returns 克隆后的对象\n */\nexport function deepClone<T>(obj: T, options: DeepCloneOptions = {}): T {\n  if (obj == null || typeof obj !== 'object') {\n    return obj\n  }\n\n  const { cloneObject = noop } = options\n  const temp = {} as any\n\n  // 循环数组栈\n  const loopList: Array<{\n    parent: any,\n    prop: any,\n    data: any\n  }> = [\n    {\n      parent: temp,\n      prop: 'root',\n      data: obj\n    }\n  ]\n\n  const referenceMap = new WeakMap<any, any>()\n  const setProps: Array<{ parent: any, prop: any }> = []\n  const mapProps: Array<{ parent: any, prop: any }> = []\n\n  while (loopList.length) {\n    // 先入后出，深度优先\n    const { parent, prop, data } = loopList.pop()!\n\n    if (!parent) continue\n\n    const type = getType(data)\n\n    if (type === 'Date') {\n      parent[prop] = new Date(data as Date)\n      continue\n    }\n\n    if (type !== 'Array') {\n      const result = cloneObject(type, data)\n\n      if (result != null) {\n        parent[prop] = result\n        continue\n      }\n    }\n\n    // 初始化克隆对象\n    const cloned: any = (parent[prop] =\n      type === 'Array' || type === 'Set' || type === 'Map' ? [] : {})\n\n    if (type === 'Set' || type === 'Map') {\n      let i = 0\n\n      if (type === 'Set') {\n        for (const item of data) {\n          if (referenceMap.has(item)) {\n            cloned[i] = referenceMap.get(item)!\n          } else if (item !== null && typeof item === 'object') {\n            loopList.push({\n              parent: cloned,\n              prop: i,\n              data: item\n            })\n          } else {\n            cloned[i] = item\n          }\n\n          ++i\n        }\n\n        setProps.push({ parent, prop })\n      } else {\n        for (const entry of data) {\n          const clonedEntry = []\n          i = 0\n\n          for (const item of entry) {\n            if (referenceMap.has(item)) {\n              clonedEntry[i] = referenceMap.get(item)!\n            } else if (item !== null && typeof item === 'object') {\n              loopList.push({\n                parent: clonedEntry,\n                prop: i,\n                data: item\n              })\n            } else {\n              clonedEntry[i] = item\n            }\n\n            ++i\n          }\n\n          cloned.push(clonedEntry)\n        }\n\n        mapProps.push({ parent, prop })\n      }\n    } else {\n      for (const key of Object.keys(data)) {\n        const item = data[key]\n\n        // 处理循环引用\n        if (referenceMap.has(item)) {\n          cloned[key] = referenceMap.get(item)!\n        } else if (item !== null && typeof item === 'object') {\n          loopList.push({\n            parent: cloned,\n            prop: key,\n            data: item\n          })\n        } else {\n          cloned[key] = item\n        }\n      }\n    }\n\n    referenceMap.set(data, cloned)\n  }\n\n  for (const { parent, prop } of setProps) {\n    parent[prop] = new Set(parent[prop])\n  }\n\n  for (const { parent, prop } of mapProps) {\n    parent[prop] = new Map(parent[prop])\n  }\n\n  return temp.root\n}\n","const defaultMessage = 'This object was destroyed, do not use it anywhere'\nconst returnTrue = () => true\n\n/**\n * 将一个对象销毁，销毁后的对象所有方法不可用，属性值均为 `null`\n *\n * @param object 要销毁的对象\n * @param message 销毁后，调用方法时的错误信息\n */\nexport function destroyObject(object: any, message = defaultMessage) {\n  const throwDestroyed = () => {\n    throw new Error(message)\n  }\n\n  Object.keys(object).forEach(name => {\n    if (typeof object[name] === 'function') {\n      object[name] = throwDestroyed.bind(object)\n    } else {\n      object[name] = null\n    }\n  })\n\n  Object.getOwnPropertyNames(object.constructor.prototype).forEach(name => {\n    if (name !== 'constructor' && typeof object[name] === 'function') {\n      object[name] = throwDestroyed.bind(object)\n    }\n  })\n\n  object.isDestroyed = returnTrue\n}\n","import { isClient, isDefined } from './common'\n\n/**\n * 专用的类型，用于适配 Vexip UI 中 `transfer` 属性的处理\n */\nexport interface TransferNode extends Element {\n  __transferElement?: Element | null\n}\n\nexport interface EventPayload extends EventInit {\n  /**\n   * 事件的类型\n   */\n  type: string,\n  [prop: string]: any\n}\n\n/**\n * 当前是否可以使用触摸交互\n */\nexport const USE_TOUCH = isClient && ('ontouchstart' in window || getMaxTouchPoints() > 0)\n/**\n * 当前点击的类型，可以使用触摸交互时为 `pointerdown`，否则为 `click`\n */\nexport const CLICK_TYPE = USE_TOUCH ? 'pointerdown' : 'click'\n\nfunction getMaxTouchPoints() {\n  return typeof navigator !== 'undefined'\n    ? navigator.maxTouchPoints || ((navigator as any).msMaxTouchPoints as number) || 0\n    : 0\n}\n\n/**\n * 为指定的元素派发事件\n *\n * @param el 指定的元素\n * @param payload 事件的属性\n * @param Event 事件类\n *\n * @returns 事件是否派发成功\n */\nexport function dispatchEvent(el: Element, payload: EventPayload, Event = window.Event) {\n  const { type, bubbles = false, cancelable = false, ...data } = payload\n\n  if (!isDefined(type) || type === '') return false\n\n  let event\n\n  if (isDefined(Event)) {\n    event = new Event(type, { bubbles, cancelable })\n  } else {\n    event = document.createEvent('HTMLEvents')\n    event.initEvent(type, bubbles, cancelable)\n  }\n\n  Object.assign(event, data)\n\n  return el.dispatchEvent(event)\n}\n","import { isClient, isDefined } from './common'\nimport { isValidNumber, toNumber } from './number'\n\nimport type { TransferNode } from './dom-event'\n\nconst TABABLE_SELECTOR = [\n  'button',\n  '[href]:not(.disabled)',\n  'input',\n  'select',\n  'textarea',\n  '[tabindex]',\n  '[contenteditable]'\n]\n  .map(s => `${s}:not(:disabled):not([disabled])`)\n  .join(', ')\n\nfunction isElement(el?: Element | null): el is HTMLElement {\n  return !!el && el.nodeType === 1\n}\n\nfunction ensureElement(el?: Element | null) {\n  return isElement(el) ? el : document.body\n}\n\n/**\n * 检索匹配指定选择器的所有元素\n *\n * @param selector 选择器\n * @param root 根元素，不指定时为 `document.body`\n *\n * @returns 匹配的所有元素\n */\nexport function queryAll(selector: string, root?: Element | null) {\n  if (!isClient || !selector) return []\n\n  return Array.from(ensureElement(root).querySelectorAll(selector)) as HTMLElement[]\n}\n\n/**\n * 判断指定的元素是否聚焦或包含聚焦的元素\n *\n * @param el 需判断的元素\n *\n * @returns 是否聚焦或包含聚焦的元素\n */\nexport function isFocusIn(el?: Element | null) {\n  if (!isClient) return false\n\n  const activeEl = document.activeElement as HTMLElement\n\n  if (!isElement(el) || !activeEl) return false\n\n  return el === activeEl || contains(activeEl, el)\n}\n\n/**\n * 判断一个元素是否包含另一个元素\n *\n * @param el 被包含的元素（子元素）\n * @param parent 包含的元素（父元素）\n *\n * @returns 元素是否包含另一个元素\n */\nexport function contains(el?: Element | null, parent?: HTMLElement | null) {\n  if (!el || !parent) return false\n\n  const tel = (parent as TransferNode).__transferElement\n\n  return parent.contains(el) || (!!tel && (tel === el || tel.contains(el)))\n}\n\n/**\n * 判断指定的元素是否隐藏\n *\n * @param el 需判断的元素\n *\n * @returns 元素是否隐藏\n */\nexport function isHidden(el?: Element | null) {\n  if (!isClient || !isElement(el) || !el.parentNode || !contains(el, document.body)) {\n    return true\n  }\n\n  if (el.style.display === 'none') {\n    return true\n  }\n\n  const rect = el.getBoundingClientRect()\n\n  return !(rect && rect.width > 0 && rect.height > 0)\n}\n\n/**\n * 判断指定的元素是否可见\n *\n * @param el 需判断的元素\n *\n * @returns 元素是否可见\n */\nexport function isVisible(el?: Element | null) {\n  return !isHidden(el)\n}\n\n/**\n * 判断指定的元素是否被禁用\n *\n * @param el 需判断的元素\n *\n * @returns 元素是否被禁用\n */\nexport function isDisabled(el?: Element | null) {\n  return (\n    !isElement(el) ||\n    (el.hasAttribute('disabled') && el.getAttribute('disabled') !== 'false') ||\n    (el as HTMLInputElement).disabled\n  )\n}\n\n/**\n * 检索可以被切换焦点（Tab）的元素\n *\n * @param root 根元素，不指定时为 `document.body`\n * @param includeDisabled 是否包含被禁用的元素\n *\n * @returns 可以被切换焦点的元素\n */\nexport function queryTabables(root?: HTMLElement, includeDisabled = false) {\n  const isDis = includeDisabled ? () => false : isDisabled\n\n  return queryAll(TABABLE_SELECTOR, root).filter(\n    el => isVisible(el) && el.tabIndex > -1 && !isDis(el)\n  )\n}\n\n/**\n * 获取元素横向的内边距像素值\n *\n * @param el 指定的元素\n *\n * @returns 元素横向的内边距像素值\n */\nexport function getXPadding(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const computedStyle = getComputedStyle(el)\n  const padding = parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight)\n\n  return padding || 0\n}\n\n/**\n * 获取元素纵向的内边距像素值\n *\n * @param el 指定的元素\n *\n * @returns 元素纵向的内边距像素值\n */\nexport function getYPadding(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const computedStyle = getComputedStyle(el)\n  const padding = parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom)\n\n  return padding || 0\n}\n\n/**\n * 获取元素横向的外边距像素值\n *\n * @param el 指定的元素\n *\n * @returns 元素横向的外边距像素值\n */\nexport function getXMargin(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const computedStyle = getComputedStyle(el)\n  const margin = parseFloat(computedStyle.marginLeft) + parseFloat(computedStyle.marginRight)\n\n  return margin || 0\n}\n\n/**\n * 获取元素纵向的外边距像素值\n *\n * @param el 指定的元素\n *\n * @returns 元素纵向的外边距像素值\n */\nexport function getYMargin(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const computedStyle = getComputedStyle(el)\n  const margin = parseFloat(computedStyle.marginTop) + parseFloat(computedStyle.marginBottom)\n\n  return margin || 0\n}\n\n/**\n * 获取元素横向的边框像素值\n *\n * @param el 指定的元素\n *\n * @returns 元素横向的边框像素值\n */\nexport function getXBorder(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const computedStyle = getComputedStyle(el)\n  const width =\n    parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth)\n\n  return width || 0\n}\n\n/**\n * 获取元素纵向的边框像素值\n *\n * @param el 指定的元素\n *\n * @returns 元素纵向的边框像素值\n */\nexport function getYBorder(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const computedStyle = getComputedStyle(el)\n  const width =\n    parseFloat(computedStyle.borderTopWidth) + parseFloat(computedStyle.borderBottomWidth)\n\n  return width || 0\n}\n\n/**\n * 获取元素的选中宽度\n *\n * @param el 指定的元素\n *\n * @returns 元素的选中宽度\n */\nexport function getRangeWidth(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const range = document.createRange()\n\n  range.setStart(el, 0)\n  range.setEnd(el, el.childNodes.length)\n\n  const rangeWidth = range.getBoundingClientRect().width\n  const xPadding = getXPadding(el)\n\n  return rangeWidth + xPadding\n}\n\n/**\n * 给定的值如果为合法数字，则将转换为像素值\n *\n * @param value 需要判断的值\n *\n * @returns 转换后的像素值\n */\nexport function toCssSize(value: number | string) {\n  return isValidNumber(value, true) ? `${toNumber(value)}px` : String(value).trim()\n}\n\n/**\n * 将指定的值转换为 HTML 属性值\n *\n * @param value 需要转换的值\n *\n * @returns 转换后的 HTML 属性值\n */\nexport function toAttrValue(value?: boolean | null): 'true' | undefined\nexport function toAttrValue(value?: string | number | null): string | undefined\nexport function toAttrValue(value?: string | number | boolean | null) {\n  return isDefined(value) && value !== false ? String(value) : undefined\n}\n","export type EventType = number | string | symbol\nexport type EventHandler = (...payload: any[]) => void\nexport type EventHandlerSet = Set<EventHandler>\nexport type EventHandlerMap = Map<EventType, EventHandlerSet>\n\nexport interface EventEmitter {\n  /**\n   * 为指定的事件添加回调方法\n   *\n   * @param type 事件类型\n   * @param handler 回调方法\n   */\n  on: (type: EventType, handler: EventHandler) => void,\n  /**\n   * 为指定的事件移除回调方法\n   *\n   * @param type 事件类型\n   * @param handler 回调方法\n   */\n  off: (type: EventType, handler: EventHandler) => void,\n  /**\n   * 为指定的事件清除所有回调方法\n   *\n   * @param type 事件类型\n   */\n  clear: (type: EventType) => void,\n  /**\n   * 清除所有事件的所有回调方法\n   */\n  clearAll: () => void,\n  /**\n   * 派发特定的事件\n   *\n   * @param type 事件类型\n   * @param payload 传入事件回调方法的参数\n   */\n  emit: (type: EventType, ...payload: any[]) => void\n}\n\n/**\n * 创建一个自定义的事件发射器\n *\n * @returns 事件发射器\n */\nexport function createEventEmitter() {\n  const handlerMap: EventHandlerMap = new Map()\n\n  return {\n    on(type, handler) {\n      const handlers = handlerMap.get(type)\n      const added = handlers?.add(handler)\n\n      if (!added) {\n        handlerMap.set(type, new Set([handler]))\n      }\n    },\n    off(type, handler) {\n      const handlers = handlerMap.get(type)\n\n      if (handlers) {\n        handlers.delete(handler)\n      }\n    },\n    clear(type) {\n      const handlers = handlerMap.get(type)\n\n      if (handlers) {\n        handlers.clear()\n      }\n    },\n    clearAll() {\n      handlerMap.clear()\n    },\n    emit(type, ...payload) {\n      const handlers = handlerMap.get(type)\n\n      if (handlers) {\n        handlers.forEach(handler => {\n          handler(...payload)\n        })\n      }\n    }\n  } as EventEmitter\n}\n","function logOnce(message: string, cache: Set<string>, logFn: (...data: any[]) => void) {\n  if (message && !cache.has(message)) {\n    logFn(message)\n    cache.add(message)\n  }\n}\n\nconst infoCache = new Set<string>()\n\n/**\n * 仅发出一次的提示消息\n *\n * @param message 消息内容\n * @param logFn 输出函数\n */\nexport function infoOnce(message: string, logFn = console.info) {\n  logOnce(message, infoCache, logFn)\n}\n\nconst warnCache = new Set<string>()\n\n/**\n * 仅发出一次的警告消息\n *\n * @param message 消息内容\n * @param logFn 输出函数\n */\nexport function warnOnce(message: string, logFn = console.warn) {\n  logOnce(message, warnCache, logFn)\n}\n\nconst errorCache = new Set<string>()\n\n/**\n * 仅发出一次的错误消息\n *\n * @param message 消息内容\n * @param logFn 输出函数\n */\nexport function errorOnce(message: string, logFn = console.warn) {\n  logOnce(message, errorCache, logFn)\n}\n","import { isClient, noop } from './common'\n\nexport const raf = isClient\n  ? requestAnimationFrame\n  : (cb: FrameRequestCallback) => {\n      setTimeout(cb, 16)\n    }\n\n/**\n * 将一个方法进行节流\n *\n * @param method 需要节流的方法，需自行绑定 this\n * @param interval 节流后的触发间隔，默认 16 ms (1 帧)\n *\n * @returns 节流后的方法\n */\nexport function throttle<T extends (...args: any[]) => any>(\n  method: T,\n  interval = 16\n): (...args: Parameters<T>) => void {\n  if (typeof method !== 'function') {\n    return noop\n  }\n\n  const invoke = (...args: Parameters<T>) => {\n    method(...args)\n  }\n\n  if (interval <= 0) {\n    return debounceMinor(invoke)\n  }\n\n  let lastCall = 0\n  let timer: ReturnType<typeof setTimeout>\n\n  return function (...args: Parameters<T>) {\n    const current = Date.now()\n    const elapsed = current - lastCall\n\n    clearTimeout(timer)\n\n    if (elapsed >= interval) {\n      lastCall = current\n      invoke(...args)\n    } else {\n      timer = setTimeout(\n        () => {\n          lastCall = Date.now()\n          invoke(...args)\n        },\n        Math.max(0, interval - elapsed)\n      )\n    }\n  }\n}\n\n/**\n * 将一个方法进行防抖\n *\n * @param method 需要防抖的方法，需自行绑定 this\n * @param delay 防抖的限制时间，默认 100ms\n *\n * @returns 防抖后的方法\n */\nexport function debounce<T extends (...args: any[]) => any>(\n  method: T,\n  delay = 100\n): (...args: Parameters<T>) => void {\n  if (typeof method !== 'function') {\n    return noop\n  }\n\n  const invoke = (...args: Parameters<T>) => {\n    method(...args)\n  }\n\n  if (delay <= 0) {\n    return debounceMinor(invoke)\n  }\n\n  let timer: ReturnType<typeof setTimeout>\n\n  return function (...args: Parameters<T>) {\n    clearTimeout(timer)\n\n    timer = setTimeout(() => {\n      invoke(...args)\n    }, delay)\n  }\n}\n\n/**\n * 对给定的方法进行微任务级别的防抖\n *\n * @param method 需要防抖的方法，需自行绑定 this\n *\n * @returns 防抖后的方法\n */\nexport function debounceMinor<T extends (...args: any[]) => any>(method: T) {\n  if (typeof method !== 'function') {\n    return method\n  }\n\n  let called = false\n  let lastArgs: Parameters<T>\n  let promise: Promise<Awaited<ReturnType<T>>>\n\n  return function (...args: Parameters<T>) {\n    lastArgs = args\n\n    if (!called) {\n      called = true\n      promise = Promise.resolve().then(() => {\n        called = false\n        promise = undefined!\n\n        return method(...lastArgs)\n      })\n    }\n\n    return promise\n  }\n}\n\n/**\n * 对给定的方法进行渲染帧级别的防抖\n *\n * @param method 需要防抖的方法，需自行绑定 this\n *\n * @returns 防抖后的方法\n */\nexport function debounceFrame<T extends (...args: any[]) => any>(method: T) {\n  if (typeof method !== 'function') {\n    return method\n  }\n\n  let called = false\n  let lastArgs: Parameters<T>\n  let promise: Promise<Awaited<ReturnType<T>>>\n\n  return function (...args: Parameters<T>) {\n    lastArgs = args\n\n    if (!called) {\n      called = true\n      promise = new Promise(resolve =>\n        raf(() => {\n          called = false\n          promise = undefined!\n\n          resolve(method(...lastArgs))\n        })\n      )\n    }\n\n    return promise\n  }\n}\n\nconst tickCallbacks = new Set<(...args: any[]) => any>()\nconst tickArgsMap = new WeakMap<any, any[]>()\n\nfunction flushTickCallbacks() {\n  tickCallbacks.forEach(fn => {\n    fn(...tickArgsMap.get(fn)!)\n  })\n  tickCallbacks.clear()\n}\n\n/**\n * 在下一微任务，仅执行一次传入的方法\n *\n * @param method 需要执行的方法\n * @param args 方法的额外参数，在方法调用前多次传入将会覆盖之前的参数\n */\nexport function nextTickOnce<T extends (...args: any[]) => any>(method: T, ...args: any[]) {\n  if (typeof method !== 'function') {\n    return method\n  }\n\n  tickArgsMap.set(method, args)\n\n  if (tickCallbacks.has(method)) {\n    return\n  }\n\n  tickCallbacks.add(method)\n\n  if (tickCallbacks.size === 1) {\n    Promise.resolve().then(flushTickCallbacks)\n  }\n}\n\nconst frameCallbacks = new Set<(...args: any[]) => any>()\nconst frameArgsMap = new WeakMap<any, any[]>()\n\nfunction flushFrameCallbacks() {\n  frameCallbacks.forEach(fn => {\n    fn(...frameArgsMap.get(fn)!)\n  })\n  frameCallbacks.clear()\n}\n\n/**\n * 在下一渲染帧，仅执行一次传入的方法\n *\n * @param method 需要执行的方法\n * @param args 方法的额外参数，在方法调用前多次传入将会覆盖之前的参数\n */\nexport function nextFrameOnce<T extends (...args: any[]) => any>(method: T, ...args: any[]) {\n  if (typeof method !== 'function') {\n    return method\n  }\n\n  frameArgsMap.set(method, args)\n\n  if (frameCallbacks.has(method)) {\n    return\n  }\n\n  frameCallbacks.add(method)\n\n  if (frameCallbacks.size === 1) {\n    raf(flushFrameCallbacks)\n  }\n}\n\n/**\n * 按指定的并发数，并行地为系列源数据执行操作\n *\n * @param maxConcurrency 最大的并发数\n * @param source 源数据\n * @param iteratorFn 处理操作的异步函数\n *\n * @returns 等待所有任务执行完的 Promise 对象\n */\nexport async function runParallel<T>(\n  maxConcurrency: number,\n  source: T[],\n  iteratorFn: (item: T, source: T[]) => Promise<any>\n) {\n  const ret: Array<Promise<any>> = []\n  const executing: Array<Promise<any>> = []\n\n  for (const item of source) {\n    const p = Promise.resolve().then(() => iteratorFn(item, source))\n\n    ret.push(p)\n\n    if (maxConcurrency <= source.length) {\n      const e: Promise<any> = p.then(() => executing.splice(executing.indexOf(e), 1))\n\n      executing.push(e)\n\n      if (executing.length >= maxConcurrency) {\n        await Promise.race(executing)\n      }\n    }\n  }\n\n  return Promise.all(ret)\n}\n","import { isClient } from './common'\n\nlet flexGapSupported: boolean | null = null\n\n/**\n * 判断当前的环境是否支持 CSS 样式：`gap`、`row-gap` 和 `column-gap`\n *\n * @returns 是否支持\n */\nexport function supportFlexGap() {\n  if (!isClient) {\n    return true\n  }\n\n  if (flexGapSupported === null) {\n    const flex = document.createElement('div')\n\n    flex.style.display = 'flex'\n    flex.style.flexDirection = 'column'\n    flex.style.rowGap = '1px'\n\n    flex.appendChild(document.createElement('div'))\n    flex.appendChild(document.createElement('div'))\n    document.body.appendChild(flex)\n\n    flexGapSupported = flex.scrollHeight === 1\n\n    document.body.removeChild(flex)\n  }\n\n  return flexGapSupported\n}\n\nlet imgLoadingSupported: boolean | null = null\n\n/**\n * 判断当前环境是否支持 `<img>` 标签的 `loading` 属性\n *\n * @returns 是否支持\n */\nexport function supportImgLoading() {\n  if (!isClient) {\n    return false\n  }\n\n  if (imgLoadingSupported === null) {\n    imgLoadingSupported = 'loading' in document.createElement('img')\n  }\n\n  return imgLoadingSupported\n}\n","import { isDefined, isFunction, isIterable, isObject, toTrue } from './common'\nimport { deepClone } from './deep-clone'\nimport { raf } from './performance'\n\n/**\n * 如果一个值不为数组，则将其转换为数组\n *\n * @param value 指定的值\n *\n * @returns 原始数组或转换后的数组\n */\nexport function ensureArray<T>(value: T | T[]) {\n  return Array.isArray(value) ? value : [value]\n}\n\n/**\n * 如果一个值为函数，则执行它并返回结果，否则返回其本身\n *\n * @param value 指定的值\n * @param args 若为函数时，传入的参数\n *\n * @returns 原始值或函数执行结果\n */\nexport function callIfFunc<T, P extends any[] = any[]>(value: T | ((...args: P) => T), ...args: P) {\n  return isFunction(value) ? value(...args) : value\n}\n\n/**\n * 将路径中的 `\\` 替换为 `/`\n *\n * @param path 指定的路径\n *\n * @returns 替换后的路径\n */\nexport function normalizePath(path: string) {\n  return path.replace(/[\\\\/]+/g, '/')\n}\n\n/**\n * 获取字符串的最后一个字符\n *\n * @param value 指定的字符串\n *\n * @returns 最后一个字符\n */\nexport function getLast(value: string): string | undefined\n/**\n * 获取数组的最后一个元素\n *\n * @param value 指定的数组\n *\n * @returns 最后一个元素\n */\nexport function getLast<T>(value: T[]): T | undefined\nexport function getLast(value: string | any[]) {\n  return value[value.length - 1]\n}\n\n/**\n * 根据数组元素中某个或多个属性的值转换为映射对象\n *\n * @param list 需要被转换的数组\n * @param prop 需要被转换的属性或提供一个读取方法\n * @param accessor 映射的值的读取方法，默认返回元素本身\n * @param isMap 是否使用 Map 对象储存结果\n *\n * @returns 转换后的映射对象\n */\nexport function listToMap<T = any, O = T>(\n  list: T[],\n  prop: keyof T | ((item: T) => any),\n  accessor?: (item: T) => O,\n  isMap?: false\n): Record<string, O>\nexport function listToMap<T = any, O = T, K extends keyof T = keyof T>(\n  list: T[],\n  prop: K,\n  accessor?: (item: T) => O,\n  isMap?: true\n): Map<T[K], O>\nexport function listToMap<T = any, O = T, K = any>(\n  list: T[],\n  prop: (item: T) => K,\n  accessor?: (item: T) => O,\n  isMap?: true\n): Map<K extends keyof T ? T[K] : unknown, O>\nexport function listToMap<T = any, O = T>(\n  list: T[],\n  prop: keyof T | ((item: T) => any),\n  accessor: (item: T) => O = v => v as any,\n  isMap = false\n) {\n  const map = (isMap ? new Map<string, any>() : {}) as any\n\n  if (!isDefined(prop)) return map\n\n  const set = isMap\n    ? (key: any, value: O) => map.set(key, value)\n    : (key: any, value: O) => (map[key] = value)\n  const propAccessor = isFunction(prop) ? prop : (item: T) => item[prop]\n\n  list.forEach(item => {\n    const key = propAccessor(item)\n\n    if (isDefined(key)) {\n      set(key, accessor(item))\n    }\n  })\n\n  return map\n}\n\nexport {\n  /** @deprecated please use listToMap to replace it */\n  listToMap as transformListToMap\n}\n\n/**\n * 移除数组中的某个元素\n *\n * @param array 需要被移除元素的数组\n * @param item 需要被移除的元素, 或一个查找方法，如果元素为函数时则需要做一层简单包装\n * @param isFn 标记数组的元素是否为函数\n *\n * @returns 被移除的元素\n */\nexport function removeArrayItem<T = any>(\n  array: T[],\n  item: T | ((item: T) => boolean),\n  isFn = false\n): T | null {\n  let index = -1\n\n  if (isFn || typeof item !== 'function') {\n    index = array.findIndex(current => current === item)\n  } else {\n    index = array.findIndex(item as (item: T) => boolean)\n  }\n\n  if (~index) {\n    return array.splice(index, 1)[0]\n  }\n\n  return null\n}\n\n/**\n * 按照一定顺序的属性对数据进行分组\n *\n * @param list 需要分数的数据\n * @param props 需要按顺序分组的属性\n *\n * @returns 分组后的对象\n */\nexport function groupByProps<T = any>(\n  list: T[],\n  props: Array<string | ((item: T) => any)> | string | ((item: T) => any) = []\n): Record<string, T[]> {\n  if (typeof props === 'string' || typeof props === 'function') {\n    props = [props]\n  }\n\n  const propCount = props.length\n  const zipData: Record<string, any> = {}\n\n  for (const item of list) {\n    let data\n\n    for (let i = 0; i < propCount; ++i) {\n      const isLast = i === propCount - 1\n      const prop = props[i]\n      const value = typeof prop === 'function' ? prop(item) : item[prop as keyof T]\n\n      if (!data) {\n        if (!zipData[value]) {\n          zipData[value] = isLast ? [] : {}\n        }\n\n        data = zipData[value]\n      } else {\n        if (!data[value]) {\n          data[value] = isLast ? [] : {}\n        }\n\n        data = data[value]\n      }\n    }\n\n    data.push(item)\n  }\n\n  return zipData\n}\n\nexport interface TreeOptions<T = string> {\n  keyField?: T,\n  childField?: T,\n  parentField?: T,\n  /** 若指定，`parent` 值等于 `rootId` 的节点被认为是顶级节点 */\n  rootId?: any\n}\n\n/**\n * 将一个展平的列表转换为树\n *\n * @param list 要转换的列表\n * @param options 转换的配置项\n *\n * @returns 转换后的树\n */\nexport function transformTree<T = any>(list: T[], options: TreeOptions<keyof T> = {}) {\n  const {\n    keyField = 'id' as keyof T,\n    childField = 'children' as keyof T,\n    parentField = 'parent' as keyof T,\n    rootId = null\n  } = options\n\n  const hasRootId = isDefined(rootId) && rootId !== ''\n  const tree: T[] = []\n  const record = new Map<T[keyof T], T[]>()\n\n  for (let i = 0, len = list.length; i < len; ++i) {\n    const item = list[i]\n    const id = item[keyField]\n\n    if (hasRootId ? id === rootId : !isDefined(id)) {\n      continue\n    }\n\n    if (record.has(id)) {\n      ;(item as any)[childField] = record.get(id)!\n    } else {\n      ;(item as any)[childField] = []\n      record.set(id, (item as any)[childField])\n    }\n\n    if (item[parentField] && (!hasRootId || item[parentField] !== rootId)) {\n      const parentId = item[parentField]\n\n      if (!record.has(parentId)) {\n        record.set(parentId, [])\n      }\n\n      record.get(parentId)!.push(item)\n    } else {\n      tree.push(item)\n    }\n  }\n\n  return tree\n}\n\nexport { transformTree as buildTree }\n\n/**\n * 将一个树展平成列表\n *\n * @param tree 要展平的树\n * @param options 转换的配置项\n *\n * @returns 展平后的列表\n */\nexport function flatTree<T = any>(\n  tree: T[],\n  options: TreeOptions<keyof T> & {\n    /** 是否为深度优先遍历 */\n    depthFirst?: boolean,\n    /**\n     * 是否为无 ID 的节点插入 ID 值\n     *\n     * @default true\n     */\n    injectId?: boolean,\n    /** 构建节点的 ID 的方法 */\n    buildId?: (index: number) => any,\n    /** 过滤节点的方法 */\n    filter?: (item: T) => boolean,\n    /** 过滤的结果是否会影响其子级 */\n    cascaded?: boolean,\n    /** 是否强制为节点插入 ID 值 */\n    forceInject?: boolean\n  } = {}\n) {\n  const {\n    keyField = 'id' as keyof T,\n    childField = 'children' as keyof T,\n    parentField = 'parent' as keyof T,\n    rootId = null,\n    depthFirst = false,\n    injectId = true,\n    buildId = i => i,\n    filter = toTrue,\n    cascaded = false,\n    forceInject = false\n  } = options\n\n  let idCount = 1\n\n  const hasRootId = isDefined(rootId) && rootId !== ''\n  const list: T[] = []\n  const loop = [...tree]\n\n  while (loop.length) {\n    const item = loop.shift()!\n\n    const childrenValue = item[childField]\n    const children: T[] = Array.isArray(childrenValue) && childrenValue.length ? childrenValue : []\n\n    if (injectId && (forceInject || !item[keyField])) {\n      item[keyField] = buildId(idCount++)\n    }\n\n    const id = item[keyField]\n\n    if (\n      injectId &&\n      parentField &&\n      (hasRootId ? item[parentField] === rootId : !item[parentField])\n    ) {\n      ;(item as any)[parentField] = rootId\n    }\n\n    const filterResult = filter(item)\n\n    if (filterResult) list.push(item)\n\n    if (filterResult || !cascaded) {\n      for (let i = 0, len = children.length; i < len; ++i) {\n        const child = children[i]\n\n        if (injectId && parentField) {\n          child[parentField] = id\n        }\n\n        !depthFirst && loop.push(child)\n      }\n\n      if (depthFirst) {\n        loop.unshift(...children)\n      }\n    }\n  }\n\n  return list\n}\n\n/**\n * 遍历树并为每个节点执行回调方法\n *\n * @param tree 要遍历的树\n * @param cb 回调函数\n * @param options 遍历的配置项\n */\nexport function walkTree<T = any>(\n  tree: T[],\n  cb: (item: T, depth: number, parent: T | null) => void,\n  options: {\n    /** 是否为深度优先遍历 */\n    depthFirst?: boolean,\n    childField?: keyof T\n  } = {}\n) {\n  const { childField = 'children' as keyof T, depthFirst = false } = options\n  const loop = [...tree.map(item => ({ item, depth: 0, parent: null as T | null }))]\n\n  while (loop.length) {\n    const { item, depth, parent } = loop.shift()!\n    const children = item[childField] as T[]\n\n    cb(item, depth, parent)\n\n    if (isIterable(children)) {\n      loop[depthFirst ? 'unshift' : 'push'](\n        ...Array.from(children).map(child => ({ item: child, depth: depth + 1, parent: item }))\n      )\n    }\n  }\n}\n\n/**\n * 遍历树并为每个节点执行回调方法，并用其返回值构建一颗新的树\n *\n * @param tree 要遍历的树\n * @param cb 回调函数\n * @param options 遍历的配置项\n *\n * @returns 构建后新的树\n */\nexport function mapTree<T = any, R = any>(\n  tree: T[],\n  cb: (item: T, depth: number, parent: T | null) => R,\n  options: {\n    /** 是否为深度优先遍历 */\n    depthFirst?: boolean,\n    childField?: keyof T,\n    /** 是否强制重置 `children` 字段 */\n    clearChildren?: boolean\n  } = {}\n) {\n  const { childField = 'children' as keyof T, depthFirst = false, clearChildren = true } = options\n  const result: R[] = []\n  const loop = [...tree.map(item => ({ item, depth: 0, parent: null as T | null, result }))]\n\n  while (loop.length) {\n    const { item, depth, parent, result } = loop.shift()!\n    const children = item[childField] as T[]\n    const newItem = cb(item, depth, parent) ?? ({} as any)\n\n    if (clearChildren) {\n      newItem[childField] = []\n    }\n\n    result.push(newItem)\n\n    if (isIterable(children)) {\n      const items = Array.from(children)\n\n      if (items.length) {\n        newItem[childField] = []\n        loop[depthFirst ? 'unshift' : 'push'](\n          ...Array.from(children).map(child => ({\n            item: child,\n            depth: depth + 1,\n            parent: item,\n            result: newItem[childField]\n          }))\n        )\n      }\n    }\n  }\n\n  return result\n}\n\n/**\n * 遍历树并为每个节点执行过滤方法，并用符合条件的节点构建一棵新的树\n *\n * @param tree 要遍历的树\n * @param cb 过滤的方法\n * @param options 遍历的配置项\n *\n * @returns 过滤后新的树\n */\nexport function filterTree<T = any>(\n  tree: T[],\n  cb: (item: T, depth: number, parent: T | null) => boolean,\n  options: {\n    /** 判断一个节点是否为叶子节点 */\n    isLeaf?: (item: T) => boolean,\n    /** 是否只对叶子节点进行过滤 */\n    leafOnly?: boolean,\n    childField?: keyof T\n  } = {}\n) {\n  const {\n    childField = 'children' as keyof T,\n    leafOnly = false,\n    isLeaf = item => !isIterable(item[childField])\n  } = options\n\n  const filter = (data: T[], depth: number, parent: T | null): T[] => {\n    return data\n      .map(item => ({ ...item }))\n      .filter(item => {\n        const children = item[childField] as T[]\n        const leaf = isLeaf(item)\n        const items = isIterable(children) && Array.from(children)\n\n        if (leafOnly && !leaf) {\n          if (items && items.length) {\n            const matched = filter(items, depth + 1, item)\n            item[childField] = matched as any\n\n            return !!matched.length\n          }\n\n          return false\n        }\n\n        const result = cb(item, depth, parent)\n\n        if (leaf) return result\n        if (!leafOnly && result) return true\n\n        if (items && items.length) {\n          const matched = filter(items, depth + 1, item)\n          item[childField] = matched as any\n\n          return !!matched.length\n        }\n\n        return result\n      })\n  }\n\n  return filter(tree, 0, null)\n}\n\nexport interface SortOptions<T = string> {\n  /** 属性名 */\n  key: T,\n  /** 排序方法 */\n  method?: (prev: any, next: any) => number,\n  /** 读取方法 */\n  accessor?: (...args: any[]) => any,\n  /** 升降序 */\n  type?: 'asc' | 'desc',\n  /** 传入读取器的额外参数 */\n  params?: any[]\n}\n\nconst defaultSortMethod = (prev: any, next: any) => {\n  if (Number.isNaN(Number(prev) - Number(next))) {\n    return String(prev).localeCompare(next)\n  }\n\n  return prev - next\n}\n\n/**\n * 根据依赖的属性对数组逐层排序\n *\n * @param list 需要排序的数组\n * @param props 排序依赖的属性\n *\n * @returns 排序后的数组\n */\nexport function sortByProps<T = any>(\n  list: T[],\n  props: keyof T | SortOptions<keyof T> | (keyof T | SortOptions<keyof T>)[]\n) {\n  if (\n    !list.sort ||\n    (isObject<SortOptions>(props) && !props.key) ||\n    !(props as string | SortOptions[]).length\n  ) {\n    return list\n  }\n\n  const sortedList = Array.from(list)\n\n  if (!Array.isArray(props)) {\n    props = [props]\n  }\n\n  const formattedProps = props\n    .map(\n      value =>\n        (typeof value === 'string'\n          ? {\n              key: value,\n              method: defaultSortMethod,\n              type: 'asc'\n            }\n          : value) as SortOptions<keyof T>\n    )\n    .map(value => {\n      if (typeof value.accessor !== 'function') {\n        value.accessor = (data: T) => data[value.key]\n      }\n\n      if (typeof value.method !== 'function') {\n        value.method = defaultSortMethod\n      }\n\n      value.params = Array.isArray(value.params) ? value.params : []\n\n      return value as Required<SortOptions>\n    })\n\n  sortedList.sort((prev, next) => {\n    let lastResult = 0\n\n    for (const prop of formattedProps) {\n      const { method, type, accessor, params } = prop\n      const desc = type === 'desc'\n      const result = method(accessor(prev, ...params), accessor(next, ...params))\n\n      lastResult = desc ? -result : result\n      // 若不为0则无需进行下一层排序\n      if (lastResult) break\n    }\n\n    return lastResult\n  })\n\n  return sortedList\n}\n\n/**\n * 将两个对象进行深度的动态合并\n *\n * @param sourceObj 用于接收合并的源对象\n * @param targetObj 被合并的对象，当属性名相同但值类型不同的情况，此对象的权重更高\n * @param isNewObj 标记合并至一个全新的对象（深度的）\n *\n * @returns 合并后的对象\n */\nexport function mergeObjects<T extends Record<string, any>, U extends Record<string, any>>(\n  sourceObj: T,\n  targetObj: U,\n  isNewObj = true\n) {\n  sourceObj = isNewObj ? deepClone(sourceObj) : sourceObj\n\n  const loop: Array<{\n    source: Record<string, any>,\n    target: Record<string, any>\n  }> = [\n    {\n      source: sourceObj,\n      target: targetObj\n    }\n  ]\n\n  while (loop.length) {\n    const { source, target } = loop.pop()!\n\n    Object.keys(target).forEach(key => {\n      if (isObject(target[key])) {\n        if (!isObject(source[key])) {\n          source[key] = {}\n        }\n\n        loop.push({\n          source: source[key],\n          target: target[key]\n        })\n      } else if (Array.isArray(target[key])) {\n        if (!Array.isArray(source[key])) {\n          source[key] = []\n        }\n\n        loop.push({\n          source: source[key],\n          target: target[key]\n        })\n      } else {\n        source[key] = target[key]\n      }\n    })\n  }\n\n  return sourceObj as T & U\n}\n\n/**\n * 将一个任务队列按每帧一次依次指定，返回一个触发取消的方法\n *\n * @param queue 任务队列\n *\n * @returns 终止队列执行的方法\n */\nexport function runQueueFrame(queue: Array<() => void>) {\n  queue = Array.from(queue)\n\n  let cancelled = false\n\n  const run = () => {\n    if (cancelled) return\n\n    queue.shift()?.()\n    queue.length && raf(run)\n  }\n\n  run()\n\n  return () => (cancelled = true)\n}\n","/**\n * 将给定的常量字符串类型拓展为不区分大小写的任意组合\n */\nexport type AnyCase<S> = string extends S\n  ? string\n  : S extends `${infer F1}${infer F2}${infer R}`\n    ? `${Uppercase<F1> | Lowercase<F1>}${Uppercase<F2> | Lowercase<F2>}${AnyCase<R>}`\n    : S extends `${infer F}${infer R}`\n      ? `${Uppercase<F> | Lowercase<F>}${AnyCase<R>}`\n      : ''\n\nfunction allCapital(value: string) {\n  const matched = value.match(/[A-Z]+/)\n\n  return matched && matched[0] === value\n}\n\n// const kebabRE = /\\B([A-Z])/g\nconst kebabRE = /\\B([A-Z])(?=[^A-Z_-])/g\n\n/**\n * 将字面值转换为短横线连接\n *\n * @param value 需要转换的字面值\n *\n * @returns 转换后的短横线连接字面值\n *\n * @example\n * ```ts\n * toKebabCase('AaBbCc') // aa-bb-cc\n * toKebabCase('AABb') // aa-bb\n * toKebabCase('AAA') // aaa\n * toKebabCase('AaBb CcDd') // aa-bb cc-dd\n * ```\n */\nexport function toKebabCase(value: string) {\n  // if (allCapital(value)) {\n  //   return value.toLocaleLowerCase()\n  // }\n\n  return value.replace(kebabRE, '-$1').toLowerCase()\n}\n\n/**\n * 将给定的常量字符串类型拓展为大驼峰\n */\nexport type CapitalCase<T extends string> = T extends `${infer First} ${infer Rest}`\n  ? CapitalCase<`${First}-${Rest}`>\n  : T extends `${infer First}-${infer Rest}`\n    ? `${Capitalize<First>}${CapitalCase<Rest>}`\n    : Capitalize<T>\n\n/**\n * 将字面值转换为大驼峰\n *\n * @param value 需要转换的字面值\n *\n * @returns 转换后的大驼峰字面值\n */\nexport function toCapitalCase<T extends string>(value: T) {\n  value = value.trim().replace(/\\s+/g, '-') as T\n  value = value.replace(/-+(\\w)/g, (_, char) => (char ? char.toUpperCase() : '')) as T\n\n  return (value.charAt(0).toLocaleUpperCase() + value.slice(1)).replace(\n    /[^\\w]/g,\n    ''\n  ) as CapitalCase<T>\n}\n\n/**\n *  将字面值转换为小驼峰\n *\n * @param value 需要转换的字面值\n *\n * @returns 转换后的小驼峰字面值\n */\nexport function toCamelCase(value: string) {\n  const capitalName = toCapitalCase(value)\n\n  if (allCapital(capitalName)) {\n    return capitalName.toLocaleLowerCase()\n  }\n\n  return capitalName.charAt(0).toLowerCase() + capitalName.slice(1)\n}\n","import { computed, getCurrentInstance, inject, provide, unref } from 'vue'\n\nimport { isDefined } from '@vexip-ui/utils'\n\nimport type { App, ComputedRef, MaybeRef } from 'vue'\n\nexport const PROVIDED_HOVER_DELAY = '___vxp-provided-hover-delay'\nexport const globalDelay = computed(() => 100)\n\nfunction getOrDefault(num: number, def: number) {\n  return isDefined(num) && !Number.isNaN(num) ? num : def\n}\n\n/**\n * Provide a hover delay config for under components.\n *\n * @param sourceDelay hover delay config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function configHoverDelay(sourceDelay: MaybeRef<number>, app?: App) {\n  if (app) {\n    const delay = computed(() => {\n      const delay = unref(sourceDelay)\n\n      return getOrDefault(delay, globalDelay.value)\n    })\n\n    app.provide(PROVIDED_HOVER_DELAY, delay)\n  } else {\n    const upstreamDelay = inject<ComputedRef<number> | null>(PROVIDED_HOVER_DELAY, null)\n    const delay = computed(() => {\n      const delay = unref(sourceDelay)\n\n      return getOrDefault(\n        delay,\n        upstreamDelay ? getOrDefault(upstreamDelay.value, globalDelay.value) : globalDelay.value\n      )\n    })\n\n    provide(PROVIDED_HOVER_DELAY, delay)\n  }\n}\n\nexport function useHoverDelay() {\n  return getCurrentInstance()\n    ? inject<ComputedRef<number>>(PROVIDED_HOVER_DELAY, globalDelay)\n    : globalDelay\n}\n","import { defineLocaleConfig } from './helper'\n\n/**\n * Chinese (Simplified) locale config.\n *\n * @author @qmhc\n */\nexport function zhCNLocale() {\n  return defineLocaleConfig({\n    locale: 'zh-CN',\n    wordSpace: false,\n\n    calendar: {\n      year: '年',\n      month: '月',\n      month1: '01月',\n      month2: '02月',\n      month3: '03月',\n      month4: '04月',\n      month5: '05月',\n      month6: '06月',\n      month7: '07月',\n      month8: '08月',\n      month9: '09月',\n      month10: '10月',\n      month11: '11月',\n      month12: '12月',\n      week1: '一',\n      week2: '二',\n      week3: '三',\n      week4: '四',\n      week5: '五',\n      week6: '六',\n      week7: '日',\n\n      ariaLabel: {\n        year: '年',\n        month: '月',\n        month1: '一月',\n        month2: '二月',\n        month3: '三月',\n        month4: '四月',\n        month5: '五月',\n        month6: '六月',\n        month7: '七月',\n        month8: '八月',\n        month9: '九月',\n        month10: '十月',\n        month11: '十一月',\n        month12: '十二月',\n        week1: '星期一',\n        week2: '星期二',\n        week3: '星期三',\n        week4: '星期四',\n        week5: '星期五',\n        week6: '星期六',\n        week7: '星期日'\n      }\n    },\n\n    captcha: {\n      slideEnd: '请滑动到最后',\n      slide: '请滑动到适当的位置',\n      success: '验证成功',\n      fail: '验证失败，请重试',\n      doCaptcha: '请完成下面的验证',\n      pointInOrder: '请按顺序点击',\n      trigger: '点击进行验证',\n      completed: '已完成验证'\n    },\n\n    checkbox: {\n      all: '全选'\n    },\n\n    colorPicker: {\n      confirm: '确定',\n      cancel: '重置',\n\n      ariaLabel: {\n        clear: '清空颜色'\n      }\n    },\n\n    confirm: {\n      confirm: '确认',\n      cancel: '取消'\n    },\n\n    datePicker: {\n      confirm: '确认',\n      cancel: '取消',\n      placeholder: {\n        year: '年份',\n        month: '月份',\n        date: '日期',\n        datetime: '日期时间',\n        start: '开始',\n        end: '结束',\n        select: '请选择'\n      },\n      startTime: '开始时间',\n      endTime: '结束时间',\n\n      ariaLabel: {\n        clear: '清空日期',\n        quarter: '季度',\n        week: '周',\n        date: '日',\n        hour: '时',\n        minute: '分',\n        second: '秒'\n      }\n    },\n\n    drawer: {\n      confirm: '确认',\n      cancel: '取消'\n    },\n\n    form: {\n      submit: '提交',\n      reset: '重置',\n      notNullable: '不可为空',\n      validateFail: '验证未通过'\n    },\n\n    image: {\n      placeholder: '加载中...',\n      error: '加载失败'\n    },\n\n    input: {\n      placeholder: '请输入',\n\n      ariaLabel: {\n        clear: '清空文本'\n      }\n    },\n\n    layout: {\n      signOut: '注销',\n      signType: '导航模式',\n      majorColor: '主题颜色',\n      themeMode: '主题模式'\n    },\n\n    modal: {\n      confirm: '确认',\n      cancel: '取消'\n    },\n\n    numberInput: {\n      placeholder: '请输入数字',\n      outOfRange: '超出范围',\n\n      ariaLabel: {\n        clear: '清空数字',\n        increase: '增加',\n        decrease: '减少'\n      }\n    },\n\n    pagination: {\n      page: '页',\n      perPage: '条/页',\n      prevPage: '上一页',\n      nextPage: '下一页',\n      prev: '向前',\n      next: '向后',\n      total: '共',\n      jumpTo: '跳转',\n      itemUnit: '条'\n    },\n\n    select: {\n      placeholder: '请选择',\n      empty: '暂无数据',\n      search: '搜索选项',\n\n      ariaLabel: {\n        clear: '清空选项'\n      }\n    },\n\n    table: {\n      empty: '暂无数据',\n      filterConfirm: '筛选',\n      filterReset: '重置',\n      filterAll: '全部'\n    },\n\n    timeAgo: {\n      ago: '前',\n      late: '后',\n      justNow: '刚刚',\n      second: '秒',\n      minute: '分钟',\n      hour: '小时',\n      yesterday: '昨天',\n      days: '天',\n      lastMonth: '上个月',\n      months: '个月',\n      lastYear: '去年',\n      years: '年'\n    },\n\n    timePicker: {\n      confirm: '确认',\n      cancel: '取消',\n      placeholder: {\n        time: '时间',\n        start: '开始',\n        end: '结束',\n        select: '请选择'\n      },\n\n      ariaLabel: {\n        clear: '清空时间',\n        hour: '时',\n        minute: '分',\n        second: '秒'\n      }\n    },\n\n    tour: {\n      prev: '上一步',\n      next: '下一步',\n      done: '完成',\n      stepCount: '第 {n} 步'\n    },\n\n    transfer: {\n      source: '源',\n      target: '目标',\n      empty: '暂无数据',\n      reverse: '反选',\n      search: '搜索 (Ctrl + F)'\n    },\n\n    tree: {\n      empty: '暂无数据'\n    },\n\n    upload: {\n      upload: '上传文件',\n      uploading: '上传中',\n      dragOrClick: '将文件拖到此处, 或点击上传',\n\n      ariaLabel: {\n        preview: '预览文件',\n        delete: '删除文件'\n      }\n    },\n\n    video: {\n      play: '播放',\n      pause: '暂停',\n      playPrev: '上一个',\n      playNext: '下一个',\n      refresh: '刷新',\n      flip: '镜像翻转',\n      requestPip: '进入画中画',\n      exitPip: '退出画中画',\n      fullWindow: '进入网页全屏',\n      fullWindowExit: '退出网页全屏',\n      fullScreen: '进入全屏',\n      fullScreenExit: '退出全屏',\n      chapterCount: '第 {n} 章'\n    },\n\n    viewer: {\n      rotateRight: '向右旋转',\n      rotateLeft: '向左旋转',\n      flipHorizontal: '横向翻转',\n      flipVertical: '纵向翻转',\n      zoomIn: '放大',\n      zoomOut: '缩小',\n      fullScreen: '进入全屏',\n      fullScreenExit: '退出全屏',\n      reset: '重置'\n    }\n  })\n}\n","import { computed, inject, provide, unref } from 'vue'\n\nimport { mergeObjects } from '@vexip-ui/utils'\nimport { zhCNLocale } from './zh-CN'\n\nimport type { App, ComputedRef, MaybeRef } from 'vue'\nimport type { LocaleConfig, LocaleNames, LocaleOptions } from './helper'\n\nexport * from './helper'\n\nexport * from './ar-EG'\nexport * from './de-DE'\nexport * from './en-US'\nexport * from './fa-IR'\nexport * from './fr-FR'\nexport * from './ta-IN'\nexport * from './zh-CN'\nexport * from './zh-HK'\nexport * from './zh-TW'\n\nexport const PROVIDED_LOCALE = '__vxp-provided-locale'\nexport const globalLocal = computed(() => zhCNLocale())\n\nconst cached = new Map<string, LocaleConfig>()\n\nexport function getDefaultLocaleConfig(locale?: string) {\n  if (!locale) {\n    return globalLocal.value\n  }\n\n  return cached.get(locale) || globalLocal.value\n}\n\nexport function registerLocale(locale: LocaleConfig) {\n  locale.locale && cached.set(locale.locale, locale)\n}\n\n/**\n * Provide a locale config for under components.\n *\n * @param sourceLocale locale config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function configLocale(sourceLocale: MaybeRef<LocaleOptions>, app?: App) {\n  if (app) {\n    const locale = computed(() => {\n      const locale = unref(sourceLocale)\n\n      return mergeObjects(getDefaultLocaleConfig(locale.locale), locale)\n    })\n\n    app.provide(PROVIDED_LOCALE, locale)\n  } else {\n    const upstreamLocale = inject<ComputedRef<LocaleConfig> | null>(PROVIDED_LOCALE, null)\n    const locale = computed(() => {\n      const locale = unref(sourceLocale)\n      // const providedLocale = mergeObjects(getDefaultLocaleConfig(locale.locale), locale)\n\n      if (!upstreamLocale?.value) {\n        return mergeObjects(getDefaultLocaleConfig(locale.locale), locale)\n      }\n\n      return mergeObjects(upstreamLocale.value as any, locale)\n    })\n\n    provide(PROVIDED_LOCALE, locale)\n  }\n}\n\nexport function useLocale(): ComputedRef<LocaleConfig>\nexport function useLocale<T extends LocaleNames>(name: T): ComputedRef<LocaleConfig[T]>\nexport function useLocale<T extends LocaleNames>(\n  name: T,\n  customLocale: MaybeRef<Partial<LocaleConfig[T]>>\n): ComputedRef<LocaleConfig[T]>\nexport function useLocale<T extends LocaleNames>(\n  name?: T,\n  customLocale?: MaybeRef<Partial<LocaleConfig[T]>>\n) {\n  const locale = inject<ComputedRef<LocaleConfig>>(PROVIDED_LOCALE, globalLocal)\n\n  if (!name) {\n    return locale\n  }\n\n  if (customLocale) {\n    return computed(() => ({ ...(locale.value?.[name] ?? {}), ...(unref(customLocale) ?? {}) }))\n  }\n\n  return computed(() => locale.value?.[name] ?? {})\n}\n\nexport function useWordSpace() {\n  const locale = inject<ComputedRef<LocaleConfig>>(PROVIDED_LOCALE, globalLocal)\n\n  return computed(() => locale.value.wordSpace ?? false)\n}\n\nexport function getCountWord(wordTemplate: string, count: number) {\n  const words = wordTemplate.split('|')\n\n  if (words.length === 1) return `${count} ${wordTemplate}`\n\n  return `${count} ${count > 1 ? words[1].trim() : words[0].trim()}`\n}\n\nexport function getCountWordOnly(wordTemplate: string, count: number) {\n  const words = wordTemplate.split('|')\n\n  if (words.length === 1) return wordTemplate\n\n  return count > 1 ? words[1].trim() : words[0].trim()\n}\n\nexport function makeSentence(words: string, wordSpace = globalLocal.value.wordSpace ?? false) {\n  return !wordSpace ? words.replace(/\\s+/g, '') : words\n}\n\nexport function getStepByWord(wordTemplate: string, step: number) {\n  return wordTemplate.replace(/{n}/g, `${step}`)\n}\n","/**\n * @license lucide-vue-next v0.471.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();\n\nexport { toKebabCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-vue-next v0.471.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.471.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 { toKebabCase } 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: [\"lucide\", `lucide-${toKebabCase(name ?? \"icon\")}`],\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.471.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.471.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(\"ArrowLeftRightIcon\", [\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.471.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(\"CalendarIcon\", [\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.471.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(\"CheckIcon\", [[\"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.471.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(\"ChevronDownIcon\", [\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.471.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(\"ChevronLeftIcon\", [\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.471.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(\"ChevronRightIcon\", [\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.471.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(\"ChevronUpIcon\", [\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.471.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(\"ChevronsLeftIcon\", [\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.471.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(\"ChevronsRightIcon\", [\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.471.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(\"CircleAlertIcon\", [\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.471.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(\"CircleCheckIcon\", [\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.471.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(\"CircleHelpIcon\", [\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.471.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(\"CircleXIcon\", [\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.471.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(\"ClockIcon\", [\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.471.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(\"CloudUploadIcon\", [\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.471.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(\"EllipsisIcon\", [\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.471.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(\"EyeOffIcon\", [\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.471.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(\"EyeIcon\", [\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.471.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(\"FileArchiveIcon\", [\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.471.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(\"FileCodeIcon\", [\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.471.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(\"FileImageIcon\", [\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.471.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(\"FileMusicIcon\", [\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.471.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(\"FileTextIcon\", [\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.471.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(\"FileVideoIcon\", [\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.471.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(\"FileIcon\", [\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.471.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 Filter = createLucideIcon(\"FilterIcon\", [\n  [\"polygon\", { points: \"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\", key: \"1yg77f\" }]\n]);\n\nexport { Filter as default };\n//# sourceMappingURL=filter.js.map\n","/**\n * @license lucide-vue-next v0.471.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(\"FlipHorizontalIcon\", [\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.471.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(\"FlipVerticalIcon\", [\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.471.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(\"FullscreenIcon\", [\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.471.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(\"GripVerticalIcon\", [\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.471.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(\"ImageIcon\", [\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.471.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(\"IndentDecreaseIcon\", [\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.471.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(\"IndentIncreaseIcon\", [\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.471.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(\"InfoIcon\", [\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.471.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(\"LoaderCircleIcon\", [\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.471.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(\"LogOutIcon\", [\n  [\"path\", { d: \"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\", key: \"1uf3rs\" }],\n  [\"polyline\", { points: \"16 17 21 12 16 7\", key: \"1gabdz\" }],\n  [\"line\", { x1: \"21\", x2: \"9\", y1: \"12\", y2: \"12\", key: \"1uyos4\" }]\n]);\n\nexport { LogOut as default };\n//# sourceMappingURL=log-out.js.map\n","/**\n * @license lucide-vue-next v0.471.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(\"MaximizeIcon\", [\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.471.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(\"MessageCircleQuestionIcon\", [\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.471.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(\"MinimizeIcon\", [\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.471.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(\"MinusIcon\", [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]]);\n\nexport { Minus as default };\n//# sourceMappingURL=minus.js.map\n","/**\n * @license lucide-vue-next v0.471.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(\"MoonIcon\", [\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.471.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(\"PauseIcon\", [\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.471.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(\"PictureInPictureIcon\", [\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.471.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(\"PlayIcon\", [\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.471.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(\"PlusIcon\", [\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.471.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(\"RefreshCwIcon\", [\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.471.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(\"Repeat2Icon\", [\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.471.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(\"RotateCcwIcon\", [\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.471.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(\"RotateCwIcon\", [\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.471.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(\"SearchIcon\", [\n  [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n  [\"path\", { d: \"m21 21-4.3-4.3\", key: \"1qie3q\" }]\n]);\n\nexport { Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-vue-next v0.471.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(\"SirenIcon\", [\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.471.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(\"SkipBackIcon\", [\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.471.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(\"SkipForwardIcon\", [\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.471.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(\"SquareMinusIcon\", [\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.471.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(\"SquarePlusIcon\", [\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.471.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(\"SunIcon\", [\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.471.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(\"Trash2Icon\", [\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.471.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(\"UploadIcon\", [\n  [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }],\n  [\"polyline\", { points: \"17 8 12 3 7 8\", key: \"t8dd8p\" }],\n  [\"line\", { x1: \"12\", x2: \"12\", y1: \"3\", y2: \"15\", key: \"widbto\" }]\n]);\n\nexport { Upload as default };\n//# sourceMappingURL=upload.js.map\n","/**\n * @license lucide-vue-next v0.471.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(\"UserRoundIcon\", [\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.471.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(\"Volume1Icon\", [\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.471.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(\"Volume2Icon\", [\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.471.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(\"VolumeXIcon\", [\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.471.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(\"XIcon\", [\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.471.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(\"ZoomInIcon\", [\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.471.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(\"ZoomOutIcon\", [\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'\n\nimport {\n  AlertCircle,\n  ArrowLeftRight,\n  Calendar,\n  Check,\n  CheckCircle2,\n  ChevronDown,\n  ChevronLeft,\n  ChevronRight,\n  ChevronUp,\n  ChevronsLeft,\n  ChevronsRight,\n  Clock,\n  Eye,\n  EyeOff,\n  File,\n  FileArchive,\n  FileCode,\n  FileImage,\n  FileMusic,\n  FileText,\n  FileVideo,\n  Filter,\n  FlipHorizontal,\n  FlipVertical,\n  Fullscreen,\n  GripVertical,\n  HelpCircle,\n  Image,\n  Indent,\n  Info,\n  Loader2,\n  LogOut,\n  Maximize,\n  MessageCircleQuestion,\n  Minimize,\n  Minus,\n  MinusSquare,\n  Moon,\n  MoreHorizontal,\n  Outdent,\n  Pause,\n  PictureInPicture,\n  Play,\n  Plus,\n  PlusSquare,\n  RefreshCw,\n  Repeat2,\n  RotateCcw,\n  RotateCw,\n  Search,\n  Siren,\n  SkipBack,\n  SkipForward,\n  Sun,\n  Trash2,\n  Upload,\n  UploadCloud,\n  UserRound,\n  Volume1,\n  Volume2,\n  VolumeX,\n  X,\n  XCircle,\n  ZoomIn,\n  ZoomOut\n} from 'lucide-vue-next'\nimport { ensureArray } from '@vexip-ui/utils'\n\nimport type { App, ComputedRef, MaybeRef } from 'vue'\nimport type { ClassType, StyleType } from './props'\n\nexport const PROVIDED_ICONS = '__vxp-provided-icons'\n\nexport type IconValue = Record<string, any> | (() => any)\n\nexport interface IconOptions extends Record<string, any> {\n  class?: ClassType,\n  style?: StyleType,\n  scale?: number | string,\n  title?: string,\n  label?: string,\n  flip?: 'horizontal' | 'vertical' | 'both',\n  effect?: string,\n  size?: string,\n  color?: string,\n  rotate?: number | string\n}\n\nexport type IconArrayValue = [IconValue, IconOptions?]\nexport type IconConfig = IconValue | IconArrayValue\n\nexport interface IconsOptions {\n  loading?: IconConfig,\n  clear?: IconConfig,\n  close?: IconConfig,\n  calendar?: IconConfig,\n  clock?: IconConfig,\n  exchange?: IconConfig,\n  angleUp?: IconConfig,\n  angleRight?: IconConfig,\n  angleDown?: IconConfig,\n  angleLeft?: IconConfig,\n  anglesRight?: IconConfig,\n  anglesLeft?: IconConfig,\n  retweet?: IconConfig,\n  refresh?: IconConfig,\n  filter?: IconConfig,\n  ellipsis?: IconConfig,\n  upload?: IconConfig,\n  uploadCloud?: IconConfig,\n  check?: IconConfig,\n  help?: IconConfig,\n  alert?: IconConfig,\n  question?: IconConfig,\n  info?: IconConfig,\n  success?: IconConfig,\n  warning?: IconConfig,\n  error?: IconConfig,\n  delete?: IconConfig,\n  preview?: IconConfig,\n  image?: IconConfig,\n  plus?: IconConfig,\n  minus?: IconConfig,\n  plusSquare?: IconConfig,\n  minusSquare?: IconConfig,\n  cipherText?: IconConfig,\n  plainText?: IconConfig,\n  user?: IconConfig,\n  light?: IconConfig,\n  dark?: IconConfig,\n  signOut?: IconConfig,\n  indent?: IconConfig,\n  outdent?: IconConfig,\n  search?: IconConfig,\n  rotateRight?: IconConfig,\n  rotateLeft?: IconConfig,\n  flipX?: IconConfig,\n  flipY?: IconConfig,\n  zoomIn?: IconConfig,\n  zoonOut?: IconConfig,\n  fullScreen?: IconConfig,\n  resetScreen?: IconConfig,\n  dragger?: IconConfig,\n  file?: IconConfig,\n  fileText?: IconConfig,\n  fileCode?: IconConfig,\n  fileImage?: IconConfig,\n  fileAudio?: IconConfig,\n  fileVideo?: IconConfig,\n  fileZip?: IconConfig,\n  volume?: IconConfig,\n  volumeLow?: IconConfig,\n  volumeMute?: IconConfig,\n  play?: IconConfig,\n  pause?: IconConfig,\n  fullWindow?: IconConfig,\n  pip?: IconConfig,\n  playState?: IconConfig,\n  pauseState?: IconConfig,\n  playPrev?: IconConfig,\n  playNext?: IconConfig\n}\n\nexport type IconName = keyof IconsOptions\nexport type IconsConfig = {\n  [K in keyof IconsOptions]-?: IconConfig\n}\nexport type NormalizedIconsConfig = Record<IconName, IconOptions & { icon: IconValue }>\n\nconst iconMap: IconsConfig = {\n  loading: [Loader2, { effect: 'spin-in' }],\n  clear: XCircle,\n  close: X,\n  calendar: Calendar,\n  clock: Clock,\n  exchange: ArrowLeftRight,\n  angleUp: ChevronUp,\n  angleRight: ChevronRight,\n  angleDown: ChevronDown,\n  angleLeft: ChevronLeft,\n  anglesRight: ChevronsRight,\n  anglesLeft: ChevronsLeft,\n  retweet: Repeat2,\n  refresh: RefreshCw,\n  filter: Filter,\n  ellipsis: MoreHorizontal,\n  upload: Upload,\n  uploadCloud: UploadCloud,\n  check: Check,\n  help: HelpCircle,\n  alert: Siren,\n  question: MessageCircleQuestion,\n  info: Info,\n  success: CheckCircle2,\n  warning: AlertCircle,\n  error: XCircle,\n  delete: Trash2,\n  preview: Eye,\n  image: Image,\n  plus: Plus,\n  minus: Minus,\n  plusSquare: PlusSquare,\n  minusSquare: MinusSquare,\n  cipherText: EyeOff,\n  plainText: Eye,\n  user: UserRound,\n  light: Sun,\n  dark: Moon,\n  signOut: LogOut,\n  indent: Indent,\n  outdent: Outdent,\n  search: Search,\n  rotateRight: RotateCw,\n  rotateLeft: RotateCcw,\n  flipX: FlipHorizontal,\n  flipY: FlipVertical,\n  zoomIn: ZoomIn,\n  zoonOut: ZoomOut,\n  fullScreen: Maximize,\n  resetScreen: Minimize,\n  dragger: GripVertical,\n  file: File,\n  fileText: FileText,\n  fileCode: FileCode,\n  fileImage: FileImage,\n  fileAudio: FileMusic,\n  fileVideo: FileVideo,\n  fileZip: FileArchive,\n  volume: Volume2,\n  volumeLow: Volume1,\n  volumeMute: VolumeX,\n  play: Play,\n  pause: Pause,\n  fullWindow: Fullscreen,\n  pip: PictureInPicture,\n  playState: Play,\n  pauseState: Pause,\n  playPrev: SkipBack,\n  playNext: SkipForward\n}\n\nexport const iconNames = Object.freeze(Object.keys(iconMap) as IconName[])\n\nexport const globalIcons = computed(() => {\n  const icons = {} as NormalizedIconsConfig\n\n  for (const name of iconNames) {\n    const [icon, options = {}] = ensureArray(iconMap[name]) as [Record<string, any>, IconOptions?]\n\n    icons[name] = { ...options, icon }\n  }\n\n  return icons\n})\n\n/**\n * Provide a icons config for under components.\n *\n * @param icons icons config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function configIcons(icons: MaybeRef<IconsOptions>, app?: App) {\n  const upstreamIcons =\n    app || !getCurrentScope()\n      ? globalIcons\n      : inject<ComputedRef<IconsConfig> | null>(PROVIDED_ICONS, null)\n  const normalizedIcons = computed(() => {\n    const normalizedIcons = {} as IconsConfig\n    const unrefIcons = unref(icons)\n\n    for (const name of iconNames) {\n      const config = unrefIcons[name]\n\n      if (!config) {\n        normalizedIcons[name] = upstreamIcons?.value[name] || globalIcons.value[name]\n      } else {\n        const [icon, options = {}] = ensureArray(config) as IconArrayValue\n        const normalizedIcon = typeof icon === 'function' ? icon : markRaw(icon)\n\n        normalizedIcons[name] = { ...options, icon: normalizedIcon }\n      }\n    }\n\n    return normalizedIcons\n  })\n\n  if (app) {\n    app.provide(PROVIDED_ICONS, normalizedIcons)\n  } else {\n    provide(PROVIDED_ICONS, normalizedIcons)\n  }\n}\n\nexport function useIcons() {\n  return inject<ComputedRef<NormalizedIconsConfig>>(PROVIDED_ICONS, globalIcons)\n}\n","import type { BEM, NBEM } from './types'\n\nexport * from './types'\n\n/**\n * Get `--variable` CSS variable.\n *\n * @param v the variable\n */\nexport const cv = <V extends string>(v: V) => `--${v}` as const\n/**\n * Get `var(--variable)` CSS style value.\n *\n * @param v the variable\n */\nexport const gcv = <V extends string>(v: V) => `var(--${v})` as const\n/**\n * Get `--variable: style;` CSS style content.\n *\n * @param v the variable\n * @param s the style\n */\nexport const scv = <V extends string, S extends string>(v: V, s: S) => `--${v}: ${s};` as const\n\nexport function useBEM<B extends string>(block: B): BEM<B>\nexport function useBEM<B extends string, N extends string>(block: B, namespace: N): NBEM<B, N>\nexport function useBEM<B extends string, N extends string>(\n  block: B,\n  namespace: (isVar?: boolean) => N\n): NBEM<B, N>\nexport function useBEM<B extends string, N extends string>(\n  block: B,\n  namespace?: N | ((isVar?: boolean) => N)\n) {\n  if (!namespace) {\n    return <BEM<B>>{\n      b: () => `${block}`,\n      be: e => `${block}__${e}`,\n      bm: m => `${block}--${m}`,\n      bem: (e, m) => `${block}__${e}--${m}`,\n      bs: s => `${block}-${s}`,\n\n      cb: () => `.${block}`,\n      cbe: e => `.${block}__${e}`,\n      cbm: m => `.${block}--${m}`,\n      cbem: (e, m) => `.${block}__${e}--${m}`,\n      cbs: s => `.${block}-${s}`,\n\n      cv: v => cv(`${block}-${v}`),\n      cvm: (m, s = {} as any) => {\n        for (const key of Object.keys(m)) {\n          s[cv(`${block}-${key}`)] = m[key]\n        }\n\n        return s\n      },\n      gcv: v => gcv(`${block}-${v}`),\n      scv: (v, s) => scv(`${block}-${v}`, s)\n    }\n  }\n\n  const n = (isVar?: boolean) => (typeof namespace === 'function' ? namespace(isVar) : namespace)\n\n  return <NBEM<B, N>>{\n    b: () => `${n()}-${block}`,\n    be: e => `${n()}-${block}__${e}`,\n    bm: m => `${n()}-${block}--${m}`,\n    bem: (e, m) => `${n()}-${block}__${e}--${m}`,\n    bs: s => `${n()}-${block}-${s}`,\n    ns: s => `${n()}-${s}`,\n\n    cb: () => `.${n()}-${block}`,\n    cbe: e => `.${n()}-${block}__${e}`,\n    cbm: m => `.${n()}-${block}--${m}`,\n    cbem: (e, m) => `.${n()}-${block}__${e}--${m}`,\n    cbs: s => `.${n()}-${block}-${s}`,\n    cns: s => `.${n()}-${s}`,\n\n    cv: v => cv(`${n(true)}-${block}-${v}`),\n    cvm: (m, s = {} as any) => {\n      const namespace = n(true)\n\n      for (const key of Object.keys(m)) {\n        s[cv(`${namespace}-${block}-${key}`)] = m[key]\n      }\n\n      return s\n    },\n    gcv: v => gcv(`${n(true)}-${block}-${v}`),\n    scv: (v, s) => scv(`${n(true)}-${block}-${v}`, s),\n    nv: v => cv(`${n(true)}-${v}`),\n    nvm: (m, s = {} as any) => {\n      const namespace = n(true)\n\n      for (const key of Object.keys(m)) {\n        s[cv(`${namespace}-${key}`)] = m[key]\n      }\n\n      return s\n    },\n    gnv: v => gcv(`${n(true)}-${v}`),\n    snv: (v, s) => scv(`${n(true)}-${v}`, s)\n  }\n}\n","import { computed, inject, provide, unref } from 'vue'\n\nimport { useBEM } from '@vexip-ui/bem-helper'\n\nimport type { App, ComputedRef, MaybeRef } from 'vue'\n\nexport type Namespace = 'vxp'\n\nexport const PROVIDED_NAMESPACE = '__vxp-provided-namespace'\nexport const globalNamespace = computed(() => 'vxp' as Namespace)\n\n/**\n * Provide a namespace config for under components.\n *\n * You only should use this method when initialize application.\n *\n * @param sourceNamespace namespace config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function configNamespace<N extends string = Namespace>(\n  sourceNamespace: MaybeRef<N>,\n  app?: App\n) {\n  if (app) {\n    const namespace = computed(() => {\n      const namespace = unref(sourceNamespace)\n\n      return namespace || globalNamespace.value\n    })\n\n    app.provide(PROVIDED_NAMESPACE, namespace)\n  } else {\n    const upstreamNamespace = inject<ComputedRef<string> | null>(PROVIDED_NAMESPACE, null)\n    const namespace = computed(() => {\n      return unref(sourceNamespace) || upstreamNamespace?.value || globalNamespace.value\n    })\n\n    provide(PROVIDED_NAMESPACE, namespace)\n  }\n}\n\nexport function useNamespace<N extends string = Namespace>() {\n  return inject(PROVIDED_NAMESPACE, globalNamespace) as ComputedRef<N>\n}\n\n/**\n * Create a name helper for BEM.\n *\n * For css vars name, the namespace is fixed to 'vxp' (not responsive).\n */\nexport function useNameHelper<B extends string, N extends string = Namespace>(\n  block: B,\n  namespace: MaybeRef<N> = useNamespace()\n) {\n  return useBEM(block, isVar => (isVar ? 'vxp' : unref(namespace)))\n}\n\nexport type NameHelper = ReturnType<typeof useNameHelper>\n","import { computed, inject, provide, reactive, unref, watch } from 'vue'\n\nimport { has, isFunction, isNull, isObject, mergeObjects } from '@vexip-ui/utils'\n\nimport type {\n  App,\n  CSSProperties,\n  ComponentObjectPropsOptions,\n  ComputedRef,\n  MaybeRef,\n  PropType\n} from 'vue'\nimport type { LocaleConfig, LocaleNames } from './locale'\nimport type { AnyFunction, EnsureValue, Expand, MaybeFunction, VoidFunction } from './types'\n\nexport type PropsOptions = Record<string, Record<string, unknown>>\n\ninterface PropsConfig<T = any> {\n  /**\n   * The default value of the prop\n   */\n  default: T | (() => T) | null,\n  /**\n   * Whether the prop is a function type\n   *\n   * @default false\n   */\n  isFunc?: boolean,\n  /**\n   * Whether the prop is not configurable\n   *\n   * @default false\n   */\n  static?: boolean,\n  /**\n   * Whether the prop is required\n   *\n   * @default false\n   */\n  required?: boolean,\n  /**\n   * The validator for the prop, decide whether the value of the prop is valid\n   *\n   * @param value the value of the prop\n   */\n  validator?: (value: T) => any\n}\n\ntype PropsConfigOptions<T> = {\n  [K in keyof T]?:\n  | PropsConfig<EnsureValue<T[K]>>\n  | EnsureValue<T[K]>\n  | (() => EnsureValue<T[K]>)\n  | null\n}\n\nexport const PROVIDED_PROPS = '__vxp-provided-props'\nconst eventPropRE = /^on[A-Z]/\n\n/**\n * Provide a props config for under components.\n *\n * @param props props config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function configProps<T>(props: MaybeRef<T>, app?: App) {\n  if (app) {\n    app.provide(\n      PROVIDED_PROPS,\n      computed(() => unref(props))\n    )\n  } else {\n    const upstreamProps = inject<ComputedRef<Record<string, any>> | null>(PROVIDED_PROPS, null)\n    const providedProps = computed(() => {\n      if (!upstreamProps?.value) {\n        return unref(props)\n      }\n\n      return mergeObjects(upstreamProps.value, unref(props) as any)\n    })\n\n    provide(PROVIDED_PROPS, providedProps)\n  }\n}\n\nexport function useProps<T extends Record<string, any>>(\n  name: string,\n  sourceProps: T,\n  config: PropsConfigOptions<T> = {}\n) {\n  const providedProps = inject<ComputedRef<Record<string, PropsConfigOptions<T>>> | null>(\n    PROVIDED_PROPS,\n    null\n  )\n  const commonProps = computed<PropsConfigOptions<T>>(() => {\n    return providedProps?.value?.default ?? {}\n  })\n  const configProps = computed<PropsConfigOptions<T>>(() => {\n    return providedProps?.value?.[name] ?? {}\n  })\n  const keys = Object.keys(sourceProps) as Array<keyof T>\n  const props: {\n    [P in keyof T]?: ComputedRef<T[P]>\n  } = {}\n\n  keys.forEach(key => {\n    const defs = config[key]\n    const propOptions = (\n      isObject(defs) && has(defs, 'default') ? defs : { default: defs }\n    ) as PropsConfig<T[keyof T]>\n    const validator = isFunction(propOptions.validator) ? propOptions.validator : null\n    const defaultValue = propOptions.default\n    const isFunc = isNull(propOptions.isFunc) ? eventPropRE.test(String(key)) : propOptions.isFunc\n    const getValue = (value: PropsConfigOptions<T>[keyof T]) =>\n      !isFunc && isFunction(value) ? value() : value\n    const getDefault = () =>\n      (!isFunc && isFunction(defaultValue) ? defaultValue() : defaultValue) as T[keyof T]\n\n    ;(propOptions.required || validator) &&\n      watch(\n        () => sourceProps[key],\n        value => {\n          if (isNull(value)) {\n            if (propOptions.required) {\n              console.warn(`${toWarnPrefix(name)}: '${key as string}' prop is required but not set`)\n            }\n\n            return\n          } else if (!validator) {\n            return\n          }\n\n          const result = validator(value)\n\n          if (result === false) {\n            console.warn(\n              `${toWarnPrefix(name)}: an invalid value is set to '${key as string}' prop`\n            )\n          }\n        },\n        { immediate: true }\n      )\n\n    if (propOptions.static) {\n      props[key] = computed(() => sourceProps[key] ?? getDefault())\n    } else {\n      props[key] = computed(() => {\n        if (isNull(sourceProps[key])) {\n          if (!isNull(configProps.value[key])) {\n            return getValue(configProps.value[key])\n          }\n          if (!isNull(commonProps.value[key])) {\n            return getValue(commonProps.value[key])\n          }\n\n          return getDefault()\n        }\n\n        return sourceProps[key]\n      })\n    }\n  })\n\n  return reactive(props) as {\n    [P in keyof T]-?: Exclude<T[P], undefined>\n  }\n}\n\nexport function useHookProps<T extends Record<any, any>>(\n  props: T,\n  defaults: { [K in keyof T]: T[K] | null }\n) {\n  const propsWithDefault: { [P in keyof T]?: ComputedRef<T[P]> } = {}\n\n  for (const key of Object.keys(props) as (keyof T)[]) {\n    propsWithDefault[key] = computed(() => props[key] ?? defaults[key]!)\n  }\n\n  return reactive(propsWithDefault) as {\n    [P in keyof T]-?: Exclude<T[P], undefined>\n  }\n}\n\nfunction toWarnPrefix(name: string) {\n  return `[vexip-ui:${name.charAt(0).toLocaleUpperCase() + name.substring(1)}]`\n}\n\nexport const booleanProp = {\n  type: Boolean,\n  default: null\n}\nexport const booleanStringProp = {\n  type: [Boolean, String],\n  default: null\n}\nexport const booleanNumberProp = {\n  type: [Boolean, Number],\n  default: null\n}\n\ntype CommonExcludedProps =\n  | 'inherit'\n  | 'value'\n  | 'checked'\n  | 'active'\n  | 'visible'\n  | 'label'\n  | 'options'\n  | 'name'\ntype ExcludeProps<P, E extends string = never, I extends string = never> =\n  | Exclude<CommonExcludedProps, I>\n  | Exclude<E, I>\n  | (P extends I ? never : P extends `on${Capitalize<string>}` ? P : never)\ntype PostProps<T, E extends string> = Omit<{ [P in keyof T]: MaybeFunction<T[P]> }, E>\n\n/**\n * Create a configurable props\n *\n * @param T the type of import('vue').ExtractPropTypes\n * @param E the props should force exclude\n * @param I the props should force include\n */\nexport type ConfigurableProps<T, E extends string = never, I extends string = never> = PostProps<\n  {\n    [P in keyof T]?: P extends I\n      ? T[P]\n      : P extends `on${Capitalize<string>}`\n        ? never\n        : T[Exclude<P, CommonExcludedProps | E>]\n  },\n  ExcludeProps<keyof T, E, I>\n>\n\n/* eslint-disable @typescript-eslint/ban-types */\ntype VexipProps<T> = {\n  [P in keyof T]: T[P] extends PropType<infer I>\n    ? PropType<I & {}>\n    : T[P] extends { type: PropType<infer I> }\n      ? PropType<I & {}>\n      : T[P]\n}\n/* eslint-enable */\n\nexport function wrapProps<T extends ComponentObjectPropsOptions>(props: T) {\n  return Object.freeze(props) as Expand<T>\n}\n\nexport function buildProps<T extends ComponentObjectPropsOptions>(props: T) {\n  const common = {\n    inherit: booleanProp\n  }\n\n  return Object.freeze({ ...common, ...props }) as Expand<VexipProps<typeof common & T>>\n}\n\nexport function omitProps<T extends ComponentObjectPropsOptions, K extends keyof T>(\n  props: T,\n  keys: K[]\n): Expand<Omit<T, K>>\nexport function omitProps<\n  T extends ComponentObjectPropsOptions,\n  K extends keyof T,\n  E extends ComponentObjectPropsOptions\n>(props: T, keys: K[], extra: E): Expand<Omit<T, K> & E>\nexport function omitProps<\n  T extends ComponentObjectPropsOptions,\n  K extends keyof T,\n  E extends ComponentObjectPropsOptions\n>(props: T, keys: K[], extra?: E) {\n  const omittedKeys = new Set(keys)\n\n  return Object.freeze(\n    Object.assign(\n      (Object.keys(props) as any[]).reduce((prev, current) => {\n        if (!omittedKeys.has(current)) {\n          prev[current] = props[current]\n        }\n\n        return prev\n      }, {}),\n      extra || {}\n    )\n  )\n}\n\nexport type ComponentSize = 'small' | 'default' | 'large'\n\nexport const sizeProp = String as PropType<ComponentSize>\nconst validSizeValues: ComponentSize[] = ['small', 'default', 'large']\nconst sizeValidator = (value: ComponentSize) => validSizeValues.includes(value)\n\nexport function createSizeProp(defaultValue: MaybeRef<ComponentSize> = 'default') {\n  return {\n    default: () => unref(defaultValue),\n    validator: sizeValidator\n  }\n}\n\nexport type ComponentState = 'default' | 'success' | 'error' | 'warning'\n\nexport const stateProp = String as PropType<ComponentState>\nconst validStateValues: ComponentState[] = ['default', 'success', 'error', 'warning']\nconst stateValidator = (value: ComponentState) => validStateValues.includes(value)\n\nexport function createStateProp(defaultValue: MaybeRef<ComponentState> = 'default') {\n  return {\n    default: () => unref(defaultValue),\n    validator: stateValidator\n  }\n}\n\ntype MaybeArray<T> = T | T[]\n// type MaybeArrayDeep<T> = T | (MaybeArrayDeep<T>[] extends infer R ? R : never)\n\nexport type ClassType = string | Record<string, any> | Array<string | Record<string, any>>\nexport type StyleType = string | CSSProperties | Array<string | CSSProperties>\n\nexport const classProp = [String, Object, Array] as PropType<ClassType>\nexport const styleProp = [String, Object, Array] as PropType<StyleType>\n\ntype ForceBoolean<T> = true extends T\n  ? Exclude<T, boolean> | boolean\n  : false extends T\n    ? Exclude<T, boolean> | boolean\n    : T\ntype ForceBooleanDeep<T> = T extends unknown ? { [K in keyof T]: ForceBoolean<T[K]> } : never\ntype SplitAndCombo<T, O = T> = T extends unknown\n  ?\n    | [T]\n    | (SplitAndCombo<Exclude<O, T>> extends infer U extends any[]\n      ? U extends U\n        ? [ForceBoolean<T | U[number]>]\n        : never\n      : never)\n  : never\ntype GenerateEvent<T extends any[], Others extends any[], R = any> = T extends unknown\n  ? Others extends never\n    ? (value: T[0]) => R\n    : (value: T[0], ...args: Others) => R\n  : never\n\n/**\n * Split and combo the first parameter of the given function\n *\n * @example\n * ```ts\n * // origin function\n * type Fn = (value: string | number | boolean) => void\n *\n * // after transform\n * type After =\n *  | ((value: string | number | boolean) => void)\n *  | ((value: string | number) => void)\n *  | ((value: string | boolean) => void)\n *  | ((value: number | boolean) => void)\n *  | ((value: string) => void)\n *  | ((value: number) => void)\n *  | ((value: boolean) => void)\n * ```\n */\nexport type EventListener<T extends AnyFunction> =\n  Expand<ForceBooleanDeep<SplitAndCombo<Parameters<T>[0]>>> extends infer F extends any[]\n    ? Parameters<T> extends [unknown, ...infer Others]\n      ? GenerateEvent<F, Others, ReturnType<T>>\n      : GenerateEvent<F, never, ReturnType<T>>\n    : never\n\nconst eventTypes = [Function, Array]\n\nexport function eventProp<F extends AnyFunction = VoidFunction>() {\n  return eventTypes as PropType<MaybeArray<F>>\n}\n\nexport function emitEvent<A extends any[]>(\n  handlers: MaybeArray<(...args: A) => void> | undefined,\n  ...args: A\n) {\n  if (Array.isArray(handlers)) {\n    for (let i = 0, len = handlers.length; i < len; ++i) {\n      const handler = handlers[i]\n\n      typeof handler === 'function' && handler(...args)\n    }\n  } else {\n    typeof handlers === 'function' && handlers(...args)\n  }\n}\n\nexport function localeProp<N extends LocaleNames>(_name: N) {\n  return Object as PropType<Partial<LocaleConfig[N]>>\n}\n\nexport const valueProp = {\n  type: [String, Number, Boolean],\n  default: null\n}\nexport const valuesProp = {\n  type: [String, Number, Boolean, Array] as PropType<MaybeArray<string | number | boolean>>,\n  default: null\n}\n\nexport const iconProp = [Object, Function]\n\nexport function createIconProp(defaultValue: Record<any, any> | AnyFunction | null = null) {\n  return {\n    isFunc: true,\n    default: defaultValue\n  }\n}\n","import { computed, getCurrentInstance, inject, provide, unref } from 'vue'\n\nimport { isClient, isDefined } from '@vexip-ui/utils'\n\nimport type { App, ComputedRef, MaybeRef } from 'vue'\n\nexport const PROVIDED_Z_INDEX = '___vxp-provided-z-index'\n\nlet counter = 0\nlet initZIndex = 2000\n\nif (isClient) {\n  const rootStyle = getComputedStyle(document.documentElement)\n  const cssZIndex = parseFloat(rootStyle.getPropertyValue('--vxp-z-index-popup').trim())\n\n  if (!Number.isNaN(cssZIndex)) {\n    initZIndex = cssZIndex\n  }\n}\n\nexport const globalZIndex = computed(() => initZIndex)\n\nfunction getOrDefault(num: number, def: number) {\n  return isDefined(num) && !Number.isNaN(num) ? num : def\n}\n\n/**\n * Provide a z-index config for under components.\n *\n * @param sourceZIndex z-index config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function configZIndex(sourceZIndex: MaybeRef<number>, app?: App) {\n  if (app) {\n    const zIndex = computed(() => {\n      const zIndex = unref(sourceZIndex)\n\n      return getOrDefault(zIndex, globalZIndex.value)\n    })\n\n    app.provide(PROVIDED_Z_INDEX, zIndex)\n  } else {\n    const upstreamZIndex = inject<ComputedRef<number> | null>(PROVIDED_Z_INDEX, null)\n    const zIndex = computed(() => {\n      const zIndex = unref(sourceZIndex)\n\n      return getOrDefault(\n        zIndex,\n        upstreamZIndex ? getOrDefault(upstreamZIndex.value, globalZIndex.value) : globalZIndex.value\n      )\n    })\n\n    provide(PROVIDED_Z_INDEX, zIndex)\n  }\n}\n\nexport function useZIndex() {\n  const zIndex = getCurrentInstance()\n    ? inject<ComputedRef<number>>(PROVIDED_Z_INDEX, globalZIndex)\n    : globalZIndex\n\n  // return computed(() => zIndex.value + counter++)\n  return () => zIndex.value + counter++\n}\n","import { buildProps, iconProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { IconEffect, IconRenderer } from './symbol'\n\nexport const iconProps = buildProps({\n  icon: iconProp,\n  scale: [Number, String],\n  title: String,\n  label: String,\n  flip: String as PropType<'horizontal' | 'vertical' | 'both'>,\n  effect: String as PropType<IconEffect>,\n  size: String,\n  color: String,\n  rotate: [Number, String],\n  renderer: Function as PropType<IconRenderer>\n})\n\nexport type IconProps = ExtractPropTypes<typeof iconProps>\nexport type IconCProps = ConfigurableProps<IconProps, 'icon'>\n","import { computed, defineComponent, h, renderSlot } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { toNumber } from '@vexip-ui/utils'\nimport { iconProps } from './props'\n\nimport type { CSSProperties } from 'vue'\nimport type { IconPresetEffect } from './symbol'\n\nconst internalEffects = Object.freeze<IconPresetEffect[]>([\n  'spin-in',\n  'spin-out',\n  'pulse-in',\n  'pulse-out'\n])\n\nconst angleRE = /(^\\s*[+-]?\\d*\\.?\\d+\\s*)(deg|grad|turn|rad)?\\s*/i\n\nexport default defineComponent({\n  name: 'Icon',\n  props: iconProps,\n  setup(_props, { attrs, slots }) {\n    const props = useProps('icon', _props, {\n      icon: {\n        isFunc: true,\n        default: null,\n        static: true\n      },\n      scale: 1,\n      title: null,\n      label: null,\n      flip: {\n        default: null,\n        validator: value => ['horizontal', 'vertical', 'both'].includes(value)\n      },\n      effect: null,\n      size: null,\n      color: null,\n      rotate: null,\n      renderer: {\n        default: null,\n        isFunc: true\n      }\n    })\n\n    const nh = useNameHelper('icon')\n\n    const className = computed(() => {\n      let effectCls = ''\n\n      if (props.effect) {\n        effectCls = internalEffects.includes(props.effect as IconPresetEffect)\n          ? nh.bm(props.effect)\n          : props.effect\n      }\n\n      return {\n        [nh.b()]: true,\n        [nh.bm(`flip-${props.flip}`)]: props.flip,\n        [effectCls]: effectCls\n      }\n    })\n    const computedScale = computed(() => toNumber(props.scale) || 1)\n    const rotate = computed(() => {\n      if (typeof props.rotate === 'number') {\n        return `${(props.rotate % 4) / 4}turn`\n      }\n\n      const matched = props.rotate?.match(angleRE)\n\n      if (!matched) return null\n\n      const number = toNumber(matched[1])\n\n      if (!matched[2]) {\n        return `${(number % 4) / 4}turn`\n      }\n\n      return number ? `${number}${matched[2]}` : null\n    })\n    const style = computed(() => {\n      const style: CSSProperties = {\n        color: props.color\n      }\n\n      if (props.size) {\n        style.fontSize = props.size\n      } else if (computedScale.value !== 1) {\n        style.fontSize = `${computedScale.value}em`\n      }\n\n      if (rotate.value) {\n        style[nh.cv('rotate')] = rotate.value\n      }\n\n      return style\n    })\n\n    function renderDefault() {\n      const iAttrs = {\n        class: className.value,\n        style: style.value,\n        title: props.title,\n        role: (attrs.role as string) || (props.label || props.title ? 'img' : undefined),\n        'aria-label': props.label,\n        'aria-hidden': !(props.label || props.title)\n      }\n\n      if (slots.default) {\n        return (\n          <i {...iAttrs}>\n            <g>{renderSlot(slots, 'default')}</g>\n          </i>\n        )\n      }\n\n      if (props.icon) {\n        return (\n          <i {...iAttrs}>\n            <g>{h(props.icon)}</g>\n          </i>\n        )\n      }\n\n      return <i {...iAttrs}></i>\n    }\n\n    return () => {\n      if (typeof props.renderer === 'function') {\n        return props.renderer(props as any, attrs, renderDefault)\n      }\n\n      return renderDefault()\n    }\n  }\n})\n","import { wrapProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\n\nexport const rendererProps = wrapProps({\n  renderer: {\n    type: Function,\n    default: null\n  },\n  data: {\n    type: Object as PropType<Record<string, any>>,\n    default: undefined\n  }\n})\n\nexport type RendererProps = ExtractPropTypes<typeof rendererProps>\n","import { defineComponent, renderSlot } from 'vue'\n\nimport { rendererProps } from './props'\n\nexport default defineComponent({\n  name: 'Renderer',\n  props: rendererProps,\n  setup(props, { slots }) {\n    return () => {\n      if (typeof props.renderer !== 'function') {\n        return renderSlot(slots, 'default', props.data)\n      }\n\n      return props.renderer(props.data)\n    }\n  }\n})\n","import { booleanProp, buildProps, classProp, eventProp, iconProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { SpinSlots } from './symbol'\n\nexport const spinProps = buildProps({\n  active: booleanProp,\n  icon: iconProp,\n  inner: booleanProp,\n  delay: {\n    type: [Boolean, Number, Array] as PropType<boolean | number | number[]>,\n    default: null\n  },\n  tip: String,\n  hideMask: booleanProp,\n  maskColor: String,\n  maskClass: classProp,\n  transitionName: String,\n  iconEffect: String as PropType<IconEffect>,\n  slots: Object as PropType<SpinSlots>,\n  onMaskClick: eventProp<(event: MouseEvent) => void>(),\n  onShow: eventProp(),\n  onHide: eventProp()\n})\n\nexport type SpinProps = ExtractPropTypes<typeof spinProps>\nexport type SpinCProps = ConfigurableProps<SpinProps>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, ref, watch } from 'vue'\n\nimport { createIconProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { toNumber } from '@vexip-ui/utils'\nimport { spinProps } from './props'\n\nimport type { SpinSlots } from './symbol'\n\ndefineOptions({ name: 'Spin' })\n\nconst nh = useNameHelper('spin')\nconst _props = defineProps(spinProps)\nconst props = useProps('spin', _props, {\n  active: {\n    default: false,\n    static: true\n  },\n  icon: createIconProp(),\n  inner: false,\n  delay: false,\n  tip: '',\n  hideMask: false,\n  maskColor: '',\n  maskClass: null,\n  transitionName: () => nh.ns('fade'),\n  iconEffect: null,\n  slots: () => ({})\n})\n\nconst slots = defineSlots<SpinSlots>()\n\nconst icons = useIcons()\n\nconst currentActive = ref(props.active)\n\nconst hasTip = computed(() => !!(props.tip || slots.tip))\nconst maskStyle = computed(() => {\n  const style = {} as any\n\n  if (props.maskColor) {\n    style[nh.cv('mask-bg-color')] = props.maskColor\n  }\n\n  return style\n})\nconst delayTime = computed(() => {\n  if (props.delay) {\n    if (props.delay === true) {\n      return { enter: 500, leave: 500 }\n    }\n\n    if (typeof props.delay === 'number') {\n      return { enter: props.delay, leave: props.delay }\n    }\n\n    if (Array.isArray(props.delay)) {\n      return { enter: toNumber(props.delay[0]), leave: toNumber(props.delay[1]) }\n    }\n  }\n\n  return { enter: 0, leave: 0 }\n})\n\nlet timer: ReturnType<typeof setTimeout>\n\nwatch(\n  () => props.active,\n  value => {\n    clearTimeout(timer)\n\n    const delay = value ? delayTime.value.enter : delayTime.value.leave\n\n    if (delay) {\n      timer = setTimeout(() => {\n        currentActive.value = value\n      }, delay)\n    } else {\n      currentActive.value = value\n    }\n  }\n)\n\ndefineExpose({\n  currentActive,\n  hasTip,\n  handleShow,\n  handleHide\n})\n\nfunction handleMaskClick(event: MouseEvent) {\n  emitEvent(props.onMaskClick, event)\n}\n\nfunction handleShow() {\n  emitEvent(props.onShow)\n}\n\nfunction handleHide() {\n  emitEvent(props.onHide)\n}\n</script>\n\n<template>\n  <div\n    v-if=\"!props.inner\"\n    :class=\"[nh.b(), nh.bs('vars'), props.inherit && nh.bm('inherit')]\"\n    :aria-busy=\"currentActive ? 'true' : undefined\"\n  >\n    <slot>\n      <Renderer :renderer=\"props.slots.default\"></Renderer>\n    </slot>\n    <Transition\n      appear\n      :name=\"props.transitionName\"\n      @after-enter=\"handleShow\"\n      @after-leave=\"handleHide\"\n    >\n      <div v-if=\"currentActive\" :class=\"nh.be('loading')\">\n        <div\n          v-if=\"!props.hideMask\"\n          :class=\"[nh.be('mask'), props.maskClass]\"\n          :style=\"maskStyle\"\n          @click=\"handleMaskClick\"\n        ></div>\n        <slot name=\"content\">\n          <Renderer :renderer=\"props.slots.content\">\n            <div :class=\"nh.be('icon')\">\n              <slot name=\"icon\">\n                <Renderer :renderer=\"props.slots.icon\">\n                  <Icon\n                    v-bind=\"icons.loading\"\n                    :icon=\"props.icon || icons.loading.icon\"\n                    :effect=\"props.iconEffect || icons.loading.effect\"\n                    label=\"loading\"\n                  ></Icon>\n                </Renderer>\n              </slot>\n            </div>\n            <div v-if=\"hasTip\" :class=\"nh.be('tip')\">\n              <slot name=\"tip\">\n                <Renderer :renderer=\"props.slots.tip\">\n                  {{ props.tip }}\n                </Renderer>\n              </slot>\n            </div>\n          </Renderer>\n        </slot>\n      </div>\n    </Transition>\n  </div>\n  <Transition\n    v-else\n    appear\n    :name=\"props.transitionName\"\n    @after-enter=\"handleShow\"\n    @after-leave=\"handleHide\"\n  >\n    <div v-if=\"currentActive\" :class=\"[nh.b(), nh.bs('vars'), nh.bm('inner')]\">\n      <div\n        v-if=\"!props.hideMask\"\n        :class=\"[nh.be('mask'), props.maskClass]\"\n        :style=\"maskStyle\"\n        @click=\"handleMaskClick\"\n      ></div>\n      <slot name=\"content\">\n        <Renderer :renderer=\"props.slots.content\">\n          <div :class=\"nh.be('icon')\">\n            <slot name=\"icon\">\n              <Renderer :renderer=\"props.slots.icon\">\n                <Icon\n                  v-bind=\"icons.loading\"\n                  :icon=\"props.icon || icons.loading.icon\"\n                  :effect=\"props.iconEffect || icons.loading.effect\"\n                  label=\"loading\"\n                ></Icon>\n              </Renderer>\n            </slot>\n          </div>\n          <div v-if=\"hasTip\" :class=\"nh.be('tip')\">\n            <slot name=\"tip\">\n              <Renderer :renderer=\"props.slots.tip\">\n                {{ props.tip }}\n              </Renderer>\n            </slot>\n          </div>\n        </Renderer>\n      </slot>\n    </div>\n  </Transition>\n</template>\n","import { Spin } from '@/components/spin'\n\nimport { createVNode, nextTick, render } from 'vue'\n\nimport { isObject } from '@vexip-ui/utils'\n\nimport type { SpinProps } from '@/components/spin'\nimport type { DirectiveBinding, ObjectDirective, VNode } from 'vue'\n\ninterface LoadingRecord {\n  spin: VNode,\n  props: SpinProps,\n  originPosition: string\n}\n\nfunction createSpin(\n  el: HTMLElement & { __loading?: LoadingRecord },\n  binding: DirectiveBinding<boolean | SpinProps>\n) {\n  const props: SpinProps = isObject(binding.value)\n    ? { ...binding.value }\n    : { active: binding.value }\n\n  props.inner = true\n\n  const spin = createVNode(Spin, props, null, 0, Object.keys(props))\n  const position = getComputedStyle(el).position\n\n  el.__loading = {\n    spin,\n    props,\n    originPosition: position\n  }\n\n  if (position === 'static') {\n    el.style.position = 'relative'\n  }\n\n  render(spin, el)\n}\n\nexport const vLoading: ObjectDirective<\n  HTMLElement & { __loading?: LoadingRecord },\n  boolean | SpinProps\n> = {\n  mounted(el, binding) {\n    nextTick(() => createSpin(el, binding))\n  },\n  updated(el, binding) {\n    nextTick(() => {\n      if (!el.__loading) {\n        createSpin(el, binding)\n        return\n      }\n\n      const props: SpinProps = isObject(binding.value) ? binding.value : { active: binding.value }\n      const component = el.__loading.spin.component\n\n      if (component) {\n        Object.keys(props).forEach(key => {\n          component.props[key] = props[key as keyof SpinProps]\n        })\n\n        component.props.inner = true\n      }\n    })\n  },\n  beforeUnmount(el) {\n    if (!el.__loading) return\n\n    render(null, el)\n    delete el.__loading\n  }\n}\n","import { computed, getCurrentScope, onScopeDispose, unref, watch } from 'vue'\n\nimport { noop } from '@vexip-ui/utils'\n\nimport type { MaybeRef } from 'vue'\n\nexport interface UseListenerOptions extends AddEventListenerOptions {\n  /**\n   * 是否禁用整个 hook 的事件处理\n   */\n  disabled?: MaybeRef<boolean>\n}\n\nexport function useListener<E = Event>(\n  target: MaybeRef<EventTarget | null | undefined>,\n  event: string,\n  listener: (event: E) => any,\n  options?: UseListenerOptions | boolean\n) {\n  if (!target) {\n    return noop\n  }\n\n  const normalizedOptions = computed(() => {\n    if (typeof options === 'boolean') {\n      return { capture: options }\n    }\n\n    return options || {}\n  })\n\n  let remove = noop\n\n  const stopWatch = watch(\n    () => unref(target),\n    el => {\n      remove()\n\n      if (!el) {\n        return\n      }\n\n      const { disabled, ...opts } = normalizedOptions.value\n      const handler = (event: Event) => {\n        if (!unref(disabled)) {\n          listener(event as E)\n        }\n      }\n\n      el.addEventListener(event, handler, opts)\n\n      remove = () => {\n        el.removeEventListener(event, handler, opts)\n        remove = noop\n      }\n    },\n    { immediate: true, flush: 'post' }\n  )\n\n  const stop = () => {\n    stopWatch()\n    remove()\n  }\n\n  getCurrentScope() && onScopeDispose(stop)\n\n  return stop\n}\n","import { getCurrentScope, onScopeDispose, ref, unref, watch } from 'vue'\n\nimport { CLICK_TYPE, dispatchEvent, isClient, noop } from '@vexip-ui/utils'\nimport { useListener } from './listener'\n\nimport type { Ref } from 'vue'\nimport type { TransferNode } from '@vexip-ui/utils'\n\nexport const CLICK_OUTSIDE = 'clickoutside'\n\nconst elements = new Set<TransferNode>()\n\nif (isClient) {\n  document.addEventListener(\n    CLICK_TYPE,\n    (event: Event) => {\n      const target = event.target as Node | null\n      const path = event.composedPath && event.composedPath()\n\n      elements.forEach(el => {\n        if (\n          el !== target &&\n          (path ? !path.includes(el) : !el.contains(target)) &&\n          (!el.__transferElement ||\n            (el.__transferElement !== target && !el.__transferElement.contains(target)))\n        ) {\n          dispatchEvent(el, { type: CLICK_OUTSIDE })\n        }\n      })\n    },\n    true\n  )\n}\n\n/**\n * 创建一个可以添加 clickoutside 事件的元素 Ref\n *\n * @param handler 事件的回调方法\n * @param target 需要处理的元素 ref，可不传\n */\nexport function useClickOutside(\n  handler: () => void,\n  target: Ref<HTMLElement | null | undefined> = ref(null)\n) {\n  let remove = noop\n\n  const stopWatch = watch(\n    () => unref(target),\n    el => {\n      remove()\n\n      if (!el) {\n        return\n      }\n\n      elements.add(el)\n\n      remove = () => {\n        elements.delete(el)\n        remove = noop\n      }\n    },\n    { immediate: true, flush: 'post' }\n  )\n\n  const stop = () => {\n    stopWatch()\n    remove()\n  }\n\n  getCurrentScope() && onScopeDispose(stop)\n  useListener(target, CLICK_OUTSIDE, handler)\n\n  return target\n}\n","import { nextTick, onBeforeUnmount, onMounted, ref } from 'vue'\n\nimport { noop } from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\n\n/**\n * 创建一个观察了最近的上级元素 display 变化的元素 Ref\n *\n * @param displayInit 元素初次显示后执行的回调\n * @returns 观察了 display 变化的元素 Ref\n */\nexport function useDisplay(\n  displayInit = noop,\n  element: Ref<HTMLElement | null | undefined> = ref(null)\n) {\n  let observer: MutationObserver | null\n\n  onMounted(() => {\n    nextTick(() => {\n      const hiddenParentNode = queryOutsideHiddenElement(element.value)\n\n      if (hiddenParentNode) {\n        observer = new MutationObserver(() => {\n          if (hiddenParentNode.style.display !== 'none') {\n            if (typeof displayInit === 'function') {\n              displayInit()\n            }\n\n            observer?.disconnect()\n            observer = null\n          }\n        })\n\n        observer.observe(hiddenParentNode, {\n          attributes: true,\n          childList: true,\n          characterData: true,\n          attributeFilter: ['style']\n        })\n      } else {\n        typeof displayInit === 'function' && displayInit()\n      }\n    })\n  })\n\n  onBeforeUnmount(() => {\n    observer?.disconnect()\n    observer = null\n  })\n\n  return element\n}\n\nexport function queryOutsideHiddenElement(el?: Element | null) {\n  if (el) {\n    let parentElement = el.parentElement\n\n    while (parentElement && parentElement !== document.body) {\n      if (parentElement.style.display === 'none') {\n        return parentElement\n      }\n\n      parentElement = parentElement.parentElement\n    }\n  }\n\n  return null\n}\n\nexport function isHiddenElement(el?: HTMLElement | null) {\n  if (el?.style.display !== 'none') {\n    return !!queryOutsideHiddenElement(el)\n  }\n\n  return true\n}\n","import {\n  Comment,\n  Fragment,\n  createTextVNode,\n  isVNode,\n  readonly,\n  ref,\n  renderSlot,\n  toRef,\n  unref,\n  watch\n} from 'vue'\n\nimport { ensureArray, isClient, noop } from '@vexip-ui/utils'\n\nimport type {\n  ComponentPublicInstance,\n  MaybeRef,\n  Ref,\n  Slots,\n  VNode,\n  VNodeChild,\n  VNodeNormalizedChildren\n} from 'vue'\nimport type { MaybeElement, MaybeInstance } from './types'\n\nexport function createSlotRender(\n  slots: Slots,\n  names: string[]\n): ((params?: any) => VNodeChild) | null\nexport function createSlotRender(\n  slots: Slots,\n  names: string[],\n  fallback: (params?: any) => VNodeChild\n): (params?: any) => VNodeChild\nexport function createSlotRender(\n  slots: Slots,\n  names: string[],\n  fallback?: (params?: any) => VNodeChild\n) {\n  for (const name of names) {\n    if (slots[name]) {\n      return (params: any) =>\n        renderSlot(slots, name, params, () => {\n          const vnodes = fallback?.(params)\n\n          return vnodes ? ensureArray(vnodes) : []\n        })\n    }\n  }\n\n  return fallback || null\n}\n\nexport function flatVNodes(children: VNodeNormalizedChildren) {\n  const result: VNode[] = []\n  const loop = Array.isArray(children) ? [...children] : []\n\n  while (loop.length) {\n    const vnode = loop.shift()!\n\n    if (vnode === null) continue\n\n    if (Array.isArray(vnode)) {\n      loop.unshift(...vnode)\n    }\n\n    if (\n      typeof vnode !== 'string' &&\n      typeof vnode !== 'number' &&\n      (!isVNode(vnode) || vnode.type === Comment)\n    ) {\n      continue\n    }\n\n    if (typeof vnode === 'string' || typeof vnode === 'number') {\n      result.push(createTextVNode(String(vnode)))\n    } else if (vnode.type === Fragment && Array.isArray(vnode.children)) {\n      loop.unshift(vnode.children)\n    } else {\n      result.push(vnode)\n    }\n  }\n\n  return result\n}\n\nexport function unrefElement<T extends string | MaybeInstance = string | MaybeInstance>(\n  ref: MaybeRef<T>\n): T extends string | ComponentPublicInstance ? MaybeElement : T {\n  const plain = unref(ref)\n\n  if (typeof plain === 'string') {\n    return isClient ? document.querySelector(plain) : (null as any)\n  }\n\n  return (plain as ComponentPublicInstance)?.$el ?? plain\n}\n\nexport function proxyExposed<T>(vnode: VNode): T {\n  return new Proxy({} as any, {\n    get(_, key) {\n      if (!vnode.component) return undefined\n\n      return (\n        (vnode.component.proxy as any)?.[key] ??\n        (vnode.component.exposeProxy as any)?.[key] ??\n        (vnode.component.exposed as any)?.[key]\n      )\n    }\n  }) as T\n}\n\nexport function watchPauseable(...args: Parameters<typeof watch>) {\n  const active = ref(true)\n  const handle = args[1] || noop\n\n  function pause() {\n    active.value = false\n  }\n\n  function resume() {\n    active.value = true\n  }\n\n  const stop = watch(\n    args[0],\n    (...callbackArgs) =>\n      new Promise<void>((resolve, reject) => {\n        if (active.value) {\n          Promise.resolve(handle(...callbackArgs))\n            .then(resolve)\n            .catch(reject)\n        }\n      }),\n    args[2]\n  )\n\n  return { active: readonly(active), pause, resume, stop }\n}\n\nexport function pickToRefs<T extends Record<any, any>, K extends keyof T>(reactive: T, keys: K[]) {\n  return keys.map(key => toRef(reactive, key)) as { [P in K]: Ref<T[P]> }\n}\n","import { computed, getCurrentScope, isRef, onScopeDispose, ref, watch } from 'vue'\n\nimport { isClient, noop } from '@vexip-ui/utils'\nimport { unrefElement } from './shared/utils'\n\nimport type { ComputedRef, MaybeRef, Ref } from 'vue'\nimport type { MaybeInstance } from './shared/types'\n\nexport interface UseFullScreenResult {\n  target: Ref<MaybeInstance>,\n  supported: boolean,\n  full: ComputedRef<boolean>,\n  enter: (force?: boolean) => Promise<boolean>,\n  exit: (force?: boolean) => Promise<boolean>,\n  toggle: (force?: boolean) => Promise<boolean>\n}\n\ntype PropertiesMap = [\n  'requestFullscreen',\n  'exitFullscreen',\n  'fullscreenElement',\n  'fullscreenEnabled',\n  'fullscreenchange',\n  'fullscreenerror'\n]\n\nconst functionsMap = [\n  [\n    'requestFullscreen',\n    'exitFullscreen',\n    'fullscreenElement',\n    'fullscreenEnabled',\n    'fullscreenchange',\n    'fullscreenerror'\n  ],\n  // New WebKit\n  [\n    'webkitRequestFullscreen',\n    'webkitExitFullscreen',\n    'webkitFullscreenElement',\n    'webkitFullscreenEnabled',\n    'webkitfullscreenchange',\n    'webkitfullscreenerror'\n  ],\n  // Old WebKit\n  [\n    'webkitRequestFullScreen',\n    'webkitCancelFullScreen',\n    'webkitCurrentFullScreenElement',\n    'webkitCancelFullScreen',\n    'webkitfullscreenchange',\n    'webkitfullscreenerror'\n  ],\n  [\n    'mozRequestFullScreen',\n    'mozCancelFullScreen',\n    'mozFullScreenElement',\n    'mozFullScreenEnabled',\n    'mozfullscreenchange',\n    'mozfullscreenerror'\n  ],\n  [\n    'msRequestFullscreen',\n    'msExitFullscreen',\n    'msFullscreenElement',\n    'msFullscreenEnabled',\n    'MSFullscreenChange',\n    'MSFullscreenError'\n  ]\n] as PropertiesMap[]\n\nlet map!: PropertiesMap\n\nif (isClient) {\n  for (const m of functionsMap) {\n    if (m[1] in document) {\n      map = m\n      break\n    }\n  }\n}\n\nconst supported = !!map\nconst notSupportedResult = {\n  supported,\n  full: computed(() => false),\n  enter: noop,\n  exit: noop,\n  toggle: noop\n}\n\nconst states = new Set<Ref<boolean>>()\nconst subscriptions = new WeakMap<Element, Ref<boolean>>()\n\nif (isClient && map) {\n  const ELEMENT = map[2]\n  const EVENT = map[4]\n\n  document.addEventListener(\n    EVENT,\n    () => {\n      states.forEach(state => {\n        state.value = false\n      })\n\n      if (document[ELEMENT]) {\n        const full = subscriptions.get(document[ELEMENT])\n\n        if (full) {\n          full.value = true\n        }\n      }\n    },\n    false\n  )\n}\n\nexport function useFullScreen(target: MaybeRef<MaybeInstance> = ref(null)): UseFullScreenResult {\n  const targetRef = computed({\n    get: () => unrefElement(target),\n    set: el => {\n      if (isRef(target)) {\n        target.value = el\n      }\n    }\n  })\n\n  if (!isClient || !supported) {\n    return { ...notSupportedResult, target: targetRef }\n  }\n\n  const [REQUEST, EXIT, ELEMENT] = map\n  const full = ref(false)\n\n  watch(\n    () => unrefElement(target),\n    (el, old) => {\n      old && subscriptions.delete(old)\n      el && subscriptions.set(el, full)\n    },\n    { immediate: true, flush: 'post' }\n  )\n\n  states.add(full)\n\n  if (getCurrentScope()) {\n    onScopeDispose(exit)\n  }\n\n  async function enter(force = false) {\n    await exit()\n\n    const el = unrefElement(target)\n\n    if (el) {\n      if (force || !document[ELEMENT]) {\n        await el[REQUEST]()\n        full.value = true\n\n        return document[ELEMENT] === el\n      }\n    }\n\n    return false\n  }\n\n  async function exit(force = false) {\n    const el = unrefElement(target)\n\n    if (force || (document[ELEMENT] && document[ELEMENT] === el)) {\n      await document[EXIT]()\n      full.value = false\n\n      return document[ELEMENT] !== el\n    }\n\n    return false\n  }\n\n  async function toggle(force = false) {\n    return full.value ? await exit(force) : await enter(force)\n  }\n\n  return {\n    supported,\n    target: targetRef,\n    full: computed(() => full.value),\n    enter,\n    exit,\n    toggle\n  }\n}\n","import { ref } from 'vue'\n\nimport { useListener } from './listener'\n\nimport type { Ref } from 'vue'\n\nexport function useHover(wrapper: Ref<HTMLElement | null | undefined> = ref(null)) {\n  const isHover = ref(false)\n\n  useListener(wrapper, 'mouseenter', enterWrapper)\n  useListener(wrapper, 'mouseleave', leaveWrapper)\n\n  function enterWrapper() {\n    isHover.value = true\n  }\n\n  function leaveWrapper() {\n    isHover.value = false\n  }\n\n  return { wrapper, isHover }\n}\n","import { getCurrentScope, onScopeDispose, ref, unref, watch } from 'vue'\n\nimport { ensureArray, isClient, noop, toNumber } from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\n\nexport type IntersectionHandler = (entry: IntersectionObserverEntry) => any\nexport type UseIntersectionOptions = IntersectionObserverInit & {\n  /**\n   * 元素交叉状态变化时的回调方法\n   */\n  handler: IntersectionHandler,\n  /**\n   * 作用的目标元素的 Ref\n   */\n  target?: Ref<HTMLElement | null | undefined>\n}\n\nconst observerCache = new WeakMap<\n  Element | Document,\n  Map<\n    string,\n    Map<\n      string,\n      { ob: IntersectionObserver, count: number, handlers: WeakMap<Element, IntersectionHandler> }\n    >\n  >\n>()\n\nconst spaceRE = /\\s+/g\nconst unitRE = /(px|%)$/\n\nexport function useIntersection(options: UseIntersectionOptions) {\n  const target = options.target || ref(null)\n\n  if (!isClient) {\n    return { target, disconnect: noop }\n  }\n\n  const { handler } = options\n\n  let root = options.root ?? document\n\n  const threshold = ensureArray(options.threshold || 0).join() || '0'\n  const margin = normalizeMargin(options.rootMargin)\n\n  if (!observerCache.has(root)) {\n    observerCache.set(root, new Map())\n  }\n\n  const thresholdCache = observerCache.get(root)!\n\n  if (!thresholdCache.has(threshold)) {\n    thresholdCache.set(threshold, new Map())\n  }\n\n  const marginCache = thresholdCache.get(threshold)!\n\n  if (!marginCache.has(margin)) {\n    marginCache.set(margin, {\n      ob: new IntersectionObserver(handleIntersect, { ...options, rootMargin: margin }),\n      count: 0,\n      handlers: new WeakMap<Element, IntersectionHandler>()\n    })\n  }\n\n  let state = marginCache.get(margin)\n  let { ob: observer, handlers } = state!\n\n  let remove = noop\n\n  const stopWatch = watch(\n    () => unref(target),\n    el => {\n      remove()\n\n      if (!el || !observer) {\n        return\n      }\n\n      handlers.set(el, handler)\n      observer.observe(el)\n      state && state.count++\n\n      remove = () => {\n        observer.unobserve(el)\n        handlers.delete(el)\n        state && state.count--\n        remove = noop\n      }\n    },\n    { immediate: true, flush: 'post' }\n  )\n\n  getCurrentScope() && onScopeDispose(disconnect)\n\n  function normalizeMargin(margin?: string) {\n    if (!margin || !margin.trim()) return '_'\n\n    const parts = margin.trim().split(spaceRE, 4)\n    parts.length = 4\n\n    for (let i = 0; i < 4; ++i) {\n      const part = parts[i]\n\n      parts[i] = unitRE.test(part) ? part : `${toNumber(part)}px`\n    }\n\n    return parts.join(' ')\n  }\n\n  function handleIntersect(entries: IntersectionObserverEntry[]) {\n    for (let i = 0, len = entries.length; i < len; ++i) {\n      const entry = entries[i]\n      const handler = handlers.get(entry.target)\n\n      if (typeof handler === 'function') {\n        handler(entry)\n      }\n    }\n  }\n\n  function disconnect() {\n    stopWatch()\n    remove()\n\n    if (!state) return\n\n    if (state.count <= 0) {\n      marginCache.delete(margin)\n\n      if (!marginCache.size) {\n        thresholdCache.delete(threshold)\n\n        if (!thresholdCache.size) {\n          observerCache.delete(root)\n        }\n      }\n    }\n\n    state = undefined\n    observer = undefined!\n    handlers = undefined!\n    root = undefined!\n  }\n\n  return { target, disconnect }\n}\n","import { customRef } from 'vue'\n\nexport function useManualRef() {\n  const updateSet = new Set<() => void>()\n\n  function manualRef<T>(value: T) {\n    return customRef<T>((track, trigger) => {\n      let origin = value\n\n      const update = () => {\n        if (value !== origin) {\n          origin = value\n          trigger()\n        }\n      }\n\n      return {\n        get: () => (track(), value),\n        set: newValue => {\n          if (newValue === value) return\n\n          value = newValue\n          updateSet.add(update)\n        }\n      }\n    })\n  }\n\n  function triggerUpdate() {\n    for (const trigger of updateSet) {\n      trigger()\n    }\n\n    updateSet.clear()\n  }\n\n  return { updateSet, manualRef, triggerUpdate }\n}\n","import { computed, isRef, reactive, ref, unref } from 'vue'\n\nimport { noop } from '@vexip-ui/utils'\nimport { useListener } from './listener'\n\nimport type { MaybeRef, Ref } from 'vue'\n\nexport type ModifierState = Readonly<\n  Omit<Record<string, boolean>, 'activeKeys'> & {\n    activeKeys: Set<string>,\n    resetAll: () => void\n  }\n>\n\nexport interface UseModifierOptions {\n  /**\n   * 作用的目标元素的 Ref\n   */\n  target?: Ref<HTMLElement | null | undefined>,\n  /**\n   * 是否禁用整个 hook 的事件处理\n   */\n  disabled?: MaybeRef<boolean>,\n  /**\n   * 配置键名的别名，会与默认别名动态合并\n   */\n  aliasMap?: Record<string, string>,\n  /**\n   * 是否在目标元素失去焦点时重置修饰符\n   *\n   * @default true\n   */\n  autoReset?: boolean,\n  /**\n   * 事件的 capture 选项\n   *\n   * @default false\n   */\n  capture?: boolean,\n  /**\n   * 事件的 passive 选项\n   *\n   * @default true\n   */\n  passive?: boolean,\n  /**\n   * 是否严格匹配目标元素\n   */\n  strictTarget?: boolean,\n  /**\n   * 键按下的事件回调函数\n   */\n  onKeyDown?: (event: KeyboardEvent, modifier: ModifierState) => void,\n  /**\n   * 键抬起的时间回调函数\n   */\n  onKeyUp?: (event: KeyboardEvent, modifier: ModifierState) => void\n}\n\nconst defaultAliasMap: Record<string, string> = {\n  ctrl: 'control',\n  command: 'meta',\n  cmd: 'meta',\n  option: 'alt',\n  up: 'arrowup',\n  down: 'arrowdown',\n  left: 'arrowleft',\n  right: 'arrowright'\n}\n\nconst separatorRE = /[+_-]/\nconst splitRE = /[+_-]/g\n\nconst internalProps = ['activeKeys', 'resetAll']\n\nexport function useModifier(options: UseModifierOptions = {}) {\n  const {\n    autoReset = true,\n    capture = false,\n    passive = true,\n    strictTarget = false,\n    onKeyDown = noop,\n    onKeyUp = noop\n  } = options\n\n  const target = options.target || ref(null)\n  const disabled = isRef(options.disabled) ? options.disabled : ref(options.disabled || false)\n  const aliasMap = { ...defaultAliasMap, ...(options.aliasMap || {}) }\n  const activeKeys = reactive(new Set<string>())\n  const metaDeps = new Set<string>()\n  const modifier: Record<string, any> = reactive({ activeKeys, resetAll })\n\n  function setModifier(key: string, value: boolean) {\n    if (key in modifier) {\n      modifier[key] = value\n    }\n  }\n\n  function updateModifier(event: KeyboardEvent, value: boolean) {\n    const key = event.key?.toLocaleLowerCase()\n    const code = event.code?.toLocaleLowerCase()\n    const keys = [code, key].filter(Boolean)\n\n    for (const key of keys) {\n      activeKeys[value ? 'add' : 'delete'](key)\n      setModifier(key, value)\n    }\n\n    if (!value && key === 'meta') {\n      for (const key of metaDeps) {\n        activeKeys.delete(key)\n        setModifier(key, false)\n      }\n\n      metaDeps.clear()\n    } else if (\n      value &&\n      typeof event.getModifierState === 'function' &&\n      event.getModifierState('Meta')\n    ) {\n      for (const key of [...activeKeys, ...keys]) {\n        metaDeps.add(key)\n      }\n    }\n  }\n\n  function resetAll() {\n    Object.keys(modifier).forEach(key => {\n      modifier[key] = false\n    })\n\n    modifier.activeKeys = activeKeys\n    modifier.resetAll = resetAll\n  }\n\n  const modifierProxy = new Proxy(modifier, {\n    get(target, prop, receiver) {\n      if (typeof prop !== 'string' || internalProps.includes(prop)) {\n        return Reflect.get(target, prop, receiver)\n      }\n\n      prop = prop.toLocaleLowerCase()\n\n      if (prop in aliasMap) {\n        prop = aliasMap[prop]\n      }\n\n      if (!(prop in modifier)) {\n        if (separatorRE.test(prop)) {\n          const keys = prop.split(splitRE).map(key => key.trim())\n\n          modifier[prop] = computed(() => keys.every(key => unref(modifierProxy[key])))\n        } else {\n          modifier[prop] = ref(activeKeys.has(prop))\n        }\n      }\n\n      return unref(Reflect.get(target, prop, receiver))\n    }\n  })\n\n  useListener(\n    target,\n    'keydown',\n    (event: KeyboardEvent) => {\n      if (strictTarget && event.target !== unref(target)) {\n        return\n      }\n\n      updateModifier(event, true)\n      onKeyDown(event, modifierProxy)\n    },\n    { capture, passive, disabled }\n  )\n  useListener(\n    target,\n    'keyup',\n    (event: KeyboardEvent) => {\n      if (strictTarget && event.target !== unref(target)) {\n        return\n      }\n\n      updateModifier(event, false)\n      onKeyUp(event, modifierProxy)\n    },\n    { capture, passive, disabled }\n  )\n\n  if (autoReset) {\n    useListener(target, 'blur', resetAll, { capture, passive, disabled })\n  }\n\n  return { target, modifier: modifierProxy as ModifierState }\n}\n","import { nextTick, onBeforeUnmount, onMounted, readonly, ref } from 'vue'\n\nexport function useMounted(wait?: 'tick' | 'frame') {\n  const isMounted = ref(false)\n\n  const mount = () => (isMounted.value = true)\n\n  onMounted(() => {\n    if (wait === 'tick') {\n      nextTick(mount)\n    } else if (wait === 'frame') {\n      requestAnimationFrame(mount)\n    } else {\n      mount()\n    }\n  })\n\n  onBeforeUnmount(() => {\n    isMounted.value = false\n  })\n\n  return { isMounted: readonly(isMounted) }\n}\n","import { computed, isRef, ref } from 'vue'\n\nimport { throttle } from '@vexip-ui/utils'\nimport { useListener } from './listener'\n\nimport type { MaybeRef, Ref } from 'vue'\n\nexport interface MovingState {\n  xStart: number,\n  yStart: number,\n  xEnd: number,\n  yEnd: number,\n  clientX: number,\n  clientY: number,\n  deltaX: number,\n  deltaY: number,\n  lazy: boolean,\n  [custom: string]: unknown\n}\n\nexport interface UseMovingOptions {\n  /**\n   * 作用的目标元素的 Ref\n   */\n  target?: Ref<HTMLElement | null | undefined>,\n  /**\n   * 横向位置的初始值\n   */\n  x?: MaybeRef<number>,\n  /**\n   * 纵向位置的初始值\n   */\n  y?: MaybeRef<number>,\n  /**\n   * 为否为懒加载，开启后会在 End 事件再更新位置状态\n   */\n  lazy?: MaybeRef<boolean>,\n  /**\n   * 是否禁用整个 hook 的事件处理\n   */\n  disabled?: MaybeRef<boolean>,\n  /**\n   * 事件的 capture 选项\n   *\n   * @default true\n   */\n  capture?: boolean,\n  /**\n   * 是否阻止 MouseDown 事件冒泡和默认行为\n   *\n   * @default true\n   */\n  stopMouse?: boolean,\n  /**\n   * 是否阻止 TouchStart 事件冒泡和默认行为\n   *\n   * @default true\n   */\n  stopTouch?: boolean,\n  /**\n   * 移动开始时的回调函数，返回 false 可以阻止本次移动\n   */\n  onStart?: (state: MovingState, event: PointerEvent) => any,\n  /**\n   * 移动中的回调函数\n   */\n  onMove?: (state: MovingState, event: PointerEvent) => void,\n  /**\n   * 移动结束时的回调函数\n   */\n  onEnd?: (state: MovingState, event: PointerEvent) => void\n}\n\nfunction disableEvent<E extends Event>(event: E) {\n  if (event.cancelable) {\n    event.stopPropagation()\n    event.preventDefault()\n  }\n}\n\nexport function useMoving(options: UseMovingOptions) {\n  const target = options.target || ref(null)\n  const x = isRef(options.x) ? options.x : ref(0)\n  const y = isRef(options.y) ? options.y : ref(0)\n  const lazy = isRef(options.lazy) ? options.lazy : ref(options.lazy || false)\n  const disabled = isRef(options.disabled) ? options.disabled : ref(options.disabled || false)\n\n  const { capture = true, stopMouse = true, stopTouch = true } = options\n\n  const moving = ref(false)\n  const internalState: MovingState = {\n    xStart: 0,\n    yStart: 0,\n    xEnd: 0,\n    yEnd: 0,\n    clientX: 0,\n    clientY: 0,\n    deltaX: 0,\n    deltaY: 0,\n    lazy: false\n  }\n\n  let current = 0\n  let record = 0\n\n  const throttleMove = throttle((event: PointerEvent) => {\n    if (record < current) return\n\n    updateState(event)\n\n    if (!internalState.lazy) {\n      x.value = internalState.xEnd\n      y.value = internalState.yEnd\n    }\n\n    options.onMove?.(internalState, event)\n  })\n\n  function start(event: PointerEvent) {\n    if (disabled.value) return\n\n    Object.assign(internalState, {\n      xStart: x.value,\n      yStart: y.value,\n      xEnd: x.value,\n      yEnd: y.value,\n      clientX: event.clientX,\n      clientY: event.clientY,\n      lazy: lazy.value\n    })\n\n    if (options.onStart?.(internalState, event) === false) {\n      return\n    }\n\n    document.addEventListener('pointermove', move, { capture })\n    document.addEventListener('pointerup', end, { capture })\n\n    record = current\n    moving.value = true\n  }\n\n  function move(event: PointerEvent) {\n    if (disabled.value) return\n\n    disableEvent(event)\n    throttleMove(event)\n  }\n\n  function end(event: PointerEvent) {\n    document.removeEventListener('pointermove', move, { capture })\n    document.removeEventListener('pointerup', end, { capture })\n\n    if (disabled.value) return\n\n    updateState(event)\n\n    if (internalState.lazy) {\n      x.value = internalState.xEnd\n      y.value = internalState.yEnd\n    }\n\n    moving.value = false\n    ++current\n\n    options.onEnd?.(internalState, event)\n  }\n\n  function updateState(event: PointerEvent) {\n    const { clientX, clientY } = event\n    const { xStart, yStart, clientX: clientXStart, clientY: clientYStart } = internalState\n    const deltaX = clientX - clientXStart\n    const deltaY = clientY - clientYStart\n\n    internalState.deltaX = deltaX\n    internalState.deltaY = deltaY\n    internalState.xEnd = xStart + deltaX\n    internalState.yEnd = yStart + deltaY\n  }\n\n  useListener(target, 'pointerdown', start, { capture })\n\n  stopMouse && useListener(target, 'mousedown', disableEvent, { capture })\n  stopTouch && useListener(target, 'touchstart', disableEvent, { capture })\n\n  return {\n    target,\n    moving: computed(() => moving.value),\n    x,\n    y,\n    lazy,\n    disabled\n  }\n}\n","import { onBeforeUnmount, ref } from 'vue'\n\nimport { throttle } from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\n\nexport interface UsePointerOption {\n  /**\n   * 横向位置的初始值\n   */\n  x?: number,\n  /**\n   * 纵向位置的初始值\n   */\n  y?: number,\n  /**\n   * 是否手动停止，默认情况下会在组件的 BeforeUnmount 生命周期注销\n   *\n   * @default false\n   */\n  manualStop?: boolean\n}\n\ninterface PointerState {\n  x: Ref<number>,\n  y: Ref<number>\n}\n\nconst registered = new Set<PointerState>()\nconst record = new Map<'x' | 'y', number>()\n\nrecord.set('x', 0)\nrecord.set('y', 0)\n\nfunction handler(event: PointerEvent) {\n  const { pageX, pageY } = event\n\n  record.set('x', pageX)\n  record.set('y', pageY)\n\n  registered.forEach(state => {\n    state.x.value = pageX\n    state.y.value = pageY\n  })\n}\n\nconst throttleHandler = throttle(handler)\n\nfunction register(state: PointerState) {\n  if (!registered.size && window) {\n    record.set('x', 0)\n    record.set('y', 0)\n    window.addEventListener('pointermove', throttleHandler, { passive: true })\n  }\n\n  registered.add(state)\n}\n\nfunction unregister(state: PointerState) {\n  registered.delete(state)\n\n  if (!registered.size && window) {\n    window.removeEventListener('pointermove', throttleHandler)\n  }\n}\n\nexport function usePointer(options: UsePointerOption = {}) {\n  const x = ref(options.x ?? record.get('x')!)\n  const y = ref(options.y ?? record.get('y')!)\n\n  const state = { x, y }\n\n  register(state)\n\n  if (!options.manualStop) {\n    onBeforeUnmount(() => {\n      unregister(state)\n    })\n  }\n\n  return { ...state, unregister: () => unregister(state) }\n}\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          // 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        // 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, detectOverflow as detectOverflow$1, offset as offset$1, autoPlacement as autoPlacement$1, shift as shift$1, flip as flip$1, size as size$1, hide as hide$1, arrow as arrow$1, inline as inline$1, limitShift as limitShift$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  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      // 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      offsets.x = getWindowScrollBarX(documentElement);\n    }\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 { isClient } from '@vexip-ui/utils'\nimport { ResizeObserver } from '@juggle/resize-observer'\n\nexport type ResizeHandler = (entry: ResizeObserverEntry) => any\n\nconst handlerMap = new WeakMap<Element, ResizeHandler>()\n\nfunction handleResize(entries: ResizeObserverEntry[]) {\n  for (let i = 0, len = entries.length; i < len; ++i) {\n    const entry = entries[i]\n    const handler = handlerMap.get(entry.target)\n\n    if (typeof handler === 'function') {\n      handler(entry)\n    }\n  }\n}\n\nconst resizeObserver = new (isClient ? window.ResizeObserver || ResizeObserver : ResizeObserver)(\n  handleResize\n)\n\nexport function observeResize(el: Element, handler: ResizeHandler) {\n  handlerMap.set(el, handler)\n  resizeObserver.observe(el)\n}\n\nexport function unobserveResize(el: Element) {\n  if (handlerMap.has(el)) {\n    resizeObserver.unobserve(el)\n    handlerMap.delete(el)\n  }\n}\n\nexport function useResize() {\n  return {\n    observeResize,\n    unobserveResize\n  }\n}\n","import { computed, ref } from 'vue'\n\nimport { isClient } from '@vexip-ui/utils'\nimport { observeResize } from './resize'\n\nimport type { Ref } from 'vue'\n\nconst rtl = ref(false)\nconst computedRtl: Ref<boolean> = computed(() => rtl.value)\n\nconst elId = '__rtl_observer__'\n\nexport function useRtl() {\n  if (isClient && !document.querySelector(`#${elId}`)) {\n    initObserver()\n  }\n\n  return { isRtl: computedRtl }\n}\n\nfunction initObserver() {\n  if (!isClient) return\n\n  const style = document.createElement('style')\n  const content = `#${elId} { width: 1px } html.rtl #${elId}, html[dir='rtl'] #${elId} { width: 2px }`\n\n  style.textContent = content\n  document.head.appendChild(style)\n\n  const observer = document.createElement('div')\n\n  observer.id = elId\n  observer.role = 'none'\n  observer.style.cssText =\n    'position: fixed; top -10px; left: -10px; height: 1px; visibility: hidden;'\n\n  observeResize(observer, () => {\n    if (!isClient) return\n\n    rtl.value =\n      document.documentElement.classList.contains('rtl') ||\n      document.documentElement.getAttribute('dir') === 'rtl'\n  })\n\n  document.body.appendChild(observer)\n}\n","import { onMounted, ref, shallowRef, unref, watch, watchEffect } from 'vue'\n\nimport {\n  arrow,\n  autoUpdate,\n  computePosition,\n  flip,\n  hide,\n  offset,\n  platform,\n  shift\n} from '@floating-ui/dom'\nimport { useRtl } from './rtl'\nimport { isClient } from '@vexip-ui/utils'\n\nimport type { MaybeRef, Ref } from 'vue'\nimport type {\n  ComputePositionConfig,\n  Middleware,\n  OffsetOptions,\n  Placement,\n  ShiftOptions,\n  VirtualElement\n} from '@floating-ui/dom'\nimport type { TransferNode } from '@vexip-ui/utils'\n\nexport interface UsePopperOptions {\n  /**\n   * popper 元素出现的位置\n   */\n  placement: MaybeRef<Placement>,\n  /**\n   * popper 元素需要迁移至的目标选择器，为 true 时会迁移至 body\n   */\n  transfer?: MaybeRef<boolean | string>,\n  /**\n   * 设置是否为从右向左的阅读方向\n   */\n  isRtl?: MaybeRef<boolean>,\n  /**\n   * 包围元素，用于判断 clickoutside 事件\n   *\n   * 即使 popper 元素迁移至 wrapper 元素外部，点击 popper 元素时仍认为处于 wrapper 元素内部\n   */\n  wrapper?: Ref<HTMLElement | null | undefined>,\n  /**\n   * 设置 popper 元素为否需要 drop，此时 transform-origin 会自动调整\n   */\n  isDrop?: MaybeRef<boolean>,\n  /**\n   * 参考元素，popper 元素的位置计算依据\n   */\n  reference?: Ref<HTMLElement | VirtualElement | null | undefined>,\n  /**\n   * popper 元素\n   */\n  popper?: Ref<HTMLElement | null | undefined>,\n  /**\n   * arrow 元素\n   */\n  arrow?: Ref<HTMLElement | null | undefined>,\n  /**\n   * popper 元素的偏移量，可传入一个回调函数\n   */\n  offset?: MaybeRef<number[] | OffsetOptions>,\n  /**\n   * popper 元素是否限制在窗口内\n   */\n  shift?: MaybeRef<boolean | ShiftOptions>,\n  /**\n   * 设置是否自动更新 popper 元素\n   *\n   * @default false\n   */\n  autoUpdate?: boolean\n}\n\nexport type { Placement, VirtualElement }\n\nexport const placementWhileList = Object.freeze<Placement[]>([\n  'top',\n  'top-start',\n  'top-end',\n  'bottom',\n  'bottom-start',\n  'bottom-end',\n  'left',\n  'left-start',\n  'left-end',\n  'right',\n  'right-start',\n  'right-end'\n])\n\nexport function usePopper(initOptions: UsePopperOptions) {\n  const { transfer, wrapper, isDrop = false } = initOptions\n\n  const reference: Ref<HTMLElement | null | undefined> =\n    (initOptions.reference as any) ?? shallowRef(null)\n  const popper: Ref<HTMLElement | null | undefined> = initOptions.popper ?? shallowRef(null)\n  const arrowRef: Ref<HTMLElement | null | undefined> = initOptions.arrow ?? shallowRef(null)\n\n  const placement = ref(unref(initOptions.placement))\n  const transferTo = ref('')\n  const isRtl = initOptions.isRtl ?? useRtl().isRtl\n\n  if (wrapper) {\n    watchEffect(() => {\n      const wrapperEl = unref(wrapper)\n      const popperEl = unref(popper)\n\n      if (wrapperEl) {\n        ;(wrapperEl as TransferNode).__transferElement = popperEl\n      }\n    })\n  }\n\n  if (transfer != null) {\n    watch(\n      () => unref(transfer),\n      value => {\n        setTransferTo(value)\n        updatePopper()\n      }\n    )\n\n    setTransferTo(unref(transfer))\n  }\n\n  onMounted(() => {\n    requestAnimationFrame(() => {\n      watchEffect(updatePopperInternal)\n    })\n  })\n\n  let cleanup: (() => void) | undefined\n\n  async function updatePopperInternal() {\n    if (!isClient) return\n\n    cleanup?.()\n\n    const referenceEl = unref(reference)\n    const popperEl = unref(popper)\n\n    if (!referenceEl || !popperEl) return\n\n    const arrowEl = unref(arrowRef)\n\n    const middleware: Middleware[] = [flip()]\n\n    if (isDrop) {\n      middleware.push({\n        name: 'origin',\n        fn({ placement, elements }) {\n          const origin = setPopperDropOrigin(placement)\n\n          if (origin) {\n            elements.floating.style.transformOrigin = origin\n          }\n\n          return {}\n        }\n      })\n    }\n\n    if (initOptions.offset) {\n      let offsetOptions = unref(initOptions.offset)\n\n      if (Array.isArray(offsetOptions)) {\n        offsetOptions = {\n          mainAxis: offsetOptions[1],\n          crossAxis: offsetOptions[0]\n        }\n      }\n\n      middleware.push(offset(offsetOptions))\n    }\n\n    if (initOptions.shift) {\n      let shiftOptions = unref(initOptions.shift)\n\n      if (typeof shiftOptions === 'boolean') {\n        shiftOptions = {}\n      }\n\n      middleware.push(shift(shiftOptions))\n    }\n\n    if (arrowEl) {\n      middleware.push(arrow({ element: arrowEl }))\n    }\n\n    middleware.push(hide({ strategy: 'escaped' }))\n\n    const rtl = unref(isRtl) || false\n    const options: ComputePositionConfig = {\n      middleware,\n      placement: unref(initOptions.placement),\n      platform: {\n        ...platform,\n        isRTL: async () => rtl\n      }\n    }\n\n    const update = async () => {\n      const {\n        x,\n        y,\n        placement: activePlacement,\n        strategy,\n        middlewareData\n      } = await computePosition(referenceEl, popperEl, options)\n\n      if (unref(reference) !== referenceEl) {\n        if (unref(popper) === popperEl) {\n          Object.assign(popperEl.style, {\n            position: '',\n            top: '',\n            left: ''\n          })\n        }\n\n        return\n      }\n\n      const style: Partial<CSSStyleDeclaration> = {\n        position: strategy,\n        top: `${y}px`,\n        left: `${x}px`\n      }\n\n      // if (middlewareData.hide?.escaped) {\n      //   style.visibility = 'hidden'\n      // } else {\n      //   style.visibility = ''\n      // }\n\n      if (arrowEl) {\n        if (middlewareData.arrow) {\n          const { x, y } = middlewareData.arrow\n\n          Object.assign(arrowEl.style, {\n            top: y != null ? `${y}px` : '',\n            left: x != null ? `${x}px` : ''\n          })\n        } else {\n          Object.assign(arrowEl.style, { top: '', left: '' })\n        }\n      }\n\n      Object.assign(popperEl.style, style)\n      popperEl.dataset.popperPlacement = activePlacement\n      placement.value = activePlacement\n    }\n\n    if (initOptions.autoUpdate) {\n      cleanup = autoUpdate(referenceEl, popperEl, update)\n    }\n\n    await update()\n  }\n\n  const updatePopper = () => {\n    return new Promise<void>(resolve => {\n      requestAnimationFrame(() => {\n        updatePopperInternal().then(resolve)\n      })\n    })\n  }\n\n  function setTransferTo(value: boolean | string) {\n    transferTo.value = typeof value === 'boolean' ? (value ? 'body' : '') : value\n  }\n\n  // function normalizePlacement(placement: Placement, rtl: boolean) {\n  //   if (!rtl) return placement\n\n  //   let [start, end] = placement.split('-')\n\n  //   if (start === 'left' || start === 'right') {\n  //     start = start === 'left' ? 'right' : 'left'\n  //   } else {\n  //     if (!end) return placement\n\n  //     end = end === 'start' ? 'end' : 'start'\n  //   }\n\n  //   return `${start}-${end}` as Placement\n  // }\n\n  function setPopperDropOrigin(placement: Placement) {\n    if (placement !== 'left' && placement !== 'right') {\n      const [start, end] = placement.split('-')\n\n      return start === 'bottom' || (start !== 'top' && end === 'start')\n        ? 'center top'\n        : 'center bottom'\n    }\n  }\n\n  return {\n    wrapper,\n    reference,\n    popper,\n    placement,\n    transferTo,\n    updatePopper\n  }\n}\n","import { reactive, ref, watch } from 'vue'\n\nimport { isClient } from '@vexip-ui/utils'\nimport { observeResize } from './resize'\n\nimport type { Ref } from 'vue'\nimport type { MaybeElement } from './shared/types'\n\nexport interface InitThemeOptions {\n  name: string,\n  rootClass?: string,\n  varsClass?: string\n}\n\nconst styleId = '__theme_style__'\nconst elClass = '__theme_observer__'\n\nconst elCache = new WeakMap<Element, Element>()\n\nexport function useTheme(wrapper?: MaybeElement) {\n  const theme = ref<string>()\n\n  if (isClient) {\n    wrapper = wrapper || document.body\n\n    let observer = elCache.get(wrapper)\n\n    if (!observer) {\n      observer = createObserver(theme)!\n      wrapper.appendChild(observer)\n      elCache.set(wrapper, observer)\n    }\n  }\n\n  return { theme }\n}\n\nconst activeThemes = reactive(new Map<string, string[]>())\nconst themeWidths = new Map<number, string>()\n\nwatch(activeThemes, () => {\n  if (!isClient) return\n\n  themeWidths.clear()\n\n  const prevStyle = document.head.querySelector(`#${styleId}`)\n\n  if (prevStyle) {\n    document.head.removeChild(prevStyle)\n  }\n\n  const style = document.createElement('style')\n\n  let content = `.${elClass} { width: 1px }`\n  let width = 1\n\n  for (const [name, [rootClass, varsClass]] of activeThemes.entries()) {\n    content += ` html.${rootClass} .${elClass}, .${varsClass} .${elClass} { width: ${++width}px }`\n    themeWidths.set(width, name)\n  }\n\n  style.textContent = content\n  style.id = styleId\n  document.head.appendChild(style)\n})\n\nexport function addActiveThemes(themes: (string | InitThemeOptions)[]) {\n  for (const theme of themes) {\n    const {\n      name,\n      rootClass = name,\n      varsClass = `vxp-theme-vars-${rootClass}`\n    } = typeof theme === 'string' ? ({ name: theme } as InitThemeOptions) : theme\n\n    activeThemes.set(name, [rootClass, varsClass])\n  }\n}\n\nexport function setActiveThemes(themes: (string | InitThemeOptions)[]) {\n  activeThemes.clear()\n  addActiveThemes(themes)\n}\n\nlet idCount = 0\n\nfunction getElId() {\n  return `__theme_observer_${idCount++}__`\n}\n\nfunction createObserver(theme: Ref<string | undefined>) {\n  if (!isClient) return\n\n  const observer = document.createElement('div')\n\n  observer.id = getElId()\n  observer.className = elClass\n  observer.role = 'none'\n  observer.style.cssText =\n    'position: fixed; top -10px; left: -10px; height: 1px; visibility: hidden;'\n\n  observeResize(observer, entry => {\n    if (!isClient) return\n\n    const width = entry.borderBoxSize?.[0].inlineSize ?? entry.contentRect.width\n\n    theme.value = themeWidths.get(width)\n  })\n\n  return observer\n}\n","import { onScopeDispose } from 'vue'\n\n/**\n * 获取用于记录 `setTimeout` 返回值的对象，记录的定时器会在作用域消除时自动清理\n */\nexport function useSetTimeout() {\n  const timer: Record<string, any> = {}\n\n  onScopeDispose(() => {\n    Object.keys(timer).forEach(key => {\n      clearTimeout(timer[key])\n    })\n  })\n\n  return { timer }\n}\n\n/**\n * 获取用于记录 `setInterval` 返回值的对象，记录的定时器会在作用域消除时自动清理\n */\nexport function useSetInterval() {\n  const timer: Record<string, any> = {}\n\n  onScopeDispose(() => {\n    Object.keys(timer).forEach(key => {\n      clearInterval(timer[key])\n    })\n  })\n\n  return { timer }\n}\n\n/**\n * 获取用于记录 `requestAnimationFrame` 返回值的对象，记录的定时器会在作用域消除时自动清理\n */\nexport function useRaf() {\n  const timer: Record<string, any> = {}\n\n  onScopeDispose(() => {\n    Object.keys(timer).forEach(key => {\n      cancelAnimationFrame(timer[key])\n    })\n  })\n\n  return { timer }\n}\n\n/**\n * 获取三个分别用于记录 `setTimeout`、`setInterval` 和 `requestAnimationFrame` 返回值的对象\n *\n * 记录在这些对象上的定时器将会在作用域消除时自动清理\n */\nexport function useTimerRecord() {\n  const { timer: timeout } = useSetTimeout()\n  const { timer: interval } = useSetInterval()\n  const { timer: raf } = useRaf()\n\n  return { timeout, interval, raf }\n}\n","import { computed, onScopeDispose, ref, unref, watch } from 'vue'\n\nimport { createBITree, isDefined, nextFrameOnce, noop } from '@vexip-ui/utils'\nimport { isHiddenElement } from './display'\nimport { observeResize, unobserveResize } from './resize'\n\nimport type { MaybeRef } from 'vue'\n\ntype Key = number | string | symbol\ntype Data = Record<string, any>\ntype Behavior = ScrollToOptions['behavior']\n\nexport interface VirtualOptions<T extends Data> {\n  /**\n   * 虚拟滚动的元素\n   */\n  items: MaybeRef<T[]>,\n  /**\n   * 设置元素的最小高度\n   */\n  itemSize: MaybeRef<number>,\n  /**\n   * 设置元素是否为固定高度，固定高度时不处理 resize\n   */\n  itemFixed: MaybeRef<boolean>,\n  /**\n   * 元素的主键\n   */\n  idKey: MaybeRef<keyof T>,\n  /**\n   * 默认停留在的元素的主键，未实现\n   */\n  defaultKeyAt?: Key,\n  /**\n   * 设置前后的缓冲元素的个数\n   */\n  bufferSize?: MaybeRef<number>,\n  /**\n   * 虚拟滚动的包围元素\n   */\n  wrapper?: MaybeRef<HTMLElement | null | undefined>,\n  /**\n   * 是否自动观察 wrapper 缩放\n   *\n   * @default true\n   */\n  autoResize?: boolean\n}\n\nexport function useVirtual<T extends Data = Data>(options: VirtualOptions<T>) {\n  const {\n    items,\n    itemSize,\n    itemFixed,\n    idKey,\n    defaultKeyAt,\n    bufferSize = ref(5),\n    wrapper = ref(null),\n    autoResize = true\n  } = options\n\n  const indexMap = computed(() => {\n    const itemList = unref(items)\n    const length = itemList.length\n    const keyField = unref(idKey)\n    const map = new Map<Key, number>()\n\n    for (let i = 0; i < length; ++i) {\n      map.set(itemList[i][keyField], i)\n    }\n\n    return map\n  })\n  const visibleHeight = ref(0)\n  const heightDiffMap = new Map<Key, number>()\n  const heightTree = computed(() => {\n    const itemList = unref(items)\n    const length = itemList.length\n    const keyField = unref(idKey)\n    const tree = createBITree(length, unref(itemSize))\n\n    for (let i = 0; i < length; ++i) {\n      const key = itemList[i][keyField]\n      const heightDiff = heightDiffMap.get(key)\n\n      if (heightDiff) {\n        tree.add(i, heightDiff)\n      }\n    }\n\n    return tree\n  })\n  const treeUpdateDep = ref(0)\n  const scrollOffset = ref(0)\n  const startIndex = computed(() => {\n    return Math.max(\n      heightTree.value.boundIndex(scrollOffset.value) - Math.max(unref(bufferSize), 0),\n      0\n    )\n  })\n  const visibleItems = computed(() => {\n    if (!visibleHeight.value || visibleHeight.value < 0) return []\n\n    const unrefItems = unref(items)\n    const endIndex = Math.min(\n      heightTree.value.boundIndex(scrollOffset.value + visibleHeight.value) +\n        1 +\n        Math.max(unref(bufferSize), 0),\n      unrefItems.length\n    )\n\n    return unrefItems.slice(startIndex.value, endIndex)\n  })\n  const listStyle = computed(() => {\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n    treeUpdateDep.value\n\n    const height = heightTree.value.sum()\n    const fixed = unref(itemFixed)\n\n    return {\n      height: fixed ? `${height}px` : undefined,\n      minHeight: fixed ? undefined : `${height}px`,\n      boxSizing: 'content-box'\n    } as const\n  })\n  const itemsStyle = computed(() => {\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n    treeUpdateDep.value\n\n    return {\n      transform: `translate3d(0, ${heightTree.value.sum(startIndex.value)}px, 0)`\n    }\n  })\n\n  if (autoResize) {\n    let unobserve = noop\n\n    const stopWatch = watch(\n      () => unref(wrapper),\n      el => {\n        unobserve()\n\n        if (!el) return\n\n        observeResize(el, handleResize)\n\n        unobserve = () => {\n          unobserveResize(el)\n          unobserve = noop\n        }\n\n        if (isDefined(defaultKeyAt)) {\n          scrollToKey(defaultKeyAt)\n        }\n      },\n      { immediate: true, flush: 'post' }\n    )\n\n    onScopeDispose(() => {\n      stopWatch()\n      unobserve()\n    })\n  }\n\n  function syncScrollOffset() {\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      scrollOffset.value = wrapperEl.scrollTop\n    }\n  }\n\n  function handleScroll() {\n    nextFrameOnce(syncScrollOffset)\n  }\n\n  function handleResize(entry: ResizeObserverEntry) {\n    if (\n      isHiddenElement(entry.target as HTMLElement) ||\n      entry.contentRect.height === visibleHeight.value\n    ) {\n      return\n    }\n\n    visibleHeight.value = entry.contentRect.height\n  }\n\n  function handleItemResize(key: Key, entry: ResizeObserverEntry) {\n    if (unref(itemFixed)) return\n\n    const index = indexMap.value.get(key)!\n    const tree = heightTree.value\n    const prevHeight = tree.get(index)\n    const height = entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height\n\n    if (height === prevHeight) return\n\n    if (isHiddenElement(entry.target as HTMLElement)) {\n      if (prevHeight) {\n        tree.add(index, -prevHeight)\n        treeUpdateDep.value++\n      }\n\n      return\n    }\n\n    const diff = height - unref(itemSize)\n    const delta = height - prevHeight\n\n    if (diff) {\n      heightDiffMap.set(key, diff)\n    } else {\n      heightDiffMap.delete(key)\n    }\n\n    if (!delta) return\n\n    tree.add(index, delta)\n    treeUpdateDep.value++\n\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      const prevTop = tree.sum(index)\n\n      if (wrapperEl.scrollTop > prevTop) {\n        wrapperEl.scrollBy(0, delta)\n      }\n\n      scrollOffset.value = wrapperEl.scrollTop\n    }\n  }\n\n  function scrollTo(top: number, behavior?: Behavior) {\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      wrapperEl.scrollTo({\n        behavior,\n        top,\n        left: 0\n      })\n    }\n  }\n\n  function scrollBy(delta: number, behavior?: Behavior) {\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      wrapperEl.scrollBy({\n        behavior,\n        top: delta,\n        left: 0\n      })\n    }\n  }\n\n  function scrollToKey(key: Key, behavior?: Behavior) {\n    const index = indexMap.value.get(key)\n\n    if (index != null) {\n      scrollToIndex(index, behavior)\n    }\n  }\n\n  function scrollToIndex(index: number, behavior?: Behavior) {\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      wrapperEl.scrollTo({\n        behavior,\n        top: heightTree.value.sum(index),\n        left: 0\n      })\n    }\n  }\n\n  function ensureIndexInView(index: number, behavior?: Behavior) {\n    const wrapperEl = unref(wrapper)\n\n    if (!wrapperEl) return\n\n    const tree = heightTree.value\n    const viewTop = wrapperEl.scrollTop\n    const top = tree.sum(index)\n\n    if (top < viewTop) {\n      scrollToIndex(index, behavior)\n      return\n    }\n\n    const viewHeight = wrapperEl.offsetHeight\n    const viewBottom = viewTop + viewHeight\n    const bottom = tree.sum(index + 1)\n\n    if (bottom > viewBottom) {\n      scrollTo(bottom - viewHeight, behavior)\n    }\n  }\n\n  function ensureKeyInView(key: Key, behavior?: Behavior) {\n    const index = indexMap.value.get(key)\n\n    if (index != null) {\n      ensureIndexInView(index, behavior)\n    }\n  }\n\n  return {\n    wrapper,\n    indexMap,\n    heightTree,\n    startIndex,\n    scrollOffset,\n    visibleItems,\n    listStyle,\n    itemsStyle,\n    handleScroll,\n    handleResize,\n    handleItemResize,\n    scrollTo,\n    scrollBy,\n    scrollToKey,\n    scrollToIndex,\n    ensureIndexInView,\n    ensureKeyInView\n  }\n}\n","import { useResize } from '@vexip-ui/hooks'\nimport { noop, throttle } from '@vexip-ui/utils'\n\nimport type { DirectiveBinding, ObjectDirective } from 'vue'\nimport type { ResizeHandler } from '@vexip-ui/hooks'\n\nconst { observeResize, unobserveResize } = useResize()\n\nexport interface VResizeOptions {\n  handler: ResizeHandler,\n  throttle?: boolean | number,\n  disabled?: boolean\n}\n\ninterface ResizeRecord {\n  useThrottle: boolean | number,\n  observed: boolean\n}\n\nfunction createObserver(\n  el: HTMLElement & { __resize?: ResizeRecord },\n  binding: DirectiveBinding<ResizeHandler | VResizeOptions>\n) {\n  const options: VResizeOptions =\n    typeof binding.value === 'function' ? { handler: binding.value } : { ...binding.value }\n  const useThrottle = options.throttle || binding.modifiers.throttle\n\n  el.__resize = {\n    useThrottle,\n    observed: false\n  }\n\n  if (options.disabled) {\n    unobserveResize(el)\n    el.__resize.observed = false\n    return\n  }\n\n  const throttleResize = useThrottle\n    ? throttle(options.handler, typeof useThrottle === 'boolean' ? 16 : useThrottle)\n    : options.handler\n\n  observeResize(el, throttleResize)\n  el.__resize.observed = true\n}\n\nexport const vResize: ObjectDirective<\n  HTMLElement & { __resize?: ResizeRecord },\n  ResizeHandler | VResizeOptions\n> = {\n  mounted(el, binding) {\n    createObserver(el, binding)\n  },\n  updated(el, binding) {\n    if (!el.__resize) {\n      createObserver(el, binding)\n      return\n    }\n\n    const options: VResizeOptions =\n      typeof binding.value === 'function' ? { handler: binding.value } : { ...binding.value }\n    const useThrottle = options.throttle || binding.modifiers.throttle\n\n    const getHandler = () =>\n      useThrottle\n        ? throttle(options.handler, typeof useThrottle === 'boolean' ? 16 : useThrottle)\n        : options.handler\n\n    if (options.disabled) {\n      if (el.__resize.observed) {\n        unobserveResize(el)\n        el.__resize.observed = false\n      }\n    } else if (!el.__resize.observed) {\n      observeResize(el, getHandler())\n      el.__resize.observed = true\n    } else {\n      const prevOptions: VResizeOptions =\n        typeof binding.oldValue === 'function'\n          ? { handler: binding.oldValue }\n          : { ...(binding.oldValue || { handler: noop }) }\n\n      if (useThrottle !== el.__resize.useThrottle || options.handler !== prevOptions.handler) {\n        unobserveResize(el)\n        observeResize(el, getHandler())\n      }\n    }\n  },\n  beforeUnmount(el) {\n    if (el.__resize?.observed) {\n      unobserveResize(el)\n    }\n\n    delete el.__resize\n  }\n}\n","import { vLoading } from './loading'\nimport { vResize } from './resize'\n\nimport type { App } from 'vue'\n\nexport function installDirectives(app: App) {\n  app.directive('loading', vLoading)\n  app.directive('resize', vResize)\n}\n\nexport * from './loading'\nexport * from './resize'\n","import { buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { AffixPositionType } from './symbol'\n\nexport const affixProps = buildProps({\n  offset: Number,\n  zIndex: Number,\n  position: String as PropType<AffixPositionType>,\n  target: [String, Object, Function] as PropType<unknown>,\n\n  onScroll: eventProp(),\n  onChange: eventProp()\n})\n\nexport type AffixProps = ExtractPropTypes<typeof affixProps>\nexport type AffixCProps = ConfigurableProps<ExtractPropTypes<typeof affixProps>>\n","import { unref } from 'vue'\n\nimport type { MaybeRef } from 'vue'\n\nlet lastScroller: Window | HTMLElement | null | undefined = null\n\nexport function handleLastScroller(target: MaybeRef<HTMLElement | null | undefined>) {\n  target = unref(target)\n\n  if (lastScroller !== unref(target)) {\n    if (lastScroller && lastScroller !== window && lastScroller !== document.documentElement) {\n      const targetAffix = (lastScroller as HTMLElement).querySelector(\n        '.vxp-affix--fixed'\n      ) as HTMLElement\n\n      if (targetAffix) {\n        targetAffix.classList.remove('vxp-affix--fixed')\n      }\n    }\n\n    lastScroller = target\n  }\n}\n\nexport function clearLastScroller(target: MaybeRef<HTMLElement | null | undefined>) {\n  if (lastScroller && lastScroller === unref(target)) {\n    lastScroller = null\n  }\n}\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  getCurrentInstance,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  shallowRef,\n  watch,\n  watchEffect\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { affixProps } from './props'\nimport { callIfFunc, isClient, isElement } from '@vexip-ui/utils'\nimport { clearLastScroller, handleLastScroller } from './helpers'\n\nimport type { NativeScrollExposed } from '@/components/native-scroll'\nimport type { ScrollExposed } from '@/components/scroll'\n\nimport type { CSSProperties, ComponentInternalInstance } from 'vue'\n\ntype ScrollType = NativeScrollExposed & ScrollExposed\n\ndefineOptions({ name: 'Affix' })\n\nconst _props = defineProps(affixProps)\nconst props = useProps('affix', _props, {\n  offset: 0,\n  zIndex: 100,\n  position: 'top',\n  target: null\n})\n\nconst nh = useNameHelper('affix')\n\nconst instance = getCurrentInstance()!\n\nconst wrapper = shallowRef<HTMLElement>()\nconst target = shallowRef<HTMLElement>()\nconst container = shallowRef<Window | HTMLElement>()\n\nlet isRawViewer = false\nlet scroller: ScrollType | null = null\n\nconst fixed = ref(false)\nconst affixHeight = ref(0)\nconst affixWidth = ref(0)\nconst scrollTop = ref(0)\nconst clientHeight = ref(0)\nconst transform = ref(0)\n\nconst affixStyle = computed<CSSProperties>(() => {\n  return {\n    height: fixed.value ? `${affixHeight.value}px` : '',\n    width: fixed.value ? `${affixWidth.value}px` : ''\n  }\n})\nconst fixedStyle = computed<CSSProperties>(() => {\n  if (!fixed.value) return {}\n\n  let _top = props.offset\n  let _bottom = props.offset\n\n  if (isElement(container.value)) {\n    if (props.target && props.position === 'top') {\n      _top += transform.value\n    } else {\n      _bottom += transform.value\n    }\n  }\n\n  return {\n    height: `${affixHeight.value}px`,\n    width: `${affixWidth.value}px`,\n    top: props.position === 'top' ? `${_top}px` : '',\n    bottom: props.position === 'bottom' ? `${_bottom}px` : '',\n    zIndex: props.zIndex\n  }\n})\n\nwatchEffect(update)\nwatch(fixed, fixed => {\n  emitEvent(props.onChange, fixed)\n})\n\ndefineExpose({ update })\n\nonMounted(() => {\n  if (props.target) {\n    const _target: unknown = callIfFunc(props.target)\n\n    if (typeof _target === 'string') {\n      target.value = document.querySelector<HTMLElement>(_target) ?? undefined\n\n      if (!target.value) {\n        throw new Error(`[vexip-ui:Affix] target not exists: ${props.target}`)\n      }\n    } else {\n      target.value = _target as any\n    }\n  } else {\n    target.value = document.documentElement\n  }\n\n  updateContainer()\n})\n\nonBeforeUnmount(() => {\n  removeListener()\n})\n\nfunction update() {\n  if (!wrapper.value || !target.value || !container.value) return\n\n  const wrapperRect = wrapper.value.getBoundingClientRect()\n  const targetRect = target.value.getBoundingClientRect()\n\n  affixHeight.value = wrapperRect.height\n  affixWidth.value = wrapperRect.width\n  scrollTop.value =\n    container.value === window\n      ? document.documentElement.scrollTop\n      : (container.value as unknown as ScrollType).scrollY || 0\n  scrollTop.value = document.documentElement.scrollTop\n  clientHeight.value = document.documentElement.clientHeight\n\n  if (props.position === 'top') {\n    if (props.target) {\n      transform.value = targetRect.top\n      fixed.value = wrapperRect.top < targetRect.top + props.offset\n    } else {\n      fixed.value = props.offset > wrapperRect.top\n    }\n  } else {\n    if (props.target) {\n      transform.value = clientHeight.value - targetRect.bottom\n      fixed.value = targetRect.bottom < props.offset + wrapperRect.bottom\n    } else {\n      fixed.value = clientHeight.value - props.offset < wrapperRect.bottom\n    }\n  }\n}\n\nfunction handleContainerScroll() {\n  handleLastScroller(target)\n  update()\n\n  emitEvent(props.onScroll, {\n    scrollTop: scrollTop.value,\n    fixed: fixed.value\n  })\n}\n\nfunction updateContainer() {\n  removeListener()\n\n  if (!isClient) return\n\n  if (props.target) {\n    container.value = target.value!\n    container.value.addEventListener('scroll', handleContainerScroll)\n  } else {\n    let _container: ComponentInternalInstance | null = instance.parent!\n    const refName = 'scroll'\n\n    while (_container) {\n      const name = _container.type?.name\n\n      if (name === 'Scroll' || name === 'NativeScroll') {\n        const { exposeProxy, exposed, proxy } = _container\n        const _scroller = new Proxy({} as any, {\n          get(_, key) {\n            return (proxy as any)?.[key] ?? (exposeProxy as any)?.[key] ?? (exposed as any)?.[key]\n          }\n        })\n        const scrollerEl = _scroller?.$el as HTMLElement\n\n        if (!scrollerEl.getAttribute('class')?.includes('vxp-native-scroll--horizontal')) {\n          scroller = _scroller\n          break\n        }\n      }\n\n      const refTemp = _container.refs?.[refName]\n\n      if (refTemp) {\n        if (isElement(refTemp)) {\n          isRawViewer = true\n          container.value = refTemp as HTMLElement\n        } else {\n          scroller = refTemp as ScrollType\n        }\n\n        break\n      }\n\n      _container = _container.parent\n    }\n\n    if (scroller) {\n      scroller.addScrollListener(handleContainerScroll)\n      container.value = scroller.$el\n    } else if (!container.value) {\n      isRawViewer = true\n      container.value = window\n    }\n\n    if (isRawViewer && container.value) {\n      container.value.addEventListener('scroll', handleContainerScroll)\n    }\n  }\n}\n\nfunction removeListener() {\n  if (scroller) {\n    scroller.removeScrollListener(handleContainerScroll)\n    scroller = null\n  }\n\n  if (container.value) {\n    container.value.removeEventListener('scroll', handleContainerScroll)\n    container.value = undefined\n  }\n\n  clearLastScroller(target)\n}\n</script>\n\n<template>\n  <div ref=\"wrapper\" :class=\"nh.b()\" :style=\"affixStyle\">\n    <div :class=\"{ [nh.bm('fixed')]: fixed }\" :style=\"fixedStyle\">\n      <slot></slot>\n    </div>\n  </div>\n</template>\n","import { booleanProp, buildProps, eventProp, iconProp, styleProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { CollapseArrowType } from './symbol'\n\nexport const collapseProps = buildProps({\n  expanded: [String, Number, Array] as PropType<string | number | (string | number)[]>,\n  card: booleanProp,\n  accordion: booleanProp,\n  arrowType: String as PropType<CollapseArrowType>,\n  ghost: booleanProp,\n  onChange: eventProp<(expanded: (string | number)[]) => void>()\n})\n\nexport type CollapseProps = ExtractPropTypes<typeof collapseProps>\nexport type CollapseCProps = ConfigurableProps<CollapseProps, 'expanded'>\n\nexport const collapsePanelProps = buildProps({\n  label: [String, Number],\n  title: String,\n  disabled: booleanProp,\n  contentStyle: styleProp,\n  expanded: booleanProp,\n  card: booleanProp,\n  arrowType: String as PropType<CollapseArrowType>,\n  icon: iconProp,\n  ghost: booleanProp,\n  onToggle: eventProp<(expanded: boolean) => void>()\n})\n\nexport type CollapsePanelProps = ExtractPropTypes<typeof collapsePanelProps>\nexport type CollapsePanelCProps = ConfigurableProps<CollapsePanelProps>\n\ntype TransitionMode = 'in-out' | 'out-in' | 'default'\n\nexport const collapseTransitionProps = buildProps({\n  appear: booleanProp,\n  mode: String as PropType<TransitionMode>,\n  horizontal: booleanProp,\n  duration: Number,\n  timing: String,\n  fadeEffect: booleanProp,\n  /**\n   * Internal prop for Tree, reverse the enter transition\n   *\n   * @internal\n   */\n  reverse: booleanProp,\n  disabled: booleanProp,\n  onBeforeEnter: eventProp<(el: Element) => void>(),\n  onEnter: eventProp<(el: Element) => void>(),\n  onAfterEnter: eventProp<(el: Element) => void>(),\n  onEnterCancelled: eventProp<(el: Element) => void>(),\n  onBeforeLeave: eventProp<(el: Element) => void>(),\n  onLeave: eventProp<(el: Element) => void>(),\n  onAfterLeave: eventProp<(el: Element) => void>(),\n  onLeaveCancelled: eventProp<(el: Element) => void>()\n})\n\nexport type CollapseTransitionProps = ExtractPropTypes<typeof collapseTransitionProps>\nexport type CollapseTransitionCProps = ConfigurableProps<CollapseTransitionProps>\n","import { Transition, defineComponent, h, renderSlot } from 'vue'\n\nimport { emitEvent, useProps } from '@vexip-ui/config'\nimport { collapseTransitionProps } from './props'\n\nexport default defineComponent({\n  name: 'CollapseTransition',\n  props: collapseTransitionProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('collapseTransition', _props, {\n      appear: false,\n      mode: {\n        default: 'default',\n        validator: value => ['in-out', 'out-in', 'default'].includes(value)\n      },\n      horizontal: false,\n      duration: {\n        default: 250,\n        validator: (value: number) => value >= 200\n      },\n      timing: null,\n      fadeEffect: false,\n      reverse: false\n    })\n\n    let enterStage: 'before' | 'in' | null = null\n    let leaveStage: 'before' | 'in' | null = null\n\n    return () => {\n      if (props.disabled) {\n        return renderSlot(slots, 'default')\n      }\n\n      const duration = props.duration\n      const timing = props.timing || 'ease-in-out'\n\n      let height: 'maxWidth' | 'maxHeight' = 'maxHeight'\n      let paddingTop: 'paddingTop' | 'paddingLeft' = 'paddingTop'\n      let paddingBottom: 'paddingRight' | 'paddingBottom' = 'paddingBottom'\n      let marginTop: 'marginTop' | 'marginLeft' = 'marginTop'\n      let marginBottom: 'marginRight' | 'marginBottom' = 'marginBottom'\n      let scrollHeight: 'scrollHeight' | 'scrollWidth' = 'scrollHeight'\n      let transition = `\n        max-height ${duration}ms ${timing},\n        padding-top ${duration}ms ${timing},\n        padding-bottom ${duration}ms ${timing},\n        margin-top ${duration}ms ${timing},\n        margin-bottom ${duration}ms ${timing}\n      `\n\n      if (props.horizontal) {\n        height = 'maxWidth'\n        paddingTop = 'paddingLeft'\n        paddingBottom = 'paddingRight'\n        marginTop = 'marginLeft'\n        marginBottom = 'marginRight'\n        scrollHeight = 'scrollWidth'\n        transition = `\n          max-width ${duration}ms ${timing},\n          padding-inline-start ${duration}ms ${timing},\n          padding-inline-end ${duration}ms ${timing},\n          margin-inline-start ${duration}ms ${timing},\n          margin-inline-end ${duration}ms ${timing}\n        `\n      }\n\n      if (props.fadeEffect) {\n        transition = `\n          ${transition},\n          opacity ${duration}ms ease\n        `\n      }\n\n      const enterRecord: Partial<CSSStyleDeclaration> = {}\n      const leaveRecord: Partial<CSSStyleDeclaration> = {}\n\n      return h(\n        Transition,\n        {\n          appear: props.appear,\n          mode: props.mode,\n          onBeforeEnter($el) {\n            if (enterStage) return\n\n            enterStage = 'before'\n            const el = $el as HTMLElement\n\n            enterRecord.paddingTop = el.style[paddingTop]\n            enterRecord.paddingBottom = el.style[paddingBottom]\n            enterRecord.marginTop = el.style[marginTop]\n            enterRecord.marginBottom = el.style[marginBottom]\n            enterRecord.transition = el.style.transition\n            enterRecord.boxSizing = el.style.boxSizing\n            enterRecord.opacity = el.style.opacity\n\n            el.style.transition = transition\n\n            if (!props.reverse) {\n              el.style[height] = '0'\n              el.style[paddingTop] = '0'\n              el.style[paddingBottom] = '0'\n              el.style[marginTop] = '0'\n              el.style[marginBottom] = '0'\n              el.style.boxSizing = 'content-box'\n\n              if (props.fadeEffect) {\n                el.style.opacity = '0'\n              }\n            }\n\n            emitEvent(props.onBeforeEnter, $el)\n          },\n          onEnter($el) {\n            if (enterStage === 'in') return\n\n            enterStage = 'in'\n            const el = $el as HTMLElement\n\n            enterRecord.overflow = el.style.overflow\n            el.style.overflow = 'hidden'\n\n            if (el[scrollHeight] !== 0) {\n              el.style[height] = `${el[scrollHeight]}px`\n            } else {\n              el.style[height] = ''\n            }\n\n            el.style[paddingTop] = enterRecord.paddingTop!\n            el.style[paddingBottom] = enterRecord.paddingBottom!\n            el.style[marginTop] = enterRecord.marginTop!\n            el.style[marginBottom] = enterRecord.marginBottom!\n\n            if (!props.reverse) {\n              if (props.fadeEffect) {\n                el.style.opacity = enterRecord.opacity!\n              }\n            } else {\n              // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n              el[scrollHeight]\n\n              el.style[height] = '0'\n              el.style[paddingTop] = '0'\n              el.style[paddingBottom] = '0'\n              el.style[marginTop] = '0'\n              el.style[marginBottom] = '0'\n              el.style.boxSizing = 'content-box'\n\n              if (props.fadeEffect) {\n                el.style.opacity = '0'\n              }\n            }\n\n            emitEvent(props.onEnter, $el)\n          },\n          onAfterEnter($el) {\n            const el = $el as HTMLElement\n\n            el.style.transition = enterRecord.transition || ''\n\n            if (!props.reverse) {\n              el.style[height] = ''\n              el.style.overflow = enterRecord.overflow!\n              el.style.boxSizing = enterRecord.boxSizing!\n            }\n\n            enterStage = null\n            emitEvent(props.onAfterEnter, $el)\n          },\n          onEnterCancelled($el) {\n            const el = $el as HTMLElement\n\n            el.style.transition = enterRecord.transition || ''\n            el.style[height] = ''\n            el.style.overflow = enterRecord.overflow!\n            el.style.boxSizing = enterRecord.boxSizing!\n\n            enterStage = null\n            emitEvent(props.onEnterCancelled, $el)\n          },\n          onBeforeLeave($el) {\n            if (leaveStage) return\n\n            leaveStage = 'before'\n            const el = $el as HTMLElement\n\n            leaveRecord.paddingTop = el.style[paddingTop]\n            leaveRecord.paddingBottom = el.style[paddingBottom]\n            leaveRecord.marginTop = el.style[marginTop]\n            leaveRecord.marginBottom = el.style[marginBottom]\n            leaveRecord.overflow = el.style.overflow\n            leaveRecord.boxSizing = el.style.boxSizing\n            leaveRecord.opacity = el.style.opacity\n\n            el.style[height] = `${el[scrollHeight]}px`\n            el.style.overflow = 'hidden'\n\n            emitEvent(props.onBeforeLeave, $el)\n          },\n          onLeave($el) {\n            if (leaveStage === 'in') return\n\n            leaveStage = 'in'\n            const el = $el as HTMLElement\n\n            if (el[scrollHeight] !== 0) {\n              leaveRecord.transition = el.style.transition\n\n              el.style.transition = transition\n\n              el.style[height] = '0'\n              el.style[paddingTop] = '0'\n              el.style[paddingBottom] = '0'\n              el.style[marginTop] = '0'\n              el.style[marginBottom] = '0'\n\n              if (props.fadeEffect) {\n                el.style.opacity = '0'\n              }\n            }\n\n            emitEvent(props.onLeave, $el)\n          },\n          onAfterLeave($el) {\n            const el = $el as HTMLElement\n\n            el.style[height] = ''\n            el.style[paddingTop] = leaveRecord.paddingTop!\n            el.style[paddingBottom] = leaveRecord.paddingBottom!\n            el.style[marginTop] = leaveRecord.marginTop!\n            el.style[marginBottom] = leaveRecord.marginBottom!\n            el.style.overflow = leaveRecord.overflow!\n            el.style.transition = leaveRecord.transition || ''\n            el.style.boxSizing = leaveRecord.boxSizing!\n            el.style.opacity = leaveRecord.opacity!\n\n            leaveStage = null\n            emitEvent(props.onAfterLeave, $el)\n          },\n          onLeaveCancelled($el) {\n            const el = $el as HTMLElement\n\n            el.style[height] = ''\n            el.style[paddingTop] = leaveRecord.paddingTop!\n            el.style[paddingBottom] = leaveRecord.paddingBottom!\n            el.style[marginTop] = leaveRecord.marginTop!\n            el.style[marginBottom] = leaveRecord.marginBottom!\n            el.style.overflow = leaveRecord.overflow!\n            el.style.transition = leaveRecord.transition || ''\n            el.style.boxSizing = leaveRecord.boxSizing!\n            el.style.opacity = leaveRecord.opacity!\n\n            leaveStage = null\n            emitEvent(props.onLeaveCancelled, $el)\n          }\n        },\n        slots\n      )\n    }\n  }\n})\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { AlertSlots, AlertType } from './symbol'\n\nexport const alertProps = buildProps({\n  type: String as PropType<AlertType>,\n  title: String,\n  colorfulText: booleanProp,\n  icon: {\n    type: [Boolean, Object, Function],\n    default: null\n  },\n  closable: booleanProp,\n  iconColor: String,\n  noBorder: booleanProp,\n  banner: booleanProp,\n  manual: booleanProp,\n  scroll: booleanProp,\n  scrollSpeed: Number,\n  color: String,\n  slots: Object as PropType<AlertSlots>,\n  onClose: eventProp(),\n  onHide: eventProp(),\n  onScrollEnd: eventProp()\n})\n\nexport type AlertProps = ExtractPropTypes<typeof alertProps>\nexport type AlertCProps = ConfigurableProps<ExtractPropTypes<typeof alertProps>>\n","export type AlertType = 'default' | 'primary' | 'info' | 'success' | 'warning' | 'error'\n\nexport interface AlertSlots {\n  default?: () => any,\n  title?: () => any,\n  close?: () => any,\n  icon?: () => any\n}\n\nexport const alertTypes = Object.freeze<AlertType[]>([\n  'default',\n  'primary',\n  'info',\n  'success',\n  'warning',\n  'error'\n])\n","<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, onMounted, ref, watch } from 'vue'\n\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { adjustAlpha, getRangeWidth, isClient, mixColor, parseColorToRgba } from '@vexip-ui/utils'\nimport { alertProps } from './props'\nimport { alertTypes } from './symbol'\n\nimport type { AlertSlots } from './symbol'\n\ndefineOptions({ name: 'Alert' })\n\nconst _props = defineProps(alertProps)\nconst props = useProps('alert', _props, {\n  type: {\n    default: 'primary',\n    validator: value => alertTypes.includes(value)\n  },\n  title: '',\n  colorfulText: false,\n  icon: {\n    isFunc: true,\n    default: false\n  },\n  closable: false,\n  iconColor: '',\n  noBorder: false,\n  banner: false,\n  manual: false,\n  scroll: false,\n  scrollSpeed: 1,\n  color: null,\n  slots: () => ({})\n})\n\nconst slots = defineSlots<AlertSlots>()\n\nconst nh = useNameHelper('alert')\nconst icons = useIcons()\n\nconst predefinedIcons = computed(() => ({\n  default: icons.value.alert,\n  primary: icons.value.info,\n  info: icons.value.info,\n  success: icons.value.success,\n  warning: icons.value.warning,\n  error: icons.value.error\n}))\n\nconst closed = ref(false)\nconst hidden = ref(false)\nconst scrollDuration = ref(0)\nconst scrollOffset = ref(0)\nconst scrollWidth = ref(0)\n\nconst content = ref<HTMLElement>()\nconst scrollEl = ref<HTMLElement>()\n\nconst hasTitle = computed(() => {\n  return !!(props.title || slots.title)\n})\nconst hasIcon = computed(() => {\n  return !!(props.icon || slots.icon)\n})\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm(props.type)]: props.type,\n    [nh.bm('colorful-text')]: props.colorfulText,\n    [nh.bm('has-title')]: hasTitle.value,\n    [nh.bm('has-icon')]: hasIcon.value,\n    [nh.bm('closable')]: props.closable,\n    [nh.bm('no-border')]: !props.banner && props.noBorder,\n    [nh.bm('banner')]: props.banner\n  }\n})\nconst style = computed(() => {\n  if (!props.color) return undefined\n\n  const rootStyle = isClient ? getComputedStyle(document.documentElement) : null\n  const black = parseColorToRgba(rootStyle?.getPropertyValue(nh.nv('color-black')) || '#000')\n  const baseColor = parseColorToRgba(props.color)\n\n  return nh.cvm({\n    'bg-color': adjustAlpha(baseColor, 0.2).toString(),\n    'b-color': adjustAlpha(baseColor, 0.5).toString(),\n    'icon-color': mixColor(black, baseColor, 0.2).toString(),\n    ...(props.colorfulText\n      ? {\n          'text-color': mixColor(black, baseColor, 0.2).toString(),\n          'title-color': mixColor(black, baseColor, 0.2).toString()\n        }\n      : {})\n  })\n})\nconst iconComp = computed(() => {\n  if (typeof props.icon === 'boolean') {\n    return predefinedIcons.value[props.type] ?? {}\n  }\n\n  return { icon: props.icon }\n})\nconst scrollStyle = computed(() => {\n  return {\n    width: `${scrollWidth.value}px`,\n    transitionDuration: `${scrollDuration.value}ms`,\n    transform: `translateX(${scrollOffset.value}px)`\n  }\n})\n\nwatch(\n  () => props.scroll,\n  value => {\n    value && startScroll()\n  }\n)\n\nonMounted(() => {\n  props.scroll && startScroll()\n})\n\nfunction handleClose() {\n  if (!props.manual) {\n    closed.value = true\n  }\n\n  emitEvent(props.onClose)\n}\n\nfunction handleAfterLeave() {\n  emitEvent(props.onHide)\n  hidden.value = true\n}\n\nfunction startScroll() {\n  if (content.value && scrollEl.value) {\n    const contentRect = content.value.getBoundingClientRect()\n    const rangeWidth = getRangeWidth(scrollEl.value)\n    const duration = ((contentRect.width + rangeWidth) * 12) / (Math.max(props.scrollSpeed, 0) || 1)\n\n    scrollDuration.value = 0\n    scrollOffset.value = contentRect.width\n    scrollWidth.value = rangeWidth\n\n    requestAnimationFrame(() => {\n      requestAnimationFrame(() => {\n        scrollDuration.value = duration\n        scrollOffset.value = -rangeWidth\n      })\n    })\n  }\n}\n\nfunction handleScrollEnd() {\n  emitEvent(props.onScrollEnd)\n  requestAnimationFrame(startScroll)\n}\n</script>\n\n<template>\n  <CollapseTransition v-if=\"!hidden\" fade-effect @after-leave=\"handleAfterLeave\">\n    <div\n      v-if=\"!closed\"\n      :class=\"className\"\n      role=\"alert\"\n      :style=\"style\"\n    >\n      <div :class=\"nh.be('wrapper')\">\n        <div v-if=\"hasTitle\" :class=\"nh.be('title')\">\n          <slot name=\"title\">\n            <Renderer :renderer=\"props.slots.title\">\n              {{ title }}\n            </Renderer>\n          </slot>\n        </div>\n        <div ref=\"content\" :class=\"[nh.be('content'), props.scroll && nh.bem('content', 'scroll')]\">\n          <span\n            v-if=\"props.scroll\"\n            ref=\"scrollEl\"\n            :class=\"nh.be('scroll')\"\n            :style=\"scrollStyle\"\n            @transitionend=\"handleScrollEnd\"\n          >\n            <slot>\n              <Renderer :renderer=\"props.slots.default\"></Renderer>\n            </slot>\n          </span>\n          <slot v-else>\n            <Renderer :renderer=\"props.slots.default\"></Renderer>\n          </slot>\n        </div>\n      </div>\n      <button\n        v-if=\"props.closable\"\n        type=\"button\"\n        :class=\"nh.be('close')\"\n        @click=\"handleClose\"\n      >\n        <slot name=\"close\">\n          <Renderer :renderer=\"props.slots.close\">\n            <Icon v-bind=\"icons.close\" label=\"close\"></Icon>\n          </Renderer>\n        </slot>\n      </button>\n      <div v-if=\"hasIcon\" :class=\"nh.be('icon')\">\n        <slot name=\"icon\">\n          <Renderer :renderer=\"props.slots.icon\">\n            <Icon\n              v-bind=\"iconComp\"\n              :scale=\"hasTitle ? 2 : 1\"\n              :style=\"{ color: props.iconColor }\"\n            ></Icon>\n          </Renderer>\n        </slot>\n      </div>\n    </div>\n  </CollapseTransition>\n</template>\n","import { booleanProp, buildProps, eventProp, wrapProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { AnchorLinkOptions, AnchorSlots } from './symbol'\n\nexport const anchorProps = buildProps({\n  active: String,\n  viewer: [String, Object, Function] as PropType<unknown>,\n  offset: Number,\n  marker: booleanProp,\n  scrollDuration: Number,\n  markerTransition: String,\n  options: Array as PropType<AnchorLinkOptions[]>,\n  bindHash: booleanProp,\n  forceActive: booleanProp,\n  slots: Object as PropType<AnchorSlots>,\n  onChange: eventProp<(value: string) => void>()\n})\n\nexport type AnchorProps = ExtractPropTypes<typeof anchorProps>\nexport type AnchorCProps = ConfigurableProps<AnchorProps, 'viewer'>\n\nexport const anchorLinkProps = wrapProps({\n  to: {\n    type: String,\n    default: ''\n  },\n  title: {\n    type: String,\n    default: ''\n  },\n  children: {\n    type: Array as PropType<AnchorLinkOptions[]>,\n    default: () => []\n  }\n})\n\nexport type AnchorLinkProps = ExtractPropTypes<typeof anchorLinkProps>\n","import type { InjectionKey } from 'vue'\n\nexport interface AnchorLinkOptions {\n  to: string,\n  label: string,\n  title?: string,\n  children?: AnchorLinkOptions[]\n}\n\nexport interface AnchorLinkState {\n  el?: HTMLElement,\n  to: string,\n  active: boolean,\n  indent: number\n}\n\nexport interface AnchorState {\n  currentActive: string,\n  increaseLink(state: AnchorLinkState): void,\n  decreaseLink(state: AnchorLinkState): void,\n  handleActive(label: string): void\n}\n\nexport interface AnchorSlots {\n  default?: () => any,\n  marker?: () => any\n}\n\nexport const baseIndentWidth = 14 // px\nexport const LINK_STATE = '__VXP_ANCHOR_LINK_STATE' as unknown as InjectionKey<AnchorLinkState>\nexport const ANCHOR_STATE = '__VXP_ANCHOR_STATE' as unknown as InjectionKey<AnchorState>\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  inject,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  toRef,\n  watch\n} from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { anchorLinkProps } from './props'\nimport { ANCHOR_STATE, LINK_STATE, baseIndentWidth } from './symbol'\n\ndefineOptions({ name: 'AnchorLink' })\n\nconst props = defineProps(anchorLinkProps)\n\nconst anchorState = inject(ANCHOR_STATE, null)\nconst parentLinkState = inject(LINK_STATE, null)\n\nconst nh = useNameHelper('anchor')\nconst indent = ref(parentLinkState?.indent ? parentLinkState?.indent + 1 : 1)\nconst active = ref(false)\n\nconst link = ref<HTMLElement>()\n\nconst state = reactive({\n  el: link,\n  to: toRef(props, 'to'),\n  active,\n  indent\n})\n\nconst linkClass = computed(() => {\n  return {\n    [nh.be('link')]: true,\n    [nh.bem('link', 'active')]: state.active\n  }\n})\nconst linkStyle = computed(() => {\n  return {\n    paddingInlineStart: `${baseIndentWidth * indent.value}px`\n  }\n})\n\nprovide(LINK_STATE, state)\n\nif (anchorState) {\n  watch(\n    () => anchorState.currentActive,\n    value => {\n      active.value = value === props.to\n    }\n  )\n\n  onMounted(() => {\n    anchorState.increaseLink(state)\n  })\n\n  onBeforeUnmount(() => {\n    anchorState.decreaseLink(state)\n  })\n}\n\nfunction handleSelect() {\n  if (anchorState) {\n    anchorState.handleActive(props.to)\n  }\n\n  return false\n}\n</script>\n\n<template>\n  <li :class=\"nh.be('item')\">\n    <a\n      ref=\"link\"\n      :class=\"linkClass\"\n      :href=\"to\"\n      :style=\"linkStyle\"\n      :title=\"title\"\n      @click.prevent=\"handleSelect\"\n    >\n      <slot></slot>\n    </a>\n    <ul v-if=\"$slots.group || (children && children.length)\" :class=\"nh.be('list')\">\n      <slot name=\"group\">\n        <template v-if=\"children && children.length\">\n          <AnchorLink\n            v-for=\"child in children\"\n            :key=\"child.to\"\n            :to=\"child.to\"\n            :title=\"child.title\"\n            :children=\"child.children\"\n          >\n            {{ child.label }}\n          </AnchorLink>\n        </template>\n      </slot>\n    </ul>\n  </li>\n</template>\n","export interface ScrollElement {\n  scrollTo(x: number, y: number): void,\n  [prop: string]: any\n}\n\nexport function animateScrollTo(\n  el: ScrollElement,\n  from: number,\n  to: number,\n  duration: number,\n  callback: unknown\n): void {\n  const distance = to - from\n  const step = Math.ceil((distance / duration) * 16)\n\n  const end = () => {\n    typeof callback === 'function' && callback()\n  }\n\n  if (!distance) {\n    end()\n    return\n  }\n\n  if (duration <= 0) {\n    el.scrollTo(0, to)\n    end()\n    return\n  }\n\n  let current = from\n\n  const scroll = () => {\n    if (!distance) return\n\n    current = current + step\n\n    if ((to - current) / distance <= 0) {\n      current = to\n    }\n\n    el.scrollTo(0, current)\n\n    if (current === to) {\n      end()\n    } else {\n      requestAnimationFrame(scroll)\n    }\n  }\n\n  scroll()\n}\n","<script setup lang=\"ts\">\nimport { AnchorLink } from '@/components/anchor-link'\nimport { Renderer } from '@/components/renderer'\n\nimport {\n  getCurrentInstance,\n  isVNode,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  watch\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { proxyExposed } from '@vexip-ui/hooks'\nimport { isClient, isElement } from '@vexip-ui/utils'\nimport { anchorProps } from './props'\nimport { animateScrollTo } from './helper'\nimport { ANCHOR_STATE } from './symbol'\n\nimport type { ComponentInternalInstance } from 'vue'\nimport type { NativeScrollExposed } from '@/components/native-scroll'\nimport type { Scroll } from '@/components/scroll'\nimport type { AnchorLinkState, AnchorSlots, AnchorState } from './symbol'\n\ntype ScrollType = NativeScrollExposed & InstanceType<typeof Scroll>\n\ndefineOptions({ name: 'Anchor' })\n\nconst nh = useNameHelper('anchor')\n\nconst _props = defineProps(anchorProps)\nconst props = useProps('anchor', _props, {\n  active: {\n    default: '',\n    static: true\n  },\n  viewer: {\n    default: null,\n    static: true\n  },\n  offset: 8,\n  marker: false,\n  scrollDuration: 500,\n  markerTransition: () => nh.ns('fade'),\n  options: {\n    default: () => [],\n    static: true\n  },\n  bindHash: false,\n  forceActive: false,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:active'])\n\ndefineSlots<AnchorSlots>()\n\nconst currentActive = ref(props.active)\nconst animating = ref(false)\nconst markerTop = ref(0)\nconst linkStates = new Set<AnchorLinkState>()\n\nconst wrapper = ref<HTMLElement>()\n\nlet timer: ReturnType<typeof setTimeout>\n\nlet isRawViewer = false\nlet container: Window | HTMLElement | null = null\nlet scroller: ScrollType | null = null\nlet prevScrollTop = 0\n\nif (isClient && !currentActive.value && props.bindHash) {\n  currentActive.value = decodeURIComponent(location.hash)\n}\n\nprovide<AnchorState>(\n  ANCHOR_STATE,\n  reactive({\n    currentActive,\n    increaseLink,\n    decreaseLink,\n    handleActive\n  })\n)\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n  }\n)\nwatch(() => props.viewer, updateContainer)\n\nonMounted(() => {\n  updateContainer()\n  computeMarkerPosition()\n})\n\nonBeforeUnmount(() => {\n  removeListener()\n  clearTimeout(timer)\n})\n\nfunction increaseLink(state: AnchorLinkState) {\n  linkStates.add(state)\n  state.active = currentActive.value === state.to\n}\n\nfunction decreaseLink(state: AnchorLinkState) {\n  linkStates.delete(state)\n}\n\nconst instance = getCurrentInstance()!\n\nfunction updateContainer() {\n  removeListener()\n  isClient &&\n    nextTick(() => {\n      const viewer: unknown = props.viewer\n\n      prevScrollTop = 0\n\n      let _container: Window | Node | ComponentInternalInstance | null = null\n      let refName = 'scroll'\n\n      if (typeof viewer === 'string') {\n        if (viewer.startsWith('ref:')) {\n          refName = viewer.substring(4)\n          refName = refName || 'scroll'\n        } else if (['window', 'document', 'html'].includes(viewer)) {\n          _container = window\n        } else if (viewer === 'body') {\n          _container = document.body\n        } else if (viewer === 'root') {\n          _container = instance.root\n        } else {\n          _container = document.querySelector(viewer)\n        }\n      } else if (typeof viewer === 'function') {\n        _container = viewer()\n      } else if (isElement(viewer)) {\n        _container = viewer\n      }\n\n      if (_container === window || isElement(_container)) {\n        isRawViewer = true\n      } else {\n        isRawViewer = false\n        // container = this.$parent\n      }\n\n      if (!isRawViewer) {\n        // ComponentInternalInstance\n        _container = _container as ComponentInternalInstance\n        _container = isVNode(_container?.vnode) ? _container : instance.parent\n\n        while (_container) {\n          const name = _container.type?.name\n\n          if (name === 'Scroll' || name === 'NativeScroll') {\n            scroller = proxyExposed({ component: _container } as any)\n\n            break\n          }\n\n          const refTemp = _container.refs?.[refName]\n\n          if (refTemp) {\n            if (isElement(refTemp)) {\n              isRawViewer = true\n              container = refTemp as HTMLElement\n            } else {\n              scroller = refTemp as ScrollType\n            }\n\n            break\n          }\n\n          _container = _container.parent\n        }\n\n        if (scroller) {\n          scroller.addScrollListener(handleContainerScroll)\n          container = scroller.$el\n        } else if (!container) {\n          isRawViewer = true\n          container = instance.parent?.proxy?.$el as HTMLElement\n        }\n\n        if (isRawViewer && container) {\n          container.addEventListener('scroll', handleContainerScroll)\n        }\n      } else {\n        container = _container as HTMLElement\n        container.addEventListener('scroll', handleContainerScroll)\n      }\n    })\n}\n\nfunction getContainerEl() {\n  if (!container) return null\n\n  return container === window ? document.documentElement : (container as HTMLElement)\n}\n\nfunction computeCurrentLink(scrollTop: number) {\n  if (!linkStates.size || !container) return\n\n  const containerTop = getContainerEl()!.offsetTop\n  const offsetList: { link: string, offset: number }[] = []\n\n  let offset = scrollTop + props.offset\n\n  if (isRawViewer) {\n    offset += containerTop\n  }\n\n  linkStates.forEach(state => {\n    const id = state.to\n\n    if (!id.startsWith('#')) return\n\n    const element = document.querySelector(id) as HTMLElement | null\n\n    if (element) {\n      offsetList.push({\n        link: id,\n        offset: element.offsetTop\n      })\n    }\n  })\n\n  offsetList.sort((prev, next) => prev.offset - next.offset)\n  offsetList.push({\n    link: '',\n    offset: Infinity\n  })\n\n  let currentLink = ''\n\n  for (let i = 0, len = offsetList.length - 1; i < len; ++i) {\n    const current = offsetList[i]\n    const next = offsetList[i + 1]\n\n    if (current.offset <= offset && next.offset > offset) {\n      currentLink = current.link\n\n      break\n    }\n  }\n\n  prevScrollTop = scrollTop\n\n  if (currentActive.value !== currentLink) {\n    currentActive.value = currentLink\n    emit('update:active', currentLink)\n    emitEvent(props.onChange, currentLink)\n  }\n}\n\nfunction handleContainerScroll(event: Event) {\n  if (animating.value) return\n\n  const scrollTop = isRawViewer\n    ? (\n        (event.target === window || event.target === document\n          ? document.documentElement\n          : event.target) as HTMLElement\n      ).scrollTop\n    : (event as MouseEvent).clientY\n\n  computeCurrentLink(scrollTop)\n  computeMarkerPosition()\n}\n\nfunction removeListener() {\n  if (scroller) {\n    scroller.removeScrollListener(handleContainerScroll)\n    scroller = null\n  }\n\n  if (container) {\n    container.removeEventListener('scroll', handleContainerScroll)\n  }\n}\n\nfunction handleActive(link: string) {\n  if (\n    (!props.forceActive && link === currentActive.value) ||\n    !link.startsWith('#') ||\n    link.length < 2\n  ) {\n    return\n  }\n\n  const element = document.querySelector(link) as HTMLElement | null\n\n  if (!element) return\n\n  clearTimeout(timer)\n\n  animating.value = true\n\n  const elementTop = element.offsetTop\n  const duration = Math.max(props.scrollDuration, 0)\n\n  if (isRawViewer && container) {\n    const containerEl = getContainerEl()!\n    // const from = containerEl.scrollTop\n    const to = Math.min(\n      elementTop - containerEl.offsetTop - props.offset,\n      containerEl.scrollHeight - containerEl.clientHeight\n    )\n\n    animateScrollTo(containerEl, prevScrollTop, to, duration, () => {\n      timer = setTimeout(() => {\n        animating.value = false\n      }, 10)\n    })\n    computeCurrentLink(to)\n    computeMarkerPosition()\n  } else if (scroller) {\n    const [min, max] = scroller.getYScrollLimit()\n    const clientY = Math.max(Math.min(elementTop - props.offset, max), min)\n\n    scroller.scrollTo(0, clientY, duration).then(() => {\n      timer = setTimeout(() => {\n        animating.value = false\n      }, duration + 10)\n    })\n\n    computeCurrentLink(clientY)\n    computeMarkerPosition()\n  } else {\n    animating.value = false\n  }\n\n  if (isClient && props.bindHash && location) {\n    location.hash = encodeURIComponent(currentActive.value.replace(/^#/, ''))\n  }\n}\n\nfunction computeMarkerPosition() {\n  const currentLink = Array.from(linkStates).find(\n    state => state.to && state.to === currentActive.value\n  )\n\n  if (currentLink?.el) {\n    const linkRect = currentLink.el.getBoundingClientRect()\n    const wrapperTop = wrapper.value?.getBoundingClientRect().top ?? 0\n\n    markerTop.value = linkRect.top - wrapperTop + linkRect.height / 2 + 0.5\n  }\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"{\n      [nh.b()]: true,\n      [nh.bs('vars')]: true,\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('no-marker')]: !props.marker\n    }\"\n  >\n    <ul :class=\"nh.be('list')\">\n      <slot>\n        <Renderer :renderer=\"props.slots.default\">\n          <AnchorLink\n            v-for=\"link in props.options\"\n            :key=\"link.to\"\n            :to=\"link.to\"\n            :title=\"link.title\"\n            :children=\"link.children\"\n          >\n            {{ link.label }}\n          </AnchorLink>\n        </Renderer>\n      </slot>\n    </ul>\n    <Transition appear :name=\"props.markerTransition\">\n      <div\n        v-if=\"props.marker && currentActive\"\n        :class=\"nh.be('marker')\"\n        :style=\"{ top: `${markerTop}px` }\"\n      >\n        <slot name=\"marker\">\n          <Renderer :renderer=\"props.slots.marker\">\n            <div :class=\"nh.be('pointer')\"></div>\n          </Renderer>\n        </slot>\n      </div>\n    </Transition>\n  </div>\n</template>\n","import { buildProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ColumnFlex, ColumnOptions, RowGridAlign, RowGridJustify } from './symbol'\n\nexport const rowProps = buildProps({\n  tag: String,\n  gap: [Number, Array] as PropType<number | number[]>,\n  justify: String as PropType<RowGridJustify>,\n  align: String as PropType<RowGridAlign>,\n  columnFlex: {\n    type: [Boolean, Object] as PropType<boolean | Partial<ColumnFlex>>,\n    default: null\n  }\n})\n\nexport type RowProps = ExtractPropTypes<typeof rowProps>\nexport type RowCProps = ConfigurableProps<RowProps>\n\nconst mediaProp = [Number, Object] as PropType<number | ColumnOptions>\n\nexport const columnProps = buildProps({\n  tag: String,\n  span: Number,\n  offset: Number,\n  push: Number,\n  pull: Number,\n  order: Number,\n  xs: mediaProp,\n  sm: mediaProp,\n  md: mediaProp,\n  lg: mediaProp,\n  xl: mediaProp,\n  xxl: mediaProp,\n  flex: [Number, String],\n  useFlex: {\n    type: [Boolean, Object] as PropType<boolean | Partial<ColumnFlex>>,\n    default: null\n  }\n})\n\nexport type ColumnProps = ExtractPropTypes<typeof columnProps>\nexport type ColumnCProps = ConfigurableProps<ColumnProps>\n","import type { InjectionKey } from 'vue'\n\nexport type BreakPoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'\n\nexport type RowGridJustify =\n  | 'start'\n  | 'end'\n  | 'center'\n  | 'space-around'\n  | 'space-between'\n  | 'space-evenly'\nexport type RowGridAlign = 'top' | 'middle' | 'bottom' | 'stretch'\n\nexport interface ColumnFlex {\n  justify: RowGridJustify,\n  align: RowGridAlign\n}\n\nexport interface RowState {\n  columnFlex: ColumnFlex | false,\n  gap: number | number[]\n}\n\nexport interface ColumnOptions {\n  span?: number,\n  offset?: number,\n  pull?: number,\n  push?: number,\n  order?: number\n}\n\nexport const breakPoints = Object.freeze<BreakPoint[]>(['xs', 'sm', 'md', 'lg', 'xl', 'xxl'])\n\nexport const ROW_STATE = '__VXP_GRID_ROW_STATE' as unknown as InjectionKey<RowState>\n","import { computed, defineComponent, h, provide, reactive, toRef } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { rowProps } from './props'\nimport { ROW_STATE } from './symbol'\n\nimport type { RowGridAlign, RowGridJustify, RowState } from './symbol'\n\nconst justifyList = Object.freeze<RowGridJustify[]>([\n  'start',\n  'end',\n  'center',\n  'space-around',\n  'space-between',\n  'space-evenly'\n])\nconst alignList = Object.freeze<RowGridAlign[]>(['top', 'middle', 'bottom', 'stretch'])\n\nexport default defineComponent({\n  name: 'Row',\n  props: rowProps,\n  setup(_props, { slots }) {\n    const props = useProps('row', _props, {\n      tag: 'div',\n      gap: 0,\n      justify: {\n        default: 'start',\n        validator: value => justifyList.includes(value)\n      },\n      align: {\n        default: 'top',\n        validator: value => alignList.includes(value)\n      },\n      columnFlex: false\n    })\n\n    const nh = useNameHelper('row')\n\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        nh.bm(props.justify),\n        nh.bm(props.align),\n        {\n          [nh.bm('inherit')]: props.inherit\n        }\n      ]\n    })\n    const style = computed(() => {\n      if (!props.gap) return null\n\n      if (typeof props.gap === 'number') {\n        return {\n          [nh.cv('h-gap')]: `${props.gap}px`\n        }\n      }\n\n      if (Array.isArray(props.gap)) {\n        const [horizontal, vertical] = props.gap\n\n        return {\n          [nh.cv('h-gap')]: `${horizontal}px`,\n          [nh.cv('v-gap')]: `${vertical}px`\n        }\n      }\n\n      return null\n    })\n    const columnFlex = computed(() => {\n      if (props.columnFlex === true) {\n        return {\n          justify: 'start',\n          align: 'top'\n        }\n      } else if (props.columnFlex) {\n        return {\n          justify: 'start',\n          align: 'top',\n          ...props.columnFlex\n        }\n      }\n\n      return false\n    })\n\n    provide(\n      ROW_STATE,\n      reactive({\n        columnFlex,\n        gap: toRef(props, 'gap')\n      }) as RowState\n    )\n\n    return () =>\n      h(\n        props.tag || 'div',\n        {\n          class: className.value,\n          style: style.value\n        },\n        {\n          default: () => slots.default && slots.default()\n        }\n      )\n  }\n})\n","import {\n  booleanProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ButtonAttrType, ButtonType } from '@/components/button'\nimport type { RowGridAlign, RowGridJustify } from '@/components/row'\nimport type { ColumnOptions } from '@/components/column'\nimport type { Rule } from './validator'\nimport type { FormLabelAlign, SubmitMethod } from './symbol'\n\nexport const formProps = buildProps({\n  method: String as PropType<SubmitMethod>,\n  action: String,\n  model: Object,\n  rules: Object,\n  labelWidth: [Number, String] as PropType<number | 'auto'>,\n  labelAlign: String as PropType<FormLabelAlign>,\n  allRequired: booleanProp,\n  labelSuffix: String,\n  hideAsterisk: booleanProp,\n  validateAll: booleanProp,\n  hideLabel: booleanProp,\n  disabled: booleanProp,\n  loading: booleanProp,\n  size: sizeProp,\n  inline: booleanProp,\n  gap: [Number, Array] as PropType<number | number[]>,\n  justify: String as PropType<RowGridJustify>,\n  align: String as PropType<RowGridAlign>\n})\n\nexport type FormProps = ExtractPropTypes<typeof formProps>\nexport type FormCProps = ConfigurableProps<FormProps, 'model'>\n\nconst mediaProp = [Number, Object] as PropType<number | ColumnOptions>\n\nexport const formItemProps = buildProps({\n  locale: localeProp('form'),\n  label: String,\n  prop: String,\n  name: String,\n  rules: [Object, Array] as PropType<Rule | Rule[]>,\n  labelWidth: Number,\n  required: booleanProp,\n  htmlFor: String,\n  errorTransition: String,\n  defaultValue: {\n    type: [String, Number, Boolean, Object, Array, Function] as PropType<any>,\n    default: null\n  },\n  hideErrorTip: booleanProp,\n  validateAll: booleanProp,\n  hideAsterisk: booleanProp,\n  hideLabel: booleanProp,\n  action: booleanProp,\n  help: String,\n  pure: booleanProp,\n  span: Number,\n  offset: Number,\n  push: Number,\n  pull: Number,\n  order: Number,\n  xs: mediaProp,\n  sm: mediaProp,\n  md: mediaProp,\n  lg: mediaProp,\n  xl: mediaProp,\n  xxl: mediaProp,\n  flex: [Number, String]\n})\n\nexport type FormItemProps = ExtractPropTypes<typeof formItemProps>\nexport type FormItemCProps = ConfigurableProps<FormItemProps, 'prop' | 'htmlFor' | 'defaultValue'>\n\nexport const formSubmitProps = buildProps({\n  size: sizeProp,\n  locale: localeProp('form'),\n  type: String as PropType<ButtonType>,\n  label: String,\n  dashed: booleanProp,\n  text: booleanProp,\n  simple: booleanProp,\n  ghost: booleanProp,\n  disabled: booleanProp,\n  circle: booleanProp,\n  loadingIcon: iconProp,\n  loadingEffect: String as PropType<IconEffect>,\n  icon: iconProp,\n  color: String,\n  buttonType: String as PropType<ButtonAttrType>,\n  block: booleanProp,\n  tag: String,\n  onBeforeSubmit: Function as PropType<() => unknown>,\n  onSubmit: eventProp(),\n  onError: eventProp<(errors: string[]) => void>()\n})\n\nexport type FormSubmitProps = ExtractPropTypes<typeof formSubmitProps>\nexport type FormSubmitCProps = ConfigurableProps<FormSubmitProps, never, 'onBeforeReset'>\n\nexport const formResetProps = buildProps({\n  size: sizeProp,\n  locale: localeProp('form'),\n  type: String as PropType<ButtonType>,\n  label: String,\n  dashed: booleanProp,\n  text: booleanProp,\n  simple: booleanProp,\n  ghost: booleanProp,\n  disabled: booleanProp,\n  loading: booleanProp,\n  circle: booleanProp,\n  loadingIcon: iconProp,\n  loadingEffect: String as PropType<IconEffect>,\n  icon: iconProp,\n  color: String,\n  buttonType: String as PropType<ButtonAttrType>,\n  block: booleanProp,\n  tag: String,\n  onBeforeReset: Function as PropType<() => unknown>,\n  onReset: eventProp()\n})\n\nexport type FormResetProps = ExtractPropTypes<typeof formResetProps>\nexport type FormResetCProps = ConfigurableProps<FormResetProps, never, 'onBeforeReset'>\n","import type { ComputedRef, InjectionKey, Ref } from 'vue'\nimport type { ComponentSize, ComponentState } from '@vexip-ui/config'\nimport type { EventEmitter } from '@vexip-ui/utils'\nimport type { Rule } from './validator'\n\nexport type FormLabelAlign = 'right' | 'top' | 'left'\nexport type SubmitMethod = 'get' | 'post' | 'put' | 'delete'\n\nexport interface FormProps {\n  method: SubmitMethod,\n  action: string,\n  model: Record<string, any>,\n  rules: Record<string, any>,\n  labelWidth: number | 'auto',\n  labelAlign: FormLabelAlign,\n  allRequired: boolean,\n  labelSuffix: string,\n  hideAsterisk: boolean,\n  validateAll: boolean,\n  hideLabel: boolean,\n  disabled: boolean,\n  loading: boolean,\n  size: ComponentSize,\n  inline: boolean\n}\n\nexport interface FormItemProps {\n  label: string,\n  prop: string,\n  rules: Rule | Rule[],\n  labelWidth: number | 'auto',\n  required: boolean,\n  htmlFor: string,\n  errorTransition: string,\n  defaultValue: unknown,\n  hideErrorTip: boolean,\n  validateAll: boolean,\n  hideAsterisk: boolean\n}\n\nexport interface FieldOptions {\n  prop: ComputedRef<string>,\n  idFor: ComputedRef<string>,\n  labelId: ComputedRef<string>,\n  state: ComputedRef<ComponentState>,\n  disabled: ComputedRef<boolean>,\n  loading: ComputedRef<boolean>,\n  size: ComputedRef<ComponentSize>,\n  emitter: EventEmitter,\n  labelWidth: Ref<number>,\n  validate: () => Promise<string[] | null>,\n  reset: () => boolean,\n  clearError: () => void,\n  getValue: (defaultValue?: unknown) => unknown,\n  setValue: (value: unknown, strict?: boolean) => void,\n  sync: (instance: any) => void,\n  unSync: (instance: any) => void\n}\n\nexport interface FormActions {\n  getLabelWidth: () => number,\n  validate: () => Promise<string[]>,\n  validateFields: (props: string | string[]) => Promise<string[]>,\n  reset: () => void,\n  resetFields: (props: string | string[]) => void,\n  clearError: () => void,\n  clearFieldsError: (props: string | string[]) => void\n}\n\n// form\nexport const FORM_PROPS = '__VXP_FORM_PROPS' as unknown as InjectionKey<Partial<FormProps>>\nexport const FORM_FIELDS = '__VXP_FORM_FIELDS' as unknown as InjectionKey<Set<FieldOptions>>\nexport const FORM_ACTIONS = '__VXP_FORM_ACTIONS' as unknown as InjectionKey<FormActions>\n\n// form-item\nexport const FIELD_OPTIONS = '__VXP_FIELD_OPTIONS' as unknown as InjectionKey<FieldOptions>\n\nexport const submitMethods = Object.freeze<SubmitMethod[]>(['get', 'post', 'put', 'delete'])\nexport const labelAligns = Object.freeze<FormLabelAlign[]>(['right', 'top', 'left'])\n","<script setup lang=\"ts\">\nimport { Row } from '@/components/row'\n\nimport { computed, provide, reactive } from 'vue'\n\nimport { createSizeProp, useNameHelper, useProps } from '@vexip-ui/config'\nimport { formProps } from './props'\nimport { FORM_ACTIONS, FORM_FIELDS, FORM_PROPS, labelAligns, submitMethods } from './symbol'\n\nimport type { FieldOptions } from './symbol'\n\ndefineOptions({ name: 'Form', inheritAttrs: true })\n\nconst _props = defineProps(formProps)\nconst props = useProps('form', _props, {\n  method: {\n    default: 'post',\n    validator: value => submitMethods.includes(value)\n  },\n  action: null,\n  model: {\n    default: () => ({}),\n    static: true\n  },\n  rules: () => ({}),\n  labelWidth: 'auto',\n  labelAlign: {\n    default: 'right',\n    validator: value => labelAligns.includes(value)\n  },\n  allRequired: false,\n  labelSuffix: '',\n  hideAsterisk: false,\n  validateAll: false,\n  hideLabel: false,\n  disabled: false,\n  loading: false,\n  size: createSizeProp(),\n  inline: false,\n  gap: [8, 0],\n  justify: 'start',\n  align: 'top'\n})\n\nconst nh = useNameHelper('form')\nconst fieldSet: Set<FieldOptions> = reactive(new Set<any>())\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(`label-${props.labelAlign}`),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('loading')]: props.loading,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm('inline')]: props.inline\n    }\n  ]\n})\nconst labelWidth = computed(() => {\n  return Math.max(...Array.from(fieldSet).map(field => field.labelWidth.value))\n})\n\nprovide(FORM_PROPS, props)\nprovide(FORM_FIELDS, fieldSet)\nprovide(FORM_ACTIONS, {\n  getLabelWidth,\n  validate,\n  validateFields,\n  reset,\n  resetFields,\n  clearError,\n  clearFieldsError\n})\n\ndefineExpose({\n  validate,\n  validateFields,\n  reset,\n  resetFields,\n  clearError,\n  clearFieldsError\n})\n\nfunction getLabelWidth() {\n  if (typeof props.labelWidth === 'number') {\n    return props.labelWidth\n  }\n\n  return labelWidth.value\n}\n\nfunction getPropMap() {\n  const propMap: Record<string, FieldOptions> = {}\n\n  for (const field of fieldSet) {\n    if (field.prop.value) {\n      propMap[field.prop.value] = field\n    }\n  }\n\n  return propMap\n}\n\nfunction validate() {\n  return validateItems(fieldSet)\n}\n\nfunction validateFields(props: string | string[]) {\n  if (!Array.isArray(props)) {\n    props = [props]\n  }\n\n  const propMap = getPropMap()\n  const fields = new Set<FieldOptions>()\n\n  props.forEach(prop => {\n    if (propMap[prop]) {\n      fields.add(propMap[prop])\n    }\n  })\n\n  return validateItems(fields)\n}\n\nfunction validateItems(items: Set<FieldOptions>) {\n  const validations: Promise<string[] | null>[] = []\n\n  items.forEach(item => {\n    validations.push(item.validate())\n  })\n\n  return new Promise<string[]>(resolve => {\n    Promise.all(validations).then(errors => {\n      resolve(errors.flat().filter(Boolean) as string[])\n    })\n  })\n}\n\nfunction reset() {\n  fieldSet.forEach(field => {\n    field.reset()\n  })\n}\n\nfunction resetFields(props: string | string[]) {\n  if (!Array.isArray(props)) {\n    props = [props]\n  }\n\n  const propMap = getPropMap()\n\n  props.forEach(prop => {\n    if (propMap[prop]) {\n      propMap[prop].reset()\n    }\n  })\n}\n\nfunction clearError() {\n  fieldSet.forEach(field => {\n    field.clearError()\n  })\n}\n\nfunction clearFieldsError(props: string | string[]) {\n  if (!Array.isArray(props)) {\n    props = [props]\n  }\n\n  const propMap = getPropMap()\n\n  props.forEach(prop => {\n    if (propMap[prop]) {\n      propMap[prop].clearError()\n    }\n  })\n}\n</script>\n\n<template>\n  <Row\n    v-bind=\"$attrs\"\n    :class=\"className\"\n    :inherit=\"props.inherit\"\n    tag=\"form\"\n    :method=\"props.action && props.method\"\n    :action=\"props.action\"\n    :gap=\"props.gap\"\n    :justify=\"props.justify\"\n    :align=\"props.align\"\n    :column-flex=\"undefined\"\n  >\n    <slot></slot>\n  </Row>\n</template>\n","import { computed, getCurrentInstance, inject, onBeforeUnmount, provide } from 'vue'\n\nimport { isNull, noop, toFalse } from '@vexip-ui/utils'\nimport { FIELD_OPTIONS } from './symbol'\n\nimport type { ComputedRef } from 'vue'\nimport type { ComponentSize, ComponentState } from '@vexip-ui/config'\n\n/**\n * 根据路径读取对象中的值 (实现 ?. 的逻辑)\n *\n * @param obj 需要被读取的对象\n * @param path 读取的路径\n * @param strict 是否开启严格模式 (非法路径报错)\n */\nexport function getValueByPath<T = unknown>(\n  obj: Record<string, any>,\n  path: string | string[],\n  strict = false\n): T | null {\n  if (!obj || !path) return null\n\n  if (typeof path === 'string') {\n    if (path in obj) return obj[path]\n\n    path = path.split('.')\n  }\n\n  if (Array.isArray(path) && path.length) {\n    const lastKey = path.pop()\n\n    if (!lastKey) return null\n\n    for (let i = 0, len = path.length; i < len; ++i) {\n      const key = String(path[i])\n\n      if (!key) break\n\n      obj = obj[key]\n\n      if (isNull(obj)) {\n        if (strict) {\n          throw new Error('[vexip-ui:Form] Get value by an invalid path')\n        }\n\n        return obj\n      }\n    }\n\n    if (strict && isNull(obj[lastKey])) {\n      throw new Error('[vexip-ui:Form] Get value by an invalid path')\n    }\n\n    return obj[lastKey]\n  }\n\n  return null\n}\n\n/**\n * 根据路径设置对象中的值\n *\n * @param obj 需要被设置的对象\n * @param path 设置的路径\n * @param value 需要设置的值\n * @param strict 是否开启严格模式 (非法路径报错)\n */\nexport function setValueByPath(\n  obj: Record<string, any>,\n  path: string | string[],\n  value: unknown,\n  strict = false\n): boolean {\n  if (!obj || !path) return false\n\n  if (typeof path === 'string') {\n    if (path in obj) {\n      obj[path] = value\n\n      return true\n    }\n\n    path = path.split('.')\n  }\n\n  if (Array.isArray(path) && path.length) {\n    const lastKey = path.pop()\n\n    if (!lastKey) return false\n\n    for (let i = 0, len = path.length; i < len; ++i) {\n      const key = String(path[i])\n\n      if (!key) {\n        return false\n      }\n\n      if (typeof obj[key] !== 'object') {\n        if (strict) {\n          throw new Error('[vexip-ui:Form] Set value by an invalid path')\n        }\n\n        obj[key] = {}\n      }\n\n      obj = obj[key]\n    }\n\n    if (strict && typeof obj !== 'object') {\n      throw new Error('[vexip-ui:Form] Set value by an invalid path')\n    }\n\n    obj[lastKey] = value\n\n    return true\n  }\n\n  return false\n}\n\nexport interface FormFieldStore<V = unknown> {\n  isField: boolean,\n  idFor: ComputedRef<string | undefined>,\n  labelId: ComputedRef<string | undefined>,\n  state: ComputedRef<ComponentState>,\n  disabled: ComputedRef<boolean>,\n  loading: ComputedRef<boolean>,\n  size: ComputedRef<ComponentSize>,\n  validateField: () => Promise<string[] | null>,\n  clearField: (defaultValue?: V) => void,\n  resetField: () => boolean,\n  getFieldValue: (defaultValue?: V) => V,\n  setFieldValue: (value: V, strict?: boolean) => void\n}\n\nconst defaultId = computed(() => undefined as string | undefined)\nconst defaultState = computed(() => 'default' as ComponentState)\nconst defaultFalse = computed(() => false)\nconst defaultSize = computed(() => 'default' as ComponentSize)\n\nfunction getEmptyActions<V>() {\n  return {\n    isField: false,\n    idFor: defaultId,\n    labelId: defaultId,\n    state: defaultState,\n    disabled: defaultFalse,\n    loading: defaultFalse,\n    size: defaultSize,\n    validateField: noop,\n    clearField: noop,\n    resetField: toFalse,\n    getFieldValue: v => v,\n    setFieldValue: noop\n  } as FormFieldStore<V>\n}\n\n/**\n * Create a field store, provide field states and control methods\n *\n * @param onFocus a focus method for focusing when label is clicked\n */\nexport function useFieldStore<V = unknown>(onFocus?: () => void): FormFieldStore<V> {\n  const instance = getCurrentInstance()\n\n  if (!instance) return getEmptyActions<V>()\n\n  const fieldOptions = inject(FIELD_OPTIONS, null)\n\n  if (!fieldOptions) {\n    return getEmptyActions<V>()\n  }\n\n  // Block the provided if there are dependencies between control components.\n  // e.g. AutoComplete -> Select, ColorPicker -> Input\n  provide(FIELD_OPTIONS, null!)\n  fieldOptions.sync(instance)\n  onFocus && fieldOptions.emitter.on('focus', onFocus)\n\n  onBeforeUnmount(() => {\n    fieldOptions.unSync(instance)\n    onFocus && fieldOptions.emitter.off('focus', onFocus)\n  })\n\n  function clearField(defaultValue?: V) {\n    if (!fieldOptions) return\n\n    fieldOptions.setValue(defaultValue)\n    fieldOptions.clearError()\n  }\n\n  return {\n    isField: true,\n    idFor: fieldOptions.idFor,\n    labelId: fieldOptions.labelId,\n    state: fieldOptions.state,\n    disabled: fieldOptions.disabled,\n    loading: fieldOptions.loading,\n    size: fieldOptions.size,\n    validateField: fieldOptions.validate,\n    clearField,\n    resetField: fieldOptions.reset,\n    getFieldValue: fieldOptions.getValue as (defaultValue?: V) => V,\n    setFieldValue: fieldOptions.setValue as (value: V, strict?: boolean) => void\n  }\n}\n","import { isColor, isDefined, isObject, isPromise, toDate, toNumber } from '@vexip-ui/utils'\n\n// export type Trigger = 'blur' | 'change'\n\nexport type Types =\n  | 'string'\n  | 'number'\n  | 'boolean'\n  | 'int'\n  | 'float'\n  | 'array'\n  | 'object'\n  | 'date'\n  | 'url'\n  | 'color'\n  | 'email'\ntype Range = [number, number]\ntype ValidatorResult = boolean | string | Error | Promise<boolean | string | Error>\n\nexport interface Rule<T = any> {\n  // trigger?: Trigger,\n  required?: boolean,\n  type?: Types,\n  length?: number,\n  range?: Range,\n  strict?: boolean,\n  enums?: T[],\n  message?: string,\n  validator?(value: T, model: Record<string, any>): ValidatorResult\n}\n\ntype TypeOptions = Pick<Rule, 'length' | 'range' | 'strict'>\n\nconst DEFAULT_MESSAGE = 'Validate failed'\n\nconst N_100_200 = '1\\\\d\\\\d|2([0-4]\\\\d|5[0-5])'\nconst IPV4_FIRST = `[1-9](\\\\d)?|${N_100_200}`\nconst IPV4_UNIT = `\\\\d{1,2}|${N_100_200}`\nconst IPV4_REG = `(?:${IPV4_FIRST})\\\\.(?:${IPV4_UNIT})\\\\.(?:${IPV4_UNIT})\\\\.(?:${IPV4_UNIT})`\n\nconst HOST_REG = '(?:[a-zA-Z0-9][\\\\w-]*\\\\.)?(?:[a-zA-Z0-9][\\\\w-]*)(?:\\\\.[a-zA-Z]+){1,2}'\nconst PARAM_REG =\n  '(?:(?:[\\\\/]+[^\\\\?\\\\.]+)+)?(?:[\\\\/]*)?(\\\\?([^&\\\\.]+=[^&\\\\.]*)(&[^&\\\\.]+=[^&\\\\.]*)*)?(#.*)?'\nconst URL_REG = new RegExp(\n  `^(?:[a-z]{2,5}:(\\\\/+)?)?\\\\/\\\\/((?:${IPV4_REG})|(?:${HOST_REG}))(?:${PARAM_REG})?$`\n)\n\nconst EMAIL_REG = /^(?:[a-zA-Z0-9][\\w-]*)@(?:[a-zA-Z0-9][\\w-]*)(?:\\.[a-zA-Z]+){1,2}$/\n\nconst TYPE_LIST = new Set([\n  'string',\n  'number',\n  'boolean',\n  'int',\n  'float',\n  'array',\n  'object',\n  'date',\n  'url',\n  'color',\n  'email'\n] as Types[])\n\nexport async function validate(\n  rules: Rule | Rule[],\n  value: unknown,\n  model: Record<string, unknown>,\n  validateAll = true,\n  defaultMsg = DEFAULT_MESSAGE\n) {\n  if (!Array.isArray(rules)) {\n    rules = [rules]\n  }\n\n  const errors: string[] = []\n\n  for (const rule of rules as Rule[]) {\n    const { message = defaultMsg, validator } = rule\n\n    if (typeof validator === 'function') {\n      let result\n\n      try {\n        result = validator(value, model)\n\n        if (isPromise(result)) {\n          result = await result\n        }\n      } catch (error) {\n        result = error instanceof Error ? error.message : error\n      }\n\n      if (result !== true) {\n        const errorMessage = typeof result === 'string' ? result : message\n\n        errors.push(errorMessage)\n\n        if (!validateAll) break\n      }\n    }\n\n    if (rule.required && !validateRequirement(value)) {\n      errors.push(message)\n\n      if (!validateAll) break\n    }\n\n    if (isDefined(value) && value !== '') {\n      if (rule.enums && !validateEnumeration(value, rule.enums)) {\n        errors.push(message)\n\n        if (!validateAll) break\n      }\n\n      if (rule.type && !validateType(value, rule.type, rule)) {\n        errors.push(message)\n\n        if (!validateAll) break\n      }\n    }\n  }\n\n  return errors\n}\n\nexport function validateRequirement(value: any) {\n  return !(\n    !isDefined(value) ||\n    value.toString().trim() === '' ||\n    (Array.isArray(value) && !value.length) ||\n    (isObject(value) && !Object.keys(value).length)\n  )\n}\n\nexport function validateEnumeration<T>(value: T | T[], options: T[]) {\n  if (!Array.isArray(options) || !options.length) return true\n\n  if (Array.isArray(value)) {\n    const enumSet = new Set(options)\n\n    for (const item of value) {\n      if (!enumSet.has(item)) {\n        return false\n      }\n    }\n\n    return true\n  } else {\n    return options.includes(value)\n  }\n}\n\nexport function validateType(value: unknown, type: Types, options: TypeOptions = {}) {\n  if (!TYPE_LIST.has(type)) return true\n\n  switch (type) {\n    case 'string':\n      return validateString(value, options.length, options.range)\n    case 'number':\n      return validateNumber(value, options.strict, options.length, options.range)\n    case 'boolean':\n      return validateBoolean(value, options.strict)\n    case 'int':\n      return validateInt(value, options.strict, options.length, options.range)\n    case 'float':\n      return validateFloat(value, options.strict, options.length, options.range)\n    case 'array':\n      return Array.isArray(value)\n    case 'object':\n      return isObject(value)\n    case 'date':\n      return validateDate(value, options.strict)\n    case 'url':\n      return validateUrl(value)\n    case 'color':\n      return typeof value === 'string' && isColor(value)\n    case 'email':\n      return validateEmail(value)\n  }\n}\n\nexport function validateString(value: unknown, length?: number, range?: Range) {\n  if (typeof value !== 'string') return false\n\n  if (isDefined(length) && value.length !== length) {\n    return false\n  }\n\n  if (Array.isArray(range)) {\n    const [min, max] = range\n\n    if (min && value.length < min) return false\n\n    if (max && value.length > max) return false\n  }\n\n  return true\n}\n\nexport function validateNumber(value: unknown, strict?: boolean, length?: number, range?: Range) {\n  if (strict) {\n    if (typeof value !== 'number') return false\n  } else {\n    value = Number(value)\n\n    if (Number.isNaN(value)) return false\n  }\n\n  const number = value as number\n\n  if (isDefined(length) && number.toString().length !== length) {\n    return false\n  }\n\n  if (Array.isArray(range)) {\n    const [min, max] = range\n\n    if (isDefined(min) && number < min) return false\n\n    if (isDefined(max) && number > max) return false\n  }\n\n  return true\n}\n\nexport function validateBoolean(value: unknown, strict?: boolean) {\n  if (!strict) {\n    if (typeof value === 'string') {\n      return value === 'true' || value === 'false'\n    }\n\n    if (typeof value === 'number') {\n      return value === 1 || value === 0\n    }\n  }\n\n  return typeof value === 'boolean'\n}\n\nexport function validateInt(value: unknown, strict?: boolean, length?: number, range?: Range) {\n  if (validateNumber(value, strict, length, range)) {\n    const number = toNumber(value as any)\n\n    return Math.ceil(number) === number\n  }\n\n  return false\n}\n\nexport function validateFloat(value: unknown, strict?: boolean, length?: number, range?: Range) {\n  if (validateNumber(value, strict, length, range)) {\n    const number = toNumber(value as any)\n\n    return strict ? Math.ceil(number) !== number : number.toString().includes('.')\n  }\n\n  return false\n}\n\nexport function validateDate(value: unknown, strict?: boolean) {\n  if (strict && !(value instanceof Date)) {\n    return false\n  }\n\n  try {\n    toDate(value as any)\n  } catch (e) {\n    return false\n  }\n\n  return true\n}\n\nexport function validateUrl(value: unknown) {\n  return typeof value === 'string' && URL_REG.test(value)\n}\n\nexport function validateEmail(value: unknown) {\n  return typeof value === 'string' && EMAIL_REG.test(value)\n}\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n  stateProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\nimport type { ChangeEvent, InputSlots, InputType } from './symbol'\n\nexport const inputProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('input'),\n  type: String as PropType<InputType>,\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  formatter: Function as PropType<(value: string | number) => string | number>,\n  value: [String, Number],\n  placeholder: String,\n  autofocus: booleanProp,\n  spellcheck: booleanProp,\n  autocomplete: booleanStringProp,\n  readonly: booleanProp,\n  disabled: booleanProp,\n  controlClass: classProp,\n  debounce: booleanProp,\n  delay: Number,\n  maxLength: Number,\n  before: String,\n  after: String,\n  /**\n   * 是否显示切换 password 为明文的按钮\n   */\n  plainPassword: booleanProp,\n  clearable: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  transparent: booleanProp,\n  sync: booleanProp,\n  controlAttrs: Object as PropType<Record<string, any>>,\n  name: String,\n  slots: Object as PropType<InputSlots>,\n  onFocus: eventProp<(event: FocusEvent) => void>(),\n  onBlur: eventProp<(event: FocusEvent) => void>(),\n  onInput: eventProp<EventListener<ChangeEvent>>(),\n  onChange: eventProp<EventListener<ChangeEvent>>(),\n  onEnter: eventProp(),\n  onClear: eventProp(),\n  onPrefixClick: eventProp<(event: MouseEvent) => void>(),\n  onSuffixClick: eventProp<(event: MouseEvent) => void>(),\n  onKeyDown: eventProp<(event: KeyboardEvent) => void>(),\n  onKeyPress: eventProp<(event: KeyboardEvent) => void>(),\n  onKeyUp: eventProp<(event: KeyboardEvent) => void>(),\n  onCompositionStart: eventProp<(event: CompositionEvent) => void>(),\n  onCompositionEnd: eventProp<(event: CompositionEvent) => void>()\n})\n\nexport type InputProps = ExtractPropTypes<typeof inputProps>\nexport type InputCProps = ConfigurableProps<InputProps>\n","import { Icon } from '@/components/icon'\nimport { useFieldStore } from '@/components/form'\nimport { Renderer } from '@/components/renderer'\n\nimport { Transition, computed, defineComponent, nextTick, ref, renderSlot, toRef, watch } from 'vue'\n\nimport { useHover } from '@vexip-ui/hooks'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { debounce, isNull, noop, throttle, toNumber } from '@vexip-ui/utils'\nimport { inputProps } from './props'\n\nimport type { ChangeEvent, InputType } from './symbol'\n\ntype InputEventType = 'input' | 'change'\n\nconst inputTypes = Object.freeze<InputType[]>(['text', 'password', 'date', 'datetime', 'time'])\n\nfunction toNotNullString(value: any) {\n  return isNull(value) ? '' : String(value)\n}\n\nexport default defineComponent({\n  name: 'Input',\n  props: inputProps,\n  emits: ['update:value'],\n  setup(_props, { slots, emit, expose }) {\n    const {\n      idFor,\n      labelId,\n      state,\n      disabled,\n      loading,\n      size,\n      validateField,\n      clearField,\n      getFieldValue,\n      setFieldValue\n    } = useFieldStore<string | number>(() => inputControl.value?.focus())\n\n    const props = useProps('input', _props, {\n      size: createSizeProp(size),\n      state: createStateProp(state),\n      locale: null,\n      type: {\n        default: 'text',\n        validator: value => inputTypes.includes(value)\n      },\n      prefix: createIconProp(),\n      prefixColor: '',\n      suffix: createIconProp(),\n      suffixColor: '',\n      formatter: {\n        default: null,\n        isFunc: true\n      },\n      value: {\n        default: () => getFieldValue(),\n        static: true\n      },\n      placeholder: null,\n      autofocus: false,\n      spellcheck: false,\n      autocomplete: false,\n      readonly: false,\n      disabled: () => disabled.value,\n      controlClass: null,\n      debounce: false,\n      delay: null,\n      maxLength: 0,\n      before: '',\n      after: '',\n      plainPassword: false,\n      clearable: false,\n      loading: () => loading.value,\n      loadingIcon: createIconProp(),\n      loadingLock: false,\n      loadingEffect: null,\n      transparent: false,\n      sync: false,\n      controlAttrs: null,\n      name: {\n        default: '',\n        static: true\n      },\n      slots: () => ({})\n    })\n\n    const initValue = toNotNullString(props.value)\n\n    const nh = useNameHelper('input')\n    const icons = useIcons()\n    const focused = ref(false)\n    const currentValue = ref(initValue)\n    const showPassword = ref(false)\n    const currentLength = ref(initValue.length)\n    const beforeHover = ref(false)\n    const afterHover = ref(false)\n    const composing = ref(false)\n\n    const inputControl = ref<HTMLInputElement>()\n\n    const { wrapper: control, isHover } = useHover()\n    const locale = useLocale('input', toRef(props, 'locale'))\n\n    let lastValue = props.value\n\n    const hasBefore = computed(() => {\n      return !!(\n        slots.before ||\n        slots.beforeAction ||\n        slots['before-action'] ||\n        props.before ||\n        props.slots.before ||\n        props.slots.beforeAction\n      )\n    })\n    const hasAfter = computed(() => {\n      return !!(\n        slots.after ||\n        slots.afterAction ||\n        slots['after-action'] ||\n        props.after ||\n        props.slots.after ||\n        props.slots.afterAction\n      )\n    })\n    const basisClass = computed(() => {\n      return {\n        [nh.bs('wrapper')]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.size)]: props.size !== 'default'\n      }\n    })\n    const readonly = computed(() => (props.loading && props.loadingLock) || props.readonly)\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bm(props.type),\n        !hasBefore.value && !hasAfter.value && basisClass.value,\n        {\n          [nh.bm('focused')]: focused.value,\n          [nh.bm('disabled')]: props.disabled,\n          [nh.bm('readonly')]: readonly.value,\n          [nh.bm('loading')]: props.loading,\n          [nh.bm(props.state)]: props.state !== 'default',\n          [nh.bm('before')]: slots.beforeAction || slots['before-action'] || props.slots.before,\n          [nh.bm('after')]: slots.afterAction || slots['after-action'] || props.slots.after,\n          [nh.bm('transparent')]: props.transparent,\n          [nh.bm('plain-password')]: props.plainPassword\n        }\n      ]\n    })\n    const wrapperClass = computed(() => {\n      return {\n        ...basisClass.value,\n        [nh.bm(`wrapper--${props.size}`)]: props.size !== 'default',\n        [nh.bs('wrapper--before-only')]: hasBefore.value && !hasAfter.value,\n        [nh.bs('wrapper--after-only')]: !hasBefore.value && hasAfter.value,\n        [nh.bm('transparent')]: props.transparent\n      }\n    })\n    const hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\n    const hasSuffix = computed(() => !!(slots.suffix || props.suffix || props.slots.suffix))\n    const inputType = computed(() => {\n      const type = props.type\n\n      if (type === 'password') {\n        return showPassword.value ? 'text' : 'password'\n      }\n\n      if (type === 'datetime') {\n        return 'datetime-local'\n      }\n\n      return type\n    })\n    const formattedValue = computed(() => {\n      return typeof props.formatter === 'function'\n        ? toNotNullString(props.formatter(currentValue.value))\n        : currentValue.value\n    })\n    const passwordIcon = computed(() =>\n      showPassword.value ? icons.value.plainText : icons.value.cipherText\n    )\n    const hasValue = computed(() => {\n      return !(isNull(currentValue.value) || currentValue.value === '')\n    })\n    const showClear = computed(() => {\n      return (\n        !props.disabled && !readonly.value && props.clearable && hasValue.value && isHover.value\n      )\n    })\n    const autoComplete = computed(() => {\n      return typeof props.autocomplete === 'boolean'\n        ? props.autocomplete\n          ? 'on'\n          : 'off'\n        : props.autocomplete\n    })\n\n    watch(\n      () => props.value,\n      value => {\n        currentValue.value = toNotNullString(value)\n        lastValue = currentValue.value\n        limitValueLength()\n      }\n    )\n    watch(\n      [formattedValue, inputControl],\n      () => {\n        if (inputControl.value) {\n          inputControl.value.value = formattedValue.value\n        }\n      },\n      { immediate: true, flush: 'post' }\n    )\n\n    // Expose api methods.\n    // Need to define some same name methods in 'methods' option to support infer types.\n    expose({\n      idFor,\n      labelId,\n      focused,\n      currentValue,\n      showPassword,\n      currentLength,\n      composing,\n      input: inputControl,\n      copyValue,\n      focus: (options?: FocusOptions) => {\n        inputControl.value?.focus(options)\n      },\n      blur: () => {\n        inputControl.value?.blur()\n      }\n    })\n\n    function handleFocus(event: FocusEvent) {\n      if (!focused.value) {\n        focused.value = true\n        emitEvent(props.onFocus, event)\n      }\n    }\n\n    function handleBlur(event: FocusEvent) {\n      if (focused.value) {\n        focused.value = false\n\n        setTimeout(() => {\n          if (!focused.value) {\n            emitEvent(props.onBlur, event)\n            emitChangeEvent('change')\n          }\n        }, 120)\n      }\n    }\n\n    function handleChange(event: Event) {\n      const type = event.type as InputEventType\n\n      if (composing.value) {\n        if (type === 'input') return\n\n        composing.value = false\n      }\n\n      currentValue.value = (event.target as HTMLInputElement).value\n      limitValueLength()\n\n      const value = currentValue.value\n\n      setValue(value, type)\n    }\n\n    function setValue(value: string, type: InputEventType, sync = props.sync) {\n      currentValue.value = value\n      emitChangeEvent(type, sync)\n    }\n\n    function emitChangeEvent(type: InputEventType, sync = props.sync) {\n      type = type === 'input' ? 'input' : 'change'\n\n      const value =\n        typeof props.value === 'number' ? parseFloat(currentValue.value) : currentValue.value\n\n      if (type === 'change') {\n        if (lastValue === value) return\n\n        lastValue = value\n\n        if (!sync) {\n          emit('update:value', value)\n          setFieldValue(value)\n        }\n\n        emitEvent(props.onChange as ChangeEvent, value)\n\n        if (!sync) {\n          validateField()\n        }\n      } else {\n        if (sync) {\n          emit('update:value', value)\n          setFieldValue(value)\n        }\n\n        emitEvent(props.onInput as ChangeEvent, value)\n\n        if (sync) {\n          validateField()\n        }\n      }\n    }\n\n    function limitValueLength() {\n      let value = currentValue.value\n\n      if (isNull(value)) {\n        currentLength.value = 0\n\n        return\n      }\n\n      const maxLength = props.maxLength\n\n      if (maxLength && value.length > maxLength) {\n        value = value.slice(0, maxLength)\n      }\n\n      currentLength.value = value.length\n      currentValue.value = value\n    }\n\n    function toggleShowPassword() {\n      if (props.disabled) {\n        return\n      }\n\n      showPassword.value = !showPassword.value\n      nextTick(() => {\n        inputControl.value?.focus()\n      })\n    }\n\n    function handleClear(event: MouseEvent) {\n      if (props.disabled || readonly.value) return\n\n      event.stopPropagation()\n      setValue('', 'change', false)\n      emitEvent(props.onClear)\n      nextTick(clearField)\n      currentLength.value = 0\n      inputControl.value?.focus()\n    }\n\n    function handleEnter() {\n      emitEvent(props.onEnter)\n    }\n\n    function handlePrefixClick(event: MouseEvent) {\n      emitEvent(props.onPrefixClick, event)\n    }\n\n    function handleSuffixClick(event: MouseEvent) {\n      emitEvent(props.onSuffixClick, event)\n    }\n\n    function handleKeyDown(event: KeyboardEvent) {\n      emitEvent(props.onKeyDown, event)\n    }\n\n    function handleKeyPress(event: KeyboardEvent) {\n      emitEvent(props.onKeyPress, event)\n    }\n\n    function handleKeyUp(event: KeyboardEvent) {\n      if (event.key === 'Enter') {\n        handleEnter()\n      }\n\n      emitEvent(props.onKeyUp, event)\n    }\n\n    function handleCompositionStart(event: CompositionEvent) {\n      composing.value = true\n      emitEvent(props.onCompositionStart, event)\n    }\n\n    function handleCompositionEnd(event: CompositionEvent) {\n      if (composing.value) {\n        composing.value = false\n\n        if (inputControl.value) {\n          inputControl.value.dispatchEvent(new Event('input'))\n        }\n      }\n\n      emitEvent(props.onCompositionStart, event)\n    }\n\n    function copyValue() {\n      const input = document.createElement('input')\n\n      input.style.height = '0'\n      input.setAttribute('readonly', 'readonly')\n      input.value = currentValue.value\n      document.body.appendChild(input)\n      input.select()\n\n      const isSuccess = document.execCommand('copy')\n\n      document.body.removeChild(input)\n\n      return isSuccess\n    }\n\n    function preventDefault(event: Event) {\n      event.preventDefault()\n    }\n\n    const delay = toNumber(props.delay)\n    const handleInput = props.debounce\n      ? debounce(handleChange, delay || 100)\n      : throttle(handleChange, delay || 16)\n\n    function renderPrefix() {\n      return (\n        <div\n          class={[nh.be('icon'), nh.be('prefix')]}\n          style={{ color: props.prefixColor }}\n          onClick={handlePrefixClick}\n        >\n          {renderSlot(slots, 'prefix', undefined, () => [\n            <Renderer renderer={props.slots.prefix}>\n              <Icon icon={props.prefix}></Icon>\n            </Renderer>\n          ])}\n        </div>\n      )\n    }\n\n    function renderCustomSuffix() {\n      if (hasSuffix.value) {\n        return (\n          <div\n            key={'suffix'}\n            class={[nh.be('icon'), nh.be('suffix')]}\n            style={{\n              color: props.suffixColor,\n              opacity: showClear.value || props.loading ? '0%' : ''\n            }}\n            onClick={handleSuffixClick}\n          >\n            {renderSlot(slots, 'suffix', undefined, () => [\n              <Renderer renderer={props.slots.suffix}>\n                <Icon icon={props.suffix}></Icon>\n              </Renderer>\n            ])}\n          </div>\n        )\n      }\n\n      if (props.clearable || props.loading) {\n        return (\n          <div key={'placeholder'} class={[nh.be('icon'), nh.bem('icon', 'placeholder')]}></div>\n        )\n      }\n\n      return null\n    }\n\n    function renderSuffixAction() {\n      if (showClear.value) {\n        return (\n          <button\n            key={'clear'}\n            class={[nh.be('icon'), nh.be('clear')]}\n            type={'button'}\n            tabindex={-1}\n            aria-label={locale.value.ariaLabel.clear}\n            onClick={handleClear}\n          >\n            <Icon {...icons.value.clear} label={'clear'}></Icon>\n          </button>\n        )\n      }\n\n      if (props.loading) {\n        return (\n          <div key={'loading'} class={[nh.be('icon'), nh.be('loading')]}>\n            <Icon\n              {...icons.value.loading}\n              effect={props.loadingEffect || icons.value.loading.effect}\n              icon={props.loadingIcon || icons.value.loading.icon}\n              label={'loading'}\n            ></Icon>\n          </div>\n        )\n      }\n\n      return null\n    }\n\n    function renderSuffix() {\n      return (\n        <div class={nh.be('suffix-wrapper')}>\n          {renderCustomSuffix()}\n          <Transition name={nh.ns('fade')} appear>\n            {renderSuffixAction()}\n          </Transition>\n        </div>\n      )\n    }\n\n    function renderCount() {\n      return (\n        <div class={nh.be('count')}>\n          {renderSlot(slots, 'count', { value: currentValue.value }, () => [\n            <Renderer renderer={props.slots.count} data={{ value: currentValue.value }}>\n              {props.maxLength === Infinity\n                ? currentLength.value\n                : `${currentLength.value}/${props.maxLength}`}\n            </Renderer>\n          ])}\n        </div>\n      )\n    }\n\n    function renderPlainPassword() {\n      if (props.type === 'password' && props.plainPassword) {\n        return (\n          <div\n            key={'password'}\n            class={[nh.be('icon'), nh.be('password')]}\n            style={{\n              color: props.suffixColor\n            }}\n            onClick={toggleShowPassword}\n          >\n            {renderSlot(slots, 'password', { plain: showPassword.value }, () => [\n              <Renderer renderer={props.slots.password} data={{ plain: showPassword.value }}>\n                <Icon {...passwordIcon.value}></Icon>\n              </Renderer>\n            ])}\n          </div>\n        )\n      }\n\n      return null\n    }\n\n    function renderControl() {\n      return (\n        <div\n          id={idFor.value}\n          ref={control}\n          class={className.value}\n          onClick={() => inputControl.value?.focus()}\n        >\n          {hasPrefix.value && renderPrefix()}\n          <input\n            {...props.controlAttrs}\n            ref={inputControl}\n            class={[nh.be('control'), props.controlAttrs?.class, props.controlClass]}\n            type={inputType.value}\n            autofocus={props.autofocus}\n            autocomplete={autoComplete.value}\n            spellcheck={props.spellcheck}\n            disabled={props.disabled}\n            readonly={readonly.value || undefined}\n            placeholder={props.placeholder ?? locale.value.placeholder}\n            maxlength={props.maxLength > 0 ? props.maxLength : undefined}\n            name={props.name || props.controlAttrs?.name}\n            aria-labelledby={labelId.value}\n            onBlur={handleBlur}\n            onFocus={handleFocus}\n            onInput={handleInput}\n            onChange={handleChange}\n            onKeypress={handleKeyPress}\n            onKeydown={handleKeyDown}\n            onKeyup={handleKeyUp}\n            onSubmit={preventDefault}\n            onCompositionstart={handleCompositionStart}\n            onCompositionend={handleCompositionEnd}\n          />\n          {renderSuffix()}\n          {props.maxLength > 0 ? renderCount() : null}\n          {renderPlainPassword()}\n        </div>\n      )\n    }\n\n    function renderAside(type: 'before' | 'after') {\n      const buttonSlot =\n        slots[`${type}Action`] || slots[`${type}-action`] || props.slots[`${type}Action`]\n\n      if (buttonSlot) {\n        return (\n          <div\n            class={[nh.be(type), nh.bem(type, 'action')]}\n            onMouseenter={() => ((type === 'before' ? beforeHover : afterHover).value = true)}\n            onMouseleave={() => ((type === 'before' ? beforeHover : afterHover).value = false)}\n          >\n            {buttonSlot()}\n          </div>\n        )\n      }\n\n      return (\n        <div class={nh.be(type)}>\n          {slots[type] ? (\n            slots[type]!()\n          ) : (\n            <Renderer renderer={props.slots[type]}>{props[type]}</Renderer>\n          )}\n        </div>\n      )\n    }\n\n    return () => {\n      if (hasBefore.value || hasAfter.value) {\n        return (\n          <div class={wrapperClass.value}>\n            {hasBefore.value && renderAside('before')}\n            {renderControl()}\n            {hasAfter.value && renderAside('after')}\n          </div>\n        )\n      }\n\n      return renderControl()\n    }\n  },\n  methods: {\n    focus: noop as (options?: FocusOptions) => void,\n    blur: noop as () => void\n  }\n})\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ScrollbarPlacement } from './symbol'\n\nexport const scrollbarProps = buildProps({\n  placement: String as PropType<ScrollbarPlacement>,\n  scroll: Number,\n  barLength: Number,\n  width: Number,\n  appear: booleanProp,\n  fade: Number,\n  barColor: String,\n  trackColor: String,\n  disabled: booleanProp,\n  wrapper: [String, Object] as PropType<string | HTMLElement>,\n  duration: Number,\n  useTrack: booleanProp,\n  trackSpeed: Number,\n  onScrollStart: eventProp<(percent: number) => void>(),\n  onScroll: eventProp<(percent: number) => void>(),\n  onScrollEnd: eventProp<(percent: number) => void>()\n})\n\nexport type ScrollbarProps = ExtractPropTypes<typeof scrollbarProps>\nexport type ScrollbarCProps = ConfigurableProps<ScrollbarProps, 'scroll'>\n","export type ScrollbarPlacement = 'top' | 'right' | 'bottom' | 'left'\n\nexport const enum ScrollbarType {\n  HORIZONTAL,\n  VERTICAL\n}\n\nexport const scrollbarPlacements = Object.freeze<ScrollbarPlacement[]>([\n  'top',\n  'right',\n  'bottom',\n  'left'\n])\n","import { ref } from 'vue'\n\nimport { USE_TOUCH, noop } from '@vexip-ui/utils'\nimport { ScrollbarType } from './symbol'\n\nimport type { Ref } from 'vue'\n\nexport function useTrack({\n  currentScroll = ref(0),\n  trackSpeed = ref(2),\n  track = ref(null),\n  bar = ref(null),\n  tracking = ref(false),\n  type = ref(ScrollbarType.VERTICAL),\n  barLength = ref(35),\n  disabled = ref(false),\n  onDown = noop,\n  onMove = noop,\n  onUp = noop,\n  onScroll = noop\n}: {\n  currentScroll: Ref<number>,\n  type: Ref<ScrollbarType>,\n  trackSpeed?: Ref<number>,\n  track?: Ref<HTMLElement | null | undefined>,\n  bar?: Ref<HTMLElement | null | undefined>,\n  tracking?: Ref<boolean>,\n  barLength?: Ref<number>,\n  disabled?: Ref<boolean>,\n  onDown?: (scroll: number) => void,\n  onMove?: (scroll: number) => void,\n  onUp?: (scroll: number) => void,\n  onScroll?: (scroll: number) => void\n}) {\n  let length: number\n  let startAt: number\n  let cursorAt: number\n  let targetScroll: number\n  let forward = true\n  let processing = false\n\n  function animateMoveBar() {\n    if (!tracking.value) return\n\n    processing = true\n\n    const speedRate = computeSpeedRate(targetScroll, currentScroll.value)\n    let changed = false\n\n    if (forward) {\n      if (currentScroll.value < targetScroll) {\n        currentScroll.value += speedRate * trackSpeed.value\n        changed = true\n      }\n    } else if (currentScroll.value > targetScroll) {\n      currentScroll.value -= speedRate * trackSpeed.value\n      changed = true\n    }\n\n    if (changed) {\n      verifyScroll()\n      onScroll(currentScroll.value)\n    }\n\n    if (\n      tracking.value && forward\n        ? currentScroll.value < targetScroll\n        : currentScroll.value > targetScroll\n    ) {\n      requestAnimationFrame(animateMoveBar)\n    } else {\n      processing = false\n    }\n  }\n\n  function handleMouseDown(event: PointerEvent) {\n    if (disabled.value || event.button > 0) {\n      return false\n    }\n\n    event.stopPropagation()\n    event.preventDefault()\n\n    if (!track.value || !bar.value) return false\n\n    document.addEventListener('pointermove', handleMouseMove)\n    document.addEventListener('pointerup', handleMouseUp)\n\n    const rect = track.value.getBoundingClientRect()\n    const barRect = bar.value.getBoundingClientRect()\n\n    let position: number\n\n    if (type.value === ScrollbarType.VERTICAL) {\n      length = rect.height\n      startAt = barRect.top - rect.top\n      cursorAt = barRect.top\n      position = startAt + event.clientY - cursorAt\n    } else {\n      length = rect.width\n      startAt = barRect.left - rect.left\n      cursorAt = barRect.left\n      position = startAt + event.clientX - cursorAt\n    }\n\n    targetScroll = Math.max(\n      0,\n      Math.min((position / length / (100 - barLength.value / 2)) * 1e4, 100)\n    )\n    forward = targetScroll >= currentScroll.value\n\n    tracking.value = true\n\n    onDown(currentScroll.value)\n    animateMoveBar()\n  }\n\n  function handleMouseMove(event: PointerEvent) {\n    event.stopPropagation()\n\n    if (!USE_TOUCH) {\n      event.preventDefault()\n    }\n\n    onMove(currentScroll.value)\n\n    let position: number\n\n    if (type.value === ScrollbarType.VERTICAL) {\n      position = startAt + event.clientY - cursorAt\n    } else {\n      position = startAt + event.clientX - cursorAt\n    }\n\n    targetScroll = Math.max(\n      0,\n      Math.min((position / length / (100 - barLength.value / 2)) * 1e4, 100)\n    )\n\n    !processing && animateMoveBar()\n  }\n\n  function handleMouseUp(event: PointerEvent) {\n    event.preventDefault()\n\n    document.removeEventListener('pointermove', handleMouseMove)\n    document.removeEventListener('pointerup', handleMouseUp)\n\n    tracking.value = false\n\n    onUp(currentScroll.value)\n  }\n\n  function verifyScroll() {\n    currentScroll.value = Math.max(0, Math.min(currentScroll.value, 100))\n  }\n\n  return {\n    currentScroll,\n    trackSpeed,\n    track,\n    bar,\n    tracking,\n    type,\n    barLength,\n    disabled,\n\n    handleMouseDown\n  }\n}\n\nfunction computeSpeedRate(start: number, end: number) {\n  const span = Math.abs(start - end)\n\n  for (let i = 0; i < 5; ++i) {\n    if (span < (i + 1) * 20) {\n      return 1 + 0.25 * i\n    }\n  }\n\n  return 2\n}\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  getCurrentInstance,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  toRef,\n  watch,\n  watchEffect\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useManualRef, useRtl, useSetTimeout } from '@vexip-ui/hooks'\nimport { USE_TOUCH, boundRange, isDefined, throttle } from '@vexip-ui/utils'\nimport { scrollbarProps } from './props'\nimport { useTrack } from './hooks'\nimport { ScrollbarType, scrollbarPlacements } from './symbol'\n\ndefineOptions({ name: 'Scrollbar' })\n\nconst _props = defineProps(scrollbarProps)\nconst props = useProps('scrollbar', _props, {\n  placement: {\n    default: 'right',\n    validator: value => scrollbarPlacements.includes(value)\n  },\n  scroll: {\n    default: 0,\n    validator: value => value >= 0 && value <= 100,\n    static: true\n  },\n  barLength: {\n    default: 35,\n    validator: value => value > 0 && value < 100\n  },\n  width: null,\n  appear: false,\n  fade: 1500,\n  barColor: null,\n  trackColor: null,\n  disabled: false,\n  wrapper: null,\n  duration: null,\n  useTrack: false,\n  trackSpeed: {\n    default: 2,\n    validator: value => value > 0 && value < 10\n  }\n})\n\nconst nh = useNameHelper('scrollbar')\nconst active = ref(false)\nconst scrolling = ref(false)\n\nconst { manualRef, triggerUpdate } = useManualRef()\n\nconst { isRtl } = useRtl()\n\nconst currentScroll = manualRef(props.scroll)\n\nconst container = ref<HTMLElement>()\nconst bar = ref<HTMLElement>()\nconst track = ref<HTMLElement>()\n\nconst { timer } = useSetTimeout()\n\nconst type = computed(() => {\n  return props.placement === 'right' || props.placement === 'left'\n    ? ScrollbarType.VERTICAL\n    : ScrollbarType.HORIZONTAL\n})\n\nconst { tracking, handleMouseDown: handleTrackMouseDown } = useTrack({\n  currentScroll,\n  track,\n  bar,\n  type,\n  trackSpeed: toRef(props, 'trackSpeed'),\n  barLength: toRef(props, 'barLength'),\n  disabled: toRef(props, 'disabled'),\n  onDown: scroll => {\n    clearTimeout(timer.fade)\n    emitEvent(props.onScrollStart, scroll)\n  },\n  // onMove: () => clearTimeout(timer.fade),\n  onUp: scroll => {\n    setScrollbarFade()\n    triggerUpdate()\n    emitEvent(props.onScrollEnd, scroll)\n  },\n  onScroll: scroll => {\n    triggerUpdate()\n    emitEvent(props.onScroll, scroll)\n  }\n})\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(props.placement),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('fade')]: props.fade,\n      [nh.bm('scrolling')]: scrolling.value,\n      [nh.bm('tracking')]: tracking.value,\n      [nh.bm('active')]: active.value,\n      [nh.bm('disabled')]: props.disabled\n    }\n  ]\n})\nconst style = computed<Record<string, string>>(() => {\n  return {\n    [nh.cv('bar-bg-color')]: props.barColor,\n    [nh.cv('track-bg-color')]: props.trackColor,\n    [nh.cv('width')]: props.width ? `${props.width}px` : null!\n  }\n})\n\nwatch(\n  () => props.scroll,\n  value => {\n    currentScroll.value = value\n    triggerUpdate()\n  }\n)\nwatchEffect(() => {\n  if (!bar.value) return\n\n  const position = `${((100 - props.barLength) * currentScroll.value) / props.barLength}%`\n  const length = `${props.barLength}%`\n\n  if (type.value === ScrollbarType.VERTICAL) {\n    bar.value.style.height = length\n    bar.value.style.transform = `translate3d(0, ${position}, 0)`\n  } else {\n    bar.value.style.width = length\n    bar.value.style.transform = `translate3d(${isRtl.value ? '-' : ''}${position}, 0, 0)`\n  }\n})\nwatchEffect(() => {\n  if (!bar.value) return\n\n  bar.value.style.transitionDuration =\n    isDefined(props.duration) && props.duration >= 0 ? `${props.duration}ms` : ''\n})\n\nif (props.appear) {\n  watch(currentScroll, () => {\n    clearTimeout(timer.fade)\n    active.value = true\n\n    if (!scrolling.value && !tracking.value) {\n      setScrollbarFade()\n    }\n  })\n}\n\nconst handleWrapperMouseMove = throttle(() => {\n  clearTimeout(timer.fade)\n\n  if (props.disabled) {\n    active.value = false\n  } else {\n    active.value = true\n\n    if (!scrolling.value && !tracking.value) {\n      setScrollbarFade()\n    }\n  }\n})\n\nlet wrapperElement: HTMLElement | null\n\nonMounted(() => {\n  let instance = getCurrentInstance()\n\n  nextTick(() => {\n    if (typeof props.wrapper === 'string') {\n      wrapperElement = document.querySelector(props.wrapper)\n    } else {\n      wrapperElement = props.wrapper\n    }\n\n    if (!wrapperElement) {\n      if (instance?.parent) {\n        wrapperElement = instance.parent.proxy?.$el\n\n        if (!wrapperElement) {\n          wrapperElement = container.value?.parentElement ?? null\n        }\n      } else {\n        wrapperElement = container.value?.parentElement ?? null\n      }\n    }\n\n    if (wrapperElement && props.fade >= 300) {\n      wrapperElement.addEventListener('mousemove', handleWrapperMouseMove)\n    }\n\n    instance = null\n\n    if (!props.appear) {\n      watch(currentScroll, () => {\n        clearInterval(timer.fade)\n        active.value = true\n        setScrollbarFade()\n      })\n    }\n  })\n})\n\nonBeforeUnmount(() => {\n  if (wrapperElement) {\n    wrapperElement.removeEventListener('mousemove', handleWrapperMouseMove)\n  }\n\n  wrapperElement = null\n  clearTimeout(timer.fade)\n})\n\ndefineExpose({\n  currentScroll,\n  container,\n  bar,\n  track,\n  handleScroll\n})\n\nlet length: number\nlet startAt: number\nlet cursorAt: number\n\nfunction handleMouseDown(event: PointerEvent) {\n  if (event.button !== 0 || props.disabled) {\n    return false\n  }\n\n  event.stopPropagation()\n  event.preventDefault()\n\n  if (!track.value || !bar.value) return false\n\n  document.addEventListener('pointermove', handleMouseMove)\n  document.addEventListener('pointerup', handleMouseUp)\n\n  const rect = track.value.getBoundingClientRect()\n  const barRect = bar.value.getBoundingClientRect()\n\n  if (type.value === ScrollbarType.VERTICAL) {\n    length = rect.height\n    startAt = barRect.top - rect.top\n    cursorAt = event.clientY\n  } else {\n    length = rect.width\n    startAt = isRtl.value ? barRect.right - rect.right : barRect.left - rect.left\n    cursorAt = event.clientX\n  }\n\n  clearTimeout(timer.fade)\n\n  scrolling.value = true\n  emitEvent(props.onScrollStart, currentScroll.value)\n}\n\nfunction handleMouseMove(event: PointerEvent) {\n  event.stopPropagation()\n\n  if (!USE_TOUCH) {\n    event.preventDefault()\n  }\n\n  let position: number\n\n  if (type.value === ScrollbarType.VERTICAL) {\n    position = startAt + event.clientY - cursorAt\n  } else {\n    position = isRtl.value\n      ? -(startAt + event.clientX - cursorAt)\n      : startAt + event.clientX - cursorAt\n  }\n\n  // position / length * 100 === (100 - barLength) * currentScroll / 100\n  currentScroll.value = (position / length / (100 - props.barLength)) * 1e4\n\n  verifyScroll()\n  triggerUpdate()\n  emitEvent(props.onScroll, currentScroll.value)\n}\n\nfunction handleMouseUp(event: PointerEvent) {\n  event.preventDefault()\n\n  document.removeEventListener('pointermove', handleMouseMove)\n  document.removeEventListener('pointerup', handleMouseUp)\n\n  setScrollbarFade()\n\n  scrolling.value = false\n  emitEvent(props.onScrollEnd, currentScroll.value)\n}\n\nfunction verifyScroll() {\n  currentScroll.value = Math.max(0, Math.min(currentScroll.value, 100))\n}\n\nfunction setScrollbarFade() {\n  if (props.fade >= 300) {\n    timer.fade = setTimeout(() => {\n      active.value = false\n    }, props.fade)\n  }\n}\n\nfunction handleScroll(scroll: number) {\n  if (Math.abs(currentScroll.value - scroll) < 0.0001) return\n\n  currentScroll.value = boundRange(scroll, 0, 100)\n  triggerUpdate()\n}\n\nfunction disableEvent<E extends Event>(event: E) {\n  if (event.cancelable) {\n    event.stopPropagation()\n    event.preventDefault()\n  }\n}\n</script>\n\n<template>\n  <div\n    ref=\"container\"\n    :class=\"className\"\n    role=\"scrollbar\"\n    :style=\"style\"\n  >\n    <div\n      ref=\"track\"\n      :class=\"[nh.be('track'), props.useTrack ? null : nh.bem('track', 'disabled')]\"\n      @touchstart=\"disableEvent\"\n      @pointerdown=\"handleTrackMouseDown\"\n    ></div>\n    <div\n      ref=\"bar\"\n      :class=\"nh.be('bar')\"\n      @touchstart=\"disableEvent\"\n      @pointerdown=\"handleMouseDown\"\n    ></div>\n  </div>\n</template>\n","import { booleanNumberProp, booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const resizeObserverProps = buildProps({\n  throttle: booleanNumberProp,\n  disabled: booleanProp,\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>()\n})\n\nexport type ResizeObserverProps = ExtractPropTypes<typeof resizeObserverProps>\nexport type ResizeObserverCProps = ConfigurableProps<ResizeObserverProps>\n","import {\n  defineComponent,\n  getCurrentInstance,\n  onBeforeUnmount,\n  onMounted,\n  renderSlot,\n  watch\n} from 'vue'\n\nimport { emitEvent, useProps } from '@vexip-ui/config'\nimport { useResize } from '@vexip-ui/hooks'\nimport { throttle } from '@vexip-ui/utils'\nimport { resizeObserverProps } from './props'\n\nexport default defineComponent({\n  name: 'ResizeObserver',\n  props: resizeObserverProps,\n  setup(_props, { slots }) {\n    const props = useProps('resizeObserver', _props, {\n      throttle: {\n        default: false,\n        validator: value => typeof value === 'boolean' || value > 0\n      },\n      disabled: false\n    })\n\n    const { observeResize, unobserveResize } = useResize()\n\n    let observed = false\n\n    function handleResize(entry: ResizeObserverEntry) {\n      emitEvent(props.onResize, entry)\n    }\n\n    const throttleResize = props.throttle\n      ? throttle(handleResize, typeof props.throttle === 'boolean' ? 16 : props.throttle)\n      : handleResize\n\n    const instance = getCurrentInstance()\n\n    onMounted(() => {\n      watch(\n        () => props.disabled,\n        value => {\n          value ? unobserve() : observe()\n        },\n        { immediate: true, flush: 'post' }\n      )\n    })\n\n    onBeforeUnmount(() => {\n      if (observed) {\n        const el = getCurrentInstance()?.proxy?.$el as Element | null\n\n        if (el?.nextElementSibling) {\n          unobserveResize(el.nextElementSibling)\n        }\n      }\n    })\n\n    function observe() {\n      if (observed) return\n\n      const el = instance?.proxy?.$el as Element | null\n\n      if (el?.nextElementSibling) {\n        if (el.nextElementSibling !== el.nextSibling && el.nodeType === 3 && el.nodeValue !== '') {\n          return\n        }\n\n        observeResize(el.nextElementSibling, throttleResize)\n        observed = true\n      }\n    }\n\n    function unobserve() {\n      if (observed) {\n        const el = instance?.proxy?.$el as Element | null\n\n        if (el?.nextElementSibling) {\n          unobserveResize(el.nextElementSibling)\n        }\n\n        observed = false\n      }\n    }\n\n    return () => renderSlot(slots, 'default')\n  }\n})\n","import {\n  booleanNumberProp,\n  booleanProp,\n  buildProps,\n  classProp,\n  eventProp,\n  styleProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { BarScrollPayload } from '@/components/scroll'\nimport type { NativeScrollMode, NativeScrollPayload } from './symbol'\n\nexport const nativeScrollProps = buildProps({\n  scrollClass: classProp,\n  scrollStyle: styleProp,\n  scrollAttrs: Object as PropType<Record<string, any>>,\n  mode: String as PropType<NativeScrollMode>,\n  width: [Number, String],\n  height: [Number, String],\n  disabled: booleanProp,\n  pointer: booleanProp,\n  scrollX: Number,\n  scrollY: Number,\n  useXBar: booleanProp,\n  useYBar: booleanProp,\n  barFade: Number,\n  barClass: classProp,\n  autoplay: booleanNumberProp,\n  playWaiting: Number,\n  appear: booleanProp,\n  barDuration: Number,\n  useBarTrack: booleanProp,\n  scrollTag: String,\n  observeDeep: booleanProp,\n  scrollOnly: booleanProp,\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>(),\n  onXEnabledChange: eventProp<(enabled: boolean) => void>(),\n  onYEnabledChange: eventProp<(enabled: boolean) => void>(),\n  onWheel: eventProp<(event: WheelEvent, type: 'vertical' | 'horizontal') => void>(),\n  onScrollStart: eventProp<(payload: Omit<NativeScrollPayload, 'type'>) => void>(),\n  onScroll: eventProp<(payload: NativeScrollPayload) => void>(),\n  onScrollEnd: eventProp<(payload: Omit<NativeScrollPayload, 'type'>) => void>(),\n  onBarScrollStart: eventProp<(payload: BarScrollPayload) => void>(),\n  onBarScroll: eventProp<(payload: BarScrollPayload) => void>(),\n  onBarScrollEnd: eventProp<(payload: BarScrollPayload) => void>()\n})\n\nexport type NativeScrollProps = ExtractPropTypes<typeof nativeScrollProps>\nexport type NativeScrollCProps = ConfigurableProps<\n  NativeScrollProps,\n  'scrollX' | 'scrollY',\n  'onBeforeScroll'\n>\n","interface ScrollElement {\n  scrollTo(x: number, y: number): void,\n  [prop: string]: any\n}\n\nexport function animateScrollTo(options: {\n  el: ScrollElement,\n  xFrom?: number,\n  xTo?: number,\n  yFrom?: number,\n  yTo?: number,\n  duration?: number,\n  callback?: null | (() => any)\n}): void {\n  const { el, xFrom = 0, xTo = 0, yFrom = 0, yTo = 0, duration = 500, callback = null } = options\n\n  if (!el) return\n\n  const end = () => {\n    typeof callback === 'function' && callback()\n  }\n\n  if (duration <= 0) {\n    el.scrollTo(xTo, yTo)\n    end()\n    return\n  }\n\n  const xDistance = xTo - xFrom\n  const yDistance = yTo - yFrom\n\n  if (!xDistance && !yDistance) {\n    end()\n    return\n  }\n\n  const xStep = Math.ceil((xDistance / duration) * 16)\n  const yStep = Math.ceil((yDistance / duration) * 16)\n\n  let currentX = xFrom\n  let currentY = yFrom\n\n  const scroll = () => {\n    currentX += xStep\n    currentY += yStep\n\n    if (xDistance && (xTo - currentX) / xDistance <= 0) {\n      currentX = xTo\n    }\n\n    if (yDistance && (yTo - currentY) / yDistance <= 0) {\n      currentY = yTo\n    }\n\n    el.scrollTo(currentX, currentY)\n\n    if ((!xDistance || currentX === xTo) && (!yDistance || currentY === yTo)) {\n      end()\n    } else {\n      requestAnimationFrame(scroll)\n    }\n  }\n\n  scroll()\n}\n","import { computed, onMounted, reactive, ref, watch } from 'vue'\n\nimport { isHiddenElement, useManualRef, useMounted, useRtl } from '@vexip-ui/hooks'\nimport { boundRange, debounce, debounceMinor, isElement, multipleFixed } from '@vexip-ui/utils'\nimport { animateScrollTo } from './helper'\n\nimport type { Ref } from 'vue'\nimport type { NativeScrollMode } from './symbol'\n\nexport function useScrollWrapper({\n  mode,\n  disabled,\n  appear,\n  scrollX,\n  scrollY,\n  onResize,\n  onBeforeRefresh,\n  onAfterRefresh\n}: {\n  mode: Ref<NativeScrollMode>,\n  disabled: Ref<boolean>,\n  appear: Ref<boolean>,\n  // width: Ref<number | string>,\n  // height: Ref<number | string>,\n  scrollX: Ref<number>,\n  scrollY: Ref<number>,\n  onResize?: (entity: ResizeObserverEntry) => void,\n  onBeforeRefresh?: () => void,\n  onAfterRefresh?: () => void\n}) {\n  const { manualRef, triggerUpdate } = useManualRef()\n\n  const { isRtl } = useRtl()\n  const syncing = ref(false)\n\n  const contentEl = ref<HTMLElement>()\n\n  const content = reactive({\n    el: contentEl,\n    scrollWidth: 0,\n    offsetWidth: 0,\n    scrollHeight: 0,\n    offsetHeight: 0\n  })\n\n  // 当前滚动位置\n  const x = manualRef(0)\n  const y = manualRef(0)\n\n  const percentX = manualRef(0)\n  const percentY = manualRef(0)\n\n  const xScrollLimit = computed(() => {\n    return content.el ? content.scrollWidth - content.offsetWidth : 0\n  })\n  const yScrollLimit = computed(() => {\n    return content.el ? content.scrollHeight - content.offsetHeight : 0\n  })\n  const enableXScroll = computed(() => {\n    return (\n      !disabled.value &&\n      mode.value !== 'vertical' &&\n      !!content.el &&\n      content.scrollWidth > content.offsetWidth\n    )\n  })\n  const enableYScroll = computed(() => {\n    return (\n      !disabled.value &&\n      mode.value !== 'horizontal' &&\n      !!content.el &&\n      content.scrollHeight > content.offsetHeight\n    )\n  })\n  const xBarLength = computed(() => {\n    if (content.el) {\n      return boundRange((content.offsetWidth / (content.scrollWidth || 1)) * 100, 5, 99)\n    }\n\n    return 35\n  })\n  const yBarLength = computed(() => {\n    if (content.el) {\n      return boundRange((content.offsetHeight / (content.scrollHeight || 1)) * 100, 5, 99)\n    }\n\n    return 35\n  })\n\n  watch(contentEl, () => {\n    computeContentSize()\n  })\n  watch(scrollX, value => {\n    setScrollX(value)\n  })\n  watch(scrollY, value => {\n    setScrollY(value)\n  })\n\n  function setScrollX(value: number) {\n    x.value = boundRange(value, 0, xScrollLimit.value)\n    syncScroll()\n  }\n\n  function setScrollY(value: number) {\n    y.value = boundRange(value, 0, yScrollLimit.value)\n    syncScroll()\n  }\n\n  function syncScroll() {\n    syncing.value = true\n\n    if (content.el) {\n      content.el.scrollTo({\n        top: y.value,\n        left: isRtl.value ? -x.value : x.value,\n        behavior: 'instant'\n      })\n    }\n\n    setTimeout(() => {\n      syncing.value = false\n    }, 0)\n  }\n\n  const { isMounted } = useMounted()\n\n  function computeContentSize() {\n    if (!content.el || isHiddenElement(content.el)) return\n\n    content.scrollWidth = content.el.scrollWidth\n    content.offsetWidth = content.el.offsetWidth\n    content.scrollHeight = content.el.scrollHeight\n    content.offsetHeight = content.el.offsetHeight\n\n    if (mode.value !== 'vertical') {\n      setScrollX(!isMounted.value && appear.value ? scrollX.value : x.value || 0)\n    }\n\n    if (mode.value !== 'horizontal') {\n      setScrollY(!isMounted.value && appear.value ? scrollY.value : y.value || 0)\n    }\n\n    computePercent()\n    triggerUpdate()\n  }\n\n  function computePercent() {\n    if (content.el) {\n      percentX.value = isRtl.value\n        ? -multipleFixed(x.value / (xScrollLimit.value || 1), 100, 2)\n        : multipleFixed(x.value / (xScrollLimit.value || 1), 100, 2)\n      percentY.value = multipleFixed(y.value / (yScrollLimit.value || 1), 100, 2)\n    }\n  }\n\n  function handleResize(entity: ResizeObserverEntry) {\n    refresh()\n    onResize?.(entity)\n  }\n\n  onMounted(() => {\n    refresh()\n\n    if (appear.value) {\n      scrollTo(scrollX.value, scrollY.value)\n    }\n  })\n\n  const refresh = debounceMinor(() => {\n    return new Promise<void>(resolve => {\n      if (typeof onBeforeRefresh === 'function') {\n        onBeforeRefresh()\n      }\n\n      computeContentSize()\n      setTimeout(() => {\n        if (typeof onAfterRefresh === 'function') {\n          onAfterRefresh()\n        }\n\n        resolve()\n      }, 0)\n    })\n  })\n\n  function scrollTo(clientX: number, clientY: number, duration = 500) {\n    return new Promise<void>(resolve => {\n      if (!content.el) return\n\n      if (!enableXScroll.value || Math.abs(x.value - clientX) < 0.01) {\n        clientX = x.value\n      }\n\n      if (!enableYScroll.value || Math.abs(y.value - clientY) < 0.01) {\n        clientY = y.value\n      }\n\n      animateScrollTo({\n        duration,\n        el: content.el,\n        xFrom: x.value,\n        xTo: boundRange(clientX, 0, xScrollLimit.value),\n        yFrom: y.value,\n        yTo: boundRange(clientY, 0, yScrollLimit.value),\n        callback: resolve\n      })\n    })\n  }\n\n  function scrollBy(deltaX: number, deltaY: number, duration = 500) {\n    return scrollTo(x.value + deltaX, y.value + deltaY, duration)\n  }\n\n  function scrollToElement(el: string | Element, duration?: number, offset = 0) {\n    if (!content.el) return Promise.resolve()\n\n    if (typeof el === 'string') {\n      el = content.el.querySelector(el)!\n    }\n\n    if (!isElement(el)) return Promise.resolve()\n\n    const wrapperRect = content.el.getBoundingClientRect()\n    const elRect = el.getBoundingClientRect()\n\n    let clientX = 0\n    let clientY = 0\n\n    if (mode.value !== 'vertical') {\n      clientX = elRect.left - wrapperRect.left + offset\n    }\n\n    if (mode.value !== 'horizontal') {\n      clientY = elRect.top - wrapperRect.top + offset\n    }\n\n    return scrollTo(clientX, clientY, duration)\n  }\n\n  return {\n    contentEl,\n\n    syncing,\n    content,\n    x,\n    y,\n    percentX,\n    percentY,\n    xScrollLimit,\n    yScrollLimit,\n    enableXScroll,\n    enableYScroll,\n    xBarLength,\n    yBarLength,\n\n    handleResize: debounce(handleResize),\n    setScrollX,\n    setScrollY,\n    computePercent,\n    refresh,\n    scrollTo,\n    scrollBy,\n    scrollToElement,\n    triggerUpdate\n  }\n}\n","import { Scrollbar } from '@/components/scrollbar'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport {\n  computed,\n  defineComponent,\n  nextTick,\n  onBeforeUnmount,\n  ref,\n  renderSlot,\n  shallowReadonly,\n  toRef,\n  watch\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { createSlotRender, flatVNodes, useRtl } from '@vexip-ui/hooks'\nimport { USE_TOUCH, createEventEmitter, isClient, isElement, isTrue } from '@vexip-ui/utils'\nimport { nativeScrollProps } from './props'\nimport { useScrollWrapper } from './hooks'\n\nimport type { EventHandler } from '@vexip-ui/utils'\nimport type { NativeScrollMode } from './symbol'\n\nconst scrollModes = Object.freeze<NativeScrollMode[]>(['horizontal', 'vertical', 'both'])\n\nconst MOVE_EVENT = 'mousemove'\nconst UP_EVENT = 'mouseup'\n\nexport default defineComponent({\n  name: 'NativeScroll',\n  inheritAttrs: false,\n  props: nativeScrollProps,\n  emits: [],\n  setup(_props, { attrs, slots, expose }) {\n    const props = useProps('nativeScroll', _props, {\n      scrollClass: null,\n      scrollStyle: null,\n      scrollAttrs: null,\n      mode: {\n        default: 'vertical',\n        validator: value => scrollModes.includes(value)\n      },\n      width: '',\n      height: '',\n      disabled: false,\n      pointer: false,\n      scrollX: {\n        default: 0,\n        static: true\n      },\n      scrollY: {\n        default: 0,\n        static: true\n      },\n      useXBar: false,\n      useYBar: false,\n      barFade: 1500,\n      barClass: null,\n      autoplay: false,\n      playWaiting: 500,\n      appear: false,\n      barDuration: null,\n      useBarTrack: false,\n      scrollTag: 'div',\n      observeDeep: false,\n      scrollOnly: false\n    })\n\n    const emitter = createEventEmitter()\n\n    const nh = useNameHelper('native-scroll')\n    const { isRtl } = useRtl()\n    const usingBar = ref(false)\n    const scrolling = ref(false)\n\n    const wrapper = ref<HTMLElement>()\n    const xBar = ref<InstanceType<typeof Scrollbar>>()\n    const yBar = ref<InstanceType<typeof Scrollbar>>()\n\n    let initialized = false\n\n    const {\n      contentEl,\n\n      syncing,\n      content,\n      x,\n      y,\n      percentX,\n      percentY,\n      xScrollLimit,\n      yScrollLimit,\n      enableXScroll,\n      enableYScroll,\n      xBarLength,\n      yBarLength,\n\n      handleResize,\n      setScrollX,\n      setScrollY,\n      computePercent,\n      refresh,\n      scrollTo,\n      scrollBy,\n      scrollToElement,\n      triggerUpdate\n    } = useScrollWrapper({\n      mode: toRef(props, 'mode'),\n      disabled: toRef(props, 'disabled'),\n      appear: toRef(props, 'appear'),\n      // width: toRef(props, 'width'),\n      // height: toRef(props, 'height'),\n      scrollX: toRef(props, 'scrollX'),\n      scrollY: toRef(props, 'scrollY'),\n      onResize: entry => {\n        emitEvent(props.onResize, entry)\n      },\n      // onBeforeRefresh: stopAutoplay,\n      onAfterRefresh: () => {\n        syncBarScroll()\n\n        if (!initialized) {\n          initialized = true\n          startAutoplay()\n        }\n      }\n    })\n\n    const slotParams = shallowReadonly({\n      getState,\n      refresh,\n      scrollTo,\n      scrollBy,\n      scrollToElement,\n      ensureInView\n    })\n\n    /* autoplay */\n    const canPlay = ref(false)\n\n    const canAutoplay = computed(() => {\n      return (\n        props.mode !== 'both' &&\n        (isTrue(props.autoplay) || +props.autoplay > 1000) &&\n        ((props.mode === 'horizontal' && enableXScroll.value) ||\n          (props.mode === 'vertical' && enableYScroll.value))\n      )\n    })\n\n    watch([() => props.autoplay, () => props.playWaiting, contentEl], () => {\n      stopAutoplay()\n      nextTick(startAutoplay)\n    })\n\n    let playTimer: ReturnType<typeof setTimeout>\n    let startTimer: ReturnType<typeof setTimeout>\n    let endTimer: ReturnType<typeof setTimeout>\n\n    onBeforeUnmount(stopAutoplay)\n\n    function startAutoplay() {\n      stopAutoplay()\n\n      if (!canAutoplay.value || !contentEl.value) return\n\n      const mode = props.mode\n      const distance = mode === 'horizontal' ? 'offsetWidth' : 'offsetHeight'\n      const limit = mode === 'horizontal' ? xScrollLimit : yScrollLimit\n      const prop = mode === 'horizontal' ? x : y\n      const waiting = props.playWaiting < 20 ? 20 : props.playWaiting\n      const setScroll = mode === 'horizontal' ? setScrollX : setScrollY\n\n      let playSpeed = 0.5\n\n      if (typeof props.autoplay === 'number') {\n        playSpeed = (contentEl.value[distance] / props.autoplay) * 16\n      }\n\n      const scroll = () => {\n        setScroll(prop.value + playSpeed)\n\n        if (prop.value >= limit.value) {\n          setScroll(limit.value)\n          canPlay.value = false\n\n          computePercent()\n          triggerUpdate()\n          syncBarScroll()\n\n          endTimer = setTimeout(() => {\n            scrollTo(0, 0, 500)\n\n            startTimer = setTimeout(() => {\n              canPlay.value = true\n              scroll()\n            }, 500 + waiting)\n          }, waiting)\n        } else {\n          computePercent()\n          triggerUpdate()\n          syncBarScroll()\n\n          if (canPlay.value) {\n            requestAnimationFrame(scroll)\n          }\n        }\n      }\n\n      playTimer = setTimeout(() => {\n        canPlay.value = true\n        scroll()\n      }, waiting)\n    }\n\n    function stopAutoplay() {\n      canPlay.value = false\n\n      clearTimeout(playTimer)\n      clearTimeout(startTimer)\n      clearTimeout(endTimer)\n    }\n    /* autoplay */\n\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bm(props.mode),\n        {\n          [nh.bm('inherit')]: props.inherit,\n          [nh.bm('scrolling')]: scrolling.value,\n          [nh.bm('using-bar')]: usingBar.value\n        }\n      ]\n    })\n    const style = computed(() => {\n      const { width, height } = props\n\n      return {\n        width: width\n          ? typeof width === 'string'\n            ? Number.isNaN(Number(width))\n              ? width\n              : `${Number(width)}px`\n            : `${width}px`\n          : undefined,\n        height: height\n          ? typeof height === 'string'\n            ? Number.isNaN(Number(height))\n              ? height\n              : `${Number(height)}px`\n            : `${height}px`\n          : undefined\n      }\n    })\n    const wrapperClass = computed(() => {\n      return [props.scrollAttrs?.class, props.scrollClass, nh.be('wrapper')]\n    })\n    const barFade = computed(() => (canAutoplay.value ? 0 : props.barFade))\n\n    const willMutate = ref(false)\n\n    function handleMutate() {\n      willMutate.value = true\n      nextTick(refresh)\n      requestAnimationFrame(() => {\n        willMutate.value = false\n      })\n    }\n\n    let observer: MutationObserver | undefined\n\n    function createMutation() {\n      if (!isClient || !contentEl.value) return\n\n      observer = new MutationObserver(handleMutate)\n      observer.observe(contentEl.value, {\n        childList: true\n      })\n    }\n\n    function clearMutation() {\n      observer?.disconnect()\n      observer = undefined\n    }\n\n    watch(\n      contentEl,\n      () => {\n        clearMutation()\n        createMutation()\n      },\n      { immediate: true }\n    )\n    watch(enableXScroll, value => {\n      emitEvent(props.onXEnabledChange, value)\n    })\n    watch(enableYScroll, value => {\n      emitEvent(props.onYEnabledChange, value)\n    })\n\n    expose({\n      x,\n      y,\n      percentX,\n      percentY,\n      xScrollLimit,\n      yScrollLimit,\n\n      xBarLength,\n      yBarLength,\n      enableXScroll,\n      enableYScroll,\n\n      wrapper,\n      content: contentEl,\n      xBar,\n      yBar,\n\n      refresh,\n      scrollTo,\n      scrollBy,\n      scrollToElement,\n      ensureInView,\n      getXScrollLimit,\n      getYScrollLimit,\n      addScrollListener,\n      removeScrollListener\n    })\n\n    function getCommonPayload() {\n      return {\n        clientX: (isRtl.value ? -1 : 1) * x.value,\n        clientY: y.value,\n        percentX: percentX.value,\n        percentY: percentY.value\n      }\n    }\n\n    function syncBarScroll() {\n      xBar.value?.handleScroll(percentX.value)\n      yBar.value?.handleScroll(percentY.value)\n    }\n\n    function handleMouseDown(event: MouseEvent) {\n      if (!props.pointer || event.button !== 0 || USE_TOUCH) {\n        return false\n      }\n\n      handlePointerDown(event)\n    }\n\n    // 记录滚动开始位置\n    let xScrollStartAt = 0\n    let yScrollStartAt = 0\n\n    // 记录滚动开始鼠标位置\n    let cursorXPosition = 0\n    let cursorYPosition = 0\n\n    function handlePointerDown(event: MouseEvent) {\n      if (!enableXScroll.value && !enableYScroll.value) {\n        return false\n      }\n\n      prepareScroll()\n\n      xScrollStartAt = x.value\n      yScrollStartAt = y.value\n      cursorXPosition = event.clientX\n      cursorYPosition = event.clientY\n\n      document.addEventListener(MOVE_EVENT, handlePointerMove)\n      document.addEventListener(UP_EVENT, handlePointerUp)\n\n      emitEvent(props.onScrollStart, getCommonPayload())\n    }\n\n    function handlePointerMove(event: MouseEvent) {\n      event.stopPropagation()\n      event.preventDefault()\n\n      scrolling.value = true\n\n      if (enableXScroll.value) {\n        setScrollX(xScrollStartAt - (event.clientX - cursorXPosition))\n      }\n\n      if (enableYScroll.value) {\n        setScrollY(yScrollStartAt - (event.clientY - cursorYPosition))\n      }\n\n      computePercent()\n      triggerUpdate()\n      syncBarScroll()\n      emitScrollEvent(props.mode)\n    }\n\n    function handlePointerUp() {\n      document.removeEventListener(MOVE_EVENT, handlePointerMove)\n      document.removeEventListener(UP_EVENT, handlePointerUp)\n\n      emitEvent(props.onScrollEnd, getCommonPayload())\n      startAutoplay()\n    }\n\n    function handleWheel(event: WheelEvent, type: 'vertical' | 'horizontal') {\n      const isVerticalScroll = enableYScroll.value && type === 'vertical'\n      const isHorizontalScroll = enableXScroll.value && type === 'horizontal'\n      const sign = event.deltaY > 0 ? 1 : -1\n\n      emitEvent(props.onWheel, event, type)\n\n      if (isVerticalScroll || isHorizontalScroll) {\n        const maxLimit = isVerticalScroll ? yScrollLimit.value : xScrollLimit.value\n        const scroll = isVerticalScroll ? y.value : x.value\n\n        if (sign > 0 ? scroll < maxLimit : scroll > 0) {\n          event.stopPropagation()\n\n          return false\n        }\n      }\n    }\n\n    function handleScroll(event: UIEvent) {\n      if (!contentEl.value || syncing.value) return\n\n      event.stopPropagation()\n\n      const type = contentEl.value?.scrollLeft !== x.value ? 'horizontal' : 'vertical'\n\n      y.value = contentEl.value.scrollTop\n      x.value = contentEl.value.scrollLeft\n\n      computePercent()\n      triggerUpdate()\n      syncBarScroll()\n      emitScrollEvent(type)\n    }\n\n    function prepareScroll() {\n      stopAutoplay()\n    }\n\n    function handleBarScrollStart(type: 'vertical' | 'horizontal') {\n      usingBar.value = true\n      prepareScroll()\n      emitEvent(props.onBarScrollStart, {\n        ...getCommonPayload(),\n        type\n      })\n    }\n\n    function handleBarScrollEnd(type: 'vertical' | 'horizontal') {\n      usingBar.value = false\n      startAutoplay()\n      emitEvent(props.onBarScrollEnd, {\n        ...getCommonPayload(),\n        type\n      })\n    }\n\n    function handleXBarScroll(percent: number) {\n      percentX.value = percent\n      setScrollX((percent * xScrollLimit.value) / 100)\n      triggerUpdate()\n      emitEvent(props.onBarScroll, {\n        ...getCommonPayload(),\n        type: 'horizontal'\n      })\n      emitScrollEvent('horizontal')\n    }\n\n    function handleYBarScroll(percent: number) {\n      percentY.value = percent\n      setScrollY((percent * yScrollLimit.value) / 100)\n      triggerUpdate()\n      emitEvent(props.onBarScroll, {\n        ...getCommonPayload(),\n        type: 'vertical'\n      })\n      emitScrollEvent('vertical')\n    }\n\n    function emitScrollEvent(type: NativeScrollMode) {\n      emitEvent(props.onScroll, {\n        ...getCommonPayload(),\n        type\n      })\n      emitter.emit('scroll', {\n        ...getCommonPayload(),\n        type\n      })\n    }\n\n    function getState() {\n      const { clientX: scrollX, clientY: scrollY, percentX, percentY } = getCommonPayload()\n\n      return {\n        scrollX,\n        scrollY,\n        percentX,\n        percentY,\n        enableXScroll: enableXScroll.value,\n        enableYScroll: enableYScroll.value\n      }\n    }\n\n    function getXScrollLimit() {\n      return [0, xScrollLimit.value]\n    }\n\n    function getYScrollLimit() {\n      return [0, yScrollLimit.value]\n    }\n\n    function ensureInView(el: string | Element, duration?: number, offset = 0) {\n      if (!wrapper.value) return Promise.resolve()\n\n      if (typeof el === 'string') {\n        el = wrapper.value.querySelector(el)!\n      }\n\n      if (!isElement(el)) return Promise.resolve()\n\n      const wrapperRect = wrapper.value.getBoundingClientRect()\n      const elRect = el.getBoundingClientRect()\n\n      let clientX = 0\n      let clientY = 0\n\n      if (props.mode !== 'vertical') {\n        if (elRect.left < wrapperRect.left + offset) {\n          clientX = elRect.left - wrapperRect.left - offset\n        } else if (elRect.right > wrapperRect.right - offset) {\n          clientX = elRect.right - wrapperRect.right + offset\n        }\n      }\n\n      if (props.mode !== 'horizontal') {\n        if (elRect.top < wrapperRect.top + offset) {\n          clientY = elRect.top - wrapperRect.top - offset\n        } else if (elRect.bottom > wrapperRect.bottom - offset) {\n          clientY = elRect.bottom - wrapperRect.bottom + offset\n        }\n      }\n\n      return scrollBy(clientX, clientY, duration)\n    }\n\n    function addScrollListener(listener: EventHandler) {\n      emitter.on('scroll', listener)\n    }\n\n    function removeScrollListener(listener: EventHandler) {\n      emitter.off('scroll', listener)\n    }\n\n    function renderContent() {\n      const Content = (props.scrollTag || 'div') as any\n      const children =\n        props.observeDeep && slots.default ? renderSlot(slots, 'default', slotParams).children : []\n\n      return (\n        <Content\n          {...props.scrollAttrs}\n          {...(props.scrollOnly ? attrs : {})}\n          ref={contentEl}\n          class={wrapperClass.value}\n          style={[props.scrollAttrs?.style, props.scrollStyle, props.scrollOnly && style.value]}\n          onMousedown={handleMouseDown}\n          onWheelPassive={(event: WheelEvent) =>\n            handleWheel(event, event.shiftKey ? 'horizontal' : 'vertical')}\n          onScroll={handleScroll}\n        >\n          {slots.extra && (\n            <div\n              class={nh.be('extra')}\n              style={{\n                width: willMutate.value ? undefined : `${content.scrollWidth}px`,\n                height: willMutate.value ? undefined : `${content.scrollHeight}px`\n              }}\n            >\n              <div\n                class={nh.be('extra-inner')}\n                style={{\n                  width: `${content.offsetWidth}px`,\n                  height: `${content.offsetHeight}px`\n                }}\n              >\n                {renderSlot(slots, 'extra', slotParams)}\n              </div>\n            </div>\n          )}\n          {slots.default &&\n            (props.observeDeep\n              ? flatVNodes(children).map((vnode, index) => {\n                return (\n                  <ResizeObserver key={vnode.key ?? index} on-resize={handleResize}>\n                    {() => vnode}\n                  </ResizeObserver>\n                )\n              })\n              : renderSlot(slots, 'default', slotParams))}\n        </Content>\n      )\n    }\n\n    return () => {\n      if (props.scrollOnly) {\n        return <ResizeObserver on-resize={handleResize}>{renderContent()}</ResizeObserver>\n      }\n\n      return (\n        <div\n          {...attrs}\n          ref={wrapper}\n          class={[className.value, attrs.class]}\n          style={[style.value, attrs.style as any]}\n        >\n          {createSlotRender(slots, ['prefix-trap', 'prefixTrap'])?.()}\n          <ResizeObserver on-resize={handleResize}>{renderContent()}</ResizeObserver>\n          {props.useXBar && (\n            <Scrollbar\n              ref={xBar}\n              inherit\n              placement={'bottom'}\n              class={[nh.bem('bar', 'horizontal'), props.barClass]}\n              fade={barFade.value}\n              bar-length={xBarLength.value}\n              disabled={!enableXScroll.value}\n              appear={props.appear}\n              duration={props.barDuration}\n              use-track={props.useBarTrack}\n              onScrollStart={() => handleBarScrollStart('horizontal')}\n              onScroll={handleXBarScroll}\n              onScrollEnd={() => handleBarScrollEnd('horizontal')}\n            ></Scrollbar>\n          )}\n          {props.useYBar && (\n            <Scrollbar\n              ref={yBar}\n              inherit\n              placement={'right'}\n              class={[nh.bem('bar', 'vertical'), props.barClass]}\n              fade={barFade.value}\n              bar-length={yBarLength.value}\n              disabled={!enableYScroll.value}\n              appear={props.appear}\n              duration={props.barDuration}\n              use-track={props.useBarTrack}\n              onScrollStart={() => handleBarScrollStart('vertical')}\n              onScroll={handleYBarScroll}\n              onScrollEnd={() => handleBarScrollEnd('vertical')}\n            ></Scrollbar>\n          )}\n          {createSlotRender(slots, ['suffix-trap', 'suffixTrap'])?.()}\n        </div>\n      )\n    }\n  }\n})\n","import { eventProp, valueProp, wrapProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes } from 'vue'\n\nexport const optionProps = wrapProps({\n  value: valueProp,\n  label: {\n    type: String,\n    default: ''\n  },\n  disabled: {\n    type: Boolean,\n    default: false\n  },\n  divided: {\n    type: Boolean,\n    default: false\n  },\n  title: {\n    type: String,\n    default: ''\n  },\n  hitting: {\n    type: Boolean,\n    default: false\n  },\n  noHover: {\n    type: Boolean,\n    default: false\n  },\n  selected: {\n    type: Boolean,\n    default: false\n  },\n  onSelect: eventProp()\n})\n\nexport type OptionProps = ExtractPropTypes<typeof optionProps>\n\nexport const optionGroupProps = wrapProps({\n  label: {\n    type: String,\n    default: ''\n  },\n  divided: {\n    type: Boolean,\n    default: false\n  }\n})\n\nexport type OptionGroupProps = ExtractPropTypes<typeof optionGroupProps>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport { emitEvent, useNameHelper } from '@vexip-ui/config'\nimport { toAttrValue } from '@vexip-ui/utils'\nimport { optionProps } from './props'\n\ndefineOptions({ name: 'Option' })\n\nconst props = defineProps(optionProps)\n\nconst nh = useNameHelper('option')\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('disabled')]: props.disabled,\n    [nh.bm('selected')]: !props.disabled && props.selected,\n    [nh.bm('divided')]: props.divided,\n    [nh.bm('hitting')]: props.hitting,\n    [nh.bm('no-hover')]: props.noHover\n  }\n})\n\nfunction handleSelect() {\n  if (props.disabled) return\n\n  emitEvent(props.onSelect!)\n}\n</script>\n\n<template>\n  <li\n    ref=\"wrapper\"\n    :class=\"className\"\n    :title=\"title || undefined\"\n    role=\"option\"\n    :aria-disabled=\"toAttrValue(disabled)\"\n    :aria-selected=\"selected\"\n    @click=\"handleSelect\"\n  >\n    <slot>{{ label || value }}</slot>\n  </li>\n</template>\n","import { booleanProp, booleanStringProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const overflowProps = buildProps({\n  items: Array as PropType<any[]>,\n  tag: String,\n  attrFlag: booleanStringProp,\n  static: booleanProp,\n  maxCount: Number,\n  onRestChange: eventProp<(rest: number) => void>(),\n  onToggle: eventProp<(overflow: boolean) => void>()\n})\n\nexport type OverflowProps = ExtractPropTypes<typeof overflowProps>\nexport type OverflowCProps = ConfigurableProps<OverflowProps, 'items'>\n","import { ResizeObserver } from '@/components/resize-observer'\n\nimport {\n  Fragment,\n  computed,\n  createTextVNode,\n  defineComponent,\n  nextTick,\n  onMounted,\n  ref,\n  watch\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { isDefined } from '@vexip-ui/utils'\nimport { overflowProps } from './props'\n\nconst TEXT_VNODE = createTextVNode('').type\n\nexport default defineComponent({\n  name: 'Overflow',\n  inheritAttrs: false,\n  props: overflowProps,\n  emits: [],\n  setup(_props, { attrs, slots, expose }) {\n    const props = useProps('overflow', _props, {\n      items: {\n        default: null,\n        static: true\n      },\n      tag: 'div',\n      attrFlag: false,\n      static: false,\n      maxCount: 0\n    })\n\n    const nh = useNameHelper('overflow')\n    const restCount = ref(0)\n\n    const wrapper = ref<HTMLElement>()\n    const counter = ref<HTMLElement>()\n    const suffix = ref<HTMLElement>()\n\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        {\n          [nh.bm('inherit')]: props.inherit,\n          [nh.bm('manual')]: props.maxCount > 0\n        }\n      ]\n    })\n    const hiddenFlag = computed(() => {\n      return props.attrFlag ? (props.attrFlag === true ? 'hidden' : props.attrFlag) : false\n    })\n\n    watch([() => props.items?.length, () => props.maxCount], () => {\n      nextTick(refresh)\n    })\n\n    expose({ refresh })\n\n    onMounted(refresh)\n\n    function toggleDisplay(el: HTMLElement, show: boolean) {\n      if (hiddenFlag.value) {\n        show ? el.removeAttribute(hiddenFlag.value) : el.setAttribute(hiddenFlag.value, '')\n      } else {\n        if (show) {\n          el.style.display = ''\n        } else {\n          el.style.display = 'none'\n        }\n      }\n    }\n\n    function computeHorizontalMargin(el: HTMLElement) {\n      const style = getComputedStyle(el)\n      const marginLeft = parseFloat(style.marginLeft) || 0\n      const marginRight = parseFloat(style.marginRight) || 0\n\n      return marginLeft + marginRight\n    }\n\n    function computeHorizontalPadding(elOrStyle: HTMLElement | CSSStyleDeclaration) {\n      const style = elOrStyle instanceof Element ? getComputedStyle(elOrStyle) : elOrStyle\n      const paddingLeft = parseFloat(style.paddingLeft) || 0\n      const paddingRight = parseFloat(style.paddingRight) || 0\n\n      return paddingLeft + paddingRight\n    }\n\n    function computeOuterWidth(el: HTMLElement) {\n      return el.offsetWidth + computeHorizontalMargin(el)\n    }\n\n    let lastOverflow = false\n    let lastRestCount = restCount.value\n\n    function refresh() {\n      const counterEl = counter.value\n\n      if (!wrapper.value || !counterEl) return\n\n      toggleDisplay(counterEl, true)\n\n      const children = wrapper.value.children\n      const childCount = children.length\n\n      let overflow = false\n\n      if (props.maxCount > 0) {\n        for (let i = 0, len = childCount - 1; i < len; ++i) {\n          const child = children[i] as HTMLElement\n\n          child.style.display = i < props.maxCount ? '' : 'none'\n        }\n\n        if (props.maxCount > childCount - 1) {\n          toggleDisplay(counterEl, false)\n\n          restCount.value = 0\n        } else {\n          restCount.value = childCount - 1 - props.maxCount - (slots.suffix ? 1 : 0)\n          overflow = restCount.value > 0\n        }\n\n        postRefresh(overflow)\n        return\n      }\n\n      const suffixEl = suffix.value\n      const style = getComputedStyle(wrapper.value)\n      const wrapperWidth = wrapper.value.offsetWidth - computeHorizontalPadding(style)\n      const gap = parseFloat(style.columnGap) || 0\n      const childWidths: number[] = []\n\n      let totalWidth = suffixEl ? suffixEl.offsetWidth + computeHorizontalMargin(suffixEl) + gap : 0\n\n      const counterMargin = computeHorizontalMargin(counterEl)\n      const length = childCount - (suffixEl ? 2 : 1)\n\n      for (let i = 0; i < length; ++i) {\n        if (i < 0) continue\n\n        const child = children[i] as HTMLElement\n\n        if (overflow) {\n          toggleDisplay(child, false)\n          continue\n        } else {\n          toggleDisplay(child, true)\n        }\n\n        const childWidth = computeOuterWidth(child) + gap\n\n        totalWidth += childWidth\n        childWidths[i] = childWidth\n\n        if (totalWidth > wrapperWidth) {\n          for (let j = i; j >= 0; --j) {\n            restCount.value = length - j\n            totalWidth -= childWidths[j]\n\n            if (totalWidth + counterEl.offsetWidth + counterMargin <= wrapperWidth || !j) {\n              overflow = true\n              i = j - 1\n\n              if (suffixEl) {\n                suffixEl.style.maxWidth =\n                  i === -1 ? `${wrapperWidth - counterEl.offsetWidth}px` : ''\n              }\n\n              break\n            }\n          }\n        }\n      }\n\n      postRefresh(overflow)\n    }\n\n    function postRefresh(overflow: boolean) {\n      if (lastRestCount !== restCount.value) {\n        lastRestCount = restCount.value\n        emitEvent(props.onRestChange, restCount.value)\n      }\n\n      counter.value && toggleDisplay(counter.value, overflow)\n\n      if (overflow !== lastOverflow) {\n        lastOverflow = overflow\n        emitEvent(props.onToggle, overflow)\n      }\n    }\n\n    function syncCounterRef(el?: HTMLElement | null) {\n      if (el) {\n        counter.value = el.nextElementSibling as HTMLElement | undefined\n      } else {\n        counter.value = undefined\n      }\n    }\n\n    return () => {\n      const CustomTag = (props.tag || 'div') as any\n      const itemSlot = slots.default\n      const staticItem = props.static\n      const counterVNode = slots.counter?.({ count: restCount.value })[0] || null\n\n      const renderCounter = () =>\n        counterVNode?.type === TEXT_VNODE ? <span>{counterVNode}</span> : counterVNode\n      const render = () => (\n        <CustomTag {...attrs} ref={wrapper} class={className.value}>\n          {itemSlot && isDefined(props.items)\n            ? props.items.map((item, index) => {\n              const vnode = itemSlot({ item, index })[0]\n\n              if (staticItem) {\n                vnode.key = index\n\n                return vnode\n              }\n\n              return (\n                <ResizeObserver key={index} onResize={refresh}>\n                  {() => vnode}\n                </ResizeObserver>\n              )\n            })\n            : itemSlot?.()}\n          {counterVNode ? (\n            <Fragment ref={syncCounterRef as any}>{renderCounter()}</Fragment>\n          ) : (\n            <span ref={counter} style={{ display: 'inline-block' }}></span>\n          )}\n          {slots.suffix ? (\n            <ResizeObserver onResize={refresh}>\n              <div ref={suffix} class={nh.be('suffix')}>\n                {slots.suffix()}\n              </div>\n            </ResizeObserver>\n          ) : null}\n        </CustomTag>\n      )\n\n      if (import.meta.env.MODE === 'test') {\n        // It is difficult to test ResizeObserver in vitest, so directly rendering all items\n        return render()\n      }\n\n      return <ResizeObserver onResize={refresh}>{render()}</ResizeObserver>\n    }\n  }\n})\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const popperProps = buildProps({\n  visible: booleanProp,\n  alive: booleanProp,\n  to: String,\n  transition: String,\n  appear: booleanProp,\n  role: String,\n  onBeforeEnter: eventProp<(el: Element) => void>(),\n  onEnter: eventProp<(el: Element) => void>(),\n  onAfterEnter: eventProp<(el: Element) => void>(),\n  onEnterCancelled: eventProp<(el: Element) => void>(),\n  onBeforeLeave: eventProp<(el: Element) => void>(),\n  onLeave: eventProp<(el: Element) => void>(),\n  onAfterLeave: eventProp<(el: Element) => void>(),\n  onLeaveCancelled: eventProp<(el: Element) => void>()\n})\n\nexport type PopperProps = ExtractPropTypes<typeof popperProps>\nexport type PopperCProps = ConfigurableProps<PopperProps>\n","<template>\n  <Portal :to=\"props.to\">\n    <Transition\n      :name=\"props.transition\"\n      :appear=\"props.appear\"\n      @before-enter=\"emitHookEvent('be', $event)\"\n      @enter=\"emitHookEvent('e', $event)\"\n      @after-enter=\"emitHookEvent('ae', $event)\"\n      @enter-cancelled=\"emitHookEvent('ec', $event)\"\n      @before-leave=\"emitHookEvent('bl', $event)\"\n      @leave=\"emitHookEvent('l', $event)\"\n      @after-leave=\"emitHookEvent('al', $event)\"\n      @leave-cancelled=\"emitHookEvent('lc', $event)\"\n    >\n      <div\n        v-if=\"props.alive || props.visible\"\n        v-show=\"!props.alive || props.visible\"\n        ref=\"wrapper\"\n        v-bind=\"$attrs\"\n        :class=\"[nh.b(), props.to !== 'body' && nh.bm('inherit')]\"\n        :role=\"props.role\"\n        :style=\"{ zIndex: props.to && props.visible ? zIndex : undefined }\"\n      >\n        <slot></slot>\n      </div>\n    </Transition>\n  </Portal>\n</template>\n\n<script lang=\"ts\">\nimport { Portal } from '@/components/portal'\n\nimport { defineComponent, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\nimport { popperProps } from './props'\n\nexport default defineComponent({\n  name: 'Popper',\n  components: {\n    Portal\n  },\n  inheritAttrs: false,\n  props: popperProps,\n  emits: [],\n  setup(_props) {\n    const nh = useNameHelper('popper')\n    const props = useProps('popper', _props, {\n      visible: false,\n      alive: false,\n      to: '',\n      transition: () => nh.ns('drop'),\n      appear: false,\n      role: 'dialog'\n    })\n    const getIndex = useZIndex()\n\n    const zIndex = ref(10)\n\n    const wrapper = ref<HTMLElement>()\n\n    watch(\n      () => props.visible,\n      value => {\n        if (props.to && value) {\n          zIndex.value = getIndex()\n        }\n      },\n      { immediate: true }\n    )\n\n    function emitHookEvent(name: 'be' | 'e' | 'ae' | 'ec' | 'bl' | 'l' | 'al' | 'lc', el: Element) {\n      switch (name) {\n        case 'be':\n          emitEvent(props.onBeforeEnter, el)\n          break\n        case 'e':\n          emitEvent(props.onEnter, el)\n          break\n        case 'ae':\n          emitEvent(props.onAfterEnter, el)\n          break\n        case 'ec':\n          emitEvent(props.onEnterCancelled, el)\n          break\n        case 'bl':\n          emitEvent(props.onBeforeLeave, el)\n          break\n        case 'l':\n          emitEvent(props.onLeave, el)\n          break\n        case 'al':\n          emitEvent(props.onAfterLeave, el)\n          break\n        case 'lc':\n          emitEvent(props.onLeaveCancelled, el)\n          break\n      }\n    }\n\n    return {\n      nh,\n      props,\n      zIndex,\n\n      wrapper,\n\n      emitHookEvent\n    }\n  }\n})\n</script>\n","<template>\n  <Portal :to=\"props.to\">\n    <Transition\n      :name=\"props.transition\"\n      :appear=\"props.appear\"\n      @before-enter=\"emitHookEvent('be', $event)\"\n      @enter=\"emitHookEvent('e', $event)\"\n      @after-enter=\"emitHookEvent('ae', $event)\"\n      @enter-cancelled=\"emitHookEvent('ec', $event)\"\n      @before-leave=\"emitHookEvent('bl', $event)\"\n      @leave=\"emitHookEvent('l', $event)\"\n      @after-leave=\"emitHookEvent('al', $event)\"\n      @leave-cancelled=\"emitHookEvent('lc', $event)\"\n    >\n      <div\n        v-if=\"props.alive || props.visible\"\n        v-show=\"!props.alive || props.visible\"\n        ref=\"wrapper\"\n        v-bind=\"$attrs\"\n        :class=\"[nh.b(), props.to !== 'body' && nh.bm('inherit')]\"\n        :role=\"props.role\"\n        :style=\"{ zIndex: props.to && props.visible ? zIndex : undefined }\"\n      >\n        <slot></slot>\n      </div>\n    </Transition>\n  </Portal>\n</template>\n\n<script lang=\"ts\">\nimport { Portal } from '@/components/portal'\n\nimport { defineComponent, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\nimport { popperProps } from './props'\n\nexport default defineComponent({\n  name: 'Popper',\n  components: {\n    Portal\n  },\n  inheritAttrs: false,\n  props: popperProps,\n  emits: [],\n  setup(_props) {\n    const nh = useNameHelper('popper')\n    const props = useProps('popper', _props, {\n      visible: false,\n      alive: false,\n      to: '',\n      transition: () => nh.ns('drop'),\n      appear: false,\n      role: 'dialog'\n    })\n    const getIndex = useZIndex()\n\n    const zIndex = ref(10)\n\n    const wrapper = ref<HTMLElement>()\n\n    watch(\n      () => props.visible,\n      value => {\n        if (props.to && value) {\n          zIndex.value = getIndex()\n        }\n      },\n      { immediate: true }\n    )\n\n    function emitHookEvent(name: 'be' | 'e' | 'ae' | 'ec' | 'bl' | 'l' | 'al' | 'lc', el: Element) {\n      switch (name) {\n        case 'be':\n          emitEvent(props.onBeforeEnter, el)\n          break\n        case 'e':\n          emitEvent(props.onEnter, el)\n          break\n        case 'ae':\n          emitEvent(props.onAfterEnter, el)\n          break\n        case 'ec':\n          emitEvent(props.onEnterCancelled, el)\n          break\n        case 'bl':\n          emitEvent(props.onBeforeLeave, el)\n          break\n        case 'l':\n          emitEvent(props.onLeave, el)\n          break\n        case 'al':\n          emitEvent(props.onAfterLeave, el)\n          break\n        case 'lc':\n          emitEvent(props.onLeaveCancelled, el)\n          break\n      }\n    }\n\n    return {\n      nh,\n      props,\n      zIndex,\n\n      wrapper,\n\n      emitHookEvent\n    }\n  }\n})\n</script>\n","import { booleanProp, buildProps, eventProp, sizeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { TagSlots, TagType } from './symbol'\n\nexport const tagProps = buildProps({\n  size: sizeProp,\n  type: String as PropType<TagType>,\n  border: booleanProp,\n  closable: booleanProp,\n  color: String,\n  simple: booleanProp,\n  circle: booleanProp,\n  prefix: [String, Number],\n  prefixBg: String,\n  prefixColor: String,\n  suffix: [String, Number],\n  suffixBg: String,\n  suffixColor: String,\n  disabled: booleanProp,\n  slots: Object as PropType<TagSlots>,\n  onClose: eventProp()\n})\n\nexport type TagProps = ExtractPropTypes<typeof tagProps>\nexport type TagCProps = ConfigurableProps<TagProps>\n","import { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, defineComponent, renderSlot } from 'vue'\n\nimport { createSizeProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { adjustAlpha, isClient, mixColor, parseColorToRgba } from '@vexip-ui/utils'\nimport { tagProps } from './props'\n\nimport type { TagType } from './symbol'\n\nconst tagTypes = Object.freeze<TagType[]>([\n  'default',\n  'primary',\n  'info',\n  'success',\n  'error',\n  'warning',\n  'lime',\n  'pink',\n  'magenta',\n  'tomato',\n  'orange',\n  'cyan',\n  'navy',\n  'gold',\n  'purple'\n])\n\nexport default defineComponent({\n  name: 'Tag',\n  components: {\n    Icon\n  },\n  props: tagProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('tag', _props, {\n      size: createSizeProp(),\n      type: {\n        default: 'default',\n        validator: (value: TagType) => tagTypes.includes(value)\n      },\n      border: false,\n      closable: false,\n      color: null,\n      simple: false,\n      circle: false,\n      prefix: '',\n      prefixBg: '',\n      prefixColor: '',\n      suffix: '',\n      suffixBg: '',\n      suffixColor: '',\n      disabled: false,\n      slots: () => ({})\n    })\n\n    const nh = useNameHelper('tag')\n    const icons = useIcons()\n\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.size)]: props.size !== 'default',\n        [nh.bm(props.type)]: props.type !== 'default',\n        [nh.bm('border')]: props.border,\n        [nh.bm('simple')]: props.simple,\n        [nh.bm('circle')]: props.circle,\n        [nh.bm('closable')]: props.closable,\n        [nh.bm('disabled')]: props.disabled\n      }\n    })\n    const style = computed(() => {\n      if (!props.color) return undefined\n\n      const rootStyle = isClient ? getComputedStyle(document.documentElement) : null\n      const white = parseColorToRgba(rootStyle?.getPropertyValue(nh.nv('color-white')) || '#fff')\n      const baseColor = parseColorToRgba(props.color)\n      const base = baseColor.toString()\n\n      return nh.cvm({\n        color: 'var(--vxp-color-white)',\n        'bg-color': base,\n        'b-color': base,\n        'close-color': 'var(--vxp-color-white)',\n        'd-color': mixColor(white, baseColor, 0.3).toString(),\n        ...(props.simple || props.border\n          ? {\n              color: base,\n              'close-color': base\n            }\n          : {}),\n        ...(props.simple\n          ? {\n              'bg-color': adjustAlpha(baseColor, 0.2).toString()\n            }\n          : {})\n      })\n    })\n\n    function handleClose(event: MouseEvent) {\n      if (!props.closable || props.disabled || event.button > 0) {\n        return false\n      }\n\n      event.stopPropagation()\n      emitEvent(props.onClose)\n    }\n\n    function renderClose() {\n      if (!props.closable) return null\n\n      return (\n        <button type={'button'} class={nh.be('close')} onClick={handleClose}>\n          <Icon {...icons.value.close} label={'close'}></Icon>\n        </button>\n      )\n    }\n\n    return () => {\n      const hasPrefix = !!(props.prefix === 0 || props.prefix || slots.prefix || props.slots.prefix)\n      const hasSuffix = !!(props.suffix === 0 || props.suffix || slots.suffix || props.slots.suffix)\n\n      return (\n        <div class={className.value} style={style.value}>\n          {hasPrefix ? (\n            <span\n              class={[nh.be('unit'), nh.be('prefix')]}\n              style={{\n                color: props.prefixColor,\n                backgroundColor: props.prefixBg,\n                borderColor: props.prefixBg\n              }}\n            >\n              {renderSlot(slots, 'prefix', undefined, () => [\n                <Renderer renderer={props.slots.prefix}>{props.prefix}</Renderer>\n              ])}\n            </span>\n          ) : null}\n          <span class={[nh.be('unit'), nh.be('content')]}>\n            {renderSlot(slots, 'default', undefined, () => [\n              <Renderer renderer={props.slots.default}></Renderer>\n            ])}\n            {!hasSuffix && renderClose()}\n          </span>\n          {hasSuffix ? (\n            <span\n              class={[nh.be('unit'), nh.be('suffix')]}\n              style={{\n                color: props.suffixColor,\n                backgroundColor: props.suffixBg,\n                borderColor: props.suffixBg\n              }}\n            >\n              {renderSlot(slots, 'suffix', undefined, () => [\n                <Renderer renderer={props.slots.suffix}>{props.suffix}</Renderer>\n              ])}\n              {renderClose()}\n            </span>\n          ) : null}\n        </div>\n      )\n    }\n  }\n})\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  styleProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { TooltipShift, TooltipTrigger, TooltipVirtual } from './symbol'\n\nexport const tooltipProps = buildProps({\n  trigger: [String, Array] as PropType<TooltipTrigger>,\n  wrapper: booleanStringProp,\n  noArrow: booleanProp,\n  transitionName: String,\n  visible: booleanProp,\n  placement: String as PropType<Placement>,\n  outsideClose: booleanProp,\n  noHover: booleanProp,\n  tipClass: classProp,\n  tipStyle: styleProp,\n  transfer: booleanStringProp,\n  disabled: booleanProp,\n  raw: booleanProp,\n  delay: [Number, Array] as PropType<number | number[]>,\n  tipAlive: booleanProp,\n  reverse: booleanProp,\n  width: [String, Number] as PropType<number | 'trigger' | 'auto'>,\n  virtual: Object as PropType<TooltipVirtual>,\n  shift: {\n    type: [Boolean, String] as PropType<boolean | TooltipShift>,\n    default: null\n  },\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onTipEnter: eventProp(),\n  onTipLeave: eventProp(),\n  onClickOutside: eventProp(),\n  onOutsideClose: eventProp()\n})\n\nexport type TooltipProps = ExtractPropTypes<typeof tooltipProps>\nexport type TooltipCProps = ConfigurableProps<TooltipProps>\n","import { Popper } from '@/components/popper'\n\nimport {\n  Fragment,\n  computed,\n  createTextVNode,\n  defineComponent,\n  mergeProps,\n  ref,\n  renderSlot,\n  shallowReadonly,\n  toRef,\n  watch\n} from 'vue'\n\nimport { emitEvent, useHoverDelay, useNameHelper, useProps } from '@vexip-ui/config'\nimport {\n  placementWhileList,\n  useClickOutside,\n  useListener,\n  usePopper,\n  useSetTimeout\n} from '@vexip-ui/hooks'\nimport { getGlobalCount, isElement } from '@vexip-ui/utils'\nimport { tooltipProps } from './props'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type { VirtualElement } from '@vexip-ui/hooks'\n\nconst TEXT_VNODE = createTextVNode('').type\n\nexport default defineComponent({\n  name: 'Tooltip',\n  inheritAttrs: true,\n  props: tooltipProps,\n  emits: ['clickoutside', 'update:visible'],\n  setup(_props, { attrs, slots, emit, expose }) {\n    const nh = useNameHelper('tooltip')\n    const props = useProps('tooltip', _props, {\n      trigger: {\n        default: 'hover',\n        validator: value => {\n          return ['hover', 'click', 'focus', 'hover-focus', 'custom'].includes(value)\n        }\n      },\n      wrapper: false,\n      noArrow: false,\n      transitionName: () => nh.ns('fade'),\n      visible: false,\n      placement: {\n        default: 'top',\n        validator: value => placementWhileList.includes(value)\n      },\n      outsideClose: true,\n      noHover: false,\n      tipClass: null,\n      tipStyle: null,\n      transfer: false,\n      disabled: false,\n      raw: false,\n      delay: 250,\n      tipAlive: false,\n      reverse: false,\n      width: 'auto',\n      virtual: null,\n      shift: false\n    })\n\n    const idIndex = `${getGlobalCount()}`\n    const tooltipId = computed(() => nh.bs(idIndex))\n\n    const hoverDelay = useHoverDelay()\n    const { timer } = useSetTimeout()\n\n    const placement = toRef(props, 'placement')\n    const currentVisible = ref(props.visible)\n    const rendering = ref(props.visible)\n    const transfer = toRef(props, 'transfer')\n    const triggerWidth = ref(100)\n\n    let hovered = false\n    let focused = false\n\n    const useHover = computed(() => props.trigger === 'hover' || props.trigger === 'hover-focus')\n    const useFocus = computed(() => props.trigger === 'focus' || props.trigger === 'hover-focus')\n\n    const originalTrigger = ref<HTMLElement>()\n\n    const reference = computed(() => {\n      const virtual = (props.virtual as any)?.$el ?? props.virtual\n\n      if (virtual) {\n        if ('getBoundingClientRect' in virtual) {\n          return virtual as VirtualElement\n        }\n\n        if ('x' in virtual && 'y' in virtual) {\n          return {\n            getBoundingClientRect: () => ({\n              x: virtual.x,\n              y: virtual.y,\n              left: virtual.x,\n              top: virtual.y,\n              width: 0,\n              height: 0\n            })\n          } as VirtualElement\n        }\n      }\n\n      return originalTrigger.value\n    })\n    const triggerEl = computed(() => (isElement(reference.value) ? reference.value : null))\n    const delay = computed(() => {\n      return typeof props.delay === 'number'\n        ? new Array<number>(2).fill(Math.max(props.delay, 0))\n        : props.delay.map(delay => Math.max(delay, 0))\n    })\n\n    const popper = ref<PopperExposed>()\n    const popperEl = computed(() => popper.value?.wrapper)\n    const arrow = ref<HTMLElement>()\n    const shift = computed<{ mainAxis?: boolean, crossAxis?: boolean }>(() => {\n      if (!props.shift) {\n        return { mainAxis: false }\n      }\n\n      if (props.shift === true || props.shift === 'both') {\n        return { crossAxis: true }\n      }\n\n      return props.shift === 'horizontal' ? { mainAxis: false, crossAxis: true } : {}\n    })\n    const { transferTo, updatePopper } = usePopper({\n      placement,\n      transfer,\n      arrow,\n      reference,\n      shift,\n      wrapper: originalTrigger,\n      popper: popperEl\n    })\n\n    useClickOutside(handleClickOutside, originalTrigger)\n    useClickOutside(() => {\n      if (currentVisible.value && !originalTrigger.value) {\n        handleClickOutside()\n      }\n    }, popperEl)\n\n    const tipStyle = computed(() => {\n      if (props.width === 'auto') {\n        return props.tipStyle\n      }\n\n      if (props.width === 'trigger') {\n        return [{ width: `${triggerWidth.value}px` }, props.tipStyle]\n      }\n\n      return [{ width: `${props.width}px` }, props.tipStyle]\n    })\n\n    const slotParams = shallowReadonly({ toggleVisible, updatePopper })\n\n    useListener(triggerEl, 'mouseenter', handleTriggerEnter)\n    useListener(triggerEl, 'mouseleave', handleTriggerLeave)\n    useListener(triggerEl, 'click', handleTriggerClick)\n    useListener(triggerEl, 'focus', handleTriggerFocus)\n    useListener(triggerEl, 'blur', handleTriggerBlur)\n    useListener(popperEl, 'mouseenter', handleTriggerEnter)\n    useListener(popperEl, 'mouseleave', handleTriggerLeave)\n\n    watch(\n      () => props.visible,\n      value => {\n        currentVisible.value = value\n\n        if (value) {\n          rendering.value = true\n          updatePopper()\n        }\n      }\n    )\n    watch(\n      () => props.disabled,\n      value => {\n        if (value) {\n          toggleVisible(false)\n        }\n      }\n    )\n\n    expose({ rendering, trigger: triggerEl, toggleVisible, updatePopper })\n\n    function toggleVisible(visible = !currentVisible.value) {\n      if (currentVisible.value === visible) return\n\n      currentVisible.value = visible\n\n      if (visible) {\n        computeTriggerWidth()\n        rendering.value = true\n        updatePopper()\n      }\n\n      emit('update:visible', visible)\n      emitEvent(props.onToggle, visible)\n    }\n\n    function computeTriggerWidth() {\n      if (!triggerEl.value) return\n\n      triggerWidth.value = triggerEl.value.offsetWidth\n    }\n\n    function getActiveState() {\n      return (useHover.value && hovered) || (useFocus.value && focused)\n    }\n\n    function handleTriggerEnter() {\n      if (props.disabled) return\n\n      if (useHover.value) {\n        clearTimeout(timer.hover)\n\n        timer.hover = setTimeout(() => {\n          hovered = true\n          toggleVisible(getActiveState())\n        }, delay.value[0] ?? hoverDelay.value)\n      }\n\n      emitEvent(props.onTipEnter)\n    }\n\n    function handleTriggerLeave() {\n      if (props.disabled) return\n\n      if (useHover.value) {\n        clearTimeout(timer.hover)\n\n        timer.hover = setTimeout(() => {\n          hovered = false\n          toggleVisible(getActiveState())\n        }, delay.value[1] ?? hoverDelay.value)\n      }\n\n      emitEvent(props.onTipLeave)\n    }\n\n    function handleTriggerClick() {\n      if (props.disabled) return\n\n      if (props.trigger === 'click') {\n        toggleVisible()\n      }\n    }\n\n    function handleTriggerFocus() {\n      if (props.disabled) return\n\n      if (useFocus.value) {\n        focused = true\n        toggleVisible(getActiveState())\n      }\n    }\n\n    function handleTriggerBlur() {\n      if (props.disabled) return\n\n      if (useFocus.value) {\n        focused = false\n        toggleVisible(getActiveState())\n      }\n    }\n\n    function handleClickOutside() {\n      if (props.disabled) return\n\n      emitEvent(props.onClickOutside)\n\n      if (props.outsideClose && props.trigger !== 'custom' && currentVisible.value) {\n        toggleVisible(false)\n        emitEvent(props.onOutsideClose)\n      }\n    }\n\n    function syncTriggerRef(el?: HTMLElement | null) {\n      if (el) {\n        originalTrigger.value = el.nextElementSibling as HTMLElement | undefined\n      } else {\n        originalTrigger.value = undefined\n      }\n    }\n\n    function syncRendering() {\n      rendering.value = currentVisible.value\n    }\n\n    function stopPropagation(event: MouseEvent) {\n      event.stopPropagation()\n    }\n\n    return () => {\n      const Wrapper = props.wrapper\n        ? ((props.wrapper === true ? 'span' : props.wrapper) as any)\n        : null\n      const triggers = slots.trigger?.(slotParams)\n      const triggerVNode = triggers ? triggers[0] : null\n\n      const renderTrigger = () => {\n        if (!triggerVNode) return null\n\n        if (triggerVNode.type === TEXT_VNODE) {\n          return Wrapper ? <span>{triggerVNode}</span> : <span {...attrs}>{triggerVNode}</span>\n        }\n\n        if (!Wrapper) {\n          triggerVNode.props = mergeProps(triggerVNode.props || {}, attrs, {\n            'aria-describedby': tooltipId.value\n          })\n        }\n\n        return triggerVNode\n      }\n\n      return [\n        triggerVNode &&\n          (Wrapper ? (\n            <Wrapper\n              {...attrs}\n              ref={originalTrigger}\n              class={[nh.b(), nh.bs('vars'), props.inherit && nh.bm('inherit')]}\n              aria-describedby={tooltipId.value}\n            >\n              {triggers}\n            </Wrapper>\n          ) : (\n            <Fragment ref={syncTriggerRef as any}>{renderTrigger()}</Fragment>\n          )),\n        !props.disabled && (props.tipAlive || rendering.value) && (\n          <Popper\n            ref={popper}\n            id={tooltipId.value}\n            class={{\n              [nh.be('popper')]: true,\n              [nh.bs('vars')]: true,\n              [nh.bem('popper', props.reverse ? 'dark' : 'light')]: true,\n              [nh.bem('popper', 'no-hover')]: props.noHover,\n              [nh.bem('popper', 'no-arrow')]: props.noArrow\n            }}\n            appear\n            visible={currentVisible.value}\n            alive={props.tipAlive}\n            to={transferTo.value}\n            transition={props.transitionName}\n            role={'tooltip'}\n            tabindex={-1}\n            onClick={stopPropagation}\n            onAnimationend={syncRendering}\n            onTransitionend={syncRendering}\n          >\n            <div class={[!props.raw && nh.be('tip'), props.tipClass]} style={tipStyle.value}>\n              {renderSlot(slots, 'default', slotParams)}\n            </div>\n            {!props.raw && !props.noArrow && <div ref={arrow} class={nh.be('arrow')}></div>}\n          </Popper>\n        )\n      ]\n    }\n  }\n})\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ScrollPayload } from './symbol'\n\nexport const virtualListProps = buildProps({\n  items: Array as PropType<Array<Record<string, any>>>,\n  itemSize: Number,\n  itemFixed: booleanProp,\n  idKey: String,\n  defaultKeyAt: [Number, String, Symbol],\n  bufferSize: Number,\n  listTag: String,\n  itemsTag: String,\n  hideBar: booleanProp,\n  lockItems: booleanProp,\n  itemsAttrs: Object as PropType<Record<string, any>>,\n  autoplay: booleanProp,\n  ignoreResize: booleanProp,\n  disabled: booleanProp,\n  onScroll: eventProp<(payload: ScrollPayload) => void>(),\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>()\n})\n\nexport type VirtualListProps = ExtractPropTypes<typeof virtualListProps>\nexport type VirtualListCProps = ConfigurableProps<VirtualListProps, 'items'>\n","import { NativeScroll } from '@/components/native-scroll'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, defineComponent, nextTick, ref, renderSlot, toRefs, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { createSlotRender, useVirtual } from '@vexip-ui/hooks'\nimport { virtualListProps } from './props'\n\nimport type { NativeScrollExposed } from '@/components/native-scroll'\nimport type { ScrollPayload } from './symbol'\n\nexport default defineComponent({\n  name: 'VirtualList',\n  components: {\n    NativeScroll,\n    ResizeObserver\n  },\n  inheritAttrs: false,\n  props: virtualListProps,\n  emits: [],\n  setup(_props, { slots, attrs, expose }) {\n    const props = useProps('virtualList', _props, {\n      items: {\n        default: () => [],\n        static: true\n      },\n      itemSize: 36,\n      itemFixed: false,\n      idKey: 'id',\n      defaultKeyAt: null,\n      bufferSize: 5,\n      listTag: 'div',\n      itemsTag: 'ul',\n      itemsAttrs: null,\n      hideBar: false,\n      lockItems: false,\n      autoplay: false,\n      ignoreResize: false,\n      disabled: false\n    })\n\n    const nh = useNameHelper('virtual-list')\n\n    const { items, itemSize, itemFixed, idKey, bufferSize } = toRefs(props)\n\n    const scroll = ref<NativeScrollExposed>()\n    const list = ref<HTMLElement>()\n    const wrapper = computed(() => scroll.value?.content)\n\n    const {\n      indexMap,\n      heightTree,\n      scrollOffset,\n      visibleItems,\n      listStyle,\n      itemsStyle,\n      handleScroll,\n      handleResize,\n      handleItemResize,\n      scrollTo,\n      scrollBy,\n      scrollToKey,\n      scrollToIndex,\n      ensureIndexInView,\n      ensureKeyInView\n    } = useVirtual({\n      items,\n      itemSize,\n      itemFixed,\n      idKey,\n      bufferSize,\n      wrapper,\n      defaultKeyAt: props.defaultKeyAt,\n      autoResize: false\n    })\n\n    expose({\n      scroll,\n      wrapper,\n      list,\n      indexMap,\n      heightTree,\n      scrollOffset,\n      scrollTo,\n      scrollBy,\n      scrollToKey,\n      scrollToIndex,\n      ensureIndexInView,\n      ensureKeyInView,\n      refresh\n    })\n\n    watch(\n      () => props.items.length,\n      () => {\n        nextTick(refresh)\n      }\n    )\n\n    const className = computed(() => {\n      return [\n        nh.b(),\n        props.inherit && nh.bm('inherit'),\n        props.disabled && nh.bm('disabled'),\n        attrs.class\n      ]\n    })\n\n    function onScroll(payload: ScrollPayload) {\n      handleScroll()\n      emitEvent(props.onScroll, payload)\n    }\n\n    function onResize(entry: ResizeObserverEntry) {\n      if (props.ignoreResize) return\n\n      handleResize(entry)\n      emitEvent(props.onResize, entry)\n    }\n\n    function onItemResize(key: number | string | symbol, entry: ResizeObserverEntry) {\n      if (!props.lockItems && !props.ignoreResize) {\n        handleItemResize(key, entry)\n      }\n    }\n\n    function refresh() {\n      return scroll.value?.refresh() ?? Promise.resolve()\n    }\n\n    function renderList(items: Record<string, any>[]) {\n      const keyField = props.idKey\n      const itemFixed = props.itemFixed\n      const keyIndexMap = indexMap.value\n      const { class: itemsClass, style: itemsOtherStyle, ...itemsAttrs } = props.itemsAttrs || {}\n\n      const ListTag = (props.listTag || 'div') as any\n      const ItemsTag = (props.itemsTag || 'ul') as any\n\n      return (\n        <ResizeObserver onResize={refresh}>\n          <ListTag ref={list} class={nh.be('list')} style={listStyle.value}>\n            <ItemsTag\n              {...itemsAttrs}\n              class={[nh.be('items'), itemsClass]}\n              style={[itemsStyle.value, itemsOtherStyle]}\n            >\n              {slots.default && props.items.length\n                ? items.map(item => {\n                  const key = item[keyField]\n                  const index = keyIndexMap.get(key)\n                  const vnode = renderSlot(slots, 'default', { item, index })\n\n                  if (itemFixed) {\n                    vnode.key = key\n\n                    return vnode\n                  }\n\n                  const onResize = onItemResize.bind(null, key)\n\n                  return (\n                    <ResizeObserver key={key} onResize={onResize}>\n                      {() => vnode}\n                    </ResizeObserver>\n                  )\n                })\n                : renderSlot(slots, 'empty')}\n            </ItemsTag>\n          </ListTag>\n        </ResizeObserver>\n      )\n    }\n\n    return () => {\n      let renderingItems = visibleItems.value\n\n      if (import.meta.env.MODE === 'test') {\n        // It is difficult to test ResizeObserver in vitest, so directly rendering all items\n        renderingItems = props.items\n      }\n\n      return (\n        <NativeScroll\n          {...attrs}\n          ref={scroll}\n          class={className.value}\n          inherit={props.inherit}\n          use-y-bar={!props.hideBar}\n          scroll-y={scrollOffset.value}\n          autoplay={props.autoplay}\n          onScroll={onScroll}\n          onResize={onResize}\n        >\n          {{\n            default: () => {\n              if (props.disabled) {\n                return slots.default && props.items.length\n                  ? props.items.map((item, index) => {\n                    const key = item[props.idKey]\n                    const vnode = renderSlot(slots, 'default', { item, index })\n\n                    vnode.key = key\n\n                    return vnode\n                  })\n                  : renderSlot(slots, 'empty')\n              }\n\n              return renderList(renderingItems)\n            },\n            prefixTrap: createSlotRender(slots, ['prefix-trap', 'prefixTrap']),\n            suffixTrap: createSlotRender(slots, ['suffix-trap', 'suffixTrap'])\n          }}\n        </NativeScroll>\n      )\n    }\n  }\n})\n","import {\n  booleanNumberProp,\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n  stateProp,\n  valuesProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { TagType } from '@/components/tag'\nimport type {\n  ChangeEvent,\n  SelectBaseValue,\n  SelectEvent,\n  SelectFilter,\n  SelectFilterPosition,\n  SelectKeyConfig,\n  SelectRawOption,\n  SelectSlots\n} from './symbol'\n\ntype CustomChangeEvent =\n  | ChangeEvent\n  | ((value: SelectBaseValue, data: any) => void)\n  | ((value: string, data: any) => void)\n  | ((value: number, data: any) => void)\n  | ((value: boolean, data: any) => void)\n  | ((values: SelectBaseValue[], data: any[]) => void)\n  | ((values: string[], data: any[]) => void)\n  | ((values: number[], data: any[]) => void)\n  | ((value: boolean[], data: any) => void)\n\nexport const selectProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('select'),\n  visible: booleanProp,\n  options: Array as PropType<SelectRawOption[]>,\n  disabled: booleanProp,\n  transitionName: String,\n  outsideClose: booleanProp,\n  placeholder: String,\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  noSuffix: booleanProp,\n  value: valuesProp,\n  multiple: booleanProp,\n  clearable: booleanProp,\n  maxListHeight: Number,\n  listClass: classProp,\n  placement: String as PropType<Placement>,\n  transfer: booleanStringProp,\n  optionCheck: booleanProp,\n  emptyText: String,\n  staticSuffix: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  keyConfig: Object as PropType<SelectKeyConfig>,\n  filter: {\n    type: [Boolean, Function] as PropType<boolean | SelectFilter>,\n    default: null\n  },\n  ignoreCase: booleanProp,\n  creatable: booleanProp,\n  transparent: booleanProp,\n  maxTagCount: Number,\n  noRestTip: booleanProp,\n  tagType: String as PropType<TagType>,\n  noPreview: booleanProp,\n  remote: booleanProp,\n  fitPopper: booleanNumberProp,\n  name: String,\n  popperAlive: booleanProp,\n  countLimit: Number,\n  filterPosition: String as PropType<SelectFilterPosition>,\n  slots: Object as PropType<SelectSlots>,\n  onFocus: eventProp<(event: FocusEvent) => void>(),\n  onBlur: eventProp<(event: FocusEvent) => void>(),\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onSelect: eventProp<EventListener<SelectEvent>>(),\n  onCancel: eventProp<EventListener<SelectEvent>>(),\n  onChange: eventProp<CustomChangeEvent>(),\n  onClickOutside: eventProp(),\n  onOutsideClose: eventProp(),\n  onClear: eventProp(),\n  onFilterInput: eventProp<(value: string) => void>()\n})\n\nexport type SelectProps = ExtractPropTypes<typeof selectProps>\nexport type SelectCProps = ConfigurableProps<SelectProps>\n","import type { OptionKeyConfig, OptionState, RawOption } from '@/components/option'\n\nexport interface SelectKeyConfig extends OptionKeyConfig {\n  group?: string,\n  children?: string\n}\n\nexport type SelectRawOption = RawOption\nexport type SelectBaseValue = string | number | boolean\nexport type SelectValue = SelectBaseValue | SelectBaseValue[] | null\n\nexport interface SelectOptionState extends OptionState {\n  group: boolean,\n  depth: number,\n  parent: SelectOptionState | null,\n  data: SelectRawOption\n}\n\nexport type SelectFilter = (value: string, option: SelectOptionState) => boolean\n\nexport type SelectFilterPosition = 'in-control' | 'in-list'\n\nexport type SelectEvent = (value: SelectBaseValue, data: any) => void\nexport type ChangeEvent = (value: SelectValue, data: any | any[]) => void\n\nexport interface SelectListSlotParams {\n  options: SelectOptionState[],\n  isSelected: (option: SelectOptionState) => boolean,\n  handleSelect: (option?: SelectOptionState | null) => void\n}\n\nexport interface SelectSlots {\n  selected?: (params: { option: SelectOptionState | null, preview?: boolean }) => any,\n  prefix?: () => any,\n  suffix?: () => any,\n  control?: () => any,\n  list?: (params: SelectListSlotParams) => any,\n  prepend?: () => any,\n  append?: () => any,\n  default?: (params: { option: SelectOptionState, index: number, selected: boolean }) => any,\n  group?: (params: { option: SelectOptionState, index: number }) => any,\n  empty?: () => any\n}\n\nexport const defaultKeyConfig: Required<SelectKeyConfig> = Object.freeze({\n  value: 'value',\n  label: 'label',\n  disabled: 'disabled',\n  divided: 'divided',\n  title: 'title',\n  group: 'group',\n  children: 'children'\n})\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Input } from '@/components/input'\nimport { NativeScroll } from '@/components/native-scroll'\nimport { Option } from '@/components/option'\nimport { Overflow } from '@/components/overflow'\nimport { Popper } from '@/components/popper'\nimport { Renderer } from '@/components/renderer'\nimport { Tag } from '@/components/tag'\nimport { Tooltip } from '@/components/tooltip'\nimport { VirtualList } from '@/components/virtual-list'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, nextTick, onMounted, reactive, ref, toRef, watch, watchEffect } from 'vue'\n\nimport {\n  placementWhileList,\n  useClickOutside,\n  useHover,\n  useModifier,\n  useMounted,\n  usePopper\n} from '@vexip-ui/hooks'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport {\n  decide,\n  getLast,\n  getRangeWidth,\n  isNull,\n  removeArrayItem,\n  toAttrValue\n} from '@vexip-ui/utils'\nimport { selectProps } from './props'\nimport { defaultKeyConfig } from './symbol'\n\nimport type { InputExposed } from '@/components/input'\nimport type { PopperExposed } from '@/components/popper'\nimport type { TooltipExposed } from '@/components/tooltip'\nimport type { VirtualListExposed } from '@/components/virtual-list'\nimport type {\n  ChangeEvent,\n  SelectBaseValue,\n  SelectEvent,\n  SelectOptionState,\n  SelectSlots,\n  SelectValue\n} from './symbol'\n\nfunction isSameValue(newValue: SelectValue, oldValue: SelectValue) {\n  const isNewArray = Array.isArray(newValue)\n  const isOldArray = Array.isArray(oldValue)\n\n  if (isNewArray !== isOldArray) return false\n\n  if (isNewArray && isOldArray) {\n    if (newValue.length !== oldValue.length) return false\n\n    for (let i = 0, len = newValue.length; i < len; ++i) {\n      if (newValue[i] !== oldValue[i]) return false\n    }\n\n    return true\n  }\n\n  if (isNull(newValue)) return isNull(oldValue)\n\n  return newValue === oldValue\n}\n\ndefineOptions({ name: 'Select' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue\n} = useFieldStore<SelectValue>(focus)\n\nconst nh = useNameHelper('select')\n\nconst _props = defineProps(selectProps)\nconst props = useProps('select', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  visible: {\n    default: false,\n    static: true\n  },\n  options: {\n    default: () => [],\n    static: true\n  },\n  disabled: () => disabled.value,\n  transitionName: () => nh.ns('drop'),\n  outsideClose: true,\n  placeholder: null,\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  noSuffix: false,\n  value: {\n    default: () => getFieldValue()!,\n    static: true\n  },\n  multiple: false,\n  clearable: false,\n  maxListHeight: 300,\n  listClass: null,\n  placement: {\n    default: 'bottom',\n    validator: value => placementWhileList.includes(value)\n  },\n  transfer: false,\n  optionCheck: false,\n  emptyText: null,\n  staticSuffix: false,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  keyConfig: () => ({}),\n  filter: false,\n  ignoreCase: false,\n  creatable: false,\n  transparent: false,\n  maxTagCount: 0,\n  noRestTip: false,\n  tagType: null,\n  noPreview: false,\n  remote: false,\n  fitPopper: false,\n  name: {\n    default: '',\n    static: true\n  },\n  popperAlive: null,\n  countLimit: 0,\n  filterPosition: 'in-control',\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:value', 'update:visible', 'update:label'])\n\nconst slots = defineSlots<SelectSlots>()\n\nconst locale = useLocale('select', toRef(props, 'locale'))\nconst icons = useIcons()\n\nconst currentVisible = ref(props.visible)\nconst currentLabels = ref<string[]>([])\nconst currentValues = ref<SelectBaseValue[]>([])\nconst currentIndex = ref(-1)\nconst placement = toRef(props, 'placement')\nconst transfer = toRef(props, 'transfer')\n// const listHeight = ref<string>()\nconst baseOptions = ref<SelectOptionState[]>([])\nconst currentFilter = ref('')\nconst anchorWidth = ref(0)\nconst userOptions = ref<SelectOptionState[]>([])\nconst restTagCount = ref(0)\nconst restTipShow = ref(false)\nconst composing = ref(false)\n\nconst { isMounted } = useMounted()\n\nconst dynamicOption = reactive<SelectOptionState>({\n  disabled: false,\n  divided: false,\n  title: '',\n  value: '',\n  label: '',\n  group: false,\n  depth: 0,\n  parent: null,\n  hidden: false,\n  hitting: true,\n  data: ''\n})\n\nconst optionValues = reactive(new Set<string | number>())\nconst hittingOption = ref<SelectOptionState>()\nconst optionStates = computed(() => userOptions.value.concat(baseOptions.value))\nconst visibleOptions = computed(() => optionStates.value.filter(state => !state.hidden))\n\nconst keyConfig = computed(() => ({ ...defaultKeyConfig, ...props.keyConfig }))\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst nativeInput = ref<HTMLInputElement>()\nconst filterInput = ref<InputExposed>()\nconst device = ref<HTMLElement>()\nconst virtualList = ref<VirtualListExposed>()\nconst popper = ref<PopperExposed>()\nconst restTip = ref<TooltipExposed>()\n\nconst input = computed(() => filterInput.value?.input ?? nativeInput.value)\n\nconst { reference, transferTo, updatePopper } = usePopper({\n  placement,\n  transfer,\n  wrapper,\n  popper: computed(() => popper.value?.wrapper),\n  isDrop: true\n})\nconst { isHover } = useHover(reference)\n\nconst cachedSelected = reactive(new Map<SelectBaseValue, SelectOptionState>())\nconst optionValueMap = ref(new Map<SelectBaseValue, SelectOptionState>())\n\nlet emittedValue: typeof props.value | null = props.value\n\nconst updateTrigger = ref(0)\n\nwatchEffect(() => {\n  /* eslint-disable @typescript-eslint/no-unused-expressions */\n  props.keyConfig.value\n  props.keyConfig.label\n  props.keyConfig.disabled\n  props.keyConfig.divided\n  props.keyConfig.title\n  props.keyConfig.group\n  props.keyConfig.children\n\n  // If we only read the `props.options`, when user use Array native methods to\n  // change options, Vue will not trigger the watch callback\n  for (let i = 0, len = props.options.length; i < len; ++i) {\n    props.options[i]\n  }\n  /* eslint-enable */\n\n  updateTrigger.value++\n})\n\nwatch(updateTrigger, initOptionState, { immediate: true })\n\nfunction initOptionState() {\n  const {\n    value: valueKey,\n    label: labelKey,\n    disabled: disabledKey,\n    divided: dividedKey,\n    title: titleKey,\n    group: groupKey,\n    children: childrenKey\n  } = keyConfig.value\n  const oldMap = optionValueMap.value\n  const map = new Map<string | number, SelectOptionState>()\n  const states: SelectOptionState[] = []\n  const loop = props.options\n    .map(option => ({ option, depth: 0, parent: null as SelectOptionState | null }))\n    .reverse()\n\n  optionValues.clear()\n\n  for (const option of userOptions.value) {\n    map.set(option.value, option)\n    optionValues.add(option.value)\n  }\n\n  while (loop.length) {\n    const { option, depth, parent } = loop.pop()!\n    const rawOption = typeof option === 'string' ? { [valueKey]: option } : option\n    const group = !!rawOption[groupKey]\n    const value = rawOption[valueKey]\n\n    if (!group && isNull(value)) continue\n\n    const label = rawOption[labelKey] || String(value)\n    const {\n      [disabledKey]: disabled = false,\n      [dividedKey]: divided = false,\n      [titleKey]: title = '',\n      [childrenKey]: children = null\n    } = rawOption\n    const oldState = oldMap.get(rawOption.value)\n    const optionState = reactive({\n      disabled,\n      divided,\n      title,\n      value,\n      label,\n      group,\n      depth,\n      parent,\n      hidden: oldState?.hidden ?? false,\n      hitting: oldState?.hitting ?? false,\n      data: option\n    }) as SelectOptionState\n\n    states.push(optionState)\n\n    if (!group) {\n      map.set(value, optionState)\n      optionValues.add(String(value))\n    }\n\n    if (Array.isArray(children) && children.length) {\n      loop.push(\n        ...children\n          .map(child => {\n            return { option: child, depth: depth + 1, parent: optionState }\n          })\n          .reverse()\n      )\n    }\n  }\n\n  optionValueMap.value = map\n  baseOptions.value = states\n\n  initValueAndLabel(emittedValue)\n}\n\nuseModifier({\n  target: wrapper,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (composing.value) {\n      event.stopPropagation()\n      return\n    }\n\n    if (!currentVisible.value) {\n      if (modifier.space || modifier.enter) {\n        event.preventDefault()\n        event.stopPropagation()\n        toggleVisible()\n      }\n\n      return\n    }\n\n    if (modifier.tab || modifier.escape) {\n      setVisible(false)\n      modifier.resetAll()\n\n      return\n    }\n\n    decide(\n      [\n        [\n          () => modifier.up || modifier.down,\n          () => {\n            const options = visibleOptions.value\n            const length = options.length\n\n            if (!length) return\n\n            const step = modifier.down ? 1 : -1\n\n            let index = (Math.max(-1, currentIndex.value + step) + length) % length\n            let option = options[index]\n\n            for (let i = 0; (option.disabled || option.group) && i < length; ++i) {\n              index += step\n              index = (index + length) % length\n              option = options[index]\n            }\n\n            updateHitting(index)\n          }\n        ],\n        [\n          () => modifier.enter || (!props.filter && modifier.space),\n          () => {\n            if (currentIndex.value >= 0) {\n              handleSelect(totalOptions.value[currentIndex.value])\n            } else if (showDynamic.value) {\n              handleSelect(dynamicOption)\n            } else {\n              setVisible(false)\n            }\n          }\n        ]\n      ],\n      {\n        beforeMatchAny: () => {\n          event.preventDefault()\n          event.stopPropagation()\n        },\n        afterMatchAny: modifier.resetAll\n      }\n    )\n  }\n})\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.ns('input-vars')]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('multiple')]: props.multiple,\n    [nh.bm('filter')]: props.filter,\n    [nh.bm('responsive')]: props.multiple && props.maxTagCount <= 0,\n    [nh.bm('disabled')]: props.disabled\n  }\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst selectorClass = computed(() => {\n  const baseCls = nh.be('selector')\n\n  return {\n    [baseCls]: true,\n    [`${baseCls}--focused`]: !props.disabled && currentVisible.value,\n    [`${baseCls}--disabled`]: props.disabled,\n    [`${baseCls}--readonly`]: readonly.value,\n    [`${baseCls}--loading`]: props.loading,\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\n    [`${baseCls}--${props.state}`]: props.state !== 'default',\n    [`${baseCls}--has-prefix`]: hasPrefix.value,\n    [`${baseCls}--has-suffix`]: !props.noSuffix,\n    [`${baseCls}--transparent`]: props.transparent\n  }\n})\nconst hasValue = computed(\n  () => !isNull(currentValues.value[0]) && (props.multiple || currentValues.value[0] !== '')\n)\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\nconst showDynamic = computed(() => {\n  return !!(\n    props.filter &&\n    props.creatable &&\n    dynamicOption.value &&\n    !optionValues.has(dynamicOption.value)\n  )\n})\nconst totalOptions = computed(() => {\n  return showDynamic.value ? [dynamicOption].concat(visibleOptions.value) : visibleOptions.value\n})\nconst normalOptions = computed(() => optionStates.value.filter(option => !option.group))\nconst optionParentMap = computed(() => {\n  const options = normalOptions.value\n  const map = new Map<string | number, SelectOptionState>()\n\n  for (let i = 0, len = options.length; i < len; ++i) {\n    const option = options[i]\n\n    if (option.parent) {\n      map.set(option.value, option.parent)\n    }\n  }\n\n  return map\n})\nconst showClear = computed(() => {\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && hasValue.value\n})\nconst previewOption = computed(() => {\n  return !props.noPreview && currentVisible.value ? hittingOption.value : undefined\n})\nconst limited = computed(() => {\n  return props.multiple && props.countLimit > 0 && currentValues.value.length >= props.countLimit\n})\nconst showPlaceholder = computed(() => {\n  if (props.filterPosition !== 'in-control') {\n    return (\n      !hasValue.value && !previewOption.value && !!(props.placeholder ?? locale.value.placeholder)\n    )\n  }\n\n  // 采用反推，出现下列情况时不显示：\n  // 1. 开始组合（如输入了任意拼音）\n  // 2. 有值且 未开预览/多选模式/未打开列表\n  // 3. 没有预览选项且没有合法的占位值\n  // 4. 打开列表且输入了过滤值\n  return (\n    !composing.value &&\n    !(hasValue.value && (props.noPreview || props.multiple || !currentVisible.value)) &&\n    !(!previewOption.value && !(props.placeholder ?? locale.value.placeholder)) &&\n    !(currentVisible.value && currentFilter.value)\n  )\n})\n\nfunction getOptionFromMap(value?: SelectBaseValue | null) {\n  if (isNull(value)) return null\n\n  return optionValueMap.value.get(value) ?? cachedSelected.get(value) ?? null\n}\n\nfunction fitPopperWidth() {\n  requestAnimationFrame(() => {\n    updatePopper()\n\n    if (wrapper.value && popper.value?.wrapper) {\n      if (typeof props.fitPopper === 'number') {\n        popper.value.wrapper.style.width = `${props.fitPopper}px`\n      } else if (props.fitPopper) {\n        popper.value.wrapper.style.width = `${wrapper.value.offsetWidth}px`\n      } else {\n        popper.value.wrapper.style.minWidth = `${wrapper.value.offsetWidth}px`\n      }\n    }\n  })\n}\n\nwatch(\n  () => props.visible,\n  value => {\n    currentVisible.value = value\n  }\n)\nwatch(currentVisible, value => {\n  if (value) {\n    restTipShow.value = false\n    initHittingIndex()\n    fitPopperWidth()\n  }\n\n  if (props.filterPosition !== 'in-control') {\n    requestAnimationFrame(syncInputValue)\n  } else {\n    syncInputValue()\n  }\n})\nwatch(\n  () => props.value,\n  value => {\n    if (!emittedValue || !isSameValue(value, emittedValue)) {\n      emittedValue = value\n      initValueAndLabel(value)\n      syncInputValue()\n    }\n  }\n)\nwatch(\n  () => props.disabled,\n  value => {\n    if (value) {\n      setVisible(false)\n    }\n  }\n)\nwatch(readonly, value => {\n  if (value) {\n    setVisible(false)\n  }\n})\nwatch(currentFilter, value => {\n  dynamicOption.value = value\n  dynamicOption.label = value\n  dynamicOption.data = value\n\n  filterOptions(value)\n})\n\ndefineExpose({\n  idFor,\n  labelId,\n  currentVisible,\n  currentValues,\n  currentLabels,\n  optionStates,\n  isHover,\n  currentFilter,\n  composing,\n  visibleOptions,\n  totalOptions,\n\n  wrapper,\n  reference,\n  popper,\n  input,\n  device,\n  virtualList,\n  restTip,\n\n  updatePopper,\n  isSelected,\n  getOptionFromMap,\n  updateHitting,\n  handleClear,\n  focus,\n  blur: () => {\n    input.value?.blur()\n    reference.value?.blur()\n  }\n})\n\nonMounted(() => {\n  syncInputValue()\n\n  if (props.visible) {\n    restTipShow.value = false\n    initHittingIndex()\n    fitPopperWidth()\n  }\n})\n\nfunction initValueAndLabel(value: SelectValue | null) {\n  if (isNull(value)) {\n    currentValues.value = []\n    currentLabels.value = []\n    return\n  }\n\n  const normalizedValue = !Array.isArray(value) ? [value] : value\n\n  const valueSet = new Set(normalizedValue)\n  const selectedValues: SelectBaseValue[] = []\n  const selectedLabels: string[] = []\n\n  valueSet.forEach(value => {\n    let option = getOptionFromMap(value)\n\n    if (option) {\n      selectedValues.push(option.value)\n      selectedLabels.push(option.label)\n\n      if (!cachedSelected.has(option.value)) {\n        cachedSelected.set(option.value, option)\n      }\n    } else if (props.remote) {\n      option = reactive({\n        value,\n        disabled: false,\n        divided: false,\n        title: '',\n        label: String(value),\n        group: false,\n        depth: -1,\n        parent: null,\n        hidden: true,\n        hitting: false,\n        data: value\n      }) as SelectOptionState\n\n      cachedSelected.set(value, option)\n      selectedValues.push(value)\n      selectedLabels.push(option.label)\n    }\n  })\n\n  for (const cachedValue of Array.from(cachedSelected.keys())) {\n    if (!valueSet.has(cachedValue)) {\n      cachedSelected.delete(cachedValue)\n    }\n  }\n\n  currentValues.value = selectedValues\n  currentLabels.value = selectedLabels\n\n  initHittingIndex()\n  filterOptions(currentFilter.value)\n}\n\nfunction initHittingIndex() {\n  const value = currentValues.value[0]\n\n  if (isNull(value)) {\n    updateHitting(-1)\n  } else {\n    if (!isMounted.value) return\n\n    updateHitting(visibleOptions.value.findIndex(option => option.value === value))\n  }\n}\n\nfunction setVisible(visible: boolean) {\n  if (currentVisible.value === visible) return\n\n  currentVisible.value = visible\n\n  emit('update:visible', visible)\n  emitEvent(props.onToggle, visible)\n}\n\nfunction updateHitting(hitting: number, ensureInView = true) {\n  currentIndex.value = hitting\n  hittingOption.value = undefined\n\n  let index = -1\n\n  optionStates.value.forEach(option => {\n    if (!option.hidden) {\n      index += 1\n      option.hitting = hitting === index\n\n      if (option.hitting) {\n        hittingOption.value = option\n      }\n    } else {\n      option.hitting = false\n    }\n  })\n\n  if (ensureInView && currentVisible.value && virtualList.value) {\n    virtualList.value.ensureIndexInView(hitting)\n  }\n}\n\nfunction isSelected(option: SelectOptionState) {\n  if (props.multiple) {\n    return currentValues.value.includes(option.value)\n  }\n\n  return currentValues.value[0] === option.value\n}\n\nfunction filterOptions(inputValue: string) {\n  const filter = props.filter\n\n  if (!filter || props.remote) return\n\n  if (!inputValue) {\n    optionStates.value.forEach(state => {\n      state.hidden = false\n    })\n  } else {\n    optionStates.value.forEach(state => {\n      state.hidden = true\n    })\n\n    if (typeof filter === 'function') {\n      normalOptions.value.forEach(state => {\n        state.hidden = !filter(inputValue, state)\n      })\n    } else {\n      if (props.ignoreCase) {\n        const ignoreCaseValue = inputValue.toString().toLocaleLowerCase()\n\n        normalOptions.value.forEach(state => {\n          state.hidden = !state.label?.toString().toLocaleLowerCase().includes(ignoreCaseValue)\n        })\n      } else {\n        normalOptions.value.forEach(state => {\n          state.hidden = !state.label?.toString().includes(inputValue?.toString())\n        })\n      }\n    }\n\n    const parentMap = optionParentMap.value\n\n    normalOptions.value.forEach(option => {\n      if (!option.hidden && option.parent) {\n        let parent = parentMap.get(option.value) || null\n\n        while (parent && parent.hidden) {\n          parent.hidden = false\n          parent = parent.parent\n        }\n      }\n    })\n  }\n\n  updateHitting(currentIndex.value)\n}\n\nfunction handleTagClose(value?: SelectBaseValue | null) {\n  if (props.disabled || readonly.value) return\n\n  !isNull(value) && handleSelect(getOptionFromMap(value))\n}\n\nfunction handleRestTagClose(value?: SelectBaseValue | null) {\n  handleTagClose(value)\n\n  if (restTipShow.value) {\n    restTip.value?.updatePopper()\n  }\n}\n\nfunction handleSelect(option?: SelectOptionState | null) {\n  if (!option) return\n\n  const selected = isSelected(option)\n  const value = option.value\n\n  if (selected) {\n    if (userOptions.value.find(item => item.value === value)) {\n      removeArrayItem(userOptions.value, item => item.value === value)\n      optionValueMap.value.delete(value)\n    }\n\n    cachedSelected.delete(value)\n  } else {\n    if (!props.multiple) {\n      userOptions.value.length = 0\n    }\n\n    if (limited.value) return\n\n    if (dynamicOption.value && value === dynamicOption.value) {\n      const newOption = { ...dynamicOption }\n\n      userOptions.value.push(newOption)\n      optionValueMap.value.set(value, newOption)\n    }\n\n    cachedSelected.set(option.value, option)\n  }\n\n  emitEvent(\n    props[props.multiple && selected ? 'onCancel' : 'onSelect'] as SelectEvent,\n    value,\n    option.data\n  )\n  handleChange(option)\n\n  if (props.multiple) {\n    if (props.filterPosition === 'in-control') {\n      currentFilter.value = ''\n      syncInputValue()\n    }\n\n    requestAnimationFrame(updatePopper)\n  } else {\n    setVisible(false)\n  }\n\n  anchorWidth.value = 0\n}\n\nfunction handleChange(option: SelectOptionState) {\n  if (props.multiple) {\n    if (isSelected(option)) {\n      const index = currentValues.value.findIndex(v => v === option.value)\n\n      if (~index) {\n        currentValues.value.splice(index, 1)\n        currentLabels.value.splice(index, 1)\n      }\n    } else {\n      currentValues.value.push(option.value)\n      currentLabels.value.push(option.label)\n    }\n\n    emittedValue = Array.from(currentValues.value)\n\n    emit('update:value', emittedValue)\n    emit('update:label', currentLabels.value)\n    setFieldValue(emittedValue)\n    emitEvent(\n      props.onChange as ChangeEvent,\n      emittedValue,\n      emittedValue.map(value => getOptionFromMap(value)?.data ?? value)\n    )\n    validateField()\n  } else {\n    const prevValue = currentValues.value[0]\n\n    currentValues.value.length = 0\n    currentLabels.value.length = 0\n    currentValues.value.push(option.value)\n    currentLabels.value.push(option.label)\n\n    if (prevValue !== option.value) {\n      emittedValue = option.value\n\n      emit('update:value', emittedValue)\n      emit('update:label', currentLabels.value[0])\n      setFieldValue(emittedValue)\n      emitEvent(props.onChange as ChangeEvent, emittedValue, option.data)\n      validateField()\n    }\n  }\n}\n\nfunction toggleVisible() {\n  if (props.disabled || readonly.value) return\n\n  setVisible(!currentVisible.value)\n}\n\nfunction handleClickOutside() {\n  restTipShow.value = false\n  emitEvent(props.onClickOutside)\n\n  if (props.outsideClose && currentVisible.value) {\n    setVisible(false)\n    emitEvent(props.onOutsideClose)\n  }\n}\n\nfunction handleClear() {\n  if (props.disabled || readonly.value) return\n\n  if (props.clearable) {\n    for (const option of userOptions.value) {\n      optionValueMap.value.delete(option.value)\n    }\n\n    cachedSelected.clear()\n\n    userOptions.value.length = 0\n    currentValues.value.length = 0\n    currentLabels.value.length = 0\n    restTipShow.value = false\n\n    emittedValue = props.multiple ? [] : ''\n\n    syncInputValue()\n    emit('update:value', emittedValue)\n    emitEvent(props.onChange as ChangeEvent, emittedValue, props.multiple ? [] : '')\n    emitEvent(props.onClear)\n    clearField(emittedValue!)\n    updatePopper()\n  }\n}\n\nlet focused = false\n\nfunction handleFocus(event: FocusEvent) {\n  if (!focused) {\n    focused = true\n    emitEvent(props.onFocus, event)\n  }\n}\n\nfunction handleBlur(event: FocusEvent) {\n  if (focused) {\n    focused = false\n\n    setTimeout(() => {\n      if (!focused) {\n        emitEvent(props.onBlur, event)\n      }\n    }, 120)\n  }\n}\n\nfunction syncInputValue() {\n  if (!input.value) return\n\n  const visible = currentVisible.value\n\n  if (props.multiple) {\n    input.value.value = ''\n  } else {\n    input.value.value = visible ? '' : currentLabels.value[0] || ''\n  }\n\n  visible ? input.value.focus() : input.value.blur()\n}\n\nfunction handleFilterInput() {\n  if (!input.value || composing.value) return\n\n  let hittingIndex: number\n\n  currentFilter.value = input.value.value\n\n  if (!currentFilter.value) {\n    hittingIndex = -1\n  } else if (showDynamic.value || currentIndex.value !== -1) {\n    hittingIndex = 0\n  } else {\n    hittingIndex = visibleOptions.value.findIndex(\n      option => String(option.label) === currentFilter.value\n    )\n    hittingIndex = hittingIndex === -1 ? 0 : hittingIndex\n  }\n\n  requestAnimationFrame(() => {\n    if (!hittingIndex) {\n      hittingIndex = visibleOptions.value.findIndex(\n        option => !currentValues.value.includes(option.value)\n      )\n    }\n\n    if (hittingIndex !== currentIndex.value) {\n      updateHitting(hittingIndex)\n    }\n\n    if (props.multiple && device.value) {\n      anchorWidth.value = getRangeWidth(device.value)\n    }\n\n    updatePopper()\n  })\n\n  emitEvent(props.onFilterInput, currentFilter.value)\n}\n\nfunction handleCompositionEnd() {\n  if (!composing.value) return\n\n  composing.value = false\n\n  if (input.value) {\n    input.value.dispatchEvent(new Event('input'))\n  }\n}\n\nfunction handleFilterKeyDown(event: KeyboardEvent) {\n  if (!input.value) return\n\n  if (\n    props.filterPosition !== 'in-list' &&\n    event.key === 'Backspace' &&\n    !input.value.value &&\n    !isNull(getLast(currentValues.value))\n  ) {\n    event.stopPropagation()\n    handleTagClose(getLast(currentValues.value))\n  }\n}\n\nfunction toggleShowRestTip() {\n  if (!currentVisible.value) {\n    restTipShow.value = !restTipShow.value\n\n    if (restTipShow.value) {\n      nextTick(() => {\n        restTip.value?.updatePopper()\n      })\n    }\n  } else {\n    toggleVisible()\n    restTipShow.value = false\n  }\n}\n\nfunction focus(options?: FocusOptions) {\n  if (currentVisible.value) {\n    ;(input.value || reference.value)?.focus(options)\n  } else {\n    reference.value?.focus(options)\n  }\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"group\"\n    :aria-disabled=\"toAttrValue(props.disabled)\"\n    :aria-expanded=\"toAttrValue(currentVisible)\"\n    aria-haspopup=\"listbox\"\n    :aria-labelledby=\"labelId\"\n    @click=\"toggleVisible\"\n  >\n    <div\n      ref=\"reference\"\n      :class=\"selectorClass\"\n      tabindex=\"0\"\n      @focus=\"handleFocus\"\n      @blur=\";(!props.filter || !currentVisible) && handleBlur($event)\"\n    >\n      <div\n        v-if=\"hasPrefix\"\n        :class=\"[nh.be('icon'), nh.be('prefix')]\"\n        :style=\"{ color: props.prefixColor }\"\n      >\n        <slot name=\"prefix\">\n          <Renderer :renderer=\"props.slots.prefix\">\n            <Icon :icon=\"props.prefix\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div :class=\"nh.be('control')\">\n        <slot name=\"control\">\n          <Renderer :renderer=\"props.slots.control\">\n            <template v-if=\"props.multiple\">\n              <Overflow\n                inherit\n                :class=\"[nh.be('tags')]\"\n                :items=\"currentValues\"\n                :max-count=\"props.maxTagCount\"\n                :style=\"{\n                  maxWidth: props.maxTagCount <= 0 && `calc(100% - ${anchorWidth}px)`\n                }\"\n                @rest-change=\"restTagCount = $event\"\n              >\n                <template #default=\"{ item: value, index }\">\n                  <Tag\n                    inherit\n                    :class=\"nh.be('tag')\"\n                    :type=\"props.tagType\"\n                    closable\n                    :disabled=\"props.disabled\"\n                    @click.stop=\"toggleVisible\"\n                    @close=\"handleTagClose(value)\"\n                  >\n                    <span :class=\"nh.be('label')\">\n                      <slot name=\"selected\" :option=\"getOptionFromMap(value)\">\n                        <Renderer\n                          :renderer=\"props.slots.selected\"\n                          :data=\"{ option: getOptionFromMap(value) }\"\n                        >\n                          {{ currentLabels[index] }}\n                        </Renderer>\n                      </slot>\n                    </span>\n                  </Tag>\n                </template>\n                <template #counter=\"{ count }\">\n                  <Tag\n                    v-if=\"props.noRestTip\"\n                    inherit\n                    :class=\"[nh.be('tag'), nh.be('counter')]\"\n                    :type=\"props.tagType\"\n                    :disabled=\"props.disabled\"\n                    @click.stop=\"toggleVisible\"\n                  >\n                    {{ `+${count}` }}\n                  </Tag>\n                  <span v-else>\n                    <Tooltip\n                      ref=\"restTip\"\n                      inherit\n                      :transfer=\"false\"\n                      :visible=\"restTipShow\"\n                      trigger=\"custom\"\n                      placement=\"top-end\"\n                      :tip-class=\"nh.be('rest-tip')\"\n                      @click.stop=\"toggleShowRestTip\"\n                    >\n                      <template #trigger>\n                        <Tag\n                          inherit\n                          :class=\"[nh.be('tag'), nh.be('counter')]\"\n                          :type=\"props.tagType\"\n                          :disabled=\"props.disabled\"\n                        >\n                          {{ `+${count}` }}\n                        </Tag>\n                      </template>\n                      <NativeScroll inherit use-y-bar>\n                        <template v-for=\"(value, index) in currentValues\" :key=\"index\">\n                          <Tag\n                            v-if=\"index >= currentValues.length - restTagCount\"\n                            inherit\n                            :class=\"nh.be('tag')\"\n                            closable\n                            :type=\"props.tagType\"\n                            :disabled=\"props.disabled\"\n                            @close=\"handleRestTagClose(value)\"\n                          >\n                            <span :class=\"nh.be('label')\">\n                              <slot name=\"selected\" :option=\"getOptionFromMap(value)\">\n                                <Renderer\n                                  :renderer=\"props.slots.selected\"\n                                  :data=\"{ option: getOptionFromMap(value) }\"\n                                >\n                                  {{ currentLabels[index] }}\n                                </Renderer>\n                              </slot>\n                            </span>\n                          </Tag>\n                        </template>\n                      </NativeScroll>\n                    </Tooltip>\n                  </span>\n                </template>\n              </Overflow>\n              <div\n                v-if=\"props.filter && props.filterPosition === 'in-control'\"\n                :class=\"nh.be('anchor')\"\n                :style=\"{\n                  width: `${anchorWidth}px`\n                }\"\n              >\n                <input\n                  ref=\"nativeInput\"\n                  :class=\"[\n                    nh.be('input'),\n                    nh.bem('input', 'multiple'),\n                    currentVisible && nh.bem('input', 'visible')\n                  ]\"\n                  :disabled=\"props.disabled\"\n                  autocomplete=\"off\"\n                  tabindex=\"-1\"\n                  role=\"combobox\"\n                  aria-autocomplete=\"list\"\n                  :name=\"props.name\"\n                  @submit.prevent\n                  @input=\"handleFilterInput\"\n                  @keydown=\"handleFilterKeyDown\"\n                  @focus=\"handleFocus($event)\"\n                  @blur=\"handleBlur($event)\"\n                  @compositionstart=\"composing = true\"\n                  @compositionend=\"handleCompositionEnd\"\n                  @change=\"handleCompositionEnd\"\n                />\n                <span ref=\"device\" :class=\"nh.be('device')\" aria-hidden=\"true\">\n                  {{ currentFilter }}\n                </span>\n              </div>\n            </template>\n            <template v-else>\n              <input\n                v-if=\"props.filter && props.filterPosition === 'in-control'\"\n                ref=\"nativeInput\"\n                :class=\"[nh.be('input'), currentVisible && nh.bem('input', 'visible')]\"\n                :disabled=\"props.disabled\"\n                autocomplete=\"off\"\n                tabindex=\"-1\"\n                role=\"combobox\"\n                aria-autocomplete=\"list\"\n                :name=\"props.name\"\n                :style=\"{\n                  opacity: currentVisible ? undefined : '0%'\n                }\"\n                @submit.prevent\n                @input=\"handleFilterInput\"\n                @focus=\"handleFocus($event)\"\n                @blur=\"handleBlur($event)\"\n                @compositionstart=\"composing = true\"\n                @compositionend=\"handleCompositionEnd\"\n                @change=\"handleCompositionEnd\"\n              />\n              <span\n                v-if=\"\n                  (props.noPreview || !currentVisible) &&\n                    hasValue &&\n                    (props.filterPosition !== 'in-control' || !currentFilter)\n                \"\n                :class=\"{\n                  [nh.be('selected')]: true,\n                  [nh.bem('selected', 'placeholder')]: props.filter && currentVisible && hasValue\n                }\"\n              >\n                <slot\n                  v-if=\"getOptionFromMap(currentValues[0])\"\n                  name=\"selected\"\n                  :option=\"getOptionFromMap(currentValues[0])\"\n                >\n                  <Renderer\n                    :renderer=\"props.slots.selected\"\n                    :data=\"{ option: getOptionFromMap(currentValues[0]) }\"\n                  >\n                    {{ currentLabels[0] }}\n                  </Renderer>\n                </slot>\n                <template v-else>\n                  {{ currentLabels[0] }}\n                </template>\n              </span>\n            </template>\n            <span v-if=\"showPlaceholder\" :class=\"nh.be('placeholder')\">\n              <slot\n                v-if=\"previewOption\"\n                name=\"selected\"\n                :preview=\"true\"\n                :option=\"previewOption\"\n              >\n                <Renderer\n                  :renderer=\"props.slots.selected\"\n                  :data=\"{ preview: true, option: previewOption }\"\n                >\n                  {{ previewOption.label }}\n                </Renderer>\n              </slot>\n              <template v-else>\n                {{ props.placeholder ?? locale.placeholder }}\n              </template>\n            </span>\n          </Renderer>\n        </slot>\n      </div>\n      <div\n        v-if=\"!props.noSuffix\"\n        :class=\"[nh.be('icon'), nh.be('suffix')]\"\n        :style=\"{\n          color: props.suffixColor,\n          opacity: showClear || props.loading ? '0%' : ''\n        }\"\n      >\n        <slot name=\"suffix\">\n          <Renderer :renderer=\"props.slots.suffix\">\n            <Icon\n              v-if=\"props.suffix\"\n              :icon=\"props.suffix\"\n              :class=\"{\n                [nh.be('arrow')]: !props.staticSuffix\n              }\"\n            ></Icon>\n            <Icon v-else v-bind=\"icons.angleDown\" :class=\"nh.be('arrow')\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div\n        v-else-if=\"props.clearable || props.loading\"\n        :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n      ></div>\n      <Transition :name=\"nh.ns('fade')\" appear>\n        <button\n          v-if=\"showClear\"\n          :class=\"[nh.be('icon'), nh.be('clear')]\"\n          type=\"button\"\n          tabindex=\"-1\"\n          :aria-label=\"locale.ariaLabel.clear\"\n          @click.stop=\"handleClear\"\n        >\n          <Icon v-bind=\"icons.clear\" label=\"clear\"></Icon>\n        </button>\n        <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"props.loadingEffect || icons.loading.effect\"\n            :icon=\"props.loadingIcon || icons.loading.icon\"\n            label=\"loading\"\n          ></Icon>\n        </div>\n      </Transition>\n    </div>\n    <Popper\n      ref=\"popper\"\n      :class=\"[nh.be('popper'), nh.bs('vars')]\"\n      :visible=\"currentVisible\"\n      :to=\"transferTo\"\n      :transition=\"props.transitionName\"\n      :alive=\"props.popperAlive ?? !transferTo\"\n      @click.stop=\"focus\"\n      @after-leave=\"currentFilter = ''\"\n    >\n      <slot\n        name=\"list\"\n        :options=\"totalOptions\"\n        :is-selected=\"isSelected\"\n        :handle-select=\"handleSelect\"\n      >\n        <Renderer\n          :renderer=\"props.slots.list\"\n          :data=\"{ options: totalOptions, isSelected, handleSelect }\"\n        >\n          <div\n            :class=\"[\n              nh.be('list'),\n              (slots.prepend || slots.append) && nh.bem('list', 'with-extra'),\n              props.listClass\n            ]\"\n          >\n            <div v-if=\"props.filter && props.filterPosition === 'in-list'\" :class=\"nh.be('filter')\">\n              <Input\n                ref=\"filterInput\"\n                :class=\"nh.be('filter-input')\"\n                transparent\n                :disabled=\"props.disabled\"\n                :placeholder=\"locale.search\"\n                :autocomplete=\"false\"\n                :tabindex=\"-1\"\n                role=\"combobox\"\n                aria-autocomplete=\"list\"\n                @input=\"handleFilterInput\"\n                @keydown=\"handleFilterKeyDown\"\n                @focus=\"handleFocus\"\n                @blur=\"handleBlur\"\n                @compositionstart=\"composing = true\"\n                @compositionend=\"handleCompositionEnd\"\n                @change=\"handleCompositionEnd\"\n              >\n                <template #suffix>\n                  <Icon v-bind=\"icons.search\"></Icon>\n                </template>\n              </Input>\n            </div>\n            <slot v-if=\"slots.prepend || props.slots.prepend\" name=\"prepend\">\n              <Renderer :renderer=\"props.slots.prepend\"></Renderer>\n            </slot>\n            <VirtualList\n              ref=\"virtualList\"\n              inherit\n              :style=\"{\n                height: undefined,\n                maxHeight: `${props.maxListHeight}px`\n              }\"\n              :items=\"totalOptions\"\n              :item-size=\"32\"\n              use-y-bar\n              :height=\"'100%'\"\n              id-key=\"value\"\n              :items-attrs=\"{\n                class: [nh.be('options'), props.optionCheck ? nh.bem('options', 'has-check') : ''],\n                role: 'listbox',\n                ariaLabel: 'options',\n                ariaMultiselectable: props.multiple\n              }\"\n            >\n              <template #default=\"{ item: option, index }\">\n                <li\n                  v-if=\"option.group\"\n                  :class=\"[nh.ns('option-vars'), nh.be('group')]\"\n                  :title=\"option.label\"\n                >\n                  <slot name=\"group\" :option=\"option\" :index=\"index\">\n                    <Renderer :renderer=\"props.slots.group\" :data=\"{ option, index }\">\n                      <div\n                        :class=\"[nh.be('label'), nh.bem('label', 'group')]\"\n                        :style=\"{ paddingInlineStart: `${option.depth * 6}px` }\"\n                      >\n                        {{ option.label }}\n                      </div>\n                    </Renderer>\n                  </slot>\n                </li>\n                <Option\n                  v-else\n                  :label=\"option.label\"\n                  :value=\"option.value\"\n                  :disabled=\"option.disabled || (limited && !isSelected(option))\"\n                  :divided=\"option.divided\"\n                  :no-title=\"option.title\"\n                  :hitting=\"option.hitting\"\n                  :selected=\"isSelected(option)\"\n                  no-hover\n                  @select=\"handleSelect(option)\"\n                  @mousemove=\"updateHitting(index, false)\"\n                >\n                  <slot :option=\"option\" :index=\"index\" :selected=\"isSelected(option)\">\n                    <Renderer\n                      :renderer=\"props.slots.default\"\n                      :data=\"{ option, index, selected: isSelected(option) }\"\n                    >\n                      <span\n                        :class=\"nh.be('label')\"\n                        :style=\"{ paddingInlineStart: `${option.depth * 6}px` }\"\n                      >\n                        {{ option.label }}\n                      </span>\n                      <Transition v-if=\"props.optionCheck\" :name=\"nh.ns('fade')\" appear>\n                        <Icon\n                          v-if=\"isSelected(option)\"\n                          v-bind=\"icons.check\"\n                          :class=\"nh.be('check')\"\n                        ></Icon>\n                      </Transition>\n                    </Renderer>\n                  </slot>\n                </Option>\n              </template>\n              <template #empty>\n                <div :class=\"nh.be('empty')\">\n                  <slot name=\"empty\">\n                    <Renderer :renderer=\"props.slots.empty\">\n                      {{ props.emptyText ?? locale.empty }}\n                    </Renderer>\n                  </slot>\n                </div>\n              </template>\n            </VirtualList>\n            <slot v-if=\"slots.append || props.slots.append\" name=\"append\">\n              <Renderer :renderer=\"props.slots.append\"></Renderer>\n            </slot>\n          </div>\n        </Renderer>\n      </slot>\n    </Popper>\n  </div>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n  stateProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type {\n  AutoCompleteFilter,\n  AutoCompleteKeyConfig,\n  AutoCompleteRawOption,\n  AutoCompleteSlots,\n  ChangeEvent,\n  EnterEvent\n} from './symbol'\n\nexport const autoCompleteProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('input'),\n  transfer: booleanStringProp,\n  value: [String, Number],\n  options: Array as PropType<AutoCompleteRawOption[]>,\n  filter: {\n    type: [Boolean, Function] as PropType<boolean | AutoCompleteFilter>,\n    default: null\n  },\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  placeholder: String,\n  disabled: booleanProp,\n  transitionName: String,\n  dropDisabled: booleanProp,\n  placement: String as PropType<Placement>,\n  clearable: booleanProp,\n  ignoreCase: booleanProp,\n  autofocus: booleanProp,\n  spellcheck: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  transparent: booleanProp,\n  debounce: booleanProp,\n  delay: Number,\n  keyConfig: Object as PropType<Omit<AutoCompleteKeyConfig, 'label'>>,\n  showEmpty: booleanProp,\n  name: String,\n  popperAlive: booleanProp,\n  slots: Object as PropType<AutoCompleteSlots>,\n  onFocus: eventProp<(event: FocusEvent) => void>(),\n  onBlur: eventProp<(event: FocusEvent) => void>(),\n  onSelect: eventProp<EventListener<ChangeEvent>>(),\n  onInput: eventProp<(value: string) => void>(),\n  onChange: eventProp<EventListener<ChangeEvent>>(),\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onEnter: eventProp<EventListener<EnterEvent>>(),\n  onClear: eventProp()\n})\n\nexport type AutoCompleteProps = ExtractPropTypes<typeof autoCompleteProps>\nexport type AutoCompleteCProps = ConfigurableProps<ExtractPropTypes<typeof autoCompleteProps>>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Select } from '@/components/select'\nimport { useFieldStore } from '@/components/form'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, nextTick, onMounted, ref, toRef, watch, watchEffect } from 'vue'\n\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { placementWhileList, useSetTimeout } from '@vexip-ui/hooks'\nimport { debounce, isNull, throttle, toNumber } from '@vexip-ui/utils'\nimport { autoCompleteProps } from './props'\n\nimport type { SelectExposed } from '@/components/select'\nimport type {\n  AutoCompleteListSlotParams,\n  AutoCompleteRawOption,\n  AutoCompleteSlots,\n  ChangeEvent,\n  EnterEvent\n} from './symbol'\n\ndefineOptions({ name: 'AutoComplete' })\n\nconst select = ref<SelectExposed>()\nconst control = ref<HTMLInputElement>()\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue\n} = useFieldStore<string | number>(() => control.value?.focus())\n\nconst nh = useNameHelper('auto-complete')\n\nconst _props = defineProps(autoCompleteProps)\nconst props = useProps('autoComplete', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  transfer: false,\n  value: {\n    default: () => getFieldValue(),\n    static: true\n  },\n  options: {\n    default: () => [],\n    static: true\n  },\n  filter: false,\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  placeholder: null,\n  disabled: () => disabled.value,\n  transitionName: () => nh.ns('drop'),\n  dropDisabled: false,\n  placement: {\n    default: 'bottom',\n    validator: value => placementWhileList.includes(value)\n  },\n  clearable: false,\n  ignoreCase: false,\n  autofocus: false,\n  spellcheck: false,\n  keyConfig: () => ({}),\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  transparent: false,\n  debounce: false,\n  delay: null,\n  showEmpty: false,\n  name: {\n    default: '',\n    static: true\n  },\n  popperAlive: null,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst slots = defineSlots<AutoCompleteSlots>()\n\nconst locale = useLocale('input', toRef(props, 'locale'))\n\nconst { timer } = useSetTimeout()\n\nconst currentValue = ref(props.value)\nconst currentIndex = ref(-1)\nconst currentVisible = ref(false)\nconst composing = ref(false)\n\nlet changed = false\nlet lastValue = props.value\nlet lastInput = String(lastValue)\n\nconst isReadonly = computed(() => props.loading && props.loadingLock)\nconst optionStates = computed(() => select.value?.optionStates || [])\nconst filteredOptions = computed(() => select.value?.visibleOptions || [])\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\nconst hasSuffix = computed(() => !!(slots.suffix || props.suffix || props.slots.suffix))\n\nwatch(\n  () => props.value,\n  value => {\n    currentValue.value = value\n    lastValue = value\n    lastInput = String(value)\n\n    if (control.value) {\n      control.value.value = String(value)\n    }\n  }\n)\nwatch(currentIndex, computeHitting)\nwatch(currentVisible, value => {\n  if (!value) {\n    currentIndex.value = -1\n  } else {\n    control.value?.focus()\n  }\n})\nwatch(currentValue, value => {\n  if (props.filter && select.value) {\n    select.value.currentFilter = `${value}`\n  }\n})\nwatchEffect(() => {\n  if (!props.filter || !currentVisible.value || !select.value) return\n\n  select.value.currentFilter = String(currentValue.value)\n})\n\ndefineExpose({\n  idFor,\n  composing,\n  select,\n  control,\n  focus: (options?: FocusOptions) => control.value?.focus(options),\n  blur: () => control.value?.blur()\n})\n\nonMounted(() => {\n  nextTick(() => {\n    if (control.value && !isNull(currentValue.value)) {\n      control.value.value = String(currentValue.value)\n    }\n  })\n})\n\nfunction computeHitting() {\n  const hitting = currentIndex.value\n  let index = -1\n\n  optionStates.value.forEach(state => {\n    if (!state.hidden) {\n      index += 1\n      state.hitting = hitting === index\n\n      if (state.hitting) {\n        if (control.value) {\n          control.value.value = String(state.value)\n        }\n      }\n    } else {\n      state.hitting = false\n    }\n  })\n\n  if (control.value && hitting < 0) {\n    control.value.value = lastInput\n  }\n}\n\nlet focused = false\n\nfunction handleFocus(event: FocusEvent) {\n  if (!focused) {\n    focused = true\n    emitEvent(props.onFocus, event)\n  }\n}\n\nfunction handleBlur(event: FocusEvent) {\n  if (focused) {\n    focused = false\n\n    timer.focus = setTimeout(() => {\n      if (!focused) {\n        emitEvent(props.onBlur, event)\n        handleChange()\n      }\n    }, 120)\n  }\n}\n\nfunction handleSelect(value: string | number, data: AutoCompleteRawOption) {\n  if (composing.value || isNull(value)) {\n    return\n  }\n\n  const prevValue = currentValue.value\n  currentValue.value = value\n\n  emitEvent(props.onSelect as ChangeEvent, value, data)\n\n  if (value !== prevValue) {\n    changed = true\n    handleChange()\n  } else {\n    currentVisible.value = false\n  }\n}\n\nfunction handleInputInternal(event: string | Event) {\n  const value = typeof event === 'string' ? event : (event.target as HTMLInputElement).value\n\n  currentValue.value = value\n  changed = true\n  lastInput = value\n\n  if (currentIndex.value !== -1) {\n    currentIndex.value = 0\n  }\n\n  if (props.showEmpty) {\n    currentVisible.value = !props.dropDisabled\n\n    if (select.value) {\n      select.value.currentVisible = currentVisible.value\n    }\n  }\n\n  emitEvent(props.onInput, value)\n  nextTick(testOptionCanDrop)\n  select.value?.updatePopper()\n}\n\nconst delay = toNumber(props.delay)\nconst handleInput = props.debounce\n  ? debounce(handleInputInternal, delay || 100)\n  : throttle(handleInputInternal, delay || 16)\n\nfunction handleChange(valid = true) {\n  if (!changed || currentValue.value === lastValue) return\n\n  changed = false\n  lastValue = currentValue.value\n  lastInput = String(lastValue)\n\n  const option = optionStates.value.find(option => option.value === lastValue)\n\n  if (select.value) {\n    select.value.currentValues.length = 0\n    ;(currentValue.value || currentValue.value === 0) &&\n      select.value.currentValues.push(currentValue.value)\n  }\n\n  emit('update:value', currentValue.value)\n  setFieldValue(currentValue.value)\n  emitEvent(props.onChange as ChangeEvent, currentValue.value, option?.data || null!)\n  valid && validateField()\n\n  currentVisible.value = false\n\n  if (control.value) {\n    control.value.value = String(lastValue)\n  }\n}\n\nlet beforeVisible = false\nlet inClickProcess = false\n\nfunction beforeClick() {\n  if (props.disabled || isReadonly.value) return\n\n  beforeVisible = currentVisible.value\n  inClickProcess = true\n\n  if (select.value) {\n    select.value.currentFilter = String(currentValue.value)\n  }\n}\n\nfunction handleClick() {\n  if (props.disabled || isReadonly.value) return\n\n  inClickProcess = false\n\n  if (!select.value) return\n\n  currentVisible.value = true\n\n  if (!beforeVisible) {\n    testOptionCanDrop()\n    beforeVisible = currentVisible.value\n    beforeVisible && emitEvent(props.onToggle, beforeVisible)\n  } else {\n    select.value.currentVisible = true\n  }\n}\n\nfunction handleToggle(visible: boolean) {\n  if (props.disabled || isReadonly.value || inClickProcess) return\n\n  currentVisible.value = visible\n\n  visible && testOptionCanDrop()\n  beforeVisible = currentVisible.value\n\n  if (currentVisible.value !== visible) {\n    emitEvent(props.onToggle, currentVisible.value)\n  }\n\n  if (!currentVisible.value) {\n    currentIndex.value = -1\n  }\n}\n\nfunction testOptionCanDrop() {\n  currentVisible.value = !(\n    props.dropDisabled ||\n    (!props.showEmpty && !filteredOptions.value.length)\n  )\n\n  if (select.value) {\n    select.value.currentVisible = currentVisible.value\n  }\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n  if (composing.value) {\n    event.stopPropagation()\n    return\n  }\n\n  const key = event.code || event.key\n\n  if (key === 'Enter' || key === 'NumpadEnter') {\n    handleEnter(event)\n  } else if (key === 'ArrowDown' || key === 'ArrowUp') {\n    event.preventDefault()\n    event.stopPropagation()\n\n    const options = filteredOptions.value\n    const length = options.length\n\n    if (!length) return\n\n    const step = key === 'ArrowDown' ? 1 : -1\n\n    // 初始状态时 currentIndex 为 -1，往上时会得到 -2 导致行为不按预期，需限制\n    let index = (Math.max(currentIndex.value + step, -1) + length) % length\n    let option = options[index]\n\n    for (let i = 0; (option.disabled || option.group) && i < length; ++i) {\n      index += step\n      index = (index + length) % length\n      option = options[index]\n    }\n\n    currentIndex.value = index\n  } else {\n    if (['Space', ' '].includes(key)) {\n      event.stopPropagation()\n    }\n\n    if (!['Enter', 'ArrowLeft', 'ArrowRight'].includes(key)) {\n      // 进行了其他按键则重置\n      currentIndex.value = -1\n    }\n  }\n}\n\nfunction handleEnter(event: KeyboardEvent) {\n  event.stopPropagation()\n\n  if (composing.value) return\n\n  if (currentIndex.value >= 0 && filteredOptions.value.length) {\n    const option = filteredOptions.value[currentIndex.value === -1 ? 0 : currentIndex.value]\n\n    handleSelect(option.value, option.data)\n  } else {\n    handleChange()\n  }\n\n  emitEvent(props.onEnter as EnterEvent, currentValue.value)\n  currentVisible.value = false\n}\n\nfunction handleClear() {\n  if (props.clearable) {\n    const prevValue = currentValue.value\n\n    currentValue.value = ''\n    currentVisible.value = false\n\n    if (!isNull(prevValue) && prevValue !== currentValue.value) {\n      changed = true\n    }\n\n    handleChange(false)\n    emitEvent(props.onClear)\n    nextTick(clearField)\n    control.value?.focus()\n  }\n}\n\nfunction handleCompositionEnd() {\n  if (composing.value) {\n    composing.value = false\n\n    if (control.value) {\n      control.value.dispatchEvent(new Event('input'))\n    }\n  }\n}\n</script>\n\n<template>\n  <Select\n    :id=\"idFor\"\n    ref=\"select\"\n    v-model:visible=\"currentVisible\"\n    :class=\"[nh.b(), props.inherit && nh.bm('inherit')]\"\n    :inherit=\"props.inherit\"\n    :label-id=\"labelId\"\n    :list-class=\"nh.be('list')\"\n    :value=\"currentValue\"\n    :size=\"props.size\"\n    :state=\"props.state\"\n    :clearable=\"props.clearable\"\n    :transition-name=\"props.transitionName\"\n    :disabled=\"props.disabled\"\n    :transfer=\"props.transfer\"\n    :placement=\"props.placement\"\n    :prefix-color=\"props.prefixColor\"\n    :suffix-color=\"props.suffixColor\"\n    :no-suffix=\"!hasSuffix\"\n    :placeholder=\"props.placeholder\"\n    :options=\"props.options\"\n    :key-config=\"props.keyConfig\"\n    :loading=\"props.loading\"\n    :loading-icon=\"props.loadingIcon\"\n    :loading-lock=\"props.loadingLock\"\n    :loading-effect=\"props.loadingEffect\"\n    :transparent=\"transparent\"\n    :filter=\"props.filter\"\n    :ignore-case=\"props.ignoreCase\"\n    :popper-alive=\"props.popperAlive\"\n    @toggle=\"handleToggle\"\n    @select=\"handleSelect\"\n    @clear=\"handleClear\"\n    @focus=\"control?.focus()\"\n    @outside-close=\"handleChange\"\n    @click=\"handleClick\"\n    @click.capture=\"beforeClick\"\n  >\n    <template v-if=\"hasPrefix\" #prefix>\n      <slot name=\"prefix\">\n        <Renderer :renderer=\"props.slots.prefix\">\n          <Icon :icon=\"props.prefix\"></Icon>\n        </Renderer>\n      </slot>\n    </template>\n    <template #control>\n      <slot\n        name=\"control\"\n        :value=\"currentValue\"\n        :on-input=\"handleInput\"\n        :on-change=\"handleChange\"\n        :on-enter=\"handleEnter\"\n        :on-clear=\"handleClear\"\n      >\n        <Renderer\n          :renderer=\"props.slots.control\"\n          :data=\"{\n            value: currentValue,\n            onInput: handleInput,\n            onChange: handleChange,\n            onEnter: handleEnter,\n            onClear: handleClear\n          }\"\n        >\n          <input\n            ref=\"control\"\n            :class=\"nh.be('input')\"\n            :autofocus=\"props.autofocus\"\n            :spellcheck=\"props.spellcheck\"\n            :disabled=\"props.disabled\"\n            :placeholder=\"props.placeholder ?? locale.placeholder\"\n            :readonly=\"isReadonly\"\n            :name=\"props.name\"\n            autocomplete=\"off\"\n            tabindex=\"-1\"\n            role=\"combobox\"\n            aria-autocomplete=\"list\"\n            @submit.prevent\n            @input=\"handleInput\"\n            @keydown=\"handleKeyDown\"\n            @focus=\"handleFocus($event)\"\n            @blur=\"handleBlur($event)\"\n            @compositionstart=\"composing = true\"\n            @compositionend=\"handleCompositionEnd\"\n            @change=\"handleCompositionEnd\"\n          />\n        </Renderer>\n      </slot>\n    </template>\n    <template v-if=\"hasSuffix\" #suffix>\n      <slot name=\"suffix\">\n        <Renderer :renderer=\"props.slots.suffix\">\n          <Icon :icon=\"props.suffix\"></Icon>\n        </Renderer>\n      </slot>\n    </template>\n    <template v-if=\"$slots.default || props.slots.default\" #default=\"{ option, index, selected }\">\n      <slot :option=\"option\" :index=\"index\" :selected=\"selected\">\n        <Renderer :renderer=\"props.slots.default\" :data=\"{ option, index, selected }\"></Renderer>\n      </slot>\n    </template>\n    <template v-if=\"$slots.group || props.slots.group\" #group=\"{ option, index }\">\n      <slot name=\"group\" :option=\"option\" :index=\"index\">\n        <Renderer :renderer=\"props.slots.group\" :data=\"{ option, index }\"></Renderer>\n      </slot>\n    </template>\n    <template v-if=\"$slots.prepend || props.slots.prepend\" #prepend>\n      <slot name=\"prepend\">\n        <Renderer :renderer=\"props.slots.prepend\"></Renderer>\n      </slot>\n    </template>\n    <template v-if=\"$slots.append || props.slots.append\" #append>\n      <slot name=\"append\">\n        <Renderer :renderer=\"props.slots.append\"></Renderer>\n      </slot>\n    </template>\n    <template\n      v-if=\"$slots.list || props.slots.list\"\n      #list=\"{ options, isSelected, handleSelect: onSelect }\"\n    >\n      <slot\n        name=\"list\"\n        :options=\"options\"\n        :is-selected=\"isSelected as AutoCompleteListSlotParams['isSelected']\"\n        :handle-select=\"onSelect as AutoCompleteListSlotParams['handleSelect']\"\n      >\n        <Renderer\n          :renderer=\"props.slots.list\"\n          :data=\"{\n            options,\n            isSelected,\n            handleSelect: onSelect\n          }\"\n        ></Renderer>\n      </slot>\n    </template>\n  </Select>\n</template>\n","import { booleanProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ComponentSize, ConfigurableProps } from '@vexip-ui/config'\nimport type { AvatarGroupSlots, AvatarObjectFit, AvatarOption, AvatarSlots } from './symbol'\n\nexport const avatarProps = buildProps({\n  size: [Number, String] as PropType<number | ComponentSize>,\n  src: String,\n  icon: iconProp,\n  circle: booleanProp,\n  alt: String,\n  fit: String as PropType<AvatarObjectFit>,\n  srcSet: String,\n  gap: Number,\n  iconScale: Number,\n  fallbackSrc: String,\n  color: String,\n  background: String,\n  slots: Object as PropType<AvatarSlots>,\n  onError: eventProp<(event: Event) => void>(),\n  onClick: eventProp<(event: MouseEvent) => void>()\n})\n\nexport type AvatarProps = ExtractPropTypes<typeof avatarProps>\nexport type AvatarCProps = ConfigurableProps<ExtractPropTypes<typeof avatarProps>, 'src'>\n\nexport const avatarGroupProps = buildProps({\n  size: [Number, String] as PropType<number | ComponentSize>,\n  options: Object as PropType<AvatarOption[]>,\n  circle: booleanProp,\n  max: Number,\n  showTip: booleanProp,\n  tipTrigger: String as PropType<'hover' | 'click'>,\n  vertical: booleanProp,\n  offset: Number,\n  restColor: String,\n  restBackground: String,\n  slots: Object as PropType<AvatarGroupSlots>\n})\n\nexport type AvatarGroupProps = ExtractPropTypes<typeof avatarGroupProps>\nexport type AvatarGroupCProps = ConfigurableProps<ExtractPropTypes<typeof avatarGroupProps>>\n","import type { InjectionKey } from 'vue'\nimport type { ComponentSize } from '@vexip-ui/config'\n\nexport type AvatarObjectFit = 'fill' | 'contain' | 'cover' | 'none' | 'scale-down'\nexport type AvatarOption = ({ src: string } | { icon: Record<string, any> } | { text: string }) &\nRecord<string, any>\n\nexport interface AvatarGroupState {\n  size: number | ComponentSize\n}\n\nexport interface AvatarSlots {\n  default?: () => any,\n  icon?: () => any\n}\n\nexport interface AvatarGroupSlots {\n  default?: (params: { option: AvatarOption, index: number }) => any,\n  rest?: (params: { options: AvatarOption[], count: number }) => any,\n  tip?: (params: { options: AvatarOption[], count: number }) => any\n}\n\nexport const GROUP_STATE = '__VXP_AVATAR_GROUP_STATE' as unknown as InjectionKey<AvatarGroupState>\n\nexport const objectFitValues = Object.freeze<AvatarObjectFit[]>([\n  'fill',\n  'contain',\n  'cover',\n  'none',\n  'scale-down'\n])\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { ResizeObserver } from '@/components/resize-observer'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, inject, ref, watch } from 'vue'\n\nimport { createIconProp, emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useDisplay } from '@vexip-ui/hooks'\nimport { avatarProps } from './props'\nimport { GROUP_STATE, objectFitValues } from './symbol'\n\nimport type { ComponentSize, StyleType } from '@vexip-ui/config'\n\ndefineOptions({ name: 'Avatar' })\n\nconst _props = defineProps(avatarProps)\nconst props = useProps('avatar', _props, {\n  size: 'default',\n  src: {\n    default: '',\n    static: true\n  },\n  icon: createIconProp(),\n  circle: false,\n  alt: '',\n  fit: {\n    default: 'cover',\n    validator: value => objectFitValues.includes(value)\n  },\n  srcSet: '',\n  gap: 4,\n  iconScale: 1.4,\n  fallbackSrc: '',\n  color: null,\n  background: null,\n  slots: () => ({})\n})\n\nconst slots = defineSlots<{\n  default?: () => any,\n  icon?: () => any\n}>()\n\nconst groupState = inject(GROUP_STATE, null)\n\nconst nh = useNameHelper('avatar')\n\nconst loadFail = ref(false)\nconst fallbackFail = ref(false)\n\nconst wrapper = ref<HTMLElement>()\nconst text = useDisplay(() => scaleText(true))\n\nconst size = computed(() => {\n  return groupState?.size ?? props.size\n})\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm(size.value as ComponentSize)]:\n      typeof size.value !== 'number' && size.value !== 'default',\n    [nh.bm('circle')]: props.circle\n  }\n})\nconst style = computed(() => {\n  const style: StyleType = {\n    [nh.cv('color')]: props.color,\n    [nh.cv('bg-color')]: props.background,\n    [nh.cv('image-fit')]: props.fit\n  }\n\n  if (typeof size.value === 'number') {\n    style[nh.cv('size')] = `${size.value}px`\n  }\n\n  return style\n})\n\nwatch(\n  () => props.src,\n  () => {\n    loadFail.value = false\n    fallbackFail.value = false\n    scaleText()\n  }\n)\nwatch(\n  () => props.fallbackSrc,\n  () => {\n    fallbackFail.value = false\n    scaleText()\n  }\n)\nwatch(\n  () => props.gap,\n  () => scaleText()\n)\n\ndefineExpose({ loadFail, fallbackFail })\n\nfunction handleError(event: Event) {\n  loadFail.value = true\n  emitEvent(props.onError, event)\n}\n\nlet lastText: string | null = null\n\nfunction scaleText(force = false) {\n  const avatarEl = wrapper.value\n  const textEl = text.value\n\n  if (avatarEl && textEl && (force || lastText === null || lastText !== textEl.textContent)) {\n    lastText = textEl.textContent\n\n    const { offsetWidth: avatarWidth, offsetHeight: avatarHeight } = avatarEl\n    const { offsetWidth: textWidth, offsetHeight: textHeight } = textEl\n    const padding = props.gap * 2\n\n    const ratio = Math.min(\n      (avatarWidth - padding) / (textWidth || 1),\n      (avatarHeight - padding) / (textHeight || 1),\n      1\n    )\n\n    textEl.style.transform = `scale(${ratio})`\n  }\n}\n\nfunction handleClick(event: MouseEvent) {\n  emitEvent(props.onClick, event)\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"className\"\n    :style=\"style\"\n    @click=\"handleClick\"\n  >\n    <img\n      v-if=\"(props.src || props.srcSet) && !loadFail\"\n      :class=\"nh.be('image')\"\n      :src=\"props.src\"\n      :alt=\"props.alt\"\n      :srcset=\"props.srcSet\"\n      @error=\"handleError\"\n    />\n    <img\n      v-else-if=\"loadFail && props.fallbackSrc && !fallbackFail\"\n      :class=\"nh.be('image')\"\n      :src=\"props.fallbackSrc\"\n      :alt=\"props.alt\"\n      @error=\"fallbackFail = true\"\n    />\n    <template v-else-if=\"icon || slots.icon\">\n      <slot name=\"icon\">\n        <Renderer :renderer=\"props.slots.icon\">\n          <Icon :class=\"nh.be('icon')\" :icon=\"icon\" :scale=\"props.iconScale\"></Icon>\n        </Renderer>\n      </slot>\n    </template>\n    <ResizeObserver v-else :on-resize=\"scaleText\">\n      <span ref=\"text\" :class=\"nh.be('text')\">\n        <slot>\n          <Renderer :renderer=\"props.slots.default\"></Renderer>\n        </slot>\n      </span>\n    </ResizeObserver>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Avatar } from '@/components/avatar'\nimport { Renderer } from '@/components/renderer'\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, provide, ref, watchEffect } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { avatarGroupProps } from './props'\nimport { GROUP_STATE } from './symbol'\n\nimport type { ComponentSize } from '@vexip-ui/config'\nimport type { AvatarGroupSlots, AvatarOption } from './symbol'\n\ndefineOptions({ name: 'AvatarGroup' })\n\nconst _props = defineProps(avatarGroupProps)\nconst props = useProps('avatarGroup', _props, {\n  size: 'default',\n  options: {\n    default: () => [],\n    static: true\n  },\n  circle: false,\n  max: null,\n  showTip: false,\n  tipTrigger: 'hover',\n  vertical: false,\n  offset: null,\n  restColor: null,\n  restBackground: null,\n  slots: () => ({})\n})\n\ndefineSlots<AvatarGroupSlots>()\n\nconst nh = useNameHelper('avatar-group')\n\nconst renderAvatars = ref<AvatarOption[]>([])\nconst restAvatars = ref<AvatarOption[]>([])\n\nwatchEffect(() => {\n  const size = props.options.length\n\n  if (props.max > 0 && size > props.max) {\n    renderAvatars.value = props.options.slice(0, props.max - 1)\n    restAvatars.value = props.options.slice(props.max - 1)\n  } else {\n    renderAvatars.value = Array.from(props.options)\n    restAvatars.value = []\n  }\n})\n\nprovide(GROUP_STATE, props)\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.ns('avatar-vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm(props.size as ComponentSize)]:\n      typeof props.size !== 'number' && props.size !== 'default',\n    [nh.bm('circle')]: props.circle,\n    [nh.bm('vertical')]: props.vertical\n  }\n})\nconst style = computed(() => {\n  const style: Record<string, string> = {}\n\n  if (typeof props.offset === 'number') {\n    style[nh.cv('offset')] = `${props.offset}px`\n  }\n\n  return style\n})\n</script>\n\n<template>\n  <div :class=\"className\" role=\"group\" :style=\"style\">\n    <div v-for=\"(option, index) in renderAvatars\" :key=\"index\" :class=\"nh.be('item')\">\n      <slot :option=\"option\" :index=\"index\">\n        <Renderer :renderer=\"props.slots.default\" :data=\"{ option, index }\">\n          <Avatar\n            inherit\n            :src=\"option.src\"\n            :icon=\"option.icon\"\n            :alt=\"option.alt\"\n            :fit=\"option.fit\"\n            :src-set=\"option.srcSet\"\n            :gap=\"option.gap\"\n            :icon-scale=\"option.iconScale\"\n            :fallback-src=\"option.fallbackSrc\"\n          >\n            {{ option.text }}\n          </Avatar>\n        </Renderer>\n      </slot>\n    </div>\n    <div v-if=\"restAvatars.length\" :class=\"[nh.be('item'), nh.bem('item', 'rest')]\">\n      <Tooltip\n        v-if=\"props.showTip\"\n        inherit\n        :trigger=\"props.tipTrigger\"\n        :tip-class=\"nh.be('rest')\"\n      >\n        <template #trigger>\n          <slot name=\"rest\" :options=\"restAvatars\" :count=\"restAvatars.length\">\n            <Renderer\n              :renderer=\"props.slots.rest\"\n              :data=\"{ options: restAvatars, count: restAvatars.length }\"\n            >\n              <Avatar inherit :color=\"props.restColor\" :background=\"props.restBackground\">\n                {{ `+${restAvatars.length}` }}\n              </Avatar>\n            </Renderer>>\n          </slot>\n        </template>\n        <slot name=\"tip\" :options=\"restAvatars\" :count=\"restAvatars.length\">\n          <Renderer\n            :renderer=\"props.slots.tip\"\n            :data=\"{ options: restAvatars, count: restAvatars.length }\"\n          >\n            <Avatar\n              v-for=\"(option, index) in restAvatars\"\n              :key=\"index\"\n              inherit\n              :src=\"option.src\"\n              :icon=\"option.icon\"\n              :alt=\"option.alt\"\n              :fit=\"option.fit\"\n              :src-set=\"option.srcSet\"\n              :gap=\"option.gap\"\n              :icon-scale=\"option.iconScale\"\n              :fallback-src=\"option.fallbackSrc\"\n            >\n              {{ option.text }}\n            </Avatar>\n          </Renderer>\n        </slot>\n      </Tooltip>\n      <slot\n        v-else\n        name=\"rest\"\n        :options=\"restAvatars\"\n        :count=\"restAvatars.length\"\n      >\n        <Renderer\n          :renderer=\"props.slots.rest\"\n          :data=\"{ options: restAvatars, count: restAvatars.length }\"\n        >\n          <Avatar inherit :color=\"props.restColor\" :background=\"props.restBackground\">\n            {{ `+${restAvatars.length}` }}\n          </Avatar>\n        </Renderer>\n      </slot>\n    </div>\n  </div>\n</template>\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { BadgeSlots, BadgeType } from './symbol'\n\nexport const badgeProps = buildProps({\n  content: [Number, String],\n  max: Number,\n  disabled: booleanProp,\n  isDot: booleanProp,\n  type: String as PropType<BadgeType>,\n  color: String,\n  slots: Object as PropType<BadgeSlots>,\n  onBadgeClick: eventProp<(event: MouseEvent) => void>()\n})\n\nexport type BadgeProps = ExtractPropTypes<typeof badgeProps>\nexport type BadgeCProps = ConfigurableProps<BadgeProps, 'content'>\n","export type BadgeType = 'error' | 'primary' | 'success' | 'warning' | 'info' | 'disabled'\n\nexport interface BadgeSlots {\n  default?: () => any,\n  content?: (params: { content: number | string }) => any\n}\n\nexport const badgeTypes = Object.freeze<BadgeType[]>([\n  'error',\n  'primary',\n  'success',\n  'warning',\n  'info',\n  'disabled'\n])\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\n\nimport { computed } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { badgeProps } from './props'\nimport { badgeTypes } from './symbol'\n\nimport type { BadgeSlots } from './symbol'\n\ndefineOptions({ name: 'Badge' })\n\nconst _props = defineProps(badgeProps)\nconst props = useProps('badge', _props, {\n  content: {\n    default: null,\n    static: true\n  },\n  max: 0,\n  disabled: false,\n  isDot: false,\n  type: {\n    default: 'error',\n    validator: value => badgeTypes.includes(value)\n  },\n  color: null,\n  slots: () => ({})\n})\n\nconst slots = defineSlots<BadgeSlots>()\n\nconst nh = useNameHelper('badge')\n\nconst hasSlot = computed(() => {\n  return !!slots.default\n})\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('not-wrapper')]: !hasSlot.value,\n    [nh.bm('is-dot')]: props.isDot\n  }\n})\nconst renderContent = computed(() => {\n  if (props.isDot) return ''\n\n  if (typeof props.content === 'number' && props.max > 0) {\n    return props.content > props.max ? `${props.max}+` : props.content\n  }\n\n  return props.content\n})\nconst transitionName = computed(() => {\n  return hasSlot.value ? nh.bs('badge-zoom') : nh.bs('zoom')\n})\nconst title = computed(() => {\n  return props.content || props.content === 0 ? props.content.toString() : undefined\n})\nconst showSub = computed(() => {\n  return !props.disabled && (props.content || props.content === 0 || props.isDot)\n})\n\nfunction handleBadgeClick(event: MouseEvent) {\n  emitEvent(props.onBadgeClick, event)\n}\n</script>\n\n<template>\n  <div :class=\"className\">\n    <slot>\n      <Renderer :renderer=\"props.slots.default\"></Renderer>\n    </slot>\n    <Transition :name=\"transitionName\">\n      <sup\n        v-show=\"showSub\"\n        :class=\"{\n          [nh.be('content')]: true,\n          [nh.bem('content', 'fixed')]: hasSlot,\n          [nh.bem('content', props.type)]: props.type !== 'error'\n        }\"\n        :style=\"{ backgroundColor: props.color }\"\n        :title=\"title\"\n        @click=\"handleBadgeClick\"\n      >\n        <slot name=\"content\" :content=\"renderContent\">\n          <Renderer :renderer=\"props.slots.content\" :data=\"{ content: renderContent }\">\n            {{ renderContent }}\n          </Renderer>\n        </slot>\n      </sup>\n    </Transition>\n  </div>\n</template>\n","import { booleanProp, buildProps, eventProp, wrapProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { Router } from 'vue-router'\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\nimport type { BreadcrumbOptions, BreadcrumbSlots, SelectEvent } from './symbol'\n\nexport const breadcrumbProps = buildProps({\n  separator: String,\n  border: booleanProp,\n  options: Array as PropType<(string | BreadcrumbOptions)[]>,\n  router: Object as PropType<Router>,\n  slots: Object as PropType<BreadcrumbSlots>,\n  onSelect: eventProp<EventListener<SelectEvent>>(),\n  onSeparatorClick: eventProp<EventListener<SelectEvent>>()\n})\n\nexport type BreadcrumbProps = ExtractPropTypes<typeof breadcrumbProps>\nexport type BreadcrumbCProps = ConfigurableProps<BreadcrumbProps>\n\nexport const breadcrumbItemProps = wrapProps({\n  label: {\n    type: [String, Number],\n    default: null\n  },\n  onSelect: eventProp<EventListener<SelectEvent>>(),\n  onSeparatorClick: eventProp<EventListener<SelectEvent>>()\n})\n\nexport type BreadcrumbItemProps = ExtractPropTypes<typeof breadcrumbItemProps>\n","import type { InjectionKey } from 'vue'\n\nexport interface BreadcrumbOptions {\n  label: string,\n  name?: string | (() => string)\n}\n\nexport type SeparatorRenderFn = (data: { label: string | number }) => any\n\nexport interface BreadcrumbItemState {\n  label: string | number\n}\n\nexport interface BreadcrumbState {\n  separator: string,\n  separatorRenderer: null | SeparatorRenderFn,\n  increaseItem: (item: BreadcrumbItemState) => void,\n  decreaseItem: (item: BreadcrumbItemState) => void,\n  handleSelect: (label: string | number) => void,\n  refreshLabels: () => void,\n  handleSeparatorClick: (label: string | number) => void\n}\n\nexport type SelectEvent = (label: string | number) => void\n\nexport interface BreadcrumbSlots {\n  default?: () => any,\n  item?: (params: { option: BreadcrumbOptions, index: number }) => any,\n  separator?: (params: { label: string | number }) => any\n}\n\nexport const BREADCRUMB_STATE = '__VXP_BREADCRUMB_STATE' as unknown as InjectionKey<BreadcrumbState>\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\n\nimport { inject, onBeforeUnmount, reactive, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper } from '@vexip-ui/config'\nimport { isFunction } from '@vexip-ui/utils'\nimport { breadcrumbItemProps } from './props'\nimport { BREADCRUMB_STATE } from './symbol'\n\nimport type { BreadcrumbItemState, SelectEvent, SeparatorRenderFn } from './symbol'\n\ndefineOptions({ name: 'BreadcrumbItem' })\n\nconst props = defineProps(breadcrumbItemProps)\n\ndefineSlots<{\n  default: () => any,\n  separator: () => any\n}>()\n\nconst nh = useNameHelper('breadcrumb')\n\nconst breadcrumbState = inject(BREADCRUMB_STATE, null)\n\nconst currentLabel = ref(props.label)\nconst separator = ref('/')\nconst separatorRenderer = ref<SeparatorRenderFn | null>(null)\n\nwatch(\n  () => props.label,\n  value => {\n    currentLabel.value = value\n    breadcrumbState?.refreshLabels()\n  }\n)\n\nif (breadcrumbState) {\n  const state: BreadcrumbItemState = reactive({\n    label: currentLabel\n  })\n\n  watch(\n    () => breadcrumbState.separator,\n    value => {\n      separator.value = value\n    },\n    { immediate: true }\n  )\n  watch(\n    () => breadcrumbState.separatorRenderer,\n    value => {\n      separatorRenderer.value = value\n    },\n    { immediate: true }\n  )\n\n  breadcrumbState.increaseItem(state)\n\n  onBeforeUnmount(() => {\n    breadcrumbState.decreaseItem(state)\n  })\n}\n\nfunction handleClick() {\n  emitEvent(props.onSelect! as SelectEvent, currentLabel.value)\n  breadcrumbState?.handleSelect(currentLabel.value)\n}\n\nfunction handleSeparatorClick() {\n  emitEvent(props.onSeparatorClick! as SelectEvent, currentLabel.value)\n  breadcrumbState?.handleSeparatorClick(currentLabel.value)\n}\n</script>\n\n<template>\n  <li :class=\"nh.be('item')\">\n    <a\n      :class=\"nh.be('label')\"\n      tabindex=\"0\"\n      @click=\"handleClick\"\n      @keydown.enter=\"handleClick\"\n    >\n      <slot>{{ label }}</slot>\n    </a>\n    <span :class=\"nh.be('separator')\" role=\"separator\" @click=\"handleSeparatorClick\">\n      <slot name=\"separator\">\n        <Renderer\n          v-if=\"isFunction(separatorRenderer)\"\n          :renderer=\"separatorRenderer\"\n          :data=\"{ label: currentLabel }\"\n        ></Renderer>\n        <template v-else>\n          {{ separator }}\n        </template>\n      </slot>\n    </span>\n  </li>\n</template>\n","<script setup lang=\"ts\">\nimport { BreadcrumbItem } from '@/components/breadcrumb-item'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, provide, reactive, toRef, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { callIfFunc, debounceMinor, isNull } from '@vexip-ui/utils'\nimport { breadcrumbProps } from './props'\nimport { BREADCRUMB_STATE } from './symbol'\n\nimport type {\n  BreadcrumbItemState,\n  BreadcrumbOptions,\n  BreadcrumbSlots,\n  BreadcrumbState,\n  SelectEvent\n} from './symbol'\n\ndefineOptions({ name: 'Breadcrumb' })\n\nconst _props = defineProps(breadcrumbProps)\nconst props = useProps('breadcrumb', _props, {\n  separator: '/',\n  border: false,\n  options: {\n    default: () => [],\n    static: true\n  },\n  router: null,\n  slots: () => ({})\n})\n\nconst slots = defineSlots<BreadcrumbSlots>()\n\nconst nh = useNameHelper('breadcrumb')\nconst itemStates = new Set<BreadcrumbItemState>()\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('border')]: props.border\n  }\n})\nconst normalizedOptions = computed(() => {\n  if (props.router && !props.options?.length) {\n    const matched = props.router.currentRoute.value.matched\n    const options: BreadcrumbOptions[] = []\n\n    for (const route of matched) {\n      const meta = (route.meta || {}) as any\n\n      if (meta.menu === false) {\n        continue\n      }\n\n      options.push({\n        label: meta.label || route.path,\n        name: meta.name || route.name\n      })\n    }\n\n    return options\n  }\n\n  return props.options.map(option => {\n    if (typeof option === 'string') {\n      return { label: option }\n    }\n\n    return option\n  })\n})\n\nconst refreshLabels = debounceMinor(() => {\n  Array.from(itemStates).forEach((item, index) => {\n    if (isNull(item.label)) {\n      item.label = index + 1\n    }\n  })\n})\n\nconst state: BreadcrumbState = reactive({\n  separator: toRef(props, 'separator'),\n  separatorRenderer: null,\n  increaseItem,\n  decreaseItem,\n  handleSelect,\n  refreshLabels,\n  handleSeparatorClick\n})\n\nprovide(BREADCRUMB_STATE, state)\n\nwatch(\n  [() => slots.separator, () => props.slots.separator],\n  ([slotValue, propValue]) => {\n    state.separatorRenderer = slotValue\n      ? data => slotValue(data)\n      : propValue\n        ? data => propValue(data)\n        : null\n  },\n  { immediate: true }\n)\n\nfunction increaseItem(item: BreadcrumbItemState) {\n  itemStates.add(item)\n  refreshLabels()\n}\n\nfunction decreaseItem(item: BreadcrumbItemState) {\n  itemStates.delete(item)\n  refreshLabels()\n}\n\nfunction handleSelect(label: string | number) {\n  emitEvent(props.onSelect as SelectEvent, label)\n}\n\nfunction handleSeparatorClick(label: string | number) {\n  emitEvent(props.onSeparatorClick as SelectEvent, label)\n}\n</script>\n\n<template>\n  <ol :class=\"className\">\n    <slot>\n      <Renderer :renderer=\"props.slots.default\">\n        <BreadcrumbItem\n          v-for=\"(option, index) in normalizedOptions\"\n          :key=\"option.label\"\n          :label=\"option.label\"\n        >\n          <slot name=\"item\" :option=\"option\" :index=\"index\">\n            <Renderer :renderer=\"props.slots.item\" :data=\"{ option, index }\">\n              {{ option.name ? callIfFunc(option.name) : option.label }}\n            </Renderer>\n          </slot>\n        </BreadcrumbItem>\n      </Renderer>\n    </slot>\n  </ol>\n</template>\n","import { booleanStringProp, buildProps, classProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { BubbleType } from './symbol'\n\nexport const bubbleProps = buildProps({\n  placement: String as PropType<Placement>,\n  type: String as PropType<BubbleType>,\n  background: String,\n  shadow: booleanStringProp,\n  contentClass: classProp\n})\n\nexport type BubbleProps = ExtractPropTypes<typeof bubbleProps>\nexport type BubbleCProps = ConfigurableProps<BubbleProps>\n","export type BubbleType = 'default' | 'primary' | 'info' | 'success' | 'warning' | 'error'\n\nexport const bubbleTypes = Object.freeze<BubbleType[]>([\n  'default',\n  'primary',\n  'info',\n  'success',\n  'warning',\n  'error'\n])\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\nimport { placementWhileList } from '@vexip-ui/hooks'\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { bubbleProps } from './props'\nimport { bubbleTypes } from './symbol'\n\ndefineOptions({ name: 'Bubble' })\n\nconst _props = defineProps(bubbleProps)\nconst props = useProps('bubble', _props, {\n  placement: {\n    default: 'right',\n    validator: value => placementWhileList.includes(value)\n  },\n  type: {\n    default: null,\n    validator: value => bubbleTypes.includes(value)\n  },\n  background: '',\n  shadow: false,\n  contentClass: null\n})\n\nconst nh = useNameHelper('bubble')\n\nconst wrapper = ref<HTMLElement>()\nconst arrow = ref<HTMLElement>()\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(props.placement),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('background')]: props.background,\n      [nh.bm('shadow')]: props.shadow,\n      [nh.bm(props.type)]: props.type !== 'default'\n    }\n  ]\n})\nconst style = computed(() => {\n  if (props.background) {\n    return {\n      [nh.cv('color')]: nh.gnv('color-white'),\n      [nh.cv('bg-color')]: props.background\n    }\n  }\n\n  return undefined\n})\n\ndefineExpose({ wrapper, arrow })\n</script>\n\n<template>\n  <div ref=\"wrapper\" :class=\"className\" :style=\"style\">\n    <div\n      :class=\"[nh.be('content'), props.contentClass]\"\n      :style=\"{\n        boxShadow: props.shadow ? `0 0 4px ${props.shadow}` : undefined\n      }\"\n    >\n      <slot></slot>\n    </div>\n    <div ref=\"arrow\" :class=\"nh.be('arrow')\"></div>\n  </div>\n</template>\n","import { booleanProp, buildProps, eventProp, iconProp, sizeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ButtonAttrType, ButtonSlots, ButtonType } from './symbol'\n\nexport const buttonProps = buildProps({\n  size: sizeProp,\n  type: String as PropType<ButtonType>,\n  dashed: booleanProp,\n  text: booleanProp,\n  simple: booleanProp,\n  ghost: booleanProp,\n  disabled: booleanProp,\n  loading: booleanProp,\n  circle: booleanProp,\n  loadingIcon: iconProp,\n  loadingEffect: String as PropType<IconEffect>,\n  icon: iconProp,\n  color: String,\n  buttonType: String as PropType<ButtonAttrType>,\n  block: booleanProp,\n  tag: String,\n  noPulse: booleanProp,\n  badge: [String, Number],\n  slots: Object as PropType<ButtonSlots>,\n  onClick: eventProp<(event: MouseEvent) => void>()\n})\n\nexport type ButtonProps = ExtractPropTypes<typeof buttonProps>\nexport type ButtonCProps = ConfigurableProps<ButtonProps>\n\nexport const buttonGroupProps = buildProps({\n  size: sizeProp,\n  type: String as PropType<ButtonType>,\n  circle: booleanProp\n})\n\nexport type ButtonGroupProps = ExtractPropTypes<typeof buttonGroupProps>\nexport type ButtonGroupCProps = ConfigurableProps<ButtonGroupProps>\n","import type { InjectionKey } from 'vue'\nimport type { ComponentSize } from '@vexip-ui/config'\n\nexport type ButtonType = 'default' | 'primary' | 'info' | 'success' | 'warning' | 'error'\nexport type ButtonAttrType = 'button' | 'submit' | 'reset'\n\nexport interface ButtonState {\n  index: number,\n  isLast: boolean\n}\n\nexport interface ButtonGroupState {\n  type: ButtonType,\n  size: ComponentSize,\n  increaseItem: (item: ButtonState) => void,\n  decreaseItem: (item: ButtonState) => void,\n  refreshIndexes: () => void\n}\n\nexport interface ButtonSlots {\n  default?: () => any,\n  icon?: () => any,\n  loading?: () => any\n}\n\nexport const GROUP_STATE = '__VXP_BUTTON_GROUP_STATE' as unknown as InjectionKey<ButtonGroupState>\n\nexport const buttonTypes = Object.freeze<ButtonType[]>([\n  'default',\n  'primary',\n  'info',\n  'success',\n  'warning',\n  'error'\n])\n","import { Badge } from '@/components/badge'\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { FIELD_OPTIONS } from '@/components/form/symbol'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, defineComponent, inject, onBeforeUnmount, reactive, ref, renderSlot } from 'vue'\n\nimport {\n  createIconProp,\n  createSizeProp,\n  emitEvent,\n  useIcons,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { adjustAlpha, isClient, mixColor, parseColorToRgba } from '@vexip-ui/utils'\nimport { buttonProps } from './props'\nimport { GROUP_STATE, buttonTypes } from './symbol'\n\nexport default defineComponent({\n  name: 'Button',\n  props: buttonProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const fieldActions = inject(FIELD_OPTIONS, null)\n\n    const props = useProps('button', _props, {\n      size: createSizeProp(fieldActions ? fieldActions.size : undefined),\n      type: {\n        default: null,\n        validator: value => buttonTypes.includes(value)\n      },\n      dashed: false,\n      text: false,\n      simple: false,\n      ghost: false,\n      disabled: () => (fieldActions ? fieldActions.disabled.value : false),\n      loading: () => (fieldActions ? fieldActions.loading.value : false),\n      circle: false,\n      loadingIcon: createIconProp(),\n      loadingEffect: null,\n      icon: createIconProp(),\n      color: null,\n      buttonType: {\n        default: 'button',\n        validator: value => ['button', 'submit', 'reset'].includes(value)\n      },\n      block: false,\n      tag: 'button',\n      noPulse: false,\n      badge: null,\n      slots: () => ({})\n    })\n\n    const groupState = inject(GROUP_STATE, null)\n\n    const nh = useNameHelper('button')\n    const icons = useIcons()\n    const pulsing = ref(false)\n    const index = ref(0)\n    const isLast = ref(false)\n\n    const isIconOnly = computed(() => {\n      return !slots.default && !props.slots.default\n    })\n    const type = computed(() => {\n      return props.type ?? groupState?.type ?? 'default'\n    })\n    const size = computed(() => {\n      return groupState?.size ?? props.size\n    })\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(type.value)]: type.value !== 'default',\n        [nh.bm('simple')]: !props.ghost && props.simple,\n        [nh.bm('ghost')]: props.ghost,\n        [nh.bm('text')]: props.text,\n        [nh.bm('dashed')]: props.dashed,\n        [nh.bm('disabled')]: props.disabled,\n        [nh.bm('loading')]: props.loading,\n        [nh.bm('circle')]: props.circle,\n        [nh.bm('icon-only')]: isIconOnly.value,\n        [nh.bm(size.value)]: size.value !== 'default',\n        [nh.bm('pulsing')]: pulsing.value,\n        [nh.bm('first')]: index.value === 1,\n        [nh.bm('last')]: isLast.value,\n        [nh.bm('block')]: props.block\n      }\n    })\n    const colorMap = computed(() => {\n      if (!props.color) return null\n\n      const rootStyle = isClient ? getComputedStyle(document.documentElement) : null\n      const black = parseColorToRgba(rootStyle?.getPropertyValue(nh.nv('color-black')) || '#000')\n      const white = parseColorToRgba(rootStyle?.getPropertyValue(nh.nv('color-white')) || '#fff')\n      const baseColor = parseColorToRgba(props.color)\n\n      return {\n        base: baseColor.toString(),\n        light2: mixColor(white, baseColor, 0.2).toString(),\n        dark1: mixColor(black, baseColor, 0.1).toString(),\n        opacity1: adjustAlpha(baseColor, 0.9).toString(),\n        opacity3: adjustAlpha(baseColor, 0.7).toString(),\n        opacity4: adjustAlpha(baseColor, 0.6).toString(),\n        opacity7: adjustAlpha(baseColor, 0.3).toString(),\n        opacity8: adjustAlpha(baseColor, 0.2).toString(),\n        white8: adjustAlpha(white, 0.2).toString(),\n        white9: adjustAlpha(white, 0.1).toString()\n      }\n    })\n    const style = computed<Record<string, string>>(() => {\n      if (!colorMap.value) return {}\n\n      const {\n        base,\n        light2,\n        dark1,\n        opacity1,\n        opacity3,\n        opacity4,\n        opacity7,\n        opacity8,\n        white8,\n        white9\n      } = colorMap.value\n      const { cvm, gnv } = nh\n\n      if (props.ghost) {\n        return cvm({\n          color: base,\n          'color-hover': base,\n          'color-focus': base,\n          'color-active': base,\n          'color-disabled': base,\n          'bg-color': 'transparent',\n          'bg-color-hover': white9,\n          'bg-color-focus': white9,\n          'bg-color-active': white8,\n          'bg-color-disabled': 'transparent',\n          'b-color': base,\n          'b-color-hover': light2,\n          'b-color-focus': light2,\n          'b-color-active': dark1,\n          'b-color-disabled': gnv('content-color-disabled'),\n          'pulse-s-color': dark1\n        })\n      }\n\n      if (props.simple) {\n        return cvm({\n          color: base,\n          'color-hover': base,\n          'color-focus': gnv('color-white'),\n          'color-active': gnv('color-white'),\n          'color-disabled': gnv('content-color-disabled'),\n          'bg-color': opacity8,\n          'bg-color-hover': opacity7,\n          'bg-color-focus': opacity1,\n          'bg-color-active': opacity1,\n          'bg-color-disabled': gnv('fill-color-background'),\n          'b-color': opacity4,\n          'b-color-hover': opacity4,\n          'b-color-focus': opacity3,\n          'b-color-active': opacity3,\n          'b-color-disabled': gnv('border-color-light-1'),\n          'pulse-s-color': dark1\n        })\n      }\n\n      if (props.text || props.dashed) {\n        return cvm({\n          ...(props.dashed\n            ? {\n                'b-color': base,\n                'b-color-hover': light2,\n                'b-color-focus': light2,\n                'b-color-active': dark1,\n                'pulse-s-color': dark1\n              }\n            : {}),\n          color: base,\n          'color-hover': light2,\n          'color-focus': light2,\n          'color-active': dark1,\n          'color-disabled': opacity4\n        })\n      }\n\n      return cvm({\n        color: gnv('color-white'),\n        'color-hover': gnv('color-white'),\n        'color-focus': gnv('color-white'),\n        'color-active': gnv('color-white'),\n        'color-disabled': gnv('content-color-disabled'),\n        'bg-color': base,\n        'bg-color-hover': light2,\n        'bg-color-focus': light2,\n        'bg-color-active': dark1,\n        'bg-color-disabled': gnv('fill-color-background'),\n        'b-color': base,\n        'b-color-hover': light2,\n        'b-color-focus': light2,\n        'b-color-active': dark1,\n        'b-color-disabled': gnv('border-color-light-1'),\n        'pulse-s-color': dark1\n      })\n    })\n\n    if (groupState) {\n      const state = reactive({ index, isLast })\n\n      groupState.increaseItem(state)\n\n      onBeforeUnmount(() => {\n        groupState.decreaseItem(state)\n      })\n    }\n\n    function handleClick(event: MouseEvent) {\n      if (props.disabled || props.loading || event.button) return\n\n      if (!props.noPulse) {\n        pulsing.value = false\n        requestAnimationFrame(() => {\n          pulsing.value = true\n        })\n      }\n\n      emitEvent(props.onClick, event)\n    }\n\n    function handleAnimationEnd() {\n      pulsing.value = false\n    }\n\n    function renderLoadingIcon() {\n      return (\n        <div class={[nh.be('icon'), nh.bem('icon', 'loading')]}>\n          {renderSlot(slots, 'loading', undefined, () => [\n            <Renderer renderer={props.slots.loading}>\n              <Icon\n                {...icons.value.loading}\n                effect={props.loadingEffect || icons.value.loading.effect}\n                icon={props.loadingIcon || icons.value.loading.icon}\n                label={'loading'}\n              ></Icon>\n            </Renderer>\n          ])}\n        </div>\n      )\n    }\n\n    function renderSingleIcon() {\n      return props.loading ? (\n        renderLoadingIcon()\n      ) : (\n        <div class={nh.be('icon')}>\n          {renderSlot(slots, 'icon', undefined, () => [\n            <Renderer renderer={props.slots.icon}>\n              {props.icon ? <Icon icon={props.icon}></Icon> : null}\n            </Renderer>\n          ])}\n        </div>\n      )\n    }\n\n    function renderCollapseIcon() {\n      if (props.icon || slots.icon || props.slots.icon) {\n        return props.loading ? (\n          renderLoadingIcon()\n        ) : (\n          <div class={nh.be('icon')}>\n            {renderSlot(slots, 'icon', undefined, () => [\n              <Renderer renderer={props.slots.icon}>\n                <Icon icon={props.icon}></Icon>\n              </Renderer>\n            ])}\n          </div>\n        )\n      }\n\n      return (\n        <CollapseTransition appear horizontal fade-effect>\n          {props.loading && renderLoadingIcon()}\n        </CollapseTransition>\n      )\n    }\n\n    function renderBadge() {\n      const badgeType = props.disabled\n        ? 'disabled'\n        : props.type === 'default'\n          ? 'error'\n          : props.type\n\n      return (\n        <Badge\n          inherit\n          class={[nh.be('badge'), nh.bem('badge', badgeType)]}\n          content={props.badge}\n          type={badgeType}\n        ></Badge>\n      )\n    }\n\n    return () => {\n      const Button = (props.tag || 'button') as any\n\n      return (\n        <Button\n          type={props.buttonType}\n          class={className.value}\n          role={'button'}\n          style={style.value}\n          disabled={props.disabled}\n          onClick={handleClick}\n          onAnimationend={handleAnimationEnd}\n        >\n          {isIconOnly.value ? renderSingleIcon() : renderCollapseIcon()}\n          {!isIconOnly.value &&\n            renderSlot(slots, 'default', undefined, () => [\n              <Renderer renderer={props.slots.default}></Renderer>\n            ])}\n          {!isIconOnly.value && (props.badge || props.badge === 0) ? renderBadge() : null}\n        </Button>\n      )\n    }\n  }\n})\n","<script setup lang=\"ts\">\nimport { computed, provide, reactive, toRef } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { debounceMinor } from '@vexip-ui/utils'\nimport { buttonGroupProps } from './props'\nimport { GROUP_STATE, buttonTypes } from './symbol'\n\nimport type { ButtonState, ButtonType } from './symbol'\n\ndefineOptions({ name: 'ButtonGroup' })\n\nconst _props = defineProps(buttonGroupProps)\nconst props = useProps('buttonGroup', _props, {\n  size: null,\n  type: {\n    default: 'default' as ButtonType,\n    validator: (value: ButtonType) => buttonTypes.includes(value)\n  },\n  circle: false\n})\n\ndefineSlots<{ default: () => any }>()\n\nconst nh = useNameHelper('button-group')\n\nconst itemStates = reactive(new Set<ButtonState>())\nconst size = toRef(props, 'size')\nconst type = toRef(props, 'type')\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('circle')]: props.circle\n  }\n})\nconst itemList = computed(() => Array.from(itemStates))\n\nconst refreshIndexes = debounceMinor(() => {\n  for (let i = 0, len = itemList.value.length; i < len; ++i) {\n    const item = itemList.value[i]\n\n    item.index = i + 1\n    item.isLast = i === len - 1\n  }\n})\n\nprovide(\n  GROUP_STATE,\n  reactive({\n    size,\n    type,\n    increaseItem,\n    decreaseItem,\n    refreshIndexes\n  })\n)\n\nfunction increaseItem(item: ButtonState) {\n  itemStates.add(item)\n  refreshIndexes()\n}\n\nfunction decreaseItem(item: ButtonState) {\n  itemStates.delete(item)\n  refreshIndexes()\n}\n</script>\n\n<template>\n  <div :class=\"className\" role=\"group\">\n    <slot></slot>\n  </div>\n</template>\n","import { computed, defineComponent, h, inject, provide } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { columnProps } from './props'\nimport { ROW_STATE, breakPoints } from './symbol'\n\nimport type { CSSProperties } from 'vue'\nimport type { ClassType } from '@vexip-ui/config'\n\ntype LayerProp = 'span' | 'offset' | 'pull' | 'push' | 'order'\n\nconst colProps: LayerProp[] = ['span', 'offset', 'pull', 'push', 'order']\n\nexport default defineComponent({\n  name: 'Column',\n  props: columnProps,\n  setup(_props, { slots }) {\n    const props = useProps('column', _props, {\n      tag: 'div',\n      span: 24,\n      offset: null,\n      push: null,\n      pull: null,\n      order: null,\n      xs: null,\n      sm: null,\n      md: null,\n      lg: null,\n      xl: null,\n      xxl: null,\n      flex: null,\n      useFlex: null\n    })\n\n    const rowState = inject(ROW_STATE, null)\n    const nh = useNameHelper('column')\n\n    provide(ROW_STATE, null!)\n\n    const className = computed(() => {\n      const columnFlex = (props.useFlex || rowState?.columnFlex) && {\n        ...(rowState?.columnFlex || {}),\n        ...(props.useFlex\n          ? props.useFlex === true\n            ? { justify: 'start', align: 'top' }\n            : props.useFlex\n          : {})\n      }\n      const className: ClassType = [\n        nh.b(),\n        nh.bs('vars'),\n        {\n          [nh.bm('flex')]: columnFlex,\n          [nh.bm('inherit')]: rowState || props.inherit\n        }\n      ]\n\n      if (columnFlex) {\n        columnFlex.justify && className.push(nh.bm(columnFlex.justify))\n        columnFlex.align && className.push(nh.bm(columnFlex.align))\n      }\n\n      colProps.forEach(prop => {\n        if (typeof props[prop] === 'number') {\n          className.push(\n            prop === 'span' ? nh.bm(`${props[prop]}`) : nh.bm(`${prop}-${props[prop]}`)\n          )\n        }\n      })\n\n      breakPoints.forEach(size => {\n        const sizeProp = props[size]\n\n        if (!sizeProp && sizeProp !== 0) return\n\n        if (typeof sizeProp === 'number') {\n          className.push(nh.bm(`${size}-${sizeProp}`))\n        } else if (typeof sizeProp === 'object') {\n          colProps.forEach(prop => {\n            const value = sizeProp[prop]\n\n            if (!value && value !== 0) return\n\n            className.push(prop === 'span' ? nh.bm(`${value}`) : nh.bm(`${prop}-${value}`))\n          })\n        }\n      })\n\n      return className\n    })\n    const style = computed(() => {\n      const flex = props.flex\n      const style: CSSProperties = {}\n\n      if (rowState) {\n        if (typeof rowState.gap === 'number') {\n          style.paddingInlineStart = style.paddingInlineEnd = `${rowState.gap / 2}px`\n        } else if (Array.isArray(rowState.gap)) {\n          style.paddingInlineStart = style.paddingInlineEnd = `${rowState.gap[0] / 2}px`\n        }\n      }\n\n      if (flex) {\n        if (typeof flex === 'number') {\n          style.flex = `${flex} ${flex} auto`\n        } else if (typeof flex === 'string') {\n          if (/^\\d+\\s\\d+\\s\\d+(\\w+)?$/.test(flex)) {\n            style.flex = flex\n          } else {\n            style.flex = flex === 'auto' ? '1 1 auto' : `0 0 ${flex}`\n          }\n        }\n      }\n\n      return style\n    })\n\n    return () =>\n      h(\n        props.tag || 'div',\n        {\n          class: className.value,\n          style: style.value\n        },\n        {\n          default: () => slots.default && slots.default()\n        }\n      )\n  }\n})\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n  stateProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { NumberInputControlType, NumberInputEmptyType, NumberInputSlots } from './symbol'\n\nexport const numberInputProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('numberInput'),\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  /**\n   * 格式化后显示\n   */\n  formatter: Function as PropType<(value: number) => number | string>,\n  value: Number,\n  min: Number,\n  max: Number,\n  placeholder: String,\n  autofocus: booleanProp,\n  spellcheck: booleanProp,\n  autocomplete: booleanStringProp,\n  precision: Number,\n  readonly: booleanProp,\n  step: Number,\n  ctrlStep: Number,\n  shiftStep: Number,\n  altStep: Number,\n  disabled: booleanProp,\n  controlClass: classProp,\n  debounce: booleanProp,\n  delay: Number,\n  clearable: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  sync: booleanProp,\n  syncStep: booleanProp,\n  controlType: String as PropType<NumberInputControlType>,\n  emptyType: String as PropType<NumberInputEmptyType>,\n  controlAttrs: Object as PropType<Record<string, any>>,\n  name: String,\n  slots: Object as PropType<NumberInputSlots>,\n  onFocus: eventProp<(event: FocusEvent) => void>(),\n  onBlur: eventProp<(event: FocusEvent) => void>(),\n  onInput: eventProp<(value: number) => void>(),\n  onChange: eventProp<(value: number) => void>(),\n  onEnter: eventProp(),\n  onClear: eventProp(),\n  onPrefixClick: eventProp<(event: MouseEvent) => void>(),\n  onSuffixClick: eventProp<(event: MouseEvent) => void>(),\n  onKeyDown: eventProp<(event: KeyboardEvent) => void>(),\n  onKeyPress: eventProp<(event: KeyboardEvent) => void>(),\n  onKeyUp: eventProp<(event: KeyboardEvent) => void>()\n})\n\nexport type NumberInputProps = ExtractPropTypes<typeof numberInputProps>\nexport type NumberInputCProps = ConfigurableProps<NumberInputProps>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, onMounted, ref, toRef, watch } from 'vue'\n\nimport { useHover, useModifier, useTimerRecord } from '@vexip-ui/hooks'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport {\n  boundRange,\n  debounce,\n  getGlobalCount,\n  isNull,\n  isValidNumber,\n  minus,\n  plus,\n  throttle,\n  toFixed,\n  toNumber\n} from '@vexip-ui/utils'\nimport { numberInputProps } from './props'\n\nimport type { NumberInputSlots } from './symbol'\n\ntype InputEventType = 'input' | 'change'\n\nconst isEmpty = (value: unknown) => !value && value !== 0\nconst isNullOrNaN = (value: unknown) => isNull(value) || Number.isNaN(value)\n\ndefineOptions({ name: 'NumberInput' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue\n} = useFieldStore<number>(focus)\n\nconst _props = defineProps(numberInputProps)\nconst props = useProps('numberInput', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  // 格式化后显示\n  formatter: {\n    default: null,\n    isFunc: true\n  },\n  value: {\n    default: () => getFieldValue(),\n    static: true\n  },\n  min: -Infinity,\n  max: Infinity,\n  placeholder: null,\n  autofocus: false,\n  spellcheck: false,\n  autocomplete: false,\n  precision: -1,\n  readonly: false,\n  step: 1,\n  ctrlStep: 100,\n  shiftStep: 10,\n  altStep: 0.1,\n  disabled: () => disabled.value,\n  controlClass: null,\n  debounce: false,\n  delay: null,\n  clearable: false,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  sync: false,\n  syncStep: false,\n  controlType: 'right',\n  emptyType: 'NaN',\n  controlAttrs: null,\n  name: {\n    default: '',\n    static: true\n  },\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst slots = defineSlots<NumberInputSlots>()\n\nconst nh = useNameHelper('number-input')\nconst locale = useLocale('numberInput', toRef(props, 'locale'))\nconst icons = useIcons()\n\nconst { timeout, interval } = useTimerRecord()\n\nconst focused = ref(false)\nconst currentValue = ref<string | number>(isEmpty(props.value) ? getEmptyValue() : props.value)\nconst inputting = ref(false)\nconst plusHolding = ref(false)\nconst minusHolding = ref(false)\n\nconst control = ref<HTMLInputElement>()\nconst { wrapper, isHover } = useHover()\n\nuseModifier({\n  target: control,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    emitEvent(props.onKeyDown, event)\n\n    if (modifier.up || modifier.down) {\n      event.preventDefault()\n      event.stopPropagation()\n\n      if ((modifier.up && plusDisabled.value) || (modifier.down && minusDisabled.value)) {\n        return\n      }\n\n      changeStep(\n        modifier.up ? 'plus' : 'minus',\n        event.ctrlKey ? 'ctrl' : event.shiftKey ? 'shift' : event.altKey ? 'alt' : undefined\n      )\n      modifier.resetAll()\n    } else if (modifier.enter) {\n      event.preventDefault()\n      event.stopPropagation()\n      emitChangeEvent('change')\n      modifier.resetAll()\n    }\n  },\n  onKeyUp: event => {\n    emitEvent(props.onKeyUp, event)\n\n    if (event.key === 'Enter') {\n      handleEnter()\n    }\n  }\n})\n\nconst idIndex = `${getGlobalCount()}`\n\nlet lastValue: number\n\nconst controlId = computed(() => `${nh.bs(idIndex)}__control`)\nconst outOfRange = computed(() => {\n  return (\n    !isNullOrNaN(currentValue.value) &&\n    (toNumber(currentValue.value) > props.max || toNumber(currentValue.value) < props.min)\n  )\n})\nconst isReadonly = computed(() => (props.loading && props.loadingLock) || props.readonly)\nconst plusDisabled = computed(() => {\n  return (\n    props.disabled ||\n    isReadonly.value ||\n    (!isNullOrNaN(currentValue.value) && toNumber(currentValue.value) >= props.max)\n  )\n})\nconst minusDisabled = computed(() => {\n  return (\n    props.disabled ||\n    isReadonly.value ||\n    (!isNullOrNaN(currentValue.value) && toNumber(currentValue.value) <= props.min)\n  )\n})\nconst className = computed(() => {\n  const [display, fade] = (props.controlType || 'right').split('-')\n\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.ns('input-vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('focused')]: inputting.value,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('readonly')]: isReadonly.value,\n      [nh.bm('loading')]: props.loading,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm(`control-${display}`)]: display !== 'right',\n      [nh.bm('control-fade')]: fade,\n      [nh.bm('out-of-range')]: outOfRange.value\n    }\n  ]\n})\nconst hasPrefix = computed(() => {\n  return !!(slots.prefix || props.prefix || props.slots.prefix)\n})\nconst hasSuffix = computed(() => {\n  return !!(slots.suffix || props.suffix || props.slots.suffix)\n})\nconst preciseNumber = computed(() => {\n  return !inputting.value &&\n    typeof currentValue.value === 'number' &&\n    !Number.isNaN(currentValue.value) &&\n    props.precision >= 0\n    ? toFixed(currentValue.value, props.precision)\n    : currentValue.value\n})\nconst formattedValue = computed(() => {\n  if (isNullOrNaN(preciseNumber.value) || typeof preciseNumber.value !== 'number')\n    return preciseNumber.value ?? ''\n\n  return !inputting.value && typeof props.formatter === 'function'\n    ? props.formatter(preciseNumber.value as number)\n    : preciseNumber.value.toString()\n})\nconst hasValue = computed(() => !!(currentValue.value || currentValue.value === 0))\nconst showClear = computed(() => {\n  return !props.disabled && !isReadonly.value && props.clearable && isHover.value && hasValue.value\n})\nconst autoComplete = computed(() => {\n  return typeof props.autocomplete === 'boolean'\n    ? props.autocomplete\n      ? 'on'\n      : 'off'\n    : props.autocomplete\n})\n\nconst delay = toNumber(props.delay)\nconst handleInput = props.debounce\n  ? debounce(handleChange, delay || 100)\n  : throttle(handleChange, delay || 16)\n\nwatch(\n  () => props.value,\n  value => {\n    if (value !== lastValue) {\n      parseValue()\n    }\n  },\n  { immediate: true }\n)\nwatch(inputting, value => {\n  if (!value) {\n    setInputValue(inputting.value ? currentValue.value : formattedValue.value)\n  }\n})\n\nonMounted(() => {\n  setInputValue(inputting.value ? currentValue.value : formattedValue.value)\n})\n\ndefineExpose({\n  idFor,\n  focused,\n  isHover,\n  outOfRange,\n  preciseNumber,\n  formattedValue,\n  isReadonly,\n  wrapper,\n  input: control,\n  focus,\n  blur: () => control.value?.blur()\n})\n\nfunction setInputValue(value?: number | string | null) {\n  if (control.value) {\n    control.value.value = isNullOrNaN(value) ? '' : value!.toString()\n  }\n}\n\nfunction boundValueRange(value: number) {\n  return boundRange(value, props.min, props.max)\n}\n\nfunction parseValue() {\n  let value = props.value\n  value = inputting.value ? value : isValidNumber(value, true) ? toNumber(value) : getEmptyValue()\n\n  if (props.precision >= 0 && !isNullOrNaN(value)) {\n    value = toFixed(boundValueRange(value), props.precision)\n  }\n\n  currentValue.value = value\n  lastValue = value\n\n  setInputValue(inputting.value ? value : formattedValue.value)\n}\n\nfunction focus(options?: FocusOptions) {\n  control.value?.focus(options)\n}\n\nfunction handleFocus(event: FocusEvent) {\n  focused.value = true\n  inputting.value = true\n  emitEvent(props.onFocus, event)\n}\n\nfunction handleBlur(event: FocusEvent) {\n  focused.value = false\n\n  setTimeout(() => {\n    if (!focused.value) {\n      inputting.value = false\n      emitEvent(props.onBlur, event)\n      emitChangeEvent('change')\n    }\n  }, 120)\n}\n\nfunction handleHold(type: 'plus' | 'minus', event: PointerEvent) {\n  const disabled = type === 'plus' ? plusDisabled : minusDisabled\n  const change = type === 'plus' ? plusNumber : minusNumber\n\n  if (event.button !== 0 || disabled.value) return\n\n  change(event)\n  document.addEventListener('pointerup', cancelStep)\n  document.addEventListener('touchend', cancelStep)\n  clearTimeout(timeout.step)\n  clearInterval(interval.step)\n  ;(type === 'plus' ? plusHolding : minusHolding).value = true\n\n  timeout.step = setTimeout(() => {\n    interval.step = setInterval(() => {\n      disabled.value ? cancelStep() : change(event)\n    }, 32)\n  }, 500)\n}\n\nfunction cancelStep() {\n  document.removeEventListener('pointerup', cancelStep)\n  document.removeEventListener('touchend', cancelStep)\n  clearTimeout(timeout.step)\n  clearInterval(interval.step)\n\n  plusHolding.value = false\n  minusHolding.value = false\n}\n\nfunction plusNumber(event: PointerEvent) {\n  !focused.value && focus()\n  changeStep(\n    'plus',\n    event.ctrlKey ? 'ctrl' : event.shiftKey ? 'shift' : event.altKey ? 'alt' : undefined\n  )\n}\n\nfunction minusNumber(event: PointerEvent) {\n  !focused.value && focus()\n  changeStep(\n    'minus',\n    event.ctrlKey ? 'ctrl' : event.shiftKey ? 'shift' : event.altKey ? 'alt' : undefined\n  )\n}\n\nfunction changeStep(type: 'plus' | 'minus', modifier?: 'ctrl' | 'shift' | 'alt') {\n  if (props.disabled || isReadonly.value) return\n\n  let value = currentValue.value || 0\n  let step!: number\n\n  switch (modifier) {\n    case 'ctrl':\n      step = props.ctrlStep\n      break\n    case 'shift':\n      step = props.shiftStep\n      break\n    case 'alt':\n      step = props.altStep\n      break\n    default:\n      step = props.step\n  }\n\n  const stringValue = value.toString().trim()\n\n  if (stringValue.endsWith('.')) {\n    value = toNumber(stringValue.slice(0, -1))\n  }\n\n  if (type === 'plus') {\n    value = plus(value, step)\n  } else {\n    value = minus(value, step)\n  }\n\n  setValue(value, props.syncStep && !props.sync ? 'change' : 'input')\n}\n\nfunction handleChange(event: Event) {\n  const type = event.type as InputEventType\n  const stringValue = (event.target as HTMLInputElement).value\n\n  let value = stringValue.trim()\n\n  // to rollback invalid value to empty in `<input>` when change\n  if (type === 'change' && stringValue && !isValidNumber(stringValue, true)) {\n    const floatValue = parseFloat(stringValue)\n\n    if (Number.isNaN(floatValue)) {\n      value = ''\n    } else {\n      value = floatValue.toString()\n    }\n  }\n\n  inputting.value = type === 'input'\n\n  setValue(value, type)\n}\n\nfunction setValue(value: string | number, type: InputEventType, sync = props.sync) {\n  if (type !== 'input') {\n    currentValue.value = isEmpty(value) ? getEmptyValue() : toNumber(value)\n  } else {\n    currentValue.value = value\n  }\n\n  setInputValue(currentValue.value)\n  emitChangeEvent(type, sync)\n}\n\nfunction getEmptyValue() {\n  switch (props.emptyType) {\n    case 'undefined':\n      return undefined! as number\n    case 'null':\n      return null! as number\n    default:\n      return NaN\n  }\n}\n\nfunction emitChangeEvent(type: InputEventType, sync = props.sync) {\n  type = type === 'input' ? 'input' : 'change'\n\n  if (type === 'change') {\n    const empty = isEmpty(currentValue.value)\n    const value = empty ? getEmptyValue() : toNumber(currentValue.value)\n\n    let boundValue = empty ? value : boundValueRange(toNumber(value))\n\n    if (!empty && props.precision >= 0) {\n      boundValue = toFixed(boundValue, props.precision)\n    }\n\n    const changed = !Object.is(boundValue, value)\n\n    if (!empty) {\n      currentValue.value = boundValue\n    }\n\n    if (!sync && Object.is(lastValue, boundValue)) {\n      !Object.is(props.value, value) && emit('update:value', boundValue)\n      return\n    }\n\n    lastValue = boundValue\n\n    if (!sync || changed) {\n      emit('update:value', boundValue)\n      setFieldValue(boundValue)\n    }\n\n    emitEvent(props.onChange, boundValue)\n\n    if (!sync || changed) {\n      validateField()\n    }\n  } else {\n    const value = parseFloat(currentValue.value as string)\n    const empty = Number.isNaN(value)\n\n    let boundValue = empty ? getEmptyValue() : boundValueRange(toNumber(value))\n\n    if (!empty && props.precision >= 0) {\n      boundValue = toFixed(boundValue, props.precision)\n    }\n\n    const emitUpdate = sync && !Object.is(lastValue, boundValue)\n\n    if (emitUpdate) {\n      lastValue = boundValue\n\n      emit('update:value', boundValue)\n      setFieldValue(boundValue)\n    }\n\n    emitEvent(props.onInput, value)\n\n    if (emitUpdate) {\n      validateField()\n    }\n  }\n}\n\nfunction handleClear() {\n  if (props.disabled || isReadonly.value) return\n\n  setValue(NaN, 'change', false)\n  emitEvent(props.onClear)\n  clearField()\n  focus()\n}\n\nfunction handleEnter() {\n  emitEvent(props.onEnter)\n}\n\nfunction handlePrefixClick(event: MouseEvent) {\n  emitEvent(props.onPrefixClick, event)\n}\n\nfunction handleSuffixClick(event: MouseEvent) {\n  emitEvent(props.onSuffixClick, event)\n}\n\nfunction handleKeyPress(event: KeyboardEvent) {\n  emitEvent(props.onKeyPress, event)\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"group\"\n    @click=\"control?.focus()\"\n  >\n    <div\n      v-if=\"hasPrefix\"\n      :class=\"[nh.be('icon'), nh.be('prefix')]\"\n      :style=\"{ color: props.prefixColor }\"\n      @click=\"handlePrefixClick\"\n    >\n      <slot name=\"prefix\">\n        <Renderer :renderer=\"props.slots.prefix\">\n          <Icon :icon=\"props.prefix\"></Icon>\n        </Renderer>\n      </slot>\n    </div>\n    <input\n      v-bind=\"props.controlAttrs\"\n      :id=\"controlId\"\n      ref=\"control\"\n      :class=\"[nh.be('control'), props.controlAttrs?.class, props.controlClass]\"\n      type=\"text\"\n      :autofocus=\"props.autofocus\"\n      :autocomplete=\"autoComplete\"\n      :spellcheck=\"props.spellcheck\"\n      :disabled=\"props.disabled\"\n      :readonly=\"isReadonly\"\n      :placeholder=\"props.placeholder ?? locale.placeholder\"\n      :name=\"props.name || props.controlAttrs?.name\"\n      role=\"spinbutton\"\n      :title=\"outOfRange ? locale.outOfRange : undefined\"\n      :aria-valuenow=\"preciseNumber\"\n      :aria-valuemin=\"props.min !== -Infinity ? props.min : undefined\"\n      :aria-valuemax=\"props.max !== Infinity ? props.max : undefined\"\n      :aria-labelledby=\"labelId\"\n      @submit.prevent\n      @blur=\"handleBlur\"\n      @focus=\"handleFocus\"\n      @keypress=\"handleKeyPress\"\n      @input=\"handleInput\"\n      @change=\"handleChange\"\n    />\n    <div\n      v-if=\"hasSuffix\"\n      :class=\"[nh.be('icon'), nh.be('suffix')]\"\n      :style=\"{\n        color: props.suffixColor,\n        opacity: showClear || props.loading ? '0%' : ''\n      }\"\n      @click=\"handleSuffixClick\"\n    >\n      <slot name=\"suffix\">\n        <Renderer :renderer=\"props.slots.suffix\">\n          <Icon :icon=\"props.suffix\"></Icon>\n        </Renderer>\n      </slot>\n    </div>\n    <div\n      v-else-if=\"props.clearable || props.loading\"\n      :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n    ></div>\n    <Transition :name=\"nh.ns('fade')\" appear>\n      <button\n        v-if=\"showClear\"\n        :class=\"[nh.be('icon'), nh.be('clear')]\"\n        type=\"button\"\n        tabindex=\"-1\"\n        :aria-label=\"locale.ariaLabel.clear\"\n        @click.stop=\"handleClear\"\n      >\n        <Icon v-bind=\"icons.clear\" label=\"clear\"></Icon>\n      </button>\n      <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n        <Icon\n          v-bind=\"icons.loading\"\n          :effect=\"props.loadingEffect || icons.loading.effect\"\n          :icon=\"props.loadingIcon || icons.loading.icon\"\n          label=\"loading\"\n        ></Icon>\n      </div>\n    </Transition>\n    <template v-if=\"props.controlType !== 'none'\">\n      <div\n        :class=\"{\n          [nh.be('plus')]: true,\n          [nh.bem('plus', 'disabled')]: plusDisabled,\n          [nh.bem('plus', 'holding')]: plusHolding\n        }\"\n        role=\"button\"\n        :aria-label=\"locale.ariaLabel.increase\"\n        :aria-labelledby=\"labelId\"\n        :aria-controls=\"controlId\"\n        @pointerdown.prevent=\"handleHold('plus', $event)\"\n        @mousedown.prevent\n        @touchstart.prevent\n      >\n        <Icon v-bind=\"icons.angleUp\" :scale=\"+(icons.angleUp.scale || 1) * 0.8\"></Icon>\n      </div>\n      <div\n        :class=\"{\n          [nh.be('minus')]: true,\n          [nh.bem('minus', 'disabled')]: minusDisabled,\n          [nh.bem('minus', 'holding')]: minusHolding\n        }\"\n        :aria-label=\"locale.ariaLabel.decrease\"\n        :aria-labelledby=\"labelId\"\n        :aria-controls=\"controlId\"\n        @pointerdown.prevent=\"handleHold('minus', $event)\"\n        @mousedown.prevent\n        @touchstart.prevent\n      >\n        <Icon v-bind=\"icons.angleDown\" :scale=\"+(icons.angleDown.scale || 1) * 0.8\"></Icon>\n      </div>\n    </template>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { toAttrValue } from '@vexip-ui/utils'\n\nimport type { PropType } from 'vue'\nimport type { LocaleConfig } from '@vexip-ui/config'\nimport type { MonthIndex, WeekIndex } from './symbol'\n\nconst props = defineProps({\n  date: {\n    type: Date,\n    required: true\n  },\n  locale: {\n    type: Object as PropType<LocaleConfig['calendar']>,\n    required: true\n  },\n  selected: {\n    type: Boolean,\n    default: false\n  },\n  hovered: {\n    type: Boolean,\n    default: false\n  },\n  isPrev: {\n    type: Boolean,\n    default: false\n  },\n  isNext: {\n    type: Boolean,\n    default: false\n  },\n  isToday: {\n    type: Boolean,\n    default: false\n  },\n  disabled: {\n    type: Boolean,\n    default: false\n  },\n  inRange: {\n    type: Boolean,\n    default: false\n  }\n})\n\nconst emit = defineEmits(['select', 'hover'])\n\ndefineSlots<{\n  item: (params: {\n    date: Date,\n    label: string,\n    selected: boolean,\n    hovered: boolean,\n    isPrev: boolean,\n    isNext: boolean,\n    isToday: boolean,\n    disabled: boolean,\n    inRange: boolean\n  }) => any,\n  default: (params: {\n    date: Date,\n    label: string,\n    selected: boolean,\n    hovered: boolean,\n    isPrev: boolean,\n    isNext: boolean,\n    isToday: boolean,\n    disabled: boolean,\n    inRange: boolean\n  }) => any\n}>()\n\nconst nh = useNameHelper('calendar')\n\nconst label = computed(() => {\n  const label = props.locale.ariaLabel\n  const year = props.date.getFullYear()\n  const month = (props.date.getMonth() + 1) as MonthIndex\n  const day = props.date.getDate()\n  const weekDay = (props.date.getDay() || 7) as WeekIndex\n\n  return `${label[`week${weekDay}`]}, ${label[`month${month}`]} ${day}, ${year}`\n})\n</script>\n\n<template>\n  <div\n    :class=\"nh.be('cell')\"\n    role=\"gridcell\"\n    :aria-selected=\"toAttrValue(selected)\"\n    :aria-disabled=\"toAttrValue(disabled)\"\n    @mouseenter=\"emit('hover', date)\"\n  >\n    <slot\n      name=\"item\"\n      :date=\"date\"\n      :label=\"label\"\n      :selected=\"selected\"\n      :hovered=\"hovered\"\n      :is-prev=\"isPrev\"\n      :is-next=\"isNext\"\n      :is-today=\"isToday\"\n      :disabled=\"disabled\"\n      :in-range=\"inRange\"\n    >\n      <div\n        :class=\"{\n          [nh.be('index')]: true,\n          [nh.bem('index', 'selected')]: selected,\n          [nh.bem('index', 'prev')]: isPrev,\n          [nh.bem('index', 'next')]: isNext,\n          [nh.bem('index', 'today')]: isToday,\n          [nh.bem('index', 'disabled')]: disabled,\n          [nh.bem('index', 'in-range')]: inRange\n        }\"\n        tabindex=\"0\"\n        role=\"button\"\n        :aria-label=\"label\"\n        :aria-disabled=\"toAttrValue(disabled)\"\n        @click=\"emit('select', date)\"\n        @keydown.enter.prevent=\"emit('select', date)\"\n        @keydown.space.prevent=\"emit('select', date)\"\n      >\n        <slot\n          :date=\"date\"\n          :label=\"label\"\n          :selected=\"selected\"\n          :hovered=\"hovered\"\n          :is-prev=\"isPrev\"\n          :is-next=\"isNext\"\n          :is-today=\"isToday\"\n          :disabled=\"disabled\"\n          :in-range=\"inRange\"\n        >\n          <div :class=\"nh.be('index-inner')\">\n            {{ date.getDate() }}\n          </div>\n        </slot>\n      </div>\n    </slot>\n  </div>\n</template>\n","import { booleanProp, buildProps, eventProp, localeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Dateable } from '@vexip-ui/utils'\nimport type { CalendarPanelSlots, CalendarSlots } from './symbol'\n\nexport const calendarPanelProps = buildProps({\n  locale: localeProp('calendar'),\n  /**\n   * 选中的日期\n   */\n  value: [Number, String, Date, Array] as PropType<Dateable | Dateable[]>,\n  /**\n   * 当前日历显示的年份\n   */\n  year: Number,\n  /**\n   * 当前日历显示的月份 (1 ~ 12)\n   */\n  month: Number,\n  /**\n   * 头部星期显示的内容，数量须为 7 个\n   */\n  weekDays: Array as PropType<string[]>,\n  weekStart: Number,\n  today: [Number, String, Date] as PropType<Dateable>,\n  disabledDate: Function as PropType<(data: Date) => boolean>,\n  valueType: String as PropType<'start' | 'end'>,\n  min: [Number, String, Date] as PropType<Dateable>,\n  max: [Number, String, Date] as PropType<Dateable>,\n  range: booleanProp,\n  slots: Object as PropType<CalendarPanelSlots>,\n  onSelect: eventProp<(date: Date) => void>(),\n  onHover: eventProp<(date: Date | null) => void>()\n})\n\nexport type CalendarPanelProps = ExtractPropTypes<typeof calendarPanelProps>\nexport type CalendarPanelCProps = ConfigurableProps<CalendarPanelProps>\n\nexport const calendarProps = buildProps({\n  locale: localeProp('calendar'),\n  value: [Number, String, Date] as PropType<Dateable | Dateable[]>,\n  year: Number,\n  /**\n   * 当前日历显示的月份 (1 ~ 12)\n   */\n  month: Number,\n  /**\n   * 头部星期显示的内容，数量须为 7 个\n   */\n  weekDays: Array as PropType<string[]>,\n  weekStart: Number,\n  today: [Number, String, Date] as PropType<Dateable>,\n  disabledDate: Function as PropType<(data: Date) => boolean>,\n  slots: Object as PropType<CalendarSlots>,\n  onSelect: eventProp<(date: Date) => void>(),\n  onYearChange: eventProp<(year: number, month: number) => void>(),\n  onMonthChange: eventProp<(year: number, month: number) => void>()\n})\n\nexport type CalendarProps = ExtractPropTypes<typeof calendarProps>\nexport type CalendarCProps = ConfigurableProps<CalendarProps>\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, ref, toRef, watch } from 'vue'\n\nimport CalendarCell from './calendar-cell.vue'\nimport { emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useHover } from '@vexip-ui/hooks'\nimport {\n  debounceMinor,\n  differenceDays,\n  endOfDay,\n  rangeDate,\n  startOfDay,\n  startOfWeek,\n  toFalse\n} from '@vexip-ui/utils'\nimport { calendarPanelProps } from './props'\n\nimport type { Dateable } from '@vexip-ui/utils'\nimport type { CalendarPanelSlots, WeekIndex } from './symbol'\n\ndefineOptions({ name: 'CalendarPanel' })\n\nconst _props = defineProps(calendarPanelProps)\nconst props = useProps('calendarBase', _props, {\n  locale: null,\n  value: {\n    default: null,\n    static: true\n  },\n  year: () => new Date().getFullYear(),\n  month: {\n    default: () => new Date().getMonth() + 1,\n    validator: value => value > 0 && value <= 12\n  },\n  weekDays: {\n    default: null,\n    validator: value => !value || value.length === 0 || value.length === 7\n  },\n  weekStart: {\n    default: 0,\n    validator: value => value >= 0 && value < 7\n  },\n  today: {\n    default: () => new Date(),\n    validator: value => !Number.isNaN(+new Date(value))\n  },\n  disabledDate: {\n    default: toFalse,\n    isFunc: true\n  },\n  valueType: {\n    default: 'start',\n    validator: value => value === 'start' || value === 'end'\n  },\n  min: null,\n  max: null,\n  range: null,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:value'])\n\ndefineSlots<CalendarPanelSlots>()\n\nconst nh = useNameHelper('calendar')\n\nconst startValue = ref<Date | null>(null)\nconst endValue = ref<Date | null>(null)\nconst dateRange = ref<Date[]>([])\nconst hoveredDate = ref<Date | null>(null)\n\nconst { wrapper, isHover } = useHover()\nconst locale = useLocale('calendar', toRef(props, 'locale'))\n\nconst min = computed(() => (props.min ? +startOfDay(props.min) : -Infinity))\nconst max = computed(() => (props.max ? +endOfDay(props.max) : Infinity))\nconst reversed = computed(() => {\n  if (Number.isNaN(min.value) || Number.isNaN(max.value)) {\n    return false\n  }\n\n  return min.value > max.value\n})\n\nconst updateDateRange = debounceMinor(setDateRange)\n\nparseValue(props.value)\nsetDateRange()\n\nwatch(() => props.value, parseValue)\nwatch([() => props.year, () => props.month, () => props.weekStart], updateDateRange)\nwatch(isHover, value => {\n  if (!value) {\n    hoveredDate.value = null\n  }\n})\nwatch(hoveredDate, value => {\n  emitEvent(props.onHover, value)\n})\n\ndefineExpose({\n  startValue,\n  endValue,\n  body: wrapper,\n  isSelected,\n  isHovered,\n  isPrevMonth,\n  isNextMonth,\n  isDisabled,\n  isToday,\n  isInRange\n})\n\nfunction getWeekLabel(index: number) {\n  return props.weekDays?.[index] || locale.value[`week${(index || 7) as WeekIndex}`]\n}\n\nfunction setDateRange() {\n  dateRange.value = rangeDate(\n    startOfWeek(new Date(props.year, props.month - 1, 1), props.weekStart),\n    42\n  )\n}\n\nfunction parseValue(value: Dateable | Dateable[]) {\n  if (!Array.isArray(value)) {\n    value = [value, value]\n  }\n\n  for (let i = 0; i < 2; ++i) {\n    const date = new Date(value[i] ?? '')\n\n    if (i === 0) {\n      startValue.value = Number.isNaN(+date) ? null : date\n    } else {\n      endValue.value = Number.isNaN(+date) ? null : date\n    }\n\n    if (!props.range) break\n  }\n}\n\nfunction isSelected(date: Date) {\n  if (!date || (!startValue.value && !endValue.value)) {\n    return false\n  }\n\n  return !!(\n    (startValue.value && !differenceDays(date, startValue.value)) ||\n    (endValue.value && !differenceDays(date, endValue.value))\n  )\n}\n\nfunction isDisabled(date: Date) {\n  if (typeof props.disabledDate === 'function') {\n    if (props.disabledDate(date)) {\n      return true\n    }\n  }\n\n  const time = date.getTime()\n\n  if (reversed.value) {\n    if (time > max.value && time < min.value) {\n      return true\n    }\n  } else {\n    if (time < min.value || time > max.value) {\n      return true\n    }\n  }\n\n  return false\n}\n\nfunction isHovered(date: Date) {\n  if (!date || !hoveredDate.value) {\n    return false\n  }\n\n  return !differenceDays(date, hoveredDate.value)\n}\n\nfunction isPrevMonth(date: Date) {\n  const { year, month } = props\n  const dateYear = date.getFullYear()\n  const dateMonth = date.getMonth()\n\n  return dateYear < year || (dateYear === year && dateMonth < month - 1)\n}\n\nfunction isNextMonth(date: Date) {\n  const { year, month } = props\n  const dateYear = date.getFullYear()\n  const dateMonth = date.getMonth()\n\n  return dateYear > year || (dateYear === year && dateMonth > month - 1)\n}\n\nfunction isToday(date: Date) {\n  return differenceDays(date, props.today) === 0\n}\n\nfunction handleSelect(date: Date) {\n  if (isDisabled(date)) {\n    return\n  }\n\n  if (props.valueType === 'start') {\n    startValue.value = date\n  } else {\n    endValue.value = date\n  }\n\n  emitEvent(props.onSelect, date)\n  emit('update:value', date)\n}\n\nfunction handleHover(date: Date) {\n  hoveredDate.value = isDisabled(date) ? null : date\n}\n\nfunction isInRange(date: Date) {\n  if (!hoveredDate.value && !startValue.value && !endValue.value) {\n    return false\n  }\n\n  let min: number\n  let max: number\n\n  if (startValue.value && endValue.value) {\n    const startTime = startValue.value.getTime()\n    const endTime = endValue.value.getTime()\n\n    min = Math.min(startTime, endTime)\n    max = Math.max(startTime, endTime)\n  } else if (hoveredDate.value) {\n    if (!startValue.value && !endValue.value) return false\n\n    const hoveredTime = hoveredDate.value.getTime()\n\n    if (!startValue.value || !endValue.value) {\n      const selectedTime = (startValue.value ?? endValue.value)!.getTime()\n\n      min = Math.min(hoveredTime, selectedTime)\n      max = Math.max(hoveredTime, selectedTime)\n    } else {\n      const startTime = startValue.value.getTime()\n      const endTime = endValue.value.getTime()\n      const minTime = Math.min(startTime, endTime)\n      const maxTime = Math.max(startTime, endTime)\n\n      min = Math.min(hoveredTime, minTime)\n      max = Math.max(hoveredTime, maxTime)\n    }\n  } else {\n    return false\n  }\n\n  return date.getTime() >= min && date.getTime() <= max\n}\n</script>\n\n<template>\n  <div\n    :class=\"[nh.be('panel'), nh.bs('vars'), props.inherit && nh.bem('panel', 'inherit')]\"\n    role=\"grid\"\n  >\n    <slot name=\"header\">\n      <Renderer :renderer=\"props.slots.header\"></Renderer>\n    </slot>\n    <div :class=\"[nh.be('row'), nh.bem('row', 'week')]\" aria-hidden>\n      <div v-for=\"week in 7\" :key=\"week\" :class=\"[nh.be('cell'), nh.be('cell-week')]\">\n        <slot\n          name=\"week\"\n          :label=\"getWeekLabel((week - 1 + props.weekStart) % 7)\"\n          :index=\"week - 1\"\n          :week=\"(week - 1 + props.weekStart) % 7\"\n        >\n          <Renderer\n            :renderer=\"props.slots.week\"\n            :data=\"{\n              label: getWeekLabel((week - 1 + props.weekStart) % 7),\n              index: week - 1,\n              week: (week - 1 + props.weekStart) % 7\n            }\"\n          >\n            <div :class=\"nh.be('index')\">\n              {{ getWeekLabel((week - 1 + props.weekStart) % 7) }}\n            </div>\n          </Renderer>\n        </slot>\n      </div>\n    </div>\n    <div ref=\"body\" :class=\"nh.be('body')\">\n      <div v-for=\"row in 6\" :key=\"row\" :class=\"nh.be('row')\">\n        <CalendarCell\n          v-for=\"cell in 7\"\n          :key=\"(row - 1) * 7 + cell\"\n          :date=\"dateRange[(row - 1) * 7 + cell - 1]\"\n          :locale=\"locale\"\n          :selected=\"isSelected(dateRange[(row - 1) * 7 + cell - 1])\"\n          :hovered=\"isHovered(dateRange[(row - 1) * 7 + cell - 1])\"\n          :is-prev=\"isPrevMonth(dateRange[(row - 1) * 7 + cell - 1])\"\n          :is-next=\"isNextMonth(dateRange[(row - 1) * 7 + cell - 1])\"\n          :is-today=\"isToday(dateRange[(row - 1) * 7 + cell - 1])\"\n          :disabled=\"isDisabled(dateRange[(row - 1) * 7 + cell - 1])\"\n          :in-range=\"props.range && isInRange(dateRange[(row - 1) * 7 + cell - 1])\"\n          @hover=\"handleHover\"\n          @select=\"handleSelect\"\n        >\n          <template\n            v-if=\"$slots.item || props.slots.item\"\n            #item=\"{\n              date,\n              label,\n              selected,\n              hovered,\n              isPrev,\n              isNext,\n              isToday: matchedToday,\n              disabled,\n              inRange\n            }\"\n          >\n            <slot\n              name=\"item\"\n              :date=\"date\"\n              :label=\"label\"\n              :selected=\"selected\"\n              :hovered=\"hovered\"\n              :is-prev=\"isPrev\"\n              :is-next=\"isNext\"\n              :is-today=\"matchedToday\"\n              :disabled=\"disabled\"\n              :in-range=\"inRange\"\n            >\n              <Renderer\n                :renderer=\"props.slots.item\"\n                :data=\"{\n                  date,\n                  label,\n                  selected,\n                  hovered,\n                  isPrev,\n                  isNext,\n                  isToday: matchedToday,\n                  disabled,\n                  inRange\n                }\"\n              ></Renderer>\n            </slot>\n          </template>\n          <template v-if=\"$slots.itemContent || props.slots.itemContent\" #default=\"cellParams\">\n            <slot name=\"itemContent\" v-bind=\"cellParams\">\n              <Renderer :renderer=\"props.slots.itemContent\" :data=\"cellParams\"></Renderer>\n            </slot>\n          </template>\n        </CalendarCell>\n      </div>\n    </div>\n    <slot name=\"footer\">\n      <Renderer :renderer=\"props.slots.footer\"></Renderer>\n    </slot>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Column } from '@/components/column'\nimport { NumberInput } from '@/components/number-input'\nimport { Renderer } from '@/components/renderer'\nimport { Row } from '@/components/row'\n\nimport { ref, toRef, watch } from 'vue'\n\nimport CalendarPanel from './calendar-panel.vue'\nimport { emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { calendarProps } from './props'\n\nimport type { CalendarSlots } from './symbol'\n\ndefineOptions({ name: 'Calendar' })\n\nconst _props = defineProps(calendarProps)\nconst props = useProps('calendar', _props, {\n  locale: null,\n  value: {\n    default: null,\n    static: true\n  },\n  year: () => new Date().getFullYear(),\n  month: {\n    default: () => new Date().getMonth() + 1,\n    validator: value => value > 0 && value <= 12\n  },\n  weekDays: {\n    default: null,\n    validator: value => !value || value.length === 0 || value.length === 7\n  },\n  weekStart: {\n    default: 0,\n    validator: value => value >= 0 && value < 7\n  },\n  today: {\n    default: () => new Date(),\n    validator: value => !Number.isNaN(+new Date(value))\n  },\n  disabledDate: {\n    default: () => false,\n    isFunc: true\n  },\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:value', 'update:year', 'update:month'])\n\ndefineSlots<CalendarSlots>()\n\nconst nh = useNameHelper('calendar')\nconst locale = useLocale('calendar', toRef(props, 'locale'))\n\nconst calendarValue = ref(props.value)\nconst calendarYear = ref(props.year)\nconst calendarMonth = ref(props.month)\n\nwatch(\n  () => props.value,\n  value => {\n    calendarValue.value = value\n  }\n)\nwatch(\n  () => props.year,\n  value => {\n    calendarYear.value = value\n  }\n)\nwatch(\n  () => props.month,\n  value => {\n    calendarMonth.value = value\n  }\n)\n\ndefineExpose({ calendarValue, calendarYear, calendarMonth })\n\nfunction formatYearInput(value: number) {\n  return `${value}${locale.value.year}`\n}\n\nfunction formatMonthInput(value: number) {\n  return `${value}${locale.value.month}`\n}\n\nfunction isDisabled(date: Date) {\n  if (typeof props.disabledDate !== 'function') {\n    return true\n  }\n\n  return props.disabledDate(date)\n}\n\nfunction handleClick(date: Date) {\n  if (!isDisabled(date)) {\n    calendarValue.value = date\n  }\n\n  emitEvent(props.onSelect, date)\n  emit('update:value', date)\n}\n\nfunction handleYearChange(value: number) {\n  calendarYear.value = value\n\n  emitEvent(props.onYearChange, value, calendarMonth.value)\n  emit('update:year', value)\n}\n\nfunction handleMonthChange(value: number) {\n  calendarMonth.value = value\n\n  emitEvent(props.onMonthChange, calendarYear.value, value)\n  emit('update:month', value)\n}\n</script>\n\n<template>\n  <CalendarPanel\n    v-model:value=\"calendarValue\"\n    :inherit=\"props.inherit\"\n    :class=\"[nh.b()]\"\n    :year=\"calendarYear\"\n    :month=\"calendarMonth\"\n    :week-start=\"props.weekStart\"\n    :today=\"props.today\"\n    :disabled-date=\"props.disabledDate\"\n  >\n    <template #header>\n      <slot name=\"header\">\n        <Renderer :renderer=\"props.slots.header\">\n          <Row inherit :class=\"nh.be('header')\" align=\"middle\">\n            <Column flex=\"auto\">\n              <slot name=\"title\">\n                <Renderer :renderer=\"props.slots.title\"></Renderer>\n              </slot>\n            </Column>\n            <Column :class=\"nh.be('actions')\" flex=\"0\">\n              <NumberInput\n                :value=\"calendarYear\"\n                inherit\n                :class=\"nh.be('year-input')\"\n                :min=\"1970\"\n                :max=\"2300\"\n                :formatter=\"formatYearInput\"\n                @change=\"handleYearChange\"\n              ></NumberInput>\n              <NumberInput\n                :value=\"calendarMonth\"\n                inherit\n                :class=\"nh.be('month-input')\"\n                :min=\"1\"\n                :max=\"12\"\n                :formatter=\"formatMonthInput\"\n                @change=\"handleMonthChange\"\n              ></NumberInput>\n            </Column>\n          </Row>\n        </Renderer>\n      </slot>\n    </template>\n    <template #week=\"{ label, index, week }\">\n      <div :class=\"nh.be('week')\">\n        <slot\n          name=\"week\"\n          :label=\"label\"\n          :index=\"index\"\n          :week=\"week\"\n        >\n          <Renderer :renderer=\"props.slots.week\" :data=\"{ label, index, week }\">\n            <div :class=\"nh.be('week-value')\">\n              {{ label }}\n            </div>\n          </Renderer>\n        </slot>\n      </div>\n    </template>\n    <template #item=\"{ date, label, selected, hovered, isPrev, isNext, isToday, disabled }\">\n      <div\n        :class=\"{\n          [nh.be('date')]: true,\n          [nh.bem('date', 'selected')]: selected,\n          [nh.bem('date', 'prev')]: isPrev,\n          [nh.bem('date', 'next')]: isNext,\n          [nh.bem('date', 'today')]: isToday,\n          [nh.bem('date', 'disabled')]: disabled\n        }\"\n        tabindex=\"0\"\n        @click=\"handleClick(date)\"\n        @keydown.enter.prevent=\"handleClick(date)\"\n        @keydown.space.prevent=\"handleClick(date)\"\n      >\n        <div :class=\"nh.be('date-header')\">\n          <slot\n            name=\"date\"\n            :selected=\"selected\"\n            :hovered=\"hovered\"\n            :date=\"date\"\n            :is-prev=\"isPrev\"\n            :is-next=\"isNext\"\n            :is-today=\"isToday\"\n            :disabled=\"disabled\"\n          >\n            <Renderer\n              :renderer=\"props.slots.date\"\n              :data=\"{ selected, hovered, date, isPrev, isNext, isToday, disabled }\"\n            >\n              <div :class=\"nh.be('date-value')\" :aria-label=\"label\">\n                {{ date.getDate() }}\n              </div>\n            </Renderer>\n          </slot>\n        </div>\n        <div :class=\"nh.be('date-content')\">\n          <slot\n            name=\"content\"\n            :selected=\"selected\"\n            :hovered=\"hovered\"\n            :date=\"date\"\n            :is-prev=\"isPrev\"\n            :is-next=\"isNext\"\n            :is-today=\"isToday\"\n            :disabled=\"disabled\"\n          >\n            <Renderer\n              :renderer=\"props.slots.content\"\n              :data=\"{ selected, hovered, date, isPrev, isNext, isToday, disabled }\"\n            ></Renderer>\n          </slot>\n        </div>\n      </div>\n    </template>\n  </CalendarPanel>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  sizeProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\nimport type { CaptchaHollowProcess, CaptchaHollowType } from './hollow-paths'\nimport type {\n  CaptchaBeforeTest,\n  CaptchaSliderSlots,\n  CaptchaSlots,\n  CaptchaType,\n  SuccessEvent\n} from './symbol'\n\nexport const captchaProps = buildProps({\n  type: String as PropType<CaptchaType>,\n  slideTarget: [Number, Array] as PropType<number | number[]>,\n  title: String,\n  tip: String,\n  successTip: String,\n  failTip: String,\n  image: [String, Function] as PropType<string | (() => Promise<string>)>,\n  tolerance: Number,\n  canvasSize: Array as PropType<number[]>,\n  refreshIcon: iconProp,\n  disabled: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingEffect: String as PropType<IconEffect>,\n  onBeforeTest: Function as PropType<CaptchaBeforeTest>,\n  texts: Array as PropType<string[]>,\n  failLimit: Number,\n  remotePoint: booleanProp,\n  useTrigger: booleanProp,\n  triggerSize: sizeProp,\n  triggerText: String,\n  transfer: booleanStringProp,\n  hideDelay: Number,\n  hollowShape: [String, Function] as PropType<CaptchaHollowType | CaptchaHollowProcess>,\n  slots: Object as PropType<CaptchaSlots>,\n  onSuccess: eventProp<EventListener<SuccessEvent>>(),\n  onFail: eventProp(),\n  onDragStart: eventProp<(percent: number) => void>(),\n  onDrag: eventProp<(percent: number) => void>(),\n  onDragEnd: eventProp<(percent: number) => void>(),\n  onRefresh: eventProp()\n})\n\nexport type CaptchaProps = ExtractPropTypes<typeof captchaProps>\nexport type CaptchaCProps = ConfigurableProps<ExtractPropTypes<typeof captchaProps>>\n\nexport const captchaSliderProps = buildProps({\n  size: sizeProp,\n  target: Number,\n  tip: String,\n  successTip: String,\n  tolerance: Number,\n  disabled: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  onBeforeTest: Function as PropType<(percent: number, matched: boolean) => unknown>,\n  slots: Object as PropType<CaptchaSliderSlots>,\n  onSuccess: eventProp<(percent: number) => void>(),\n  onFail: eventProp(),\n  onDragStart: eventProp<(percent: number) => void>(),\n  onDrag: eventProp<(percent: number) => void>(),\n  onDragEnd: eventProp<(percent: number) => void>()\n})\n\nexport type CaptchaSliderProps = ExtractPropTypes<typeof captchaSliderProps>\nexport type CaptchaSliderCProps = ConfigurableProps<ExtractPropTypes<typeof captchaSliderProps>>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { useFieldStore } from '@/components/form'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, nextTick, ref, watch } from 'vue'\n\nimport {\n  createIconProp,\n  createSizeProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { useMoving, useSetTimeout } from '@vexip-ui/hooks'\nimport { boundRange, toFixed } from '@vexip-ui/utils'\nimport { captchaSliderProps } from './props'\n\nimport type { CaptchaSliderSlots } from './symbol'\n\ndefineOptions({ name: 'CaptchaSlider' })\n\nconst { idFor, labelId, disabled, loading, size, validateField, getFieldValue, setFieldValue } =\n  useFieldStore<boolean>(focus)\n\nconst _props = defineProps(captchaSliderProps)\nconst props = useProps('captcha', _props, {\n  size: createSizeProp(size),\n  target: {\n    default: 100,\n    validator: value => value >= 0 && value <= 100\n  },\n  tip: null,\n  successTip: null,\n  tolerance: {\n    default: 1,\n    validator: value => value >= 0\n  },\n  disabled: () => disabled.value,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  onBeforeTest: {\n    default: null,\n    isFunc: true\n  },\n  slots: () => ({})\n})\n\ndefineSlots<CaptchaSliderSlots>()\n\nconst nh = useNameHelper('captcha')\nconst locale = useLocale('captcha')\nconst icons = useIcons()\n\nconst { timer } = useSetTimeout()\n\nconst currentLeft = ref(0)\nconst testing = ref(false)\nconst resetting = ref(false)\nconst isSuccess = ref(false)\nconst testLoading = ref(false)\n\nconst track = ref<HTMLElement>()\n\nconst readonly = computed(() => props.disabled || (props.loading && props.loadingLock))\n\nlet widthLimit: number\n\nconst { target: trigger, moving: dragging } = useMoving({\n  onStart: (_, event) => {\n    if (\n      testing.value ||\n      readonly.value ||\n      !track.value ||\n      !trigger.value ||\n      isSuccess.value ||\n      resetting.value ||\n      event.button > 0\n    ) {\n      return false\n    }\n\n    widthLimit = track.value.getBoundingClientRect().width\n    currentLeft.value = 0\n    verifyPosition()\n    trigger.value.focus()\n    emitEvent(props.onDragStart, currentLeft.value)\n  },\n  onMove: state => {\n    if (testing.value || readonly.value || isSuccess.value || resetting.value) {\n      return false\n    }\n\n    currentLeft.value = (state.deltaX / widthLimit) * 100\n    verifyPosition()\n    emitEvent(props.onDrag, currentLeft.value)\n  },\n  onEnd: async () => {\n    if (testing.value || readonly.value) return\n\n    testing.value = true\n\n    const matched = matchTarget(currentLeft.value)\n    let customResult: unknown\n\n    if (typeof props.onBeforeTest === 'function') {\n      nextTick(() => {\n        testLoading.value = true\n      })\n      customResult = await props.onBeforeTest(currentLeft.value, matched)\n      nextTick(() => {\n        testLoading.value = false\n      })\n    }\n\n    if (currentLeft.value && (customResult === false || (!matched && customResult !== true))) {\n      resetting.value = true\n      currentLeft.value = 0\n      isSuccess.value = false\n\n      setFieldValue(false)\n      emitEvent(props.onFail)\n    } else if (matched || customResult === true) {\n      isSuccess.value = true\n\n      if (customResult && !matched) {\n        resetting.value = true\n        currentLeft.value = props.target\n      }\n\n      setFieldValue(true)\n      emitEvent(props.onSuccess, currentLeft.value)\n    }\n\n    validateField()\n    trigger.value?.blur()\n    emitEvent(props.onDragEnd, currentLeft.value)\n\n    clearTimeout(timer.testing)\n    testing.value = false\n  }\n})\n\nconst isLoading = computed(() => props.loading || testLoading.value)\nconst className = computed(() => {\n  const baseCls = nh.be('slider')\n\n  return {\n    [baseCls]: true,\n    [nh.bs('vars')]: true,\n    [`${baseCls}--success`]: isSuccess.value,\n    [`${baseCls}--disabled`]: props.disabled,\n    [`${baseCls}--loading`]: isLoading.value,\n    [`${baseCls}--${props.size}`]: props.size !== 'default'\n  }\n})\nconst fillerStyle = computed(() => {\n  return {\n    [nh.cv('filler-transition')]: resetting.value ? 'transform 250ms ease' : undefined,\n    transform: `scaleX(${currentLeft.value / 100})`\n  }\n})\nconst tipStyle = computed(() => {\n  return {\n    [nh.cv('tip-transition')]: resetting.value ? 'background-position 250ms ease' : undefined,\n    backgroundPosition: `-${currentLeft.value}%`\n  }\n})\nconst triggerStyle = computed(() => {\n  return {\n    left: `${currentLeft.value}%`,\n    [nh.cv('trigger-transition')]: resetting.value ? 'left 250ms ease' : undefined\n  }\n})\n\nwatch(\n  () => getFieldValue(),\n  value => {\n    if (!value) {\n      reset()\n    } else {\n      if (!matchTarget(currentLeft.value)) {\n        resetting.value = true\n        currentLeft.value = props.target\n      }\n\n      isSuccess.value = true\n    }\n  }\n)\nwatch(readonly, value => value && reset())\n\ndefineExpose({\n  idFor,\n  currentLeft,\n  resetting,\n  isSuccess,\n  dragging,\n  isLoading,\n  track,\n  trigger,\n  focus,\n  reset\n})\n\nfunction verifyPosition() {\n  currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\n}\n\nfunction reset() {\n  resetting.value = true\n  currentLeft.value = 0\n  isSuccess.value = false\n}\n\nfunction afterReset() {\n  resetting.value = false\n}\n\nfunction matchTarget(value: number) {\n  return Math.abs(props.target - value) <= props.tolerance\n}\n\nfunction focus(options?: FocusOptions) {\n  trigger.value?.focus(options)\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    tabindex=\"-1\"\n    role=\"group\"\n    :aria-labelledby=\"labelId\"\n  >\n    <div\n      :class=\"{\n        [nh.be('filler')]: true,\n        [nh.bem('filler', 'loading')]: isLoading,\n        [nh.bem('filler', 'success')]: isSuccess\n      }\"\n      :style=\"fillerStyle\"\n    ></div>\n    <div\n      :class=\"{\n        [nh.be('tip')]: true,\n        [nh.bem('tip', 'focused')]: dragging,\n        [nh.bem('tip', 'loading')]: isLoading,\n        [nh.bem('tip', 'success')]: isSuccess\n      }\"\n      :style=\"tipStyle\"\n    >\n      <slot name=\"tip\" :success=\"isSuccess\">\n        <Renderer :renderer=\"props.slots.tip\" :data=\"{ success: isSuccess }\">\n          {{ isSuccess ? (props.successTip ?? locale.success) : (props.tip ?? locale.slideEnd) }}\n        </Renderer>\n      </slot>\n    </div>\n    <div ref=\"track\" :class=\"nh.be('track')\">\n      <div\n        ref=\"trigger\"\n        :class=\"{\n          [nh.be('trigger')]: true,\n          [nh.bem('trigger', 'focused')]: dragging,\n          [nh.bem('trigger', 'loading')]: isLoading,\n          [nh.bem('trigger', 'success')]: isSuccess\n        }\"\n        tabindex=\"0\"\n        :style=\"triggerStyle\"\n        @transitionend=\"afterReset\"\n      >\n        <slot name=\"trigger\" :success=\"isSuccess\">\n          <Renderer :renderer=\"props.slots.trigger\" :data=\"{ success: isSuccess }\">\n            <Icon v-if=\"isSuccess\" v-bind=\"icons.check\"></Icon>\n            <Icon\n              v-else-if=\"isLoading\"\n              v-bind=\"icons.loading\"\n              :effect=\"props.loadingEffect || icons.loading.effect\"\n              :icon=\"props.loadingIcon || icons.loading.icon\"\n            ></Icon>\n            <Icon v-else v-bind=\"icons.anglesRight\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n    </div>\n  </div>\n</template>\n","export interface CaptchaHollowOptions {\n  ctx: CanvasRenderingContext2D,\n  /**\n   * The x coordinate of slide target center\n   */\n  x: number,\n  /**\n   * The y coordinate of slide target center\n   */\n  y: number,\n  /**\n   * Current canvas width\n   */\n  width: number,\n  /**\n   * Current canvas height\n   */\n  height: number\n}\n\n/**\n * Specify the react of the hollow's shape\n */\nexport type CaptchaHollowResult = [x: number, y: number, width: number, height: number]\nexport type CaptchaHollowProcess = (options: CaptchaHollowOptions) => CaptchaHollowResult\n\nexport type CaptchaHollowType = 'square' | 'puzzle' | 'shield' | 'heart'\n\nexport const squarePath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\n  const side = Math.min(width, height) * 0.25\n  const halfSide = side * 0.5\n\n  ctx.moveTo(x - halfSide, y - halfSide)\n  ctx.lineTo(x + halfSide, y - halfSide)\n  ctx.lineTo(x + halfSide, y + halfSide)\n  ctx.lineTo(x - halfSide, y + halfSide)\n  ctx.closePath()\n\n  return [x - halfSide - 2, y - halfSide - 2, side + 4, side + 4]\n}\n\nexport const puzzlePath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\n  const side = Math.min(width, height) * 0.2\n  const halfSide = side * 0.5\n  const left = x - halfSide\n  const top = y - halfSide\n  const radius = side * 0.2\n\n  ctx.moveTo(left, top)\n  ctx.arc(left + halfSide, top - radius + 2, radius, 0.72 * Math.PI, 2.26 * Math.PI)\n  ctx.lineTo(left + side, top)\n  ctx.arc(left + side + radius - 2, top + halfSide, radius, 1.21 * Math.PI, 2.78 * Math.PI)\n  ctx.lineTo(left + side, top + side)\n  ctx.lineTo(left, top + side)\n  ctx.arc(left + radius - 2, top + halfSide, radius + 0.4, 2.76 * Math.PI, 1.24 * Math.PI, true)\n  ctx.lineTo(left, top)\n\n  return [x - halfSide - 2, y - side * 0.9 - 2, side * 1.4 + 4, side * 1.4 + 4]\n}\n\nexport const shieldPath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\n  const side = Math.min(width, height) * 0.25\n  const halfSide = side * 0.5\n\n  ctx.moveTo(x, y - halfSide)\n  ctx.bezierCurveTo(\n    x,\n    y - halfSide + side * 0.05,\n    x - halfSide + side * 0.3,\n    y - halfSide * 0.5 + side * 0.1,\n    x - halfSide,\n    y - halfSide * 0.7\n  )\n  ctx.bezierCurveTo(x - halfSide, y + side * 0.3, x - side * 0.1, y + halfSide, x, y + halfSide)\n  ctx.bezierCurveTo(\n    x + side * 0.1,\n    y + halfSide,\n    x + halfSide,\n    y + side * 0.3,\n    x + halfSide,\n    y - halfSide * 0.7\n  )\n  ctx.bezierCurveTo(\n    x + halfSide - side * 0.3,\n    y - halfSide * 0.5 + side * 0.1,\n    x,\n    y - halfSide + side * 0.05,\n    x,\n    y - halfSide\n  )\n\n  return [x - halfSide - 2, y - halfSide - 2, side + 4, side + 4]\n}\n\nexport const heartPath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\n  const side = Math.min(width, height) * 0.25\n  const halfSide = side * 0.5\n\n  ctx.moveTo(x, y - side * 0.25)\n  ctx.bezierCurveTo(\n    x,\n    y - side * 0.4,\n    x - side * 0.1,\n    y - halfSide,\n    x - halfSide * 0.5,\n    y - halfSide\n  )\n  ctx.bezierCurveTo(\n    x - halfSide * 0.5 - side * 0.1,\n    y - halfSide,\n    x - halfSide,\n    y - side * 0.4,\n    x - halfSide,\n    y - side * 0.2\n  )\n  ctx.bezierCurveTo(\n    x - halfSide,\n    y + side * 0.2,\n    x - side * 0.05,\n    y + halfSide * 0.8,\n    x,\n    y + halfSide * 0.8\n  )\n  ctx.bezierCurveTo(\n    x + side * 0.05,\n    y + halfSide * 0.8,\n    x + halfSide,\n    y + side * 0.2,\n    x + halfSide,\n    y - side * 0.2\n  )\n  ctx.bezierCurveTo(\n    x + halfSide,\n    y - side * 0.4,\n    x + halfSide * 0.5 + side * 0.1,\n    y - halfSide,\n    x + halfSide * 0.5,\n    y - halfSide\n  )\n  ctx.bezierCurveTo(x + side * 0.1, y - halfSide, x, y - side * 0.4, x, y - side * 0.25)\n\n  return [x - halfSide - 2, y - halfSide - 2, side + 4, side * 0.9 + 4]\n}\n","import { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Spin } from '@/components/spin'\nimport { Tooltip } from '@/components/tooltip'\nimport { useFieldStore } from '@/components/form'\nimport { Renderer } from '@/components/renderer'\n\nimport {\n  Transition,\n  TransitionGroup,\n  computed,\n  defineComponent,\n  nextTick,\n  onMounted,\n  reactive,\n  ref,\n  renderSlot,\n  shallowRef,\n  toRef,\n  watch\n} from 'vue'\n\nimport CaptchaSlider from './captcha-slider.vue'\nimport {\n  createIconProp,\n  createSizeProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { createSlotRender, useSetTimeout } from '@vexip-ui/hooks'\nimport {\n  ensureArray,\n  isClient,\n  isNull,\n  nextFrameOnce,\n  random,\n  randomHardColor\n} from '@vexip-ui/utils'\nimport { captchaProps } from './props'\nimport { heartPath, puzzlePath, shieldPath, squarePath } from './hollow-paths'\n\nimport type { CaptchaSliderExposed } from '@/components/captcha-slider'\nimport type { SuccessEvent } from './symbol'\n\nexport default defineComponent({\n  name: 'Captcha',\n  props: captchaProps,\n  emits: ['update:visible'],\n  setup(_props, { slots, expose }) {\n    const { idFor, labelId, disabled, loading, validateField, setFieldValue } = useFieldStore<\n      number | number[]\n    >(focus)\n\n    const props = useProps('captcha', _props, {\n      type: 'slide',\n      slideTarget: {\n        default: null,\n        validator: value => {\n          if (isNull(value)) return true\n\n          if (Array.isArray(value)) {\n            return value[0] >= 0 && value[0] <= 100 && value[1] >= 0 && value[1] <= 100\n          } else {\n            return value >= 0 && value <= 100\n          }\n        }\n      },\n      title: null,\n      tip: null,\n      successTip: null,\n      failTip: null,\n      image: null,\n      tolerance: {\n        default: 1,\n        validator: value => value >= 0\n      },\n      canvasSize: () => [1000, 600],\n      refreshIcon: createIconProp(),\n      disabled: () => disabled.value,\n      loading: () => loading.value,\n      loadingIcon: createIconProp(),\n      loadingEffect: null,\n      onBeforeTest: {\n        default: null,\n        isFunc: true\n      },\n      texts: {\n        default: () => [],\n        validator: value => !value.find(text => text.length > 1)\n      },\n      failLimit: 0,\n      remotePoint: false,\n      useTrigger: false,\n      triggerSize: createSizeProp(),\n      triggerText: null,\n      transfer: false,\n      hideDelay: {\n        default: 3000,\n        validator: value => value >= 0\n      },\n      hollowShape: {\n        default: squarePath,\n        isFunc: true\n      },\n      slots: () => ({})\n    })\n\n    const nh = useNameHelper('captcha')\n    const locale = useLocale('captcha')\n    const icons = useIcons()\n\n    const { timer } = useSetTimeout()\n\n    const currentTarget = ref(parseTarget(props.slideTarget))\n    const dragging = ref(false)\n    const pointers = reactive<number[][]>([])\n    const testLoading = ref(false)\n    const success = ref(false)\n    const failed = ref(false)\n    const failedCount = ref(0)\n    const visible = ref(false)\n\n    const wrapper = ref<HTMLElement>()\n    const canvas = ref<HTMLCanvasElement>()\n    const subCanvas = ref<HTMLCanvasElement>()\n    const slider = ref<CaptchaSliderExposed>()\n\n    const track = computed(() => slider.value?.track)\n\n    const isSuccess = computed(() => !!slider.value?.isSuccess || success.value)\n    const currentLeft = computed(() => slider.value?.currentLeft || 0)\n    const resetting = computed(() => slider.value?.resetting)\n\n    const usedTarget = computed(() => currentTarget.value[0])\n\n    const imageLoading = ref(false)\n    const imagePromise = shallowRef(Promise.resolve())\n\n    const pointerTargets: number[][] = []\n\n    const fontRate = 0.108\n\n    let imageLoaded = false\n    let image: HTMLImageElement | undefined\n    let memoryCanvas: HTMLCanvasElement | undefined\n\n    const isLoading = computed(() => props.loading || imageLoading.value || testLoading.value)\n    const failLocked = computed(() => props.failLimit > 0 && failedCount.value >= props.failLimit)\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        nh.bm(props.type),\n        {\n          [nh.bm('success')]: isSuccess.value,\n          [nh.bm('fail')]: !isSuccess.value && failed.value,\n          [nh.bm('dragging')]: dragging.value,\n          [nh.bm('disabled')]: props.disabled,\n          [nh.bm('loading')]: isLoading.value,\n          [nh.bm('fail-locked')]: failLocked.value\n        }\n      ]\n    })\n    const subCanvasStyle = computed(() => {\n      return {\n        left: `${currentLeft.value}%`,\n        [nh.cv('trigger-transition')]: resetting.value ? 'left 250ms ease' : undefined\n      }\n    })\n    const canvasSize = computed(() => {\n      return [props.canvasSize[0] || 1000, props.canvasSize[1] || 600]\n    })\n    const actionLocked = computed(() => props.disabled || isSuccess.value || isLoading.value)\n\n    watch(\n      () => props.slideTarget,\n      value => {\n        currentTarget.value = parseTarget(value)\n      }\n    )\n    watch([() => props.image, wrapper], async () => {\n      image = undefined\n      await (imagePromise.value = loadImage())\n      drawImageNextFrame()\n    })\n    watch(\n      [\n        currentTarget,\n        () => props.canvasSize[0],\n        () => props.canvasSize[1],\n        () => props.hollowShape\n      ],\n      drawImageNextFrame\n    )\n    watch(\n      [() => props.type, () => props.remotePoint],\n      () => {\n        if (\n          props.type !== 'slide' &&\n          props.remotePoint &&\n          typeof props.onBeforeTest !== 'function'\n        ) {\n          console.warn(\n            \"[vexip-ui:Captcha] You should specify 'on-before-test' prop to valid the captcha \" +\n              \"if you are using the 'point' type in remote\"\n          )\n        }\n      },\n      { immediate: true }\n    )\n    watch(\n      [() => props.type, () => props.texts, () => props.texts.length, () => props.remotePoint],\n      () => {\n        if (props.type === 'point' && props.texts.length && !props.remotePoint && image) {\n          drawImageNextFrame()\n        }\n      }\n    )\n    watch(visible, async value => {\n      if (value) {\n        await (imagePromise.value = loadImage())\n        drawImageNextFrame()\n      }\n    })\n    watch(isSuccess, value => {\n      if (value && props.useTrigger && visible.value) {\n        clearTimeout(timer.hideTrigger)\n\n        timer.hideTrigger = setTimeout(() => {\n          visible.value = false\n        }, props.hideDelay)\n      }\n    })\n\n    onMounted(async () => {\n      await (imagePromise.value = loadImage())\n      drawImage()\n    })\n\n    expose({\n      dragging,\n      resetting,\n      isSuccess,\n      imageLoading,\n      imagePromise,\n      wrapper,\n      canvas,\n      subCanvas,\n      slider,\n      reset\n    })\n\n    // 避免多次触发时发生竞态问题\n    let loadFlag: string\n\n    async function loadImage() {\n      if (image) return\n\n      imageLoading.value = true\n      loadFlag = `${Date.now()}${Math.round(Math.random() * 10e6)}`\n\n      const flag = loadFlag\n      const src = typeof props.image === 'function' ? await props.image() : props.image\n\n      await new Promise<void>(resolve => {\n        if (!isClient || flag !== loadFlag || !src) {\n          resolve()\n          return\n        }\n\n        image = new Image()\n        imageLoaded = false\n        image.src = src\n\n        if (src.trim().startsWith('data:image')) {\n          imageLoaded = true\n          resolve()\n        } else {\n          image.onload = () => {\n            imageLoaded = true\n            resolve()\n          }\n        }\n      }).finally(() => {\n        imageLoading.value = false\n      })\n    }\n\n    function drawImageWithTexts() {\n      const canvasEl = canvas.value\n      const ctx = canvasEl?.getContext?.('2d')\n\n      if (!image || !canvasEl || !ctx) return\n\n      const { width, height } = canvasEl\n\n      ctx.drawImage(image, 0, 0, width, height)\n\n      if (!props.texts.length || props.remotePoint) return\n\n      pointerTargets.length = 0\n\n      const fontSize = Math.max(width, height) * fontRate\n\n      ctx.textBaseline = 'middle'\n      ctx.textAlign = 'center'\n      ctx.font = `bold ${fontSize}px sans-serif`\n      ctx.lineWidth = 2\n      ctx.strokeStyle = '#fff'\n\n      const drawText = (\n        text: string,\n        x: number,\n        y: number,\n        radian = 0,\n        color = randomHardColor()\n      ) => {\n        ctx.save()\n        ctx.translate(x, y)\n        radian && ctx.rotate(radian * Math.PI)\n        ctx.fillStyle = color\n        ctx.fillText(text, 0, 0)\n        ctx.strokeText(text, 0, 0)\n        ctx.restore()\n      }\n\n      const metrics = ctx.measureText(props.texts[0])\n      const xLimit = Math.max(fontSize, metrics.width) * 1.2\n      const yLimit =\n        Math.max(fontSize, metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent) * 1.2\n\n      let prevX = -2 * fontSize\n      let prevY = -2 * fontSize\n\n      for (const text of props.texts) {\n        let x = prevX\n        let y = prevY\n\n        while (Math.abs(x - prevX) < xLimit && Math.abs(y - prevY) < yLimit) {\n          x = width * 0.1 + Math.random() * width * 0.8\n          y = height * 0.1 + Math.random() * height * 0.8\n        }\n\n        prevX = x\n        prevY = y\n\n        pointerTargets.push([(x / width) * 100, (y / height) * 100])\n        drawText(text, x, y, Math.random() * 2)\n      }\n    }\n\n    function getHollowProcess() {\n      if (typeof props.hollowShape === 'function') return props.hollowShape\n\n      switch (props.hollowShape) {\n        case 'puzzle':\n          return puzzlePath\n        case 'shield':\n          return shieldPath\n        case 'heart':\n          return heartPath\n        default:\n          return squarePath\n      }\n    }\n\n    function drawImage() {\n      const canvasEl = canvas.value\n      const ctx = canvasEl?.getContext?.('2d')\n      const subCanvasEl = subCanvas.value\n      const subCtx = subCanvasEl?.getContext?.('2d')\n\n      if (!image || !imageLoaded || !canvasEl || !ctx || !props.image) return\n\n      if (props.type === 'point') {\n        drawImageWithTexts()\n        return\n      }\n\n      if (!subCanvasEl || !subCtx || !track.value) return\n\n      if (!memoryCanvas) {\n        if (!isClient) return\n\n        memoryCanvas = document.createElement('canvas')\n      }\n\n      memoryCanvas.width = canvasEl.width\n      memoryCanvas.height = canvasEl.height\n\n      const pathCtx = memoryCanvas.getContext('2d')\n\n      if (!pathCtx) return\n\n      ctx.clearRect(0, 0, canvasEl.width, canvasEl.height)\n      subCtx.clearRect(0, 0, subCanvasEl.width, subCanvasEl.height)\n      pathCtx.clearRect(0, 0, memoryCanvas.width, memoryCanvas.height)\n\n      const canvasRect = canvasEl.getBoundingClientRect()\n      const trackRect = track.value.getBoundingClientRect()\n      // 滑动时以轨道为准，所以需要补正 canvas 宽度和 track 宽度的差值\n      const widthFix = ((canvasRect.width - trackRect.width) / canvasRect.width) * canvasEl.width\n\n      const targetX = widthFix / 2 + currentTarget.value[0] * (canvasEl.width - widthFix) * 0.01\n      const targetY = currentTarget.value[1] * canvasEl.height * 0.01\n\n      const hollowProcess = getHollowProcess()\n\n      pathCtx.beginPath()\n      pathCtx.strokeStyle = 'rgba(255, 255, 255, 0.5)'\n      pathCtx.lineWidth = 4\n\n      const [clipX, clipY, clipWidth, clipHeight] = hollowProcess({\n        ctx: pathCtx,\n        x: targetX,\n        y: targetY,\n        width: props.canvasSize[0],\n        height: props.canvasSize[1]\n      })\n\n      pathCtx.stroke()\n      pathCtx.clip()\n      pathCtx.drawImage(image, 0, 0, canvasEl.width, canvasEl.height)\n\n      // 中心点偏移修正\n      const xLeftWidth = targetX - clipX\n      const translateFix = ((clipWidth * 0.5 - xLeftWidth) / clipWidth) * 100\n\n      subCanvasEl.style.transform = `translate3d(${translateFix - 50}%, 0, 0)`\n      subCanvasEl.width = clipWidth\n\n      subCtx.drawImage(\n        memoryCanvas,\n        clipX,\n        clipY,\n        clipWidth,\n        clipHeight,\n        0,\n        clipY,\n        clipWidth,\n        clipHeight\n      )\n\n      ctx.save()\n      ctx.beginPath()\n      ctx.fillStyle = 'rgba(255, 255, 255, 0.75)'\n      ctx.strokeStyle = 'rgba(255, 255, 255, 0.5)'\n      ctx.lineWidth = 10\n\n      hollowProcess({\n        ctx,\n        x: targetX,\n        y: targetY,\n        width: props.canvasSize[0],\n        height: props.canvasSize[1]\n      })\n\n      ctx.stroke()\n      ctx.fill()\n      ctx.restore()\n      ctx.globalCompositeOperation = 'destination-over'\n      ctx.drawImage(image, 0, 0, canvasEl.width, canvasEl.height)\n    }\n\n    function drawImageNextFrame() {\n      nextFrameOnce(drawImage)\n    }\n\n    async function reset(newImage?: string | (() => Promise<string>)) {\n      if (newImage) {\n        image = undefined\n        await (imagePromise.value = loadImage())\n        drawImage()\n      }\n\n      success.value = false\n      failed.value = false\n      failedCount.value = 0\n      currentTarget.value = parseTarget()\n      pointers.length = 0\n\n      slider.value?.reset()\n      props.type === 'point' && drawImageWithTexts()\n    }\n\n    function parseTarget(target = props.slideTarget) {\n      if (isNull(target)) return [random(75, 25), random(75, 25)]\n\n      const [targetX = random(75, 25), targetY = random(75, 25)] = ensureArray(target)\n\n      return [targetX, targetY]\n    }\n\n    function focus(options?: FocusOptions) {\n      slider.value?.focus(options)\n    }\n\n    function handleDragStart(percent: number) {\n      dragging.value = true\n      emitEvent(props.onDragStart, percent)\n    }\n\n    function handleDrag(percent: number) {\n      emitEvent(props.onDrag, percent)\n    }\n\n    function handleDragEnd(percent: number) {\n      dragging.value = false\n      emitEvent(props.onDragEnd, percent)\n    }\n\n    function handleSlideSuccess(percent: number) {\n      success.value = true\n      failed.value = false\n\n      emitEvent(props.onSuccess as SuccessEvent, percent)\n      setFieldValue(percent)\n      validateField()\n    }\n\n    function handleSlideFail() {\n      failed.value = true\n      ++failedCount.value\n\n      emitEvent(props.onFail)\n    }\n\n    function handleRefresh() {\n      !actionLocked.value && emitEvent(props.onRefresh)\n    }\n\n    function stopPropagation(event: Event) {\n      event.stopPropagation()\n    }\n\n    async function verifyPointers() {\n      if (isLoading.value) return\n\n      pointers.length = props.texts.length\n\n      let result = props.remotePoint\n      let customResult: unknown\n\n      if (!props.remotePoint && canvas.value) {\n        const { width, height } = canvas.value\n        const fontSize = Math.max(width, height) * fontRate\n        const xTolerance = (fontSize / width) * 50 + props.tolerance\n        const yTolerance = (fontSize / height) * 50 + props.tolerance\n\n        result = true\n\n        for (let i = 0, len = pointers.length; i < len; ++i) {\n          const [x, y] = pointers[i]\n          const [targetX, targetY] = pointerTargets[i]\n\n          if (Math.abs(x - targetX) > xTolerance || Math.abs(y - targetY) > yTolerance) {\n            result = false\n            break\n          }\n        }\n      }\n\n      if (typeof props.onBeforeTest === 'function') {\n        nextTick(() => {\n          testLoading.value = true\n        })\n        customResult = await (props.onBeforeTest as any)(pointers.flat())\n        nextTick(() => {\n          testLoading.value = false\n        })\n      }\n\n      if (!result || customResult === false) {\n        success.value = false\n        pointers.length = 0\n        failed.value = true\n        ++failedCount.value\n\n        emitEvent(props.onFail)\n      } else {\n        success.value = true\n        failed.value = false\n\n        emitEvent(props.onSuccess as SuccessEvent, pointers.flat())\n      }\n    }\n\n    function handleImageClick(event: MouseEvent) {\n      if (props.type !== 'point' || actionLocked.value || !canvas.value) return\n\n      const { clientWidth: canvasWidth, clientHeight: canvasHeight } = canvas.value\n      const { offsetX, offsetY } = event\n\n      pointers.push([(offsetX / canvasWidth) * 100, (offsetY / canvasHeight) * 100])\n\n      if (pointers.length >= props.texts.length) {\n        nextTick(verifyPointers)\n      }\n    }\n\n    function cancelPointer(index: number, event: Event) {\n      event.stopPropagation()\n\n      if (actionLocked.value || index !== pointers.length - 1) return\n\n      pointers.pop()\n    }\n\n    function handleTrigger() {\n      if (!isSuccess.value) {\n        visible.value = true\n      }\n    }\n\n    function renderImage() {\n      return (\n        <div\n          class={[nh.be('image'), actionLocked.value && nh.bem('image', 'locked')]}\n          onClick={handleImageClick}\n        >\n          {props.image && (\n            <div class={nh.be('image-inner')}>\n              <canvas\n                ref={canvas}\n                class={nh.be('canvas')}\n                width={canvasSize.value[0]}\n                height={canvasSize.value[1]}\n              ></canvas>\n              {props.type === 'slide' && (\n                <div class={nh.be('sub-image')}>\n                  <canvas\n                    ref={subCanvas}\n                    class={nh.be('sub-canvas')}\n                    height={canvasSize.value[1]}\n                    style={subCanvasStyle.value}\n                  ></canvas>\n                </div>\n              )}\n            </div>\n          )}\n          {props.type === 'point' && (\n            <TransitionGroup name={nh.ns('fade')} appear>\n              {pointers.map(([x, y], index) => (\n                <span\n                  key={index}\n                  class={nh.be('pointer')}\n                  style={{ top: `${y}%`, left: `${x}%` }}\n                  onClick={cancelPointer.bind(null, index)}\n                >\n                  {index + 1}\n                </span>\n              ))}\n            </TransitionGroup>\n          )}\n          <Transition name={nh.ns('fade')}>\n            {(isSuccess.value || failed.value) && (\n              <div\n                class={[\n                  nh.be('image-tip'),\n                  nh.bem('image-tip', isSuccess.value ? 'success' : 'fail')\n                ]}\n                onClick={stopPropagation}\n              >\n                {isSuccess.value\n                  ? (props.successTip ?? locale.value.success)\n                  : (props.failTip ?? locale.value.fail)}\n              </div>\n            )}\n          </Transition>\n        </div>\n      )\n    }\n\n    function renderSlider() {\n      return (\n        <CaptchaSlider\n          ref={slider}\n          class={nh.bem('slider', 'inner')}\n          target={usedTarget.value}\n          tolerance={props.tolerance}\n          loading={isLoading.value}\n          loading-icon={props.loadingIcon}\n          loading-lock\n          loading-effect={props.loadingEffect}\n          disabled={props.disabled || failLocked.value}\n          onBeforeTest={props.onBeforeTest}\n          onSuccess={handleSlideSuccess}\n          onFail={handleSlideFail}\n          onDragStart={handleDragStart}\n          onDrag={handleDrag}\n          onDragEnd={handleDragEnd}\n        >\n          {{\n            tip: () =>\n              renderSlot(slots, 'tip', { success: isSuccess.value }, () => [\n                <Renderer renderer={props.slots.tip} data={{ success: isSuccess.value }}>\n                  {props.tip ?? locale.value.slide}\n                </Renderer>\n              ])\n          }}\n        </CaptchaSlider>\n      )\n    }\n\n    function renderTextList() {\n      return (\n        <div class={nh.be('text-list')}>\n          <div class={nh.be('tip')}>\n            {renderSlot(slots, 'tip', { success: isSuccess.value }, () => [\n              <Renderer renderer={props.slots.tip} data={{ success: isSuccess.value }}>\n                {props.tip ?? locale.value.pointInOrder}\n              </Renderer>\n            ])}\n          </div>\n          <span>{':'}</span>\n          {renderSlot(slots, 'texts', { texts: toRef(props, 'texts') }, () => [\n            <Renderer renderer={props.slots.texts} data={{ texts: toRef(props, 'texts') }}>\n              {props.texts.map((text, index) => (\n                <span key={index} class={nh.be('text')}>\n                  {text}\n                </span>\n              ))}\n            </Renderer>\n          ])}\n        </div>\n      )\n    }\n\n    function renderFooter() {\n      if (props.type === 'slide') return renderSlider()\n      if (props.type === 'point') return renderTextList()\n\n      return null\n    }\n\n    function renderPanel() {\n      return (\n        <div\n          ref={wrapper}\n          id={idFor.value}\n          class={className.value}\n          tabindex={-1}\n          role={'application'}\n          aria-labelledby={labelId.value}\n        >\n          <div class={nh.be('header')}>\n            <div class={nh.be('title')}>\n              {renderSlot(slots, 'title', { success: isSuccess.value }, () => [\n                <Renderer renderer={props.slots.title} data={{ success: isSuccess.value }}>\n                  {props.title ?? locale.value.doCaptcha}\n                </Renderer>\n              ])}\n            </div>\n            <span role={'none'} style={'flex: auto'}></span>\n            <button\n              class={[\n                nh.be('action'),\n                nh.be('refresh'),\n                actionLocked.value && nh.bem('action', 'disabled')\n              ]}\n              type={'button'}\n              onClick={handleRefresh}\n            >\n              {renderSlot(slots, 'refresh', undefined, () => [\n                <Renderer renderer={props.slots.refresh}>\n                  <Icon\n                    {...icons.value.refresh}\n                    icon={props.refreshIcon || icons.value.refresh.icon}\n                  ></Icon>\n                </Renderer>\n              ])}\n            </button>\n          </div>\n          <Spin active={isLoading.value || slider.value?.isLoading} delay={false}>\n            {{\n              default: renderImage,\n              icon: createSlotRender(slots, ['loading-icon', 'loadingIcon'], () => (\n                <Renderer renderer={props.slots.loadingIcon}></Renderer>\n              ))\n            }}\n          </Spin>\n          {renderFooter()}\n        </div>\n      )\n    }\n\n    function renderTrigger() {\n      return renderSlot(\n        slots,\n        'trigger',\n        { visible: visible.value, success: isSuccess.value },\n        () => [\n          <Renderer\n            renderer={props.slots.trigger}\n            data={{ visible: visible.value, success: isSuccess.value }}\n          >\n            <Button\n              class={[nh.be('button'), isSuccess.value && nh.bem('button', 'success')]}\n              type={isSuccess.value ? 'success' : 'primary'}\n              size={props.triggerSize}\n              block\n              loading={visible.value && !isSuccess.value}\n              icon={isSuccess.value ? icons.value.success.icon : null}\n              onClick={handleTrigger}\n            >\n              {props.triggerText ??\n                (isSuccess.value ? locale.value.completed : locale.value.trigger)}\n            </Button>\n          </Renderer>\n        ]\n      )\n    }\n\n    return () => {\n      if (props.useTrigger) {\n        return (\n          <Tooltip\n            class={nh.bs('wrapper')}\n            visible={visible.value}\n            trigger={'custom'}\n            raw\n            wrapper\n            transfer={props.transfer}\n          >\n            {{\n              trigger: renderTrigger,\n              default: renderPanel\n            }}\n          </Tooltip>\n        )\n      }\n\n      return renderPanel()\n    }\n  }\n})\n","import { buildProps, styleProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { CardShadowType, CardSlots } from './symbol'\n\nexport const cardProps = buildProps({\n  title: String,\n  shadow: String as PropType<CardShadowType>,\n  contentStyle: styleProp,\n  slots: Object as PropType<CardSlots>\n})\n\nexport type CardProps = ExtractPropTypes<typeof cardProps>\nexport type CardCProps = ConfigurableProps<CardProps>\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\n\nimport { computed } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { cardProps } from './props'\n\nimport type { CardShadowType, CardSlots } from './symbol'\n\ndefineOptions({ name: 'Card' })\n\nconst _props = defineProps(cardProps)\nconst props = useProps('card', _props, {\n  title: '',\n  shadow: {\n    default: 'always' as CardShadowType,\n    validator: (value: CardShadowType) => ['always', 'hover', 'never'].includes(value)\n  },\n  contentStyle: () => ({}),\n  slots: () => ({})\n})\n\nconst slots = defineSlots<CardSlots>()\n\nconst nh = useNameHelper('card')\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(`shadow-${props.shadow}`),\n    {\n      [nh.bm('inherit')]: props.inherit\n    }\n  ]\n})\nconst hasTitle = computed(() => !!(slots.title || props.title || props.slots.title))\nconst hasExtra = computed(() => !!(slots.extra || props.slots.extra))\nconst hasHeader = computed(() => !!slots.header || hasTitle.value || hasExtra.value)\n</script>\n\n<template>\n  <article :class=\"className\">\n    <div v-if=\"hasHeader\" :class=\"nh.be('header')\">\n      <slot name=\"header\">\n        <Renderer :renderer=\"props.slots.header\">\n          <div v-if=\"hasTitle\" :class=\"nh.be('title')\">\n            <slot name=\"title\">\n              <Renderer :renderer=\"props.slots.title\">\n                {{ props.title }}\n              </Renderer>\n            </slot>\n          </div>\n          <div v-if=\"hasExtra\" :class=\"nh.be('extra')\">\n            <slot name=\"extra\">\n              <Renderer :renderer=\"props.slots.extra\"></Renderer>\n            </slot>\n          </div>\n        </Renderer>\n      </slot>\n    </div>\n    <div :class=\"nh.be('content')\" :style=\"props.contentStyle\">\n      <slot>\n        <Renderer :renderer=\"props.slots.default\"></Renderer>\n      </slot>\n    </div>\n  </article>\n</template>\n","import { booleanNumberProp, booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type {\n  CarouselArrowTrigger,\n  CarouselArrowType,\n  CarouselPointerType,\n  CarouselSlots\n} from './symbol'\n\nexport const carouselProps = buildProps({\n  active: Number,\n  viewSize: Number,\n  vertical: booleanProp,\n  disabled: booleanProp,\n  loop: booleanProp,\n  arrow: String as PropType<CarouselArrowType>,\n  arrowTrigger: String as PropType<CarouselArrowTrigger>,\n  autoplay: booleanNumberProp,\n  pointer: String as PropType<CarouselPointerType>,\n  speed: Number,\n  activeOffset: Number,\n  height: [Number, String],\n  ignoreHover: booleanProp,\n  slots: Object as PropType<CarouselSlots>,\n  onChange: eventProp<(active: number) => void>(),\n  onPrev: eventProp<(active: number) => void>(),\n  onNext: eventProp<(active: number) => void>(),\n  onSelect: eventProp<(active: number) => void>()\n})\n\nexport type CarouselProps = ExtractPropTypes<typeof carouselProps>\nexport type CarouselCProps = ConfigurableProps<CarouselProps>\n","import type { InjectionKey } from 'vue'\n\nexport type CarouselArrowType = 'outside' | 'inside' | 'none'\nexport type CarouselArrowTrigger = 'hover' | 'always'\nexport type CarouselPointerType = 'outside' | 'inside' | 'none'\n\nexport interface ItemState {\n  label: number,\n  width: number,\n  height: number,\n  offset: number\n}\n\nexport interface CarouselState {\n  vertical: boolean,\n  increaseItem: (item: ItemState) => void,\n  decreaseItem: (item: ItemState) => void,\n  isItemActive: (label: number) => boolean,\n  handleSelect: (label: number) => void\n}\n\nexport interface CarouselSlots {\n  default?: () => any,\n  prevArrow?: (params: { disabled: boolean }) => any,\n  nextArrow?: (params: { disabled: boolean }) => any,\n  pointer?: (params: { active: boolean }) => any\n}\n\nexport const CAROUSEL_STATE = '__VXP_CAROUSEL_STATE' as unknown as InjectionKey<CarouselState>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, onMounted, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport { emitEvent, useHoverDelay, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useHover, useRtl, useSetTimeout } from '@vexip-ui/hooks'\nimport { debounceMinor } from '@vexip-ui/utils'\nimport { carouselProps } from './props'\nimport { CAROUSEL_STATE } from './symbol'\n\nimport type { CarouselSlots, CarouselState, ItemState } from './symbol'\n\ndefineOptions({ name: 'Carousel' })\n\nconst _props = defineProps(carouselProps)\nconst props = useProps('carousel', _props, {\n  active: {\n    default: 0,\n    static: true\n  },\n  viewSize: {\n    default: 3,\n    validator: value => value > 0\n  },\n  vertical: false,\n  disabled: false,\n  loop: false,\n  arrow: {\n    default: 'outside',\n    validator: value => ['outside', 'inside', 'none'].includes(value)\n  },\n  arrowTrigger: {\n    default: 'hover',\n    validator: value => ['hover', 'always'].includes(value)\n  },\n  autoplay: {\n    default: false,\n    validator: value => (typeof value === 'number' ? value > 500 : true)\n  },\n  pointer: {\n    default: 'none',\n    validator: value => ['outside', 'inside', 'none'].includes(value)\n  },\n  speed: 300,\n  activeOffset: 0,\n  height: null,\n  ignoreHover: false,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:active'])\n\ndefineSlots<CarouselSlots>()\n\nconst nh = useNameHelper('carousel')\nconst icons = useIcons()\nconst hoverDelay = useHoverDelay()\nconst { isRtl } = useRtl()\nconst itemStates = ref(new Set<ItemState>())\nconst currentActive = ref(0)\nconst isLocked = ref(false) // 用于控制阻断快速连点\nconst arrowActive = ref(props.arrowTrigger === 'always')\n\nconst listRect = reactive({\n  width: 0,\n  height: 0\n})\nconst trackRect = reactive({\n  width: 0,\n  height: 0,\n  offset: 0\n})\nconst itemRect = reactive({\n  width: 0,\n  height: 0\n})\n\nconst { wrapper, isHover } = useHover()\n\nconst prev = ref<HTMLElement>()\nconst next = ref<HTMLElement>()\n\nconst isDisabled = computed(() => {\n  return props.disabled || itemStates.value.size <= props.viewSize\n})\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('vertical')]: props.vertical,\n    [nh.bm('disabled')]: isDisabled.value\n  }\n})\nconst style = computed(() => {\n  return {\n    height:\n      props.vertical && props.height\n        ? `${props.height}${typeof props.height === 'number' ? 'px' : ''}`\n        : undefined\n  }\n})\nconst listStyle = computed(() => {\n  return {\n    width: listRect.width ? `${listRect.width}px` : undefined,\n    height: listRect.height ? `${listRect.height}px` : undefined\n  }\n})\nconst trackStyle = computed(() => {\n  return {\n    width: trackRect.width ? `${trackRect.width}px` : undefined,\n    height: trackRect.height ? `${trackRect.height}px` : undefined,\n    transform: trackRect.offset\n      ? `translate${props.vertical ? 'Y' : 'X'}(${\n          isRtl.value && !props.vertical ? `${-trackRect.offset}` : trackRect.offset\n        }px) translateZ(0)`\n      : undefined,\n    transitionDuration: isLocked.value ? '0ms' : `${props.speed}ms`\n  }\n})\nconst disabledPrev = computed(() => {\n  return isDisabled.value || (!props.loop && currentActive.value <= 0)\n})\nconst disabledNext = computed(() => {\n  return (\n    isDisabled.value ||\n    (!props.loop && currentActive.value >= itemStates.value.size - props.viewSize)\n  )\n})\nconst arrowIcons = computed(() => {\n  return props.vertical\n    ? [icons.value.angleUp, icons.value.angleDown]\n    : isRtl.value\n      ? [icons.value.angleRight, icons.value.angleLeft]\n      : [icons.value.angleLeft, icons.value.angleRight]\n})\n\nwatch(\n  () => props.active,\n  value => {\n    handleWheel(value - props.activeOffset)\n  }\n)\nwatch(isHover, value => {\n  if (props.ignoreHover) return\n\n  if (value) {\n    handleMouseEnter()\n  } else {\n    handleMouseLeave()\n  }\n})\nwatch(() => props.viewSize, refresh)\nwatch(() => props.autoplay, setAutoplay)\n\nconst refreshLabels = debounceMinor(() => {\n  Array.from(itemStates.value).forEach((item, index) => {\n    item.label = index\n  })\n})\nconst updateItemRect = debounceMinor(() => {\n  itemStates.value.forEach(state => {\n    state.width = itemRect.width\n    state.height = itemRect.height\n  })\n})\nconst updateListRect = debounceMinor(() => {\n  trackRect.width = itemRect.width * itemStates.value.size\n  trackRect.height = itemRect.height * itemStates.value.size\n})\n\nprovide<CarouselState>(\n  CAROUSEL_STATE,\n  reactive({\n    vertical: toRef(props, 'vertical'),\n    increaseItem,\n    decreaseItem,\n    isItemActive,\n    handleSelect\n  })\n)\n\n// 初始化时不使用过渡效果\nlet inTransition = false\nlet shouldReset = false\n\nisLocked.value = true\n\nonMounted(() => {\n  computeItemRect()\n  handleWheel(props.active - props.activeOffset)\n  handleAfterMove()\n\n  setTimeout(() => {\n    isLocked.value = false\n    inTransition = false\n\n    setAutoplay()\n  }, 0)\n})\n\ndefineExpose({\n  itemStates,\n  currentActive,\n  arrowActive,\n  wrapper,\n  prev,\n  next,\n  refresh\n})\n\nfunction increaseItem(item: ItemState) {\n  itemStates.value.add(item)\n  refreshLabels()\n  updateItemRect()\n  updateListRect()\n}\n\nfunction decreaseItem(item: ItemState) {\n  itemStates.value.delete(item)\n  refreshLabels()\n  updateListRect()\n}\n\nfunction isItemActive(label: number) {\n  return (currentActive.value + props.activeOffset) % itemStates.value.size === label\n}\n\nfunction computeItemRect() {\n  if (!wrapper.value) return\n\n  let prevFix = 0\n  let nextFix = 0\n\n  if (props.arrow === 'outside') {\n    if (props.vertical) {\n      prevFix = prev.value ? prev.value.offsetHeight : 0\n      nextFix = next.value ? next.value.offsetHeight : 0\n    } else {\n      prevFix = prev.value ? prev.value.offsetWidth : 0\n      nextFix = next.value ? next.value.offsetWidth : 0\n    }\n  }\n\n  if (props.vertical) {\n    listRect.width = 0\n    listRect.height = wrapper.value.offsetHeight - prevFix - nextFix\n\n    itemRect.width = 0\n    itemRect.height = listRect.height / props.viewSize\n  } else {\n    listRect.width = wrapper.value.offsetWidth - prevFix - nextFix\n    listRect.height = 0\n\n    itemRect.width = listRect.width / props.viewSize\n    itemRect.height = 0\n  }\n}\n\nfunction refresh() {\n  computeItemRect()\n  updateItemRect()\n  updateListRect()\n\n  if (trackRect.offset > 0) {\n    handlePrev(0)\n  } else {\n    handleNext(0)\n  }\n\n  setTimeout(() => {\n    isLocked.value = false\n    inTransition = false\n  }, 0)\n}\n\nfunction emitChangeEvent() {\n  const active = (currentActive.value + props.activeOffset) % itemStates.value.size\n\n  emit('update:active', active)\n  emitEvent(props.onChange, active)\n}\n\nfunction handlePrev(amount = 1) {\n  if (isDisabled.value || inTransition) return\n\n  const itemLength = props.vertical ? itemRect.height : itemRect.width\n  const itemList = Array.from(itemStates.value)\n  const itemCount = itemList.length\n  const targetIndex = (currentActive.value - amount + itemCount) % itemCount\n  const prevActive = currentActive.value\n\n  if (targetIndex >= itemCount - props.viewSize) {\n    if (!props.loop) return\n\n    if (trackRect.offset < 0) {\n      if (amount < currentActive.value) {\n        trackRect.offset = -targetIndex * itemLength\n      } else {\n        trackRect.offset = itemLength * (itemCount - targetIndex)\n\n        for (let i = targetIndex; i < itemCount; ++i) {\n          itemList[i].offset = -itemCount * itemLength\n        }\n      }\n    } else {\n      for (let i = 0; i < itemCount; ++i) {\n        itemList[i].offset =\n          i < targetIndex\n            ? 0\n            : (isRtl.value && !props.vertical ? itemCount : -itemCount) * itemLength\n      }\n\n      trackRect.offset = itemLength * (itemCount - targetIndex)\n    }\n\n    currentActive.value = targetIndex\n  } else {\n    currentActive.value = targetIndex\n    trackRect.offset = -currentActive.value * itemLength\n  }\n\n  shouldReset = currentActive.value <= itemCount - props.viewSize\n  inTransition = true\n\n  currentActive.value !== prevActive && emitChangeEvent()\n}\n\nfunction handleNext(amount = 1) {\n  if (isDisabled.value || inTransition) return\n\n  const itemLength = props.vertical ? itemRect.height : itemRect.width\n  const itemList = Array.from(itemStates.value)\n  const itemCount = itemList.length\n  const targetIndex = currentActive.value + amount\n  const prevActive = currentActive.value\n\n  if (targetIndex > itemStates.value.size - props.viewSize) {\n    if (!props.loop) return\n\n    if (trackRect.offset > 0) {\n      trackRect.offset = itemLength * (itemCount - targetIndex)\n    } else {\n      const anchorIndex = targetIndex + props.viewSize - itemCount\n\n      for (let i = 0, len = itemList.length; i < len; ++i) {\n        itemList[i].offset =\n          i < anchorIndex\n            ? (isRtl.value && !props.vertical ? -itemCount : itemCount) * itemLength\n            : 0\n      }\n\n      trackRect.offset = -targetIndex * itemLength\n    }\n\n    currentActive.value = targetIndex % itemCount\n  } else {\n    currentActive.value = targetIndex\n    trackRect.offset = -currentActive.value * itemLength\n  }\n\n  shouldReset = currentActive.value <= itemCount - props.viewSize\n  inTransition = true\n\n  currentActive.value !== prevActive && emitChangeEvent()\n}\n\nfunction handleWheel(active: number) {\n  if (isDisabled.value || inTransition || active === currentActive.value) return\n\n  const itemCount = itemStates.value.size\n\n  active = (active % itemCount) + (active < 0 ? itemCount : 0)\n\n  if (props.loop) {\n    let forward: number\n    let back: number\n\n    if (active > currentActive.value) {\n      forward = active - currentActive.value\n      back = itemCount - active + currentActive.value\n    } else {\n      forward = itemCount - currentActive.value + active\n      back = currentActive.value - active\n    }\n\n    if (forward < back) {\n      handleNext(forward)\n    } else if (forward > back) {\n      handlePrev(back)\n    } else {\n      if (trackRect.offset > 0) {\n        handlePrev(forward)\n      } else {\n        handleNext(forward)\n      }\n    }\n  } else {\n    if (active < currentActive.value) {\n      handlePrev(currentActive.value - active)\n    } else {\n      handleNext(active - currentActive.value)\n    }\n  }\n}\n\nfunction handleAfterMove() {\n  if (!shouldReset) {\n    inTransition = false\n  } else {\n    itemStates.value.forEach(state => {\n      state.offset = 0\n    })\n\n    shouldReset = false\n    isLocked.value = true\n\n    requestAnimationFrame(() => {\n      trackRect.offset = -currentActive.value * (props.vertical ? itemRect.height : itemRect.width)\n\n      requestAnimationFrame(() => {\n        isLocked.value = false\n        inTransition = false\n      })\n    })\n  }\n}\n\nfunction handlePrevClick() {\n  handlePrev(1)\n  emitEvent(props.onPrev, (currentActive.value + props.activeOffset) % itemStates.value.size)\n}\n\nfunction handleNextClick() {\n  handleNext(1)\n  emitEvent(props.onNext, (currentActive.value + props.activeOffset) % itemStates.value.size)\n}\n\nfunction handleSelect(label: number) {\n  emitEvent(props.onSelect, label)\n}\n\nconst { timer } = useSetTimeout()\n\nfunction setAutoplay() {\n  clearInterval(timer.play)\n\n  if (!props.autoplay) return\n\n  let waiting = 4000\n\n  if (typeof props.autoplay === 'number') {\n    waiting = props.autoplay\n  }\n\n  timer.play = window.setInterval(() => {\n    if (!props.loop && disabledNext.value) {\n      handleWheel(0)\n    } else {\n      handleNext()\n    }\n  }, waiting)\n}\n\nfunction handleMouseEnter() {\n  if (props.autoplay) {\n    clearTimeout(timer.hover)\n\n    timer.hover = setTimeout(() => {\n      clearInterval(timer.play)\n    }, hoverDelay.value)\n  }\n\n  if (props.arrowTrigger === 'hover' && props.arrow === 'inside') {\n    arrowActive.value = true\n  }\n}\n\nfunction handleMouseLeave() {\n  if (props.autoplay) {\n    clearTimeout(timer.hover)\n\n    timer.hover = setTimeout(() => {\n      setAutoplay()\n    }, hoverDelay.value)\n  }\n\n  if (props.arrowTrigger === 'hover') {\n    arrowActive.value = false\n  }\n}\n\nfunction isPointerDisabled(index: number) {\n  if (props.loop) return false\n\n  return !(\n    index >= props.activeOffset - 1 && index < itemStates.value.size - props.activeOffset - 1\n  )\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"list\"\n    :style=\"style\"\n  >\n    <ResizeObserver @resize=\"refresh\">\n      <div\n        :style=\"{\n          position: 'relative',\n          display: 'flex',\n          flexDirection: props.vertical ? 'column' : 'row',\n          width: '100%'\n        }\"\n      >\n        <div\n          v-if=\"props.arrow !== 'none'\"\n          ref=\"prev\"\n          :class=\"[\n            nh.bem('arrow', props.arrow),\n            nh.bem('arrow', 'prev'),\n            arrowActive ? nh.bem('arrow', 'show') : ''\n          ]\"\n        >\n          <div\n            :class=\"{\n              [nh.be('handler')]: true,\n              [nh.bem('handler', 'disabled')]: disabledPrev\n            }\"\n            @click=\"handlePrevClick\"\n          >\n            <slot name=\"prevArrow\" :disabled=\"disabledPrev\">\n              <Renderer :renderer=\"props.slots.prevArrow\" :data=\"{ disabled: disabledPrev }\">\n                <Icon v-bind=\"arrowIcons[0]\" :scale=\"+(arrowIcons[0].scale || 1) * 1.5\"></Icon>\n              </Renderer>\n            </slot>\n          </div>\n        </div>\n        <div :class=\"nh.be('list')\" :style=\"listStyle\">\n          <div :class=\"nh.be('track')\" :style=\"trackStyle\" @transitionend.self=\"handleAfterMove\">\n            <slot> <Renderer :renderer=\"props.slots.default\"></Renderer>> </slot>\n          </div>\n        </div>\n        <div\n          v-if=\"props.arrow !== 'none'\"\n          ref=\"next\"\n          :class=\"[\n            nh.bem('arrow', props.arrow),\n            nh.bem('arrow', 'next'),\n            arrowActive ? nh.bem('arrow', 'show') : ''\n          ]\"\n        >\n          <div\n            :class=\"{\n              [nh.be('handler')]: true,\n              [nh.bem('handler', 'disabled')]: disabledNext\n            }\"\n            @click=\"handleNextClick\"\n          >\n            <slot name=\"nextArrow\" :disabled=\"disabledNext\">\n              <Renderer :renderer=\"props.slots.nextArrow\" :data=\"{ disabled: disabledNext }\">\n                <Icon v-bind=\"arrowIcons[1]\" :scale=\"+(arrowIcons[1].scale || 1) * 1.5\"></Icon>\n              </Renderer>\n            </slot>\n          </div>\n        </div>\n      </div>\n    </ResizeObserver>\n    <div v-if=\"props.pointer !== 'none'\" :class=\"nh.bem('pointers', props.pointer)\">\n      <div\n        v-for=\"index in itemStates.size\"\n        :key=\"index\"\n        :class=\"{\n          [nh.be('pointer')]: true,\n          [nh.bem('pointer', 'active')]:\n            index - 1 === (currentActive + props.activeOffset) % itemStates.size,\n          [nh.bem('pointer', 'disabled')]: isPointerDisabled(index - props.activeOffset - 1)\n        }\"\n        @click=\"handleWheel(index - props.activeOffset - 1)\"\n      >\n        <slot\n          name=\"pointer\"\n          :active=\"index - 1 === (currentActive + props.activeOffset) % itemStates.size\"\n        >\n          <Renderer\n            :renderer=\"props.slots.pointer\"\n            :data=\"{ active: index - 1 === (currentActive + props.activeOffset) % itemStates.size }\"\n          >\n            <span :class=\"nh.be('pointer-inner')\"></span>\n          </Renderer>\n        </slot>\n      </div>\n    </div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, reactive } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { CAROUSEL_STATE } from './symbol'\n\nimport type { ItemState } from './symbol'\n\ndefineOptions({ name: 'CarouselItem' })\n\ndefineSlots<{\n  default: (params: { active: boolean }) => any\n}>()\n\nconst carouselState = inject(CAROUSEL_STATE, null)\n\nconst nh = useNameHelper('carousel')\nconst state: ItemState = reactive({\n  label: -1,\n  width: 0,\n  height: 0,\n  offset: 0\n})\n\nconst active = computed(() => {\n  return carouselState?.isItemActive(state.label) ?? false\n})\nconst className = computed(() => {\n  return {\n    [nh.be('item')]: true,\n    [nh.bem('item', 'active')]: active.value\n  }\n})\nconst style = computed(() => {\n  const { width, height, offset } = state\n\n  return {\n    width: width ? `${width}px` : undefined,\n    height: height ? `${height}px` : undefined,\n    transform: offset ? `translate${carouselState?.vertical ? 'Y' : 'X'}(${offset}px)` : undefined\n  }\n})\n\nif (carouselState) {\n  carouselState.increaseItem(state)\n\n  onBeforeUnmount(() => {\n    carouselState.decreaseItem(state)\n  })\n}\n\nfunction handleClick() {\n  carouselState?.handleSelect(state.label)\n}\n</script>\n\n<template>\n  <div\n    :class=\"className\"\n    role=\"listitem\"\n    :style=\"style\"\n    @click=\"handleClick\"\n  >\n    <slot :active=\"active\"></slot>\n  </div>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  localeProp,\n  sizeProp,\n  stateProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const checkboxProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  checked: booleanProp,\n  label: String,\n  value: [String, Number],\n  labelClass: classProp,\n  disabled: booleanProp,\n  border: booleanProp,\n  control: booleanProp,\n  partial: booleanProp,\n  tabIndex: [String, Number],\n  loading: booleanProp,\n  loadingLock: booleanProp,\n  name: String,\n  color: String,\n  stateColor: booleanProp,\n  onChange: eventProp<(checked: boolean) => void>(),\n  onClick: eventProp<(event: MouseEvent) => void>()\n})\n\nexport type CheckboxProps = ExtractPropTypes<typeof checkboxProps>\nexport type CheckboxCProps = ConfigurableProps<CheckboxProps>\n\nexport type RawOption =\n  | string\n  | {\n    value: string | number,\n    label?: string,\n    control?: boolean,\n    disabled?: boolean\n  }\n\nexport const checkboxGroupProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('checkbox'),\n  value: Array as PropType<(string | number)[]>,\n  vertical: booleanProp,\n  disabled: booleanProp,\n  border: booleanProp,\n  options: Array as PropType<RawOption[]>,\n  loading: booleanProp,\n  loadingLock: booleanProp,\n  control: booleanStringProp,\n  color: String,\n  stateColor: booleanProp,\n  onChange: eventProp<(value: (string | number)[]) => void>()\n})\n\nexport type CheckboxGroupProps = ExtractPropTypes<typeof checkboxGroupProps>\nexport type CheckboxGroupCProps = ConfigurableProps<CheckboxGroupProps>\n","import type { InjectionKey, Ref } from 'vue'\nimport type { ComponentSize, ComponentState } from '@vexip-ui/config'\n\nexport interface ControlState {\n  checked: boolean,\n  partial: boolean\n}\n\nexport interface GroupState {\n  currentValues: (string | number)[],\n  size: ComponentSize,\n  state: ComponentState,\n  disabled: boolean,\n  loading: boolean,\n  loadingLock: boolean,\n  colorMap: Record<string, string> | null,\n  stateColor: boolean,\n  increaseItem(\n    value: string | number,\n    checked: boolean,\n    input: Ref<HTMLElement | null | undefined>\n  ): void,\n  decreaseItem(value: string | number, input: Ref<HTMLElement | null | undefined>): void,\n  increaseControl(state: ControlState): void,\n  decreaseControl(state: ControlState): void,\n  handleControlChange(): void,\n  setItemChecked(value: string | number, checked: boolean): void,\n  replaceValue(prevValue: string | number, newValue: string | number): void\n}\n\nexport const GROUP_STATE = '__VXP_CHECKBOX_GROUP_STATE' as unknown as InjectionKey<GroupState>\n","<script setup lang=\"ts\">\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, inject, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue'\n\nimport {\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { adjustAlpha, isDefined, isFunction, parseColorToRgba } from '@vexip-ui/utils'\nimport { checkboxProps } from './props'\nimport { GROUP_STATE } from './symbol'\n\ndefineOptions({ name: 'Checkbox' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  getFieldValue,\n  setFieldValue\n} = useFieldStore<boolean>(() => input.value?.focus())\n\nconst _props = defineProps(checkboxProps)\nconst props = useProps('checkbox', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  checked: {\n    default: () => getFieldValue(),\n    static: true\n  },\n  label: null,\n  value: {\n    default: null,\n    static: true\n  },\n  labelClass: null,\n  disabled: () => disabled.value,\n  border: false,\n  control: false,\n  partial: false,\n  tabIndex: 0,\n  loading: () => loading.value,\n  loadingLock: false,\n  name: {\n    default: '',\n    static: true\n  },\n  color: null,\n  stateColor: false\n})\n\nconst emit = defineEmits(['update:checked'])\n\nconst slots = defineSlots<{\n  default?: () => any\n}>()\n\nconst groupState = inject(GROUP_STATE, null)\n\nconst nh = useNameHelper('checkbox')\nconst currentChecked = ref(props.checked ?? false)\nconst currentPartial = ref(props.partial)\n\nconst input = ref<HTMLInputElement>()\n\nconst controlState = reactive({\n  checked: currentChecked,\n  partial: currentPartial\n})\n\nconst computedSize = computed(() => groupState?.size || props.size)\nconst computedState = computed(() => groupState?.state || props.state)\nconst isDisabled = computed(() => groupState?.disabled || props.disabled)\nconst isLoading = computed(() => groupState?.loading || props.loading)\nconst isLoadingLock = computed(() => groupState?.loadingLock || props.loadingLock)\nconst stateColor = computed(() => groupState?.stateColor || props.stateColor)\nconst readonly = computed(() => isLoading.value && isLoadingLock.value)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('checked')]: currentChecked.value,\n      [nh.bm('disabled')]: isDisabled.value,\n      [nh.bm('readonly')]: readonly.value,\n      [nh.bm('loading')]: isLoading.value,\n      [nh.bm(computedSize.value)]: computedSize.value !== 'default',\n      [nh.bm('border')]: props.border,\n      [nh.bm('partial')]: props.control && currentPartial.value,\n      [nh.bm(computedState.value)]: computedState.value !== 'default'\n    }\n  ]\n})\nconst colorMap = computed(() => {\n  if (!props.color) return groupState?.colorMap\n\n  const baseColor = parseColorToRgba(props.color)\n\n  return {\n    base: baseColor.toString(),\n    opacity6: adjustAlpha(baseColor, 0.4).toString()\n  }\n})\nconst style = computed<Record<string, string>>(() => {\n  if (!colorMap.value) return {}\n\n  const { base, opacity6 } = colorMap.value\n\n  return nh.cvm({\n    'label-color-checked': base,\n    'b-color': stateColor.value ? base : undefined,\n    'b-color-hover': base,\n    'b-color-checked': base,\n    'signal-bg-color-checked': base,\n    's-color-focus': opacity6\n  })\n})\nconst hasLabel = computed(() => {\n  return isDefined(props.label) && props.label !== ''\n})\nconst currentValue = computed(() => {\n  return props.value ?? props.label\n})\n\nwatch(\n  () => props.checked,\n  value => {\n    setCurrentChecked(value)\n  }\n)\nwatch(\n  () => props.partial,\n  value => {\n    currentPartial.value = value\n  }\n)\n\nif (groupState) {\n  let increased = false\n\n  watch(currentValue, (value, prevValue) => {\n    if (isFunction(groupState.replaceValue)) {\n      groupState.replaceValue(prevValue, value)\n    }\n  })\n  watch(\n    () => props.control,\n    value => {\n      if (value) {\n        if (increased) {\n          groupState.decreaseItem(currentValue.value, input)\n          increased = false\n        }\n\n        groupState.increaseControl(controlState)\n      } else {\n        groupState.decreaseControl(controlState)\n      }\n    },\n    { immediate: true }\n  )\n  watch(\n    () => groupState.currentValues,\n    value => {\n      if (!props.control) {\n        setCurrentChecked(value.includes(currentValue.value))\n      }\n    },\n    { immediate: true }\n  )\n\n  onMounted(() => {\n    if (!props.control) {\n      groupState.increaseItem(currentValue.value, currentChecked.value, input)\n      increased = true\n    }\n  })\n\n  onBeforeUnmount(() => {\n    if (!props.control) {\n      groupState.decreaseItem(currentValue.value, input)\n    } else {\n      groupState.decreaseControl(controlState)\n    }\n  })\n}\n\ndefineExpose({\n  idFor,\n  labelId,\n  currentChecked,\n  input,\n  focus: (options?: FocusOptions) => input.value?.focus(options),\n  blur: () => input.value?.blur()\n})\n\nfunction emitCheckEvent() {\n  const checked = currentChecked.value\n\n  emit('update:checked', checked)\n  setFieldValue(checked)\n  emitEvent(props.onChange, checked)\n}\n\nfunction setCurrentChecked(checked: boolean) {\n  if (props.control && isFunction(groupState?.handleControlChange)) {\n    groupState!.handleControlChange()\n  } else if (currentChecked.value !== checked) {\n    currentChecked.value = checked\n    emitCheckEvent()\n  }\n}\n\nfunction handleChange(checked: boolean) {\n  if (isDisabled.value || readonly.value) {\n    return\n  }\n\n  setCurrentChecked(checked)\n\n  if (!props.control && groupState) {\n    isFunction(groupState.setItemChecked) && groupState.setItemChecked(currentValue.value, checked)\n  }\n\n  if (!groupState) {\n    validateField()\n  }\n}\n\nfunction handleClick(event: MouseEvent) {\n  emitEvent(props.onClick, event)\n}\n</script>\n\n<template>\n  <label\n    :id=\"idFor\"\n    :class=\"className\"\n    :style=\"style\"\n    :aria-disabled=\"isDisabled\"\n    :aria-labelledby=\"labelId\"\n    @click=\"handleClick\"\n  >\n    <input\n      ref=\"input\"\n      type=\"checkbox\"\n      :class=\"nh.be('input')\"\n      :checked=\"currentChecked\"\n      :disabled=\"isDisabled || readonly\"\n      :tabindex=\"props.tabIndex\"\n      :name=\"props.name\"\n      @submit.prevent\n      @change=\"handleChange(!currentChecked)\"\n      @click.stop\n    />\n    <span :class=\"[nh.be('signal'), isLoading && nh.bem('signal', 'active')]\"></span>\n    <span v-if=\"hasLabel || slots.default\" :class=\"[nh.be('label'), props.labelClass]\">\n      <slot>{{ props.label }}</slot>\n    </span>\n  </label>\n</template>\n","<script setup lang=\"ts\">\nimport { Checkbox } from '@/components/checkbox'\nimport { Icon } from '@/components/icon'\nimport { Option } from '@/components/option'\nimport { VirtualList } from '@/components/virtual-list'\n\nimport { onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useRtl } from '@vexip-ui/hooks'\nimport { boundRange, decide } from '@vexip-ui/utils'\n\nimport type { PropType } from 'vue'\nimport type { VirtualListExposed } from '@/components/virtual-list'\nimport type { CascaderOptionState, CascaderPanelSlots } from './symbol'\n\ndefineOptions({ name: 'CascaderPanel' })\n\nconst props = defineProps({\n  options: {\n    type: Array as PropType<CascaderOptionState[]>,\n    default: () => []\n  },\n  openedId: {\n    type: Number,\n    default: null\n  },\n  values: {\n    type: Array as PropType<string[]>,\n    default: () => []\n  },\n  ready: {\n    type: Boolean,\n    default: false\n  },\n  multiple: {\n    type: Boolean,\n    default: false\n  },\n  checkIcon: {\n    type: Object,\n    default: null\n  },\n  isAsync: {\n    type: Boolean,\n    default: false\n  },\n  merged: {\n    type: Boolean,\n    default: false\n  },\n  noCascaded: {\n    type: Boolean,\n    default: false\n  },\n  visible: {\n    type: Boolean,\n    default: false\n  },\n  labeledBy: {\n    type: String,\n    default: undefined\n  }\n})\n\nconst emit = defineEmits(['select', 'check', 'hover', 'open', 'back', 'close'])\n\ndefineSlots<CascaderPanelSlots>()\n\nconst nh = useNameHelper('cascader')\nconst icons = useIcons()\nconst { isRtl } = useRtl()\nconst currentHitting = ref(-1)\n\nconst list = ref<VirtualListExposed>()\n\nconst { target: wrapper } = useModifier({\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (modifier.escape) {\n      emit('close')\n      return\n    }\n\n    decide(\n      [\n        [\n          () => modifier.up || modifier.down,\n          () => {\n            if (currentHitting.value < 0) {\n              currentHitting.value = props.options.findIndex(isSelected)\n\n              if (currentHitting.value < 0) {\n                currentHitting.value = 0\n              }\n\n              return\n            }\n\n            currentHitting.value = boundRange(\n              findEnabledIndex(currentHitting.value + (modifier.up ? -1 : 1), modifier.up ? -1 : 1),\n              0,\n              props.options.length - 1\n            )\n            ensureOptionInView(currentHitting.value, modifier.up ? 'top' : 'bottom')\n          }\n        ],\n        [\n          () => modifier.left || modifier.right,\n          () => {\n            if (modifier.right) {\n              const option = props.options[currentHitting.value]\n\n              if (option && hasChildren(option)) {\n                emit('open', option)\n              }\n            } else {\n              emit('back')\n            }\n          }\n        ],\n        [\n          () => modifier.enter || modifier.space,\n          () => {\n            event.stopPropagation()\n\n            const option = props.options[currentHitting.value]\n\n            if (option) {\n              if (props.multiple) {\n                handleToggleCheck(option)\n              } else {\n                handleSelect(option, currentHitting.value)\n              }\n            }\n          }\n        ]\n      ],\n      {\n        beforeMatchAny: () => event.preventDefault(),\n        afterMatchAny: modifier.resetAll\n      }\n    )\n  }\n})\n\nlet listHeight = 0\nlet hoverTimer: ReturnType<typeof setTimeout>\n\nwatch([() => props.ready, () => props.options], () => {\n  requestAnimationFrame(computeListHeight)\n\n  if (props.ready) {\n    list.value?.refresh()\n    currentHitting.value = props.options.findIndex(isSelected)\n  } else {\n    currentHitting.value = -1\n  }\n})\n\nonMounted(() => {\n  requestAnimationFrame(computeListHeight)\n})\n\nonBeforeUnmount(handleMouseLeave)\n\ndefineExpose({ currentHitting })\n\nfunction hasChildren(option: CascaderOptionState) {\n  return !!(option.hasChild || option.children?.length)\n}\n\nfunction isSelected(option: CascaderOptionState) {\n  return (\n    (hasChildren(option) && option.id === props.openedId) || props.values.includes(option.fullValue)\n  )\n}\n\nfunction isCheckboxDisabled(option: CascaderOptionState) {\n  return (\n    option.disabled ||\n    (!props.merged &&\n      props.multiple &&\n      props.isAsync &&\n      hasChildren(option) &&\n      !option.childrenLoaded)\n  )\n}\n\nfunction handleSelect(option: CascaderOptionState, index: number) {\n  if (option.disabled) return\n\n  currentHitting.value = index\n\n  if (props.multiple || props.noCascaded) {\n    hasChildren(option) ? emit('select', option) : handleToggleCheck(option)\n  } else {\n    emit('select', option)\n  }\n}\n\nfunction handleToggleCheck(option: CascaderOptionState) {\n  !isCheckboxDisabled(option) && emit('check', option)\n}\n\nfunction handleMouseEnter(option: CascaderOptionState) {\n  clearTimeout(hoverTimer)\n\n  hoverTimer = setTimeout(() => {\n    !option.disabled && emit('hover', option)\n  }, 100)\n}\n\nfunction handleMouseLeave() {\n  clearTimeout(hoverTimer)\n}\n\nfunction computeListHeight() {\n  const el = list.value?.wrapper\n\n  if (el) {\n    const style = getComputedStyle(el)\n    const paddingTop = parseInt(style.paddingTop)\n    const paddingBottom = parseInt(style.paddingBottom)\n\n    listHeight = el.offsetHeight - paddingTop - paddingBottom\n  }\n}\n\nfunction queryEnabledIndex(index: number, step: number) {\n  const options = props.options\n  step = step / Math.abs(step)\n\n  while (options[index]?.disabled) {\n    index += step\n\n    if (index < 0 || index >= options.length) break\n  }\n\n  return index\n}\n\nfunction findEnabledIndex(index: number, sign: 1 | -1 = 1) {\n  const options = props.options\n\n  if (options[index]?.disabled) {\n    index = queryEnabledIndex(index, sign)\n\n    if (sign > 0 ? index >= options.length : index < 0) {\n      index = queryEnabledIndex(index, -sign)\n\n      // 全禁用\n      if (sign > 0 ? index < 0 : index >= options.length) index = -1\n    }\n  }\n\n  return index\n}\n\nfunction ensureOptionInView(index: number, direction: 'top' | 'bottom') {\n  const option = props.options[index]\n  const optionHeight = 32\n\n  if (!option || !list.value) return\n\n  if (direction === 'bottom') {\n    const target = (index + 1) * optionHeight\n\n    if (list.value.scrollOffset + listHeight < target) {\n      list.value.scrollTo(target - listHeight)\n    }\n  } else {\n    const target = index * optionHeight\n\n    if (list.value.scrollOffset > target) {\n      list.value.scrollTo(target)\n    }\n  }\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"nh.be('panel')\"\n    tabindex=\"-1\"\n    :aria-labelledby=\"labeledBy\"\n    @mouseleave=\"handleMouseLeave\"\n  >\n    <VirtualList\n      ref=\"list\"\n      inherit\n      :items=\"options\"\n      :item-size=\"32\"\n      height=\"100%\"\n      id-key=\"id\"\n      :items-attrs=\"{\n        class: [\n          nh.be('options'),\n          multiple ? nh.bem('options', 'multiple') : null,\n          noCascaded ? nh.bem('options', 'no-cascaded') : null\n        ],\n        role: 'listbox',\n        ariaMultiselectable: multiple\n      }\"\n      @resize=\"computeListHeight\"\n    >\n      <template #default=\"{ item, index }\">\n        <Option\n          :class=\"{\n            [nh.ns('option--error')]: item.error\n          }\"\n          :value=\"item.value\"\n          :label=\"item.label\"\n          :disabled=\"item.disabled\"\n          :selected=\"isSelected(item)\"\n          :hitting=\"index === currentHitting\"\n          @select=\"handleSelect(item, index)\"\n          @mouseenter=\"handleMouseEnter(item)\"\n        >\n          <slot\n            :option=\"item\"\n            :index=\"index\"\n            :selected=\"isSelected(item)\"\n            :can-check=\"isCheckboxDisabled(item)\"\n            :has-child=\"hasChildren(item)\"\n          >\n            <Checkbox\n              v-if=\"multiple || noCascaded\"\n              inherit\n              :class=\"nh.be('checkbox')\"\n              :checked=\"item.checked\"\n              :control=\"hasChildren(item)\"\n              :partial=\"item.partial\"\n              :disabled=\"isCheckboxDisabled(item)\"\n              size=\"small\"\n              @click.prevent.stop=\"handleToggleCheck(item)\"\n            ></Checkbox>\n            <span :class=\"nh.be('label')\">\n              <slot\n                name=\"label\"\n                :option=\"item\"\n                :index=\"index\"\n                :selected=\"isSelected(item)\"\n                :can-check=\"isCheckboxDisabled(item)\"\n                :has-child=\"hasChildren(item)\"\n                :handle-select=\"() => handleSelect(item, index)\"\n              >\n                {{ item.label }}\n              </slot>\n            </span>\n            <div :class=\"nh.be('icon')\">\n              <Icon v-if=\"item.loading\" v-bind=\"icons.loading\"></Icon>\n              <Icon v-else-if=\"item.error\" v-bind=\"icons.refresh\"></Icon>\n              <template v-else-if=\"hasChildren(item)\">\n                <Icon v-if=\"isRtl\" v-bind=\"icons.angleLeft\"></Icon>\n                <Icon v-else v-bind=\"icons.angleRight\"></Icon>\n              </template>\n              <Icon\n                v-else-if=\"!multiple && !noCascaded && checkIcon && values.includes(item.fullValue)\"\n                v-bind=\"icons.check\"\n                :icon=\"checkIcon || icons.check.icon\"\n              ></Icon>\n            </div>\n          </slot>\n        </Option>\n      </template>\n    </VirtualList>\n  </div>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n  stateProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { TagType } from '@/components/tag'\nimport type { CascaderKeyConfig, CascaderSlots, CascaderValue, Data } from './symbol'\n\ntype ChangeEvent =\n  | ((value: CascaderValue, data: Data[] | Data[][]) => void)\n  | ((value: (string | number)[], data: Data[]) => void)\n  | ((value: string[], data: Data[]) => void)\n  | ((value: number[], data: Data[]) => void)\n  | ((value: (string | number)[][], data: Data[][]) => void)\n  | ((value: string[][], data: Data[][]) => void)\n  | ((value: number[][], data: Data[][]) => void)\n\nexport const cascaderProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('select'),\n  value: Array as PropType<CascaderValue>,\n  visible: booleanProp,\n  options: Array as PropType<Data[]>,\n  placeholder: String,\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  noCascaded: booleanProp,\n  multiple: booleanProp,\n  disabled: booleanProp,\n  clearable: booleanProp,\n  placement: String as PropType<Placement>,\n  transfer: booleanStringProp,\n  staticSuffix: booleanProp,\n  noSuffix: booleanProp,\n  transitionName: String,\n  outsideClose: booleanProp,\n  keyConfig: Object as PropType<CascaderKeyConfig>,\n  separator: String,\n  hoverTrigger: booleanProp,\n  maxTagCount: Number,\n  briefLabel: booleanProp,\n  noRestTip: booleanProp,\n  onAsyncLoad: Function as PropType<(data: Data) => any[] | Promise<any[]>>,\n  mergeTags: booleanProp,\n  tagType: String as PropType<TagType>,\n  emptyText: String,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  transparent: booleanProp,\n  popperAlive: booleanProp,\n  slots: Object as PropType<CascaderSlots>,\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onSelect: eventProp<(fullValue: string, data: Data) => void>(),\n  onCancel: eventProp<(fullValue: string, data: Data) => void>(),\n  onChange: eventProp<ChangeEvent>(),\n  onClickOutside: eventProp(),\n  onOutsideClose: eventProp(),\n  onClear: eventProp()\n})\n\nexport type CascaderProps = ExtractPropTypes<typeof cascaderProps>\nexport type CascaderCProps = ConfigurableProps<CascaderProps, never, 'onAsyncLoad'>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { NativeScroll } from '@/components/native-scroll'\nimport { Overflow } from '@/components/overflow'\nimport { Popper } from '@/components/popper'\nimport { Renderer } from '@/components/renderer'\nimport { Tag } from '@/components/tag'\nimport { Tooltip } from '@/components/tooltip'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, nextTick, onBeforeUpdate, reactive, ref, toRef, watch, watchEffect } from 'vue'\n\nimport CascaderPanel from './cascader-panel.vue'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { placementWhileList, useClickOutside, useHover, usePopper } from '@vexip-ui/hooks'\nimport { flatTree, getLast, isNull, isPromise, toAttrValue, transformTree } from '@vexip-ui/utils'\nimport { cascaderProps } from './props'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type {\n  CascaderKeyConfig,\n  CascaderOptionState,\n  CascaderSlots,\n  CascaderValue,\n  Data\n} from './symbol'\n\ntype ChangeListener = (value: CascaderValue, data: Data[] | Data[][]) => void\n\nconst ID_KEY = Symbol('ID_KEY')\nconst PARENT_KEY = Symbol('PARENT_KEY')\n\nconst defaultKeyConfig: Required<CascaderKeyConfig> = {\n  value: 'value',\n  label: 'label',\n  children: 'children',\n  disabled: 'disabled',\n  hasChild: 'hasChild'\n}\n\ndefineOptions({ name: 'Cascader' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue\n} = useFieldStore<CascaderValue>(() => reference.value?.focus())\n\nconst _props = defineProps(cascaderProps)\nconst nh = useNameHelper('cascader')\nconst props = useProps('cascader', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  value: {\n    default: () => getFieldValue(),\n    static: true\n  },\n  visible: {\n    default: false,\n    static: true\n  },\n  options: {\n    default: () => [],\n    static: true\n  },\n  placeholder: null,\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  noCascaded: false,\n  multiple: false,\n  disabled: () => disabled.value,\n  clearable: false,\n  placement: {\n    default: 'bottom-start',\n    validator: value => placementWhileList.includes(value)\n  },\n  transfer: false,\n  staticSuffix: false,\n  noSuffix: false,\n  transitionName: () => nh.ns('drop'),\n  outsideClose: true,\n  keyConfig: () => ({}),\n  separator: {\n    default: '/',\n    validator: value => value.length === 1\n  },\n  hoverTrigger: false,\n  maxTagCount: 0,\n  briefLabel: false,\n  noRestTip: false,\n  onAsyncLoad: {\n    default: null,\n    isFunc: true\n  },\n  mergeTags: false,\n  tagType: null,\n  emptyText: null,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  transparent: false,\n  popperAlive: null,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:visible', 'update:value'])\n\nconst slots = defineSlots<CascaderSlots>()\n\nconst icons = useIcons()\nconst locale = useLocale('select', toRef(props, 'locale'))\n\nconst currentVisible = ref(props.visible)\nconst currentValues = ref<string[]>([])\nconst currentLabels = ref<string[]>([])\nconst mergedValues = ref<string[]>([])\nconst mergedLabels = ref<string[]>([])\nconst isPopperShow = ref(false)\nconst placement = toRef(props, 'placement')\nconst transfer = toRef(props, 'transfer')\n\nconst emittedValue = ref<CascaderValue | null>(null)\nconst optionTree = ref<CascaderOptionState[]>(null!)\nconst isAsyncLoad = computed(() => typeof props.onAsyncLoad === 'function')\nconst usingMerged = computed(() => props.mergeTags && !props.noCascaded)\nconst templateValues = computed(() =>\n  usingMerged.value ? mergedValues.value : currentValues.value\n)\nconst templateLabels = computed(() =>\n  usingMerged.value ? mergedLabels.value : currentLabels.value\n)\n\nlet optionList: CascaderOptionState[] = null!\nlet optionIdMap: Map<number, CascaderOptionState> = null!\nlet optionValueMap: Map<string, CascaderOptionState> = null!\nlet outsideClosed = false\nlet prevClosedId = -1\nlet flattedOptions: Record<any, any>[]\n\nconst updateTrigger = ref(0)\n\nwatchEffect(() => {\n  /* eslint-disable @typescript-eslint/no-unused-expressions */\n  props.keyConfig.value\n  props.keyConfig.label\n  props.keyConfig.disabled\n  props.keyConfig.hasChild\n  props.separator\n  isAsyncLoad.value\n  /* eslint-enable */\n\n  flattedOptions = flatTree(props.options as Record<any, any>[], {\n    keyField: ID_KEY,\n    parentField: PARENT_KEY,\n    childField: props.keyConfig.children ?? defaultKeyConfig.children,\n    forceInject: true\n  })\n\n  updateTrigger.value++\n})\n\nwatch(updateTrigger, initOptionStates, { immediate: true })\n\nfunction initOptionStates() {\n  const separator = props.separator\n  const isAsync = isAsyncLoad.value\n\n  optionList = createOptionStates(flattedOptions)\n  optionIdMap = new Map()\n  optionValueMap = new Map()\n\n  for (let i = 0, len = optionList.length; i < len; ++i) {\n    const option = optionList[i]\n\n    initOptionFull(option, separator)\n    optionIdMap.set(option.id, option)\n    optionValueMap.set(option.fullValue, option)\n\n    if (isAsync) {\n      option.childrenLoaded = queryChildrenLoaded(option)\n    }\n  }\n\n  optionTree.value = transformTree(optionList)\n  initValueAndLabel(emittedValue.value)\n}\n\nconst openedIds = ref<number[]>([])\nconst optionsList = computed(() => {\n  return [\n    optionTree.value,\n    ...openedIds.value.map(id => optionIdMap.get(id)?.children).filter(Boolean)\n  ]\n})\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst popper = ref<PopperExposed>()\nconst { reference, transferTo, updatePopper } = usePopper({\n  placement,\n  transfer,\n  wrapper,\n  popper: computed(() => popper.value?.wrapper),\n  isDrop: true\n})\nconst { isHover } = useHover(reference)\n\nconst panelElList = ref<InstanceType<typeof CascaderPanel>[]>([])\nconst restTagCount = ref(0)\nconst restTipShow = ref(false)\nconst selectorWidth = ref(0)\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.ns('input-vars')]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('multiple')]: props.multiple,\n    [nh.bm('responsive')]: props.multiple && props.maxTagCount <= 0\n  }\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst selectorClass = computed(() => {\n  const baseCls = nh.be('selector')\n\n  return {\n    [baseCls]: true,\n    [`${baseCls}--focused`]: !props.disabled && currentVisible.value,\n    [`${baseCls}--disabled`]: props.disabled,\n    [`${baseCls}--readonly`]: readonly.value,\n    [`${baseCls}--loading`]: props.loading,\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\n    [`${baseCls}--${props.state}`]: props.state !== 'default',\n    [`${baseCls}--has-prefix`]: hasPrefix.value,\n    [`${baseCls}--has-suffix`]: !props.noSuffix,\n    [`${baseCls}--transparent`]: props.transparent\n  }\n})\nconst hasPrefix = computed(() => {\n  return !!(slots.prefix || props.slots.prefix || props.prefix)\n})\nconst hasValue = computed(() => !!templateValues.value[0])\nconst usingHover = computed(() => props.hoverTrigger && !isAsyncLoad.value)\nconst showClear = computed(() => {\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && hasValue.value\n})\n\nwatch(\n  () => props.visible,\n  value => {\n    currentVisible.value = value\n  }\n)\nwatch(currentVisible, async value => {\n  if (value) {\n    restTipShow.value = false\n    selectorWidth.value = wrapper.value?.offsetWidth || 0\n\n    await updatePopper()\n    nextTick(() => {\n      getLast(panelElList.value)?.$el?.focus()\n    })\n  } else {\n    isPopperShow.value = false\n\n    if (reference.value && !outsideClosed) {\n      reference.value.focus()\n    }\n  }\n\n  outsideClosed = false\n})\n\nlet outsideChanged = false\n\nwatch(emittedValue, () => {\n  outsideChanged = true\n})\nwatch(\n  () => props.value,\n  value => {\n    if (value !== emittedValue.value || outsideChanged) {\n      emittedValue.value = value\n      initValueAndLabel(value)\n      nextTick(() => {\n        outsideChanged = false\n      })\n    }\n  },\n  { immediate: true }\n)\nwatch(\n  () => props.briefLabel,\n  brief => {\n    currentLabels.value = currentValues.value\n      .map(value => optionValueMap.get(value)?.[brief ? 'label' : 'fullLabel'] as string)\n      .filter(Boolean)\n\n    // nextTick(computeTagsOverflow)\n  }\n)\nwatch(isAsyncLoad, value => {\n  if (value) {\n    for (const option of optionIdMap.values()) {\n      option.childrenLoaded = queryChildrenLoaded(option)\n    }\n  }\n})\nwatch(usingMerged, value => {\n  if (value) {\n    mergedValues.value.length = 0\n    mergedLabels.value.length = 0\n\n    updateMergedProps()\n  }\n\n  if (isAsyncLoad.value) {\n    const originalOptions: CascaderOptionState[] = []\n\n    for (const option of optionIdMap.values()) {\n      if (option.checked) {\n        originalOptions.push(option)\n      }\n\n      if (option.hasChild && !option.children.length && !option.loaded) {\n        option.checked = false\n      }\n    }\n\n    for (let i = 0, len = originalOptions.length; i < len; ++i) {\n      const option = originalOptions[i]\n\n      updateCheckedUpward(option)\n      updateCheckedDown(option)\n    }\n  }\n\n  emitMultipleChange()\n})\nwatch(\n  () => optionsList.value.length,\n  () => {\n    updatePopper()\n    nextTick(() => {\n      getLast(panelElList.value)?.$el?.focus()\n      prevClosedId = -1\n    })\n  }\n)\nwatch(\n  () => props.disabled,\n  value => {\n    if (value) {\n      setVisible(false)\n    }\n  }\n)\nwatch(readonly, value => {\n  if (value) {\n    setVisible(false)\n  }\n})\n\nonBeforeUpdate(() => {\n  panelElList.value.length = 0\n})\n\ndefineExpose({\n  idFor,\n  labelId,\n  currentVisible,\n  currentValues,\n  currentLabels,\n  isHover,\n  openedIds,\n  restTagCount,\n  restTipShow,\n  optionsList,\n  hasValue,\n  templateValues,\n  templateLabels,\n  showClear,\n  wrapper,\n  reference,\n  popper,\n  panelElList,\n  handlePanelOpen,\n  handleOptionSelect,\n  handleOptionCheck,\n  toggleVisible,\n  handleClear,\n  handlePanelBack,\n  focus: (options?: FocusOptions) => reference.value?.focus(options),\n  blur: () => reference.value?.blur()\n})\n\nfunction createOptionStates(rawOptions: Record<string | symbol, any>[]) {\n  const {\n    value: valueKey,\n    label: labelKey,\n    disabled: disabledKey,\n    hasChild: hasChildKey\n  } = { ...defaultKeyConfig, ...props.keyConfig }\n\n  return rawOptions.map(rawOption => {\n    const {\n      [ID_KEY]: id,\n      [PARENT_KEY]: parent,\n      [valueKey]: value,\n      [labelKey]: label,\n      [disabledKey]: disabled,\n      [hasChildKey]: hasChild\n    } = rawOption\n\n    return reactive<CascaderOptionState>({\n      id,\n      parent,\n      value,\n      disabled,\n      hasChild,\n      label: label || String(value),\n      fullValue: '',\n      fullLabel: '',\n      children: [],\n      checked: false,\n      partial: false,\n      loading: false,\n      loaded: false,\n      error: false,\n      childrenLoaded: false,\n      data: rawOption\n    })\n  })\n}\n\nfunction initOptionFull(option: CascaderOptionState, separator: string) {\n  let value = option.value as string\n  let label = option.label\n  let parent = optionIdMap.get(option.parent)\n\n  while (parent) {\n    value = `${parent.value}${separator}${value}`\n    label = `${parent.label}${separator}${label}`\n    parent = optionIdMap.get(parent.parent)\n  }\n\n  option.fullValue = value\n  option.fullLabel = label\n}\n\nfunction queryChildrenLoaded(option: CascaderOptionState) {\n  if (option.hasChild && !option.children?.length) {\n    return option.loaded\n  }\n\n  const loop: CascaderOptionState[] = [...option.children]\n\n  while (loop.length) {\n    const child = loop.shift()!\n\n    if (child.childrenLoaded) continue\n\n    if (child.hasChild && !child.children?.length) {\n      child.childrenLoaded = child.loaded\n\n      if (!child.loaded) return false\n    }\n\n    loop.push(...child.children)\n  }\n\n  return true\n}\n\nfunction updateMergedProps() {\n  const baseValues = isAsyncLoad.value\n    ? currentValues.value.concat(mergedValues.value)\n    : currentValues.value\n  const values = new Set(baseValues)\n  const loop = [...baseValues]\n\n  while (loop.length) {\n    const value = loop.shift()!\n\n    const option = optionValueMap.get(value)\n\n    if (option) {\n      const parent = optionIdMap.get(option.parent)\n\n      if (parent?.checked) {\n        values.delete(value)\n        values.add(parent.fullValue)\n        loop.push(parent.fullValue)\n      }\n    }\n  }\n\n  const briefLabel = props.briefLabel\n\n  mergedValues.value = Array.from(values).filter(value => optionValueMap.has(value))\n  mergedLabels.value = mergedValues.value\n    .map(value => {\n      const option = optionValueMap.get(value)!\n\n      return briefLabel ? option.label : option.fullLabel\n    })\n    .filter(Boolean)\n}\n\nfunction isFlatArray<T extends string | number>(value: T[] | T[][]): value is T[] {\n  return !!value.length && !Array.isArray(value[0])\n}\n\nfunction isComplexArray<T extends string | number>(value: T[] | T[][]): value is T[][] {\n  return !!value.length && Array.isArray(value[0])\n}\n\nfunction initValueAndLabel(value: CascaderValue | null) {\n  const processMerged = () => {\n    if (usingMerged.value) {\n      if (isAsyncLoad.value) {\n        mergedValues.value = Array.from(optionIdMap.values())\n          .filter(option => option.checked)\n          .map(option => option.fullValue)\n      }\n\n      updateMergedProps()\n    }\n  }\n\n  for (const option of optionList) {\n    option.checked = false\n    option.partial = false\n  }\n\n  if (!value?.length) {\n    currentValues.value = []\n    currentLabels.value = []\n    processMerged()\n    return\n  }\n\n  const briefLabel = props.briefLabel\n\n  if (props.multiple) {\n    const normalizedValue = isFlatArray(value) ? [value] : value\n    const valueSet = new Set<string>(normalizedValue.map(v => v.join(props.separator)))\n    const selectedValues: string[] = []\n    const selectedLabels: string[] = []\n    const selectedOptions: CascaderOptionState[] = []\n\n    valueSet.forEach(value => {\n      const option = optionValueMap.get(value)\n\n      if (option) {\n        option.checked = true\n        option.partial = false\n\n        selectedValues.push(value)\n        selectedLabels.push(briefLabel ? option.label : option.fullLabel)\n        selectedOptions.push(option)\n      }\n    })\n\n    if (!props.noCascaded) {\n      const originalOptions = selectedOptions.concat(\n        Array.from(optionIdMap.values()).filter(option => option.disabled && option.checked)\n      )\n\n      for (let i = 0, len = originalOptions.length; i < len; ++i) {\n        const option = originalOptions[i]\n\n        updateCheckedUpward(option)\n        updateCheckedDown(option)\n      }\n    }\n\n    currentValues.value = selectedValues\n    currentLabels.value = selectedLabels\n  } else {\n    const normalizedValue = isComplexArray(value) ? value[0] : value\n    const stringValue = normalizedValue.join(props.separator)\n    const option = optionValueMap.get(stringValue)\n\n    if (option) {\n      currentValues.value = [stringValue]\n      currentLabels.value = [briefLabel ? option.label : option.fullLabel]\n\n      if (props.noCascaded) {\n        option.checked = true\n        option.partial = false\n      }\n    } else {\n      currentValues.value = []\n      currentLabels.value = []\n    }\n  }\n\n  processMerged()\n\n  if (openedIds.value.length) return\n\n  const firstValue = currentValues.value[0]\n\n  if (firstValue) {\n    const option = optionValueMap.get(firstValue)!\n    const ids = [option.id]\n\n    let parent = optionIdMap.get(option.parent)\n\n    while (parent) {\n      ids.push(parent.id)\n      parent = optionIdMap.get(parent.parent)\n    }\n\n    openedIds.value = ids.reverse().slice(0, -1)\n  }\n}\n\nfunction setVisible(visible: boolean) {\n  if (currentVisible.value === visible) return\n\n  currentVisible.value = visible\n\n  emit('update:visible', visible)\n  emitEvent(props.onToggle, visible)\n}\n\nasync function handlePanelOpen(option: CascaderOptionState, depth: number) {\n  if (!option.hasChild && !option.children?.length) return\n\n  if (isAsyncLoad.value && !option.children?.length && !option.loaded) {\n    option.loading = true\n\n    let result: ReturnType<typeof props.onAsyncLoad>\n\n    try {\n      result = props.onAsyncLoad(option.data)\n      result = isPromise(result) ? await result : result\n    } catch (e) {\n      option.error = true\n      option.loading = false\n      return\n    }\n\n    const rawOptions = result as any[]\n\n    if (!Array.isArray(rawOptions) || !rawOptions.length) {\n      option.hasChild = false\n    } else {\n      const options = createOptionStates(rawOptions)\n      const parentId = option.id\n      const separator = props.separator\n\n      option.children.push(...options)\n\n      let idCount = Math.max(...Array.from(optionIdMap.keys()).map(Number)) + 1\n\n      options.forEach(option => {\n        option.id = idCount++\n        option.parent = parentId\n\n        initOptionFull(option, separator)\n\n        optionIdMap.set(option.id, option)\n        optionValueMap.set(option.fullValue, option)\n      })\n\n      optionList.push(...options)\n    }\n\n    option.loaded = true\n    option.loading = false\n\n    const upstream = queryUpstreamOptions(option)\n    upstream.forEach(option => {\n      option.childrenLoaded = queryChildrenLoaded(option)\n    })\n  }\n\n  if (depth < openedIds.value.length) {\n    openedIds.value = openedIds.value.slice(0, depth)\n  }\n\n  openedIds.value.push(option.id)\n  requestAnimationFrame(() => {\n    getLast(panelElList.value)?.$el?.focus()\n  })\n}\n\nfunction handleOptionSelect(option: CascaderOptionState, depth: number) {\n  if (!option) return\n\n  if (option.hasChild || option.children?.length) {\n    handlePanelOpen(option, depth)\n  } else {\n    handleSingleSelect(option.fullValue)\n  }\n}\n\nfunction queryUpstreamOptions(option: CascaderOptionState) {\n  const options = [option]\n  let parent = optionIdMap.get(option.parent)\n\n  while (parent) {\n    options.push(parent)\n    parent = optionIdMap.get(parent.parent)\n  }\n\n  return options\n}\n\nfunction updateCheckedUpward(originalOption: CascaderOptionState) {\n  let option = originalOption\n\n  while (!isNull(option.parent)) {\n    const parent = optionIdMap.get(option.parent)\n\n    if (!parent) break\n\n    if (option.checked === parent.checked && option.partial === parent.partial) {\n      break\n    }\n\n    if (option.checked) {\n      parent.checked = parent.children.every(item => item.disabled || item.checked)\n      parent.partial = !parent.checked\n    } else {\n      parent.checked = false\n      parent.partial = parent.children.some(item => item.checked || item.partial)\n    }\n\n    option = parent\n  }\n}\n\nfunction updateCheckedDown(originalOption: CascaderOptionState) {\n  const checked = originalOption.checked\n  const partial = originalOption.partial\n\n  const loop = [...originalOption.children]\n\n  let option\n\n  while (loop.length) {\n    option = loop.shift()!\n\n    if (option.disabled) continue\n\n    option.checked = checked\n    option.partial = partial\n\n    if (option.children?.length) {\n      loop.push(...option.children)\n    }\n  }\n}\n\nfunction handleOptionCheck(option: CascaderOptionState) {\n  if (!option) return\n\n  const options = Array.from(optionIdMap.values())\n  const checked = !option.checked\n\n  if (!props.multiple) {\n    for (let i = 0, len = options.length; i < len; ++i) {\n      options[i].checked = false\n    }\n\n    option.checked = checked\n    option.partial = false\n\n    return handleSingleSelect(option.fullValue)\n  }\n\n  option.checked = checked\n  option.partial = false\n\n  if (!props.noCascaded) {\n    const originalOptions = [option].concat(\n      options.filter(option => option.disabled && option.checked)\n    )\n\n    for (let i = 0, len = originalOptions.length; i < len; ++i) {\n      const option = originalOptions[i]\n\n      updateCheckedUpward(option)\n      updateCheckedDown(option)\n    }\n  }\n\n  emitEvent(props[checked ? 'onSelect' : 'onCancel'], option.fullValue, option.data)\n  emitMultipleChange()\n}\n\nfunction emitMultipleChange() {\n  const options = Array.from(optionIdMap.values())\n  const selectedOptions = props.noCascaded\n    ? options.filter(option => option.checked)\n    : options.filter(option => option.checked && !(option.hasChild || option.children?.length))\n\n  const selectedValues: string[] = []\n  const selectedLabels: string[] = []\n\n  const values: (string | number)[][] = []\n  const dataList: Data[][] = []\n  const briefLabel = props.briefLabel\n\n  selectedOptions.forEach(option => {\n    selectedValues.push(option.fullValue)\n    selectedLabels.push(briefLabel ? option.label : option.fullLabel)\n\n    const { value, data } = queryArrayMeta(option.fullValue)\n\n    values.push(value)\n    dataList.push(data)\n  })\n\n  currentValues.value = selectedValues\n  currentLabels.value = selectedLabels\n\n  if (usingMerged.value) {\n    if (isAsyncLoad.value) {\n      mergedValues.value = options.filter(option => option.checked).map(option => option.fullValue)\n    }\n\n    updateMergedProps()\n  }\n\n  if (usingMerged.value && isAsyncLoad.value) {\n    values.length = 0\n    dataList.length = 0\n\n    mergedValues.value.forEach(fullValue => {\n      const option = optionValueMap.get(fullValue)\n\n      if (option) {\n        const { value, data } = queryArrayMeta(option.fullValue)\n\n        values.push(value)\n        dataList.push(data)\n      }\n    })\n  }\n\n  emitChangeEvent(values, dataList)\n  nextTick(updatePopper)\n}\n\nfunction handleSingleSelect(fullValue: string) {\n  const option = optionValueMap.get(fullValue)\n\n  if (!option) return\n\n  emitEvent(props.onSelect, fullValue, option.data)\n\n  if (fullValue) {\n    currentValues.value[0] = fullValue\n    currentLabels.value[0] = props.briefLabel ? option.label : option.fullLabel\n  } else {\n    currentValues.value.length = 0\n    currentLabels.value.length = 0\n  }\n\n  const { value, data } = queryArrayMeta(fullValue)\n\n  emitChangeEvent(value, data)\n  setVisible(false)\n}\n\nfunction emitChangeEvent(value: CascaderValue, data: Data[] | Data[][]) {\n  emittedValue.value = value\n\n  nextTick(() => {\n    outsideChanged = false\n\n    emit('update:value', value)\n    setFieldValue(value)\n    emitEvent(props.onChange as ChangeListener, value, data)\n    validateField()\n  })\n}\n\nfunction queryArrayMeta(fullValue: string) {\n  let option = optionValueMap.get(fullValue)!\n\n  if (!option) return { value: [], data: [] }\n\n  const value = [option.value]\n  const data = [option.data]\n\n  while (option.parent) {\n    const parent = optionIdMap.get(option.parent)\n\n    if (!parent) break\n\n    value.push(parent.value)\n    data.push(parent.data)\n    option = parent\n  }\n\n  return {\n    value: value.reverse(),\n    data: data.reverse()\n  }\n}\n\nfunction toggleVisible(visible = !currentVisible.value) {\n  if (props.disabled || readonly.value) return\n\n  setVisible(visible)\n}\n\nfunction handleClickOutside() {\n  restTipShow.value = false\n  emitEvent(props.onClickOutside)\n\n  if (props.outsideClose && currentVisible.value) {\n    setVisible(false)\n    outsideClosed = true\n    emitEvent(props.onOutsideClose)\n  }\n}\n\nfunction handleClear() {\n  if (props.disabled || readonly.value) return\n\n  if (props.clearable) {\n    const prev = emittedValue.value\n\n    currentValues.value.length = 0\n    currentLabels.value.length = 0\n    mergedValues.value.length = 0\n    mergedLabels.value.length = 0\n    openedIds.value.length = 0\n    emittedValue.value = prev?.length === 0 ? prev : []\n    restTipShow.value = false\n\n    for (const option of optionIdMap.values()) {\n      option.checked = false\n      option.partial = false\n    }\n\n    if (prev?.length !== 0) {\n      emit('update:value', emittedValue.value)\n      emitEvent(props.onChange as ChangeListener, emittedValue.value, [])\n    }\n\n    emitEvent(props.onClear)\n    clearField(emittedValue.value)\n  }\n}\n\nfunction toggleShowRestTip() {\n  if (!currentVisible.value) {\n    restTipShow.value = !restTipShow.value\n  } else {\n    restTipShow.value = false\n  }\n}\n\nfunction handleTipClose(fullValue: string) {\n  if (props.disabled || readonly.value) return\n\n  if (props.multiple) {\n    handleOptionCheck(optionValueMap.get(fullValue)!)\n  } else {\n    handleSingleSelect(fullValue)\n  }\n}\n\nfunction handlePanelKeyOpen(option: CascaderOptionState, depth: number) {\n  handlePanelOpen(option, depth)\n\n  requestAnimationFrame(() => {\n    const panel = getLast(panelElList.value)\n\n    if (panel && panel.currentHitting < 0) {\n      panel.currentHitting = panel.options.findIndex(option => option.id === prevClosedId)\n\n      if (panel.currentHitting < 0) {\n        panel.currentHitting = 0\n      }\n    }\n  })\n}\n\nfunction handlePanelBack() {\n  prevClosedId = openedIds.value.pop()!\n}\n\nfunction handlePanelsEnter() {\n  requestAnimationFrame(() => {\n    isPopperShow.value = true\n  })\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"group\"\n    :aria-disabled=\"toAttrValue(props.disabled)\"\n    :aria-expanded=\"toAttrValue(currentVisible)\"\n    aria-haspopup=\"dialog\"\n    :aria-labelledby=\"labelId\"\n    @click=\"toggleVisible()\"\n  >\n    <div\n      ref=\"reference\"\n      :class=\"selectorClass\"\n      tabindex=\"0\"\n      @keydown.space.prevent=\"toggleVisible()\"\n      @keydown.tab=\"toggleVisible(false)\"\n    >\n      <div\n        v-if=\"hasPrefix\"\n        :class=\"[nh.be('icon'), nh.be('prefix')]\"\n        :style=\"{ color: props.prefixColor }\"\n      >\n        <slot name=\"prefix\">\n          <Renderer :renderer=\"props.slots.prefix\">\n            <Icon :icon=\"props.prefix\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div :class=\"nh.be('control')\">\n        <slot name=\"control\">\n          <Renderer :renderer=\"props.slots.control\">\n            <Overflow\n              v-if=\"props.multiple\"\n              inherit\n              :class=\"[nh.be('tags')]\"\n              :items=\"templateValues\"\n              :max-count=\"props.maxTagCount\"\n              @rest-change=\"restTagCount = $event\"\n            >\n              <template #default=\"{ item, index }\">\n                <Tag\n                  inherit\n                  :class=\"nh.be('tag')\"\n                  :type=\"props.tagType\"\n                  closable\n                  :disabled=\"props.disabled\"\n                  @click.stop=\"toggleVisible()\"\n                  @close=\"handleTipClose(item)\"\n                >\n                  {{ templateLabels[index] }}\n                </Tag>\n              </template>\n              <template #counter=\"{ count }\">\n                <Tag\n                  v-if=\"props.noRestTip\"\n                  inherit\n                  :class=\"[nh.be('tag'), nh.be('counter')]\"\n                  :type=\"props.tagType\"\n                  :disabled=\"props.disabled\"\n                >\n                  {{ `+${count}` }}\n                </Tag>\n                <span v-else>\n                  <Tooltip\n                    inherit\n                    :transfer=\"false\"\n                    :visible=\"restTipShow\"\n                    trigger=\"custom\"\n                    placement=\"top-end\"\n                    :tip-class=\"nh.be('rest-tip')\"\n                    @click.stop=\"toggleShowRestTip\"\n                  >\n                    <template #trigger>\n                      <Tag\n                        inherit\n                        :class=\"[nh.be('tag'), nh.be('counter')]\"\n                        :type=\"props.tagType\"\n                        :disabled=\"props.disabled\"\n                      >\n                        {{ `+${count}` }}\n                      </Tag>\n                    </template>\n                    <NativeScroll inherit use-y-bar>\n                      <template v-for=\"(item, index) in templateValues\" :key=\"index\">\n                        <Tag\n                          v-if=\"index >= templateValues.length - restTagCount\"\n                          inherit\n                          :class=\"nh.be('tag')\"\n                          closable\n                          :type=\"props.tagType\"\n                          :disabled=\"props.disabled\"\n                          @close=\"handleTipClose(item)\"\n                        >\n                          {{ templateLabels[index] }}\n                        </Tag>\n                      </template>\n                    </NativeScroll>\n                  </Tooltip>\n                </span>\n              </template>\n            </Overflow>\n            <template v-else>\n              {{ currentLabels[0] }}\n            </template>\n            <span\n              v-if=\"(props.placeholder ?? locale.placeholder) && !hasValue\"\n              :class=\"nh.be('placeholder')\"\n            >\n              {{ props.placeholder ?? locale.placeholder }}\n            </span>\n          </Renderer>\n        </slot>\n      </div>\n      <div\n        v-if=\"!props.noSuffix\"\n        :class=\"[nh.be('icon'), nh.be('suffix')]\"\n        :style=\"{\n          color: props.suffixColor,\n          opacity: showClear || props.loading ? '0%' : ''\n        }\"\n      >\n        <slot name=\"suffix\">\n          <Renderer :renderer=\"props.slots.suffix\">\n            <Icon\n              v-if=\"props.suffix\"\n              :icon=\"props.suffix\"\n              :class=\"{\n                [nh.be('arrow')]: !props.staticSuffix\n              }\"\n            ></Icon>\n            <Icon v-else v-bind=\"icons.angleDown\" :class=\"nh.be('arrow')\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div\n        v-else-if=\"props.clearable || props.loading\"\n        :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n      ></div>\n      <Transition :name=\"nh.ns('fade')\" appear>\n        <button\n          v-if=\"showClear\"\n          :class=\"[nh.be('icon'), nh.be('clear')]\"\n          type=\"button\"\n          tabindex=\"-1\"\n          :aria-label=\"locale.ariaLabel.clear\"\n          @click.stop=\"handleClear\"\n        >\n          <Icon v-bind=\"icons.clear\"></Icon>\n        </button>\n        <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"props.loadingEffect || icons.loading.effect\"\n            :icon=\"props.loadingIcon || icons.loading.icon\"\n          ></Icon>\n        </div>\n      </Transition>\n    </div>\n    <Popper\n      ref=\"popper\"\n      :class=\"[nh.be('popper'), nh.ns('input-vars'), nh.bs('vars')]\"\n      :visible=\"currentVisible\"\n      :to=\"transferTo\"\n      :transition=\"props.transitionName\"\n      :alive=\"props.popperAlive ?? !transferTo\"\n      @click.stop\n      @enter=\"handlePanelsEnter\"\n    >\n      <div\n        :class=\"{\n          [nh.be('panels')]: true,\n          [nh.bem('panels', 'empty')]: !optionsList[0] || !optionsList[0].length\n        }\"\n      >\n        <template v-if=\"optionsList[0] && optionsList[0].length\">\n          <CascaderPanel\n            v-for=\"(items, index) in optionsList\"\n            :key=\"index\"\n            :ref=\"(panel: any) => panel && panelElList.push(panel)\"\n            :options=\"items\"\n            :opened-id=\"openedIds[index]\"\n            :values=\"currentValues\"\n            :ready=\"isPopperShow\"\n            :multiple=\"props.multiple\"\n            :is-async=\"isAsyncLoad\"\n            :merged=\"usingMerged\"\n            :no-cascaded=\"props.noCascaded\"\n            :labeled-by=\"labelId\"\n            @select=\"handleOptionSelect($event, index)\"\n            @hover=\"usingHover && handlePanelOpen($event, index)\"\n            @check=\"handleOptionCheck($event)\"\n            @open=\"handlePanelKeyOpen($event, index)\"\n            @back=\"handlePanelBack\"\n            @close=\"currentVisible = false\"\n          >\n            <template v-if=\"slots.default || props.slots.default\" #default=\"payload\">\n              <slot v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.default\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n            <template v-if=\"slots.label || props.slots.label\" #label=\"payload\">\n              <slot name=\"label\" v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.label\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n          </CascaderPanel>\n        </template>\n        <div v-else :class=\"nh.be('empty')\" :style=\"{ width: `${selectorWidth}px` }\">\n          <slot name=\"empty\">\n            <Renderer :renderer=\"props.slots.empty\">\n              {{ props.emptyText ?? locale.empty }}\n            </Renderer>\n          </slot>\n        </div>\n      </div>\n    </Popper>\n  </div>\n</template>\n","import { booleanProp, buildProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { CellFlex, CellOptions, GridAlign, GridJustify, LayoutProp } from './symbol'\n\nconst layoutProp = [Number, String, Array] as PropType<LayoutProp>\n\nexport const gridProps = buildProps({\n  tag: String,\n  gap: [Number, Array] as PropType<number | number[]>,\n  rows: layoutProp,\n  columns: layoutProp,\n  autoRows: layoutProp,\n  autoColumns: layoutProp,\n  dense: booleanProp,\n  justify: String as PropType<GridJustify>,\n  align: String as PropType<GridAlign>,\n  cellFlex: {\n    type: [Boolean, Object] as PropType<boolean | Partial<CellFlex>>,\n    default: null\n  }\n})\n\nexport type GridProps = ExtractPropTypes<typeof gridProps>\nexport type GridCProps = ConfigurableProps<GridProps>\n\nconst mediaProp = [Number, Object] as PropType<CellOptions>\n\nexport const cellProps = buildProps({\n  tag: String,\n  top: [Number, String],\n  left: [Number, String],\n  width: Number,\n  height: Number,\n  right: [Number, String],\n  bottom: [Number, String],\n  xs: mediaProp,\n  sm: mediaProp,\n  md: mediaProp,\n  lg: mediaProp,\n  xl: mediaProp,\n  xxl: mediaProp,\n  useFlex: {\n    type: [Boolean, Object] as PropType<boolean | Partial<CellFlex>>,\n    default: null\n  }\n})\n\nexport type CellProps = ExtractPropTypes<typeof cellProps>\nexport type CellCProps = ConfigurableProps<CellProps>\n","import { ref } from 'vue'\n\nimport { isClient } from '@vexip-ui/utils'\n\nexport type BreakPoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'\n\nexport const breakPoints = Object.freeze<BreakPoint[]>(['xs', 'sm', 'md', 'lg', 'xl', 'xxl'])\nexport const currentBreakPoint = ref<BreakPoint>('xs')\n\nif (isClient) {\n  const computedStyle = getComputedStyle(document.documentElement)\n  const queryMap = {} as Record<BreakPoint, MediaQueryList>\n\n  breakPoints.forEach(point => {\n    const media = computedStyle.getPropertyValue(`--vxp-break-point-${point}`).trim()\n    const query = matchMedia(`only screen and ${media}`)\n\n    query.addEventListener('change', handleBreakPointChange)\n    queryMap[point] = query\n  })\n\n  const queryEntries = Object.entries(queryMap).reverse() as [BreakPoint, MediaQueryList][]\n\n  function handleBreakPointChange() {\n    for (const [point, query] of queryEntries) {\n      if (query.matches) {\n        currentBreakPoint.value = point\n        break\n      }\n    }\n  }\n\n  handleBreakPointChange()\n}\n","import type { InjectionKey } from 'vue'\n\nexport type LayoutProp = number | string | (number | string)[]\n\nexport type GridJustify =\n  | 'start'\n  | 'end'\n  | 'center'\n  | 'space-around'\n  | 'space-between'\n  | 'space-evenly'\nexport type GridAlign = 'top' | 'middle' | 'bottom' | 'stretch'\n\nexport interface CellFlex {\n  justify: 'start' | 'end' | 'center' | 'space-around' | 'space-between' | 'space-evenly',\n  align: 'top' | 'middle' | 'bottom' | 'stretch'\n}\n\nexport interface GridState {\n  cellFlex: CellFlex | false,\n  columns: LayoutProp\n}\n\nexport interface CellOptions {\n  top?: number | string,\n  left?: number | string,\n  width?: number,\n  height?: number,\n  right?: number | string,\n  bottom?: number | string\n}\n\nexport const GRID_STATE = '__VXP_GRID_STATE' as unknown as InjectionKey<GridState>\n","import { computed, defineComponent, h, inject, provide, reactive, watch } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { has, isDefined } from '@vexip-ui/utils'\nimport { cellProps } from './props'\nimport { breakPoints, currentBreakPoint } from './helper'\nimport { GRID_STATE } from './symbol'\n\nimport type { CSSProperties } from 'vue'\nimport type { ClassType } from '@vexip-ui/config'\nimport type { BreakPoint } from './helper'\n\nexport default defineComponent({\n  name: 'Cell',\n  props: cellProps,\n  setup(_props, { slots }) {\n    const props = useProps('cell', _props, {\n      tag: 'div',\n      top: 'auto',\n      left: 'auto',\n      width: null,\n      height: 1,\n      right: '',\n      bottom: '',\n      xs: null,\n      sm: null,\n      md: null,\n      lg: null,\n      xl: null,\n      xxl: null,\n      useFlex: null\n    })\n\n    const gridState = inject(GRID_STATE, null)\n    const nh = useNameHelper('cell')\n\n    provide(GRID_STATE, null!)\n\n    const layoutState = reactive({\n      top: props.top,\n      right: props.right,\n      bottom: props.bottom,\n      left: props.left,\n      width: props.width,\n      height: props.height\n    })\n    const layoutKeys = Object.keys(layoutState) as (\n      | 'top'\n      | 'right'\n      | 'bottom'\n      | 'left'\n      | 'width'\n      | 'height'\n    )[]\n\n    const defaultWidth = computed(() => {\n      if (isDefined(props.width)) {\n        return props.width\n      }\n\n      return gridState?.columns && typeof gridState.columns === 'number' ? gridState.columns : 1\n    })\n\n    watch(\n      currentBreakPoint,\n      value => {\n        const matchSize = queryBreakPointOptions(value)\n\n        if (matchSize) {\n          if (typeof matchSize === 'number') {\n            layoutKeys.forEach(key => {\n              layoutState[key] = props[key] as any\n            })\n\n            layoutState.width = matchSize\n          } else {\n            layoutKeys.forEach(key => {\n              layoutState[key] = has(matchSize, key) ? matchSize[key] : (props[key] as any)\n            })\n\n            layoutState.width = layoutState.width ?? defaultWidth.value\n          }\n        } else {\n          layoutKeys.forEach(key => {\n            layoutState[key] = props[key] as any\n          })\n\n          layoutState.width = defaultWidth.value\n        }\n      },\n      { immediate: true }\n    )\n\n    const className = computed(() => {\n      const cellFlex = props.useFlex !== false &&\n        (props.useFlex || gridState?.cellFlex) && {\n        ...(gridState?.cellFlex || {}),\n        ...(props.useFlex\n          ? props.useFlex === true\n            ? { justify: 'start', align: 'top' }\n            : props.useFlex\n          : {})\n      }\n      const className: ClassType = {\n        [nh.b()]: true,\n        [nh.bm('inherit')]: gridState || props.inherit,\n        [nh.bm('flex')]: cellFlex\n      }\n\n      if (cellFlex) {\n        if (cellFlex.justify) className[nh.bm(cellFlex.justify)] = true\n        if (cellFlex.align) className[nh.bm(cellFlex.align)] = true\n      }\n\n      return className\n    })\n    const style = computed(() => {\n      const style: CSSProperties = {}\n\n      const topSet = isPositionSet(layoutState.top)\n      const rightSet = isPositionSet(layoutState.right)\n      const bottomSet = isPositionSet(layoutState.bottom)\n      const leftSet = isPositionSet(layoutState.left)\n\n      if (topSet && bottomSet) {\n        style.gridRowStart = parsePosition(layoutState.top)\n        style.gridRowEnd = parsePosition(layoutState.bottom)\n      } else if (topSet) {\n        style.gridRowStart = parsePosition(layoutState.top)\n        style.gridRowEnd = `span ${layoutState.height}`\n      } else if (bottomSet) {\n        style.gridRowStart = `span ${layoutState.height}`\n        style.gridRowEnd = parsePosition(layoutState.bottom)\n      } else {\n        style.gridRowEnd = `span ${layoutState.height}`\n      }\n\n      if (leftSet && rightSet) {\n        style.gridColumnStart = parsePosition(layoutState.left)\n        style.gridColumnEnd = parsePosition(layoutState.right)\n      } else if (leftSet) {\n        style.gridColumnStart = parsePosition(layoutState.left)\n        style.gridColumnEnd = `span ${layoutState.width}`\n      } else if (rightSet) {\n        style.gridColumnStart = `span ${layoutState.width}`\n        style.gridColumnEnd = parsePosition(layoutState.right)\n      } else {\n        style.gridColumnStart = `span ${layoutState.width}`\n      }\n\n      return style\n    })\n\n    function isPositionSet(value: number | string) {\n      return value === 0 || (value && value !== 'auto')\n    }\n\n    function parsePosition(value: number | string) {\n      return typeof value === 'number' ? value + 1 : value\n    }\n\n    function queryBreakPointOptions(breakPoint: BreakPoint) {\n      const index = breakPoints.findIndex(v => v === breakPoint)\n\n      if (~index) {\n        for (let i = index; i >= 0; --i) {\n          if (isDefined(props[breakPoints[i]])) {\n            return props[breakPoints[i]]\n          }\n        }\n      }\n\n      return null\n    }\n\n    return () =>\n      h(\n        props.tag || 'div',\n        {\n          class: className.value,\n          style: style.value\n        },\n        {\n          default: () => slots.default?.()\n        }\n      )\n  }\n})\n","<script setup lang=\"ts\">\nimport { useFieldStore } from '@/components/form'\nimport { Checkbox } from '@/components/checkbox'\n\nimport { computed, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport {\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport {\n  adjustAlpha,\n  debounceMinor,\n  isClient,\n  isDefined,\n  isObject,\n  parseColorToRgba\n} from '@vexip-ui/utils'\nimport { checkboxGroupProps } from './props'\nimport { GROUP_STATE } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type { ControlState } from './symbol'\n\ndefineOptions({ name: 'CheckboxGroup' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  getFieldValue,\n  setFieldValue\n} = useFieldStore<(string | number)[]>(focus)\n\nconst _props = defineProps(checkboxGroupProps)\nconst props = useProps('checkboxGroup', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  value: {\n    default: () => getFieldValue(),\n    static: true\n  },\n  vertical: false,\n  disabled: () => disabled.value,\n  border: false,\n  options: {\n    default: () => [],\n    static: true\n  },\n  loading: () => loading.value,\n  control: null,\n  loadingLock: false,\n  color: null,\n  stateColor: false\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst nh = useNameHelper('checkbox-group')\nconst locale = useLocale('checkbox', toRef(props, 'locale'))\nconst valueMap = new Map<string | number, boolean>()\nconst inputSet = new Set<Ref<HTMLElement | null | undefined>>()\nconst controlSet = new Set<ControlState>()\nconst currentValues = ref<(string | number)[]>(props.value || [])\n\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.ns('checkbox-vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('vertical')]: props.vertical,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('readonly')]: readonly.value,\n      [nh.bm('loading')]: props.loading,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm('border')]: props.border,\n      [nh.bm(props.state)]: props.state !== 'default'\n    }\n  ]\n})\nconst controlLabel = computed(() => {\n  return typeof props.control === 'string' ? props.control : locale.value.all\n})\nconst colorMap = computed(() => {\n  if (!props.color) return null\n\n  const baseColor = parseColorToRgba(props.color)\n\n  return {\n    base: baseColor.toString(),\n    opacity6: adjustAlpha(baseColor, 0.4).toString()\n  }\n})\n\nconst updateValue = debounceMinor(() => {\n  currentValues.value = []\n\n  valueMap.forEach((checked, value) => {\n    if (checked) {\n      currentValues.value.push(value)\n    }\n  })\n\n  handleChange(currentValues.value)\n})\n\nconst updateControl = debounceMinor(() => {\n  const valueLength = currentValues.value.length\n  const checked = valueLength === valueMap.size\n  const partial = valueLength > 0 && !checked\n\n  controlSet.forEach(state => {\n    state.checked = checked\n    state.partial = partial\n  })\n})\n\nprovide(\n  GROUP_STATE,\n  reactive({\n    currentValues,\n    size: toRef(props, 'size'),\n    state: toRef(props, 'state'),\n    disabled: toRef(props, 'disabled'),\n    loading: toRef(props, 'loading'),\n    loadingLock: toRef(props, 'loadingLock'),\n    colorMap,\n    stateColor: toRef(props, 'stateColor'),\n    increaseItem,\n    decreaseItem,\n    increaseControl,\n    decreaseControl,\n    handleControlChange,\n    setItemChecked,\n    replaceValue\n  })\n)\n\nwatch(\n  () => props.value,\n  value => {\n    const checkedValues = new Set(value)\n    const allValues = Array.from(valueMap.keys())\n\n    currentValues.value = []\n\n    allValues.forEach(value => {\n      const checked = checkedValues.has(value)\n\n      valueMap.set(value, checkedValues.has(value))\n      checked && currentValues.value.push(value)\n    })\n  }\n)\nwatch(currentValues, () => {\n  updateControl()\n})\n\nfunction increaseItem(\n  value: string | number,\n  checked: boolean,\n  input: Ref<HTMLElement | null | undefined>\n) {\n  valueMap.set(value, checked)\n  inputSet.add(input)\n}\n\nfunction decreaseItem(value: string | number, input: Ref<HTMLElement | null | undefined>) {\n  valueMap.delete(value)\n  inputSet.delete(input)\n}\n\nfunction increaseControl(state: ControlState) {\n  controlSet.add(state)\n  updateControl()\n}\n\nfunction decreaseControl(state: ControlState) {\n  controlSet.delete(state)\n}\n\nfunction setItemChecked(value: string | number, checked: boolean) {\n  if (!isDefined(value) || !valueMap.has(value)) return\n\n  valueMap.set(value, checked)\n  updateValue()\n  updateControl()\n}\n\nfunction handleControlChange() {\n  // 在 group 层进行更新, 未选满则全选, 反之全不选\n  const allValues = Array.from(valueMap.keys())\n  const checked = currentValues.value.length !== allValues.length\n\n  allValues.forEach(value => {\n    valueMap.set(value, checked)\n  })\n\n  updateValue()\n  updateControl()\n}\n\nfunction handleChange(value: (string | number)[]) {\n  emit('update:value', value)\n  setFieldValue(value)\n  emitEvent(props.onChange, value)\n  validateField()\n}\n\nfunction replaceValue(prevValue: string | number, newValue: string | number) {\n  if (\n    isDefined(prevValue) &&\n    isDefined(newValue) &&\n    prevValue !== newValue &&\n    valueMap.has(prevValue)\n  ) {\n    valueMap.set(newValue, valueMap.get(prevValue)!)\n    valueMap.delete(prevValue)\n  }\n}\n\nfunction focus(options?: FocusOptions) {\n  const input = Array.from(inputSet)[0]?.value\n\n  if (isClient && input && document.activeElement !== input) {\n    input.focus(options)\n  }\n}\n\ndefineExpose({\n  idFor,\n  labelId,\n  increaseControl,\n  decreaseControl,\n  focus,\n  blur: () => {\n    for (const input of inputSet) {\n      input.value?.blur()\n    }\n  }\n})\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    :class=\"className\"\n    role=\"group\"\n    :aria-labelledby=\"labelId\"\n  >\n    <slot>\n      <Checkbox v-if=\"props.control\" inherit control>\n        {{ controlLabel }}\n      </Checkbox>\n      <template v-for=\"(item, index) in props.options\" :key=\"index\">\n        <Checkbox\n          v-if=\"isObject(item)\"\n          inherit\n          :value=\"item.value\"\n          :control=\"item.control\"\n          :disabled=\"item.disabled\"\n        >\n          {{ item.label || item.value }}\n        </Checkbox>\n        <Checkbox v-else inherit :value=\"item\">\n          {{ item }}\n        </Checkbox>\n      </template>\n    </slot>\n  </div>\n</template>\n","import type { InjectionKey } from 'vue'\n\nexport type CollapseArrowType = 'right' | 'left' | 'none'\n\nexport interface PanelState {\n  tab?: HTMLElement | null,\n  label: string | number,\n  expanded: boolean,\n  setExpanded: (expanded: boolean) => void\n}\n\nexport interface CollapseState {\n  arrowType: CollapseArrowType,\n  registerPanel(panel: PanelState): void,\n  unregisterPanel(panel: PanelState): void,\n  expandPanel(label: string | number, expanded: boolean): void,\n  refreshLabels: () => void\n}\n\nexport const COLLAPSE_STATE = '__VXP_COLLAPSE_STATE' as unknown as InjectionKey<CollapseState>\n\nlet idCount = 0\n\nexport function getIndexId() {\n  return idCount++\n}\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  nextTick,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  toRef,\n  watch,\n  watchEffect\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useModifier } from '@vexip-ui/hooks'\nimport { debounceMinor, isNull, removeArrayItem } from '@vexip-ui/utils'\nimport { collapseProps } from './props'\nimport { COLLAPSE_STATE } from './symbol'\n\nimport type { CollapseArrowType, PanelState } from './symbol'\n\ndefineOptions({ name: 'Collapse' })\n\nconst _props = defineProps(collapseProps)\nconst props = useProps('collapse', _props, {\n  expanded: {\n    default: null,\n    static: true\n  },\n  card: false,\n  accordion: false,\n  arrowType: {\n    default: 'right' as CollapseArrowType,\n    validator: (value: CollapseArrowType) => ['right', 'left', 'none'].includes(value)\n  },\n  ghost: false\n})\n\nconst emit = defineEmits(['update:expanded'])\n\nconst nh = useNameHelper('collapse')\nconst panelStates = reactive(new Set<PanelState>())\nconst currentExpanded = ref<(string | number)[]>([])\n\nconst { target: wrapper } = useModifier({\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (modifier.left || modifier.right) {\n      if (!wrapper.value || ![...panelStates].find(({ tab }) => tab === event.target)) return\n\n      const tabs = Array.from(wrapper.value.querySelectorAll(nh.cbe('header'))) as HTMLElement[]\n\n      if (tabs.length < 1) return\n\n      event.preventDefault()\n      event.stopPropagation()\n\n      const index = document.activeElement\n        ? tabs.findIndex(panel => panel === document.activeElement)\n        : -1\n\n      if (~index) {\n        const target = tabs[(index + (modifier.left ? -1 : 1) + tabs.length) % tabs.length]\n\n        target?.focus()\n      }\n    } else if (modifier.escape) {\n      event.preventDefault()\n      event.stopPropagation()\n\n      clearExpanded()\n    }\n  }\n})\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(`arrow-${props.arrowType}`),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('card')]: props.card,\n      [nh.bm('ghost')]: !props.card && props.ghost\n    }\n  ]\n})\n\nconst refreshLabels = debounceMinor(() => {\n  Array.from(panelStates.values()).forEach((item, index) => {\n    if (isNull(item.label)) {\n      item.label = index + 1\n    }\n  })\n\n  if (panelStates.size) {\n    for (const panel of panelStates) {\n      if (currentExpanded.value.includes(panel.label)) {\n        panel.expanded = true\n      } else if (panel.expanded) {\n        expandPanel(panel.label, true)\n      }\n    }\n  }\n})\n\nprovide(\n  COLLAPSE_STATE,\n  reactive({\n    arrowType: toRef(props, 'arrowType'),\n    registerPanel,\n    unregisterPanel,\n    expandPanel,\n    refreshLabels\n  })\n)\n\nwatchEffect(() => {\n  const rawExpanded = props.expanded\n  const expanded =\n    props.accordion && Array.isArray(rawExpanded)\n      ? rawExpanded[0]\n      : rawExpanded || rawExpanded === 0\n        ? rawExpanded\n        : []\n\n  currentExpanded.value = Array.isArray(expanded) ? Array.from(expanded) : [expanded]\n})\n\nonMounted(() => {\n  nextTick(updateItemExpanded)\n\n  watch(currentExpanded, (prev, next) => {\n    if (!isSameExpanded(prev, next)) {\n      updateItemExpanded()\n    }\n  })\n})\n\ndefineExpose({ currentExpanded, wrapper })\n\nfunction registerPanel(panel: PanelState) {\n  panelStates.add(panel)\n\n  refreshLabels()\n}\n\nfunction unregisterPanel(panel: PanelState) {\n  panelStates.delete(panel)\n  expandPanel(panel.label, false)\n  refreshLabels()\n}\n\nfunction isSameExpanded(prev: (string | number)[], next: (string | number)[]) {\n  const prevSet = new Set(prev)\n\n  if (prevSet.size !== new Set(next).size) return false\n\n  return next.every(item => prevSet.has(item))\n}\n\nfunction expandPanel(label: string | number, expanded: boolean) {\n  if (!label && label !== 0) return\n\n  if (props.accordion) {\n    currentExpanded.value = expanded ? [label] : []\n  } else {\n    if (expanded) {\n      currentExpanded.value.push(label)\n    } else {\n      removeArrayItem(currentExpanded.value, label)\n    }\n  }\n\n  emitChangeEvent()\n  updateItemExpanded()\n}\n\nfunction clearExpanded() {\n  if (!currentExpanded.value.length) return\n\n  currentExpanded.value = []\n\n  emitChangeEvent()\n  updateItemExpanded()\n}\n\nfunction emitChangeEvent() {\n  emit('update:expanded', currentExpanded.value)\n  emitEvent(props.onChange, currentExpanded.value)\n}\n\nfunction updateItemExpanded() {\n  panelStates.forEach(panel => {\n    panel.setExpanded(currentExpanded.value.includes(panel.label))\n  })\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"tablist\"\n    tabindex=\"-1\"\n  >\n    <slot></slot>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\n\nimport { computed, inject, onBeforeUnmount, reactive, ref, watch } from 'vue'\n\nimport { createIconProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { collapsePanelProps } from './props'\nimport { COLLAPSE_STATE, getIndexId } from './symbol'\n\nimport type { CollapseArrowType, PanelState } from './symbol'\n\ndefineOptions({ name: 'CollapsePanel' })\n\nconst _props = defineProps(collapsePanelProps)\nconst props = useProps('collapsePanel', _props, {\n  label: {\n    default: null,\n    static: true\n  },\n  title: '',\n  disabled: false,\n  contentStyle: null,\n  expanded: false,\n  card: false,\n  arrowType: {\n    default: 'right' as CollapseArrowType,\n    validator: (value: CollapseArrowType) => ['right', 'left', 'none'].includes(value)\n  },\n  icon: createIconProp(),\n  ghost: false\n})\n\nconst emit = defineEmits(['update:expanded'])\n\nconst collapseState = inject(COLLAPSE_STATE, null)\n\nconst nh = useNameHelper('collapse')\nconst icons = useIcons()\nconst currentExpanded = ref(props.expanded)\nconst currentLabel = ref(props.label)\n\nconst tab = ref<HTMLElement>()\n\nconst id = getIndexId()\n\nconst tabId = computed(() => `${nh.be('tab')}-${id}`)\nconst bodyId = computed(() => `${nh.be('body')}-${id}`)\nconst useCard = computed(() => {\n  if (!collapseState) {\n    return props.card\n  }\n\n  return false\n})\nconst useGhost = computed(() => {\n  if (!collapseState) {\n    return props.ghost\n  }\n\n  return false\n})\nconst useArrowType = computed(() => {\n  if (collapseState) {\n    return collapseState.arrowType\n  }\n\n  return props.arrowType\n})\nconst className = computed(() => {\n  return [\n    nh.be('panel'),\n    nh.bs('vars'),\n    nh.bem('panel', `arrow-${useArrowType.value}`),\n    {\n      [nh.bem('panel', 'inherit')]: collapseState || props.inherit,\n      [nh.bem('panel', 'card')]: useCard.value,\n      [nh.bem('panel', 'ghost')]: !useCard.value && useGhost.value,\n      [nh.bem('panel', 'expanded')]: currentExpanded.value,\n      [nh.bem('panel', 'disabled')]: props.disabled\n    }\n  ]\n})\n\nif (collapseState) {\n  const state: PanelState = reactive({\n    tab,\n    label: currentLabel,\n    expanded: currentExpanded,\n    setExpanded\n  })\n\n  watch(\n    () => props.label,\n    value => {\n      const prevValue = currentLabel.value\n      currentLabel.value = value || value === 0 ? value : prevValue\n    }\n  )\n\n  collapseState.registerPanel(state)\n\n  onBeforeUnmount(() => {\n    collapseState.unregisterPanel(state)\n  })\n} else {\n  watch(\n    () => props.expanded,\n    value => {\n      currentExpanded.value = value\n    }\n  )\n}\n\nfunction setExpanded(expanded: boolean) {\n  currentExpanded.value = expanded\n\n  emit('update:expanded', expanded)\n  emitEvent(props.onToggle, expanded)\n}\n\nfunction handleToggle(expanded = !currentExpanded.value) {\n  if (props.disabled) return\n\n  if (collapseState) {\n    // 由父级进行管理\n    collapseState.expandPanel(currentLabel.value, expanded)\n  } else {\n    setExpanded(expanded)\n  }\n}\n\ndefineExpose({\n  currentExpanded,\n  tab,\n  tabId,\n  bodyId,\n  handleToggle\n})\n</script>\n\n<template>\n  <section :class=\"className\">\n    <button\n      :id=\"tabId\"\n      ref=\"tab\"\n      :class=\"nh.be('header')\"\n      type=\"button\"\n      role=\"tab\"\n      :aria-expanded=\"currentExpanded\"\n      :aria-controls=\"bodyId\"\n      :aria-describedby=\"bodyId\"\n      @click=\"handleToggle()\"\n    >\n      <div :class=\"nh.be('arrow')\">\n        <Icon v-bind=\"icons.angleRight\"></Icon>\n      </div>\n      <slot name=\"title\">\n        <div v-if=\"props.icon\" :class=\"nh.be('icon')\">\n          <Icon :icon=\"props.icon\"></Icon>\n        </div>\n        {{ props.title }}\n      </slot>\n    </button>\n    <CollapseTransition>\n      <div\n        v-if=\"currentExpanded\"\n        :id=\"bodyId\"\n        :class=\"nh.be('body')\"\n        role=\"tabpanel\"\n        tabindex=\"0\"\n        :aria-labelledby=\"tabId\"\n      >\n        <div :class=\"nh.be('content')\" :style=\"props.contentStyle\">\n          <slot></slot>\n        </div>\n      </div>\n    </CollapseTransition>\n  </section>\n</template>\n","<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"nh.be('palette')\"\n    tabindex=\"-1\"\n    role=\"group\"\n    :style=\"{\n      backgroundColor: `hsl(${hue}, 100%, 50%)`\n    }\"\n  >\n    <div :class=\"nh.be('saturation')\" role=\"none\"></div>\n    <div :class=\"nh.be('value')\" role=\"none\"></div>\n    <div\n      :class=\"nh.be('palette-handler')\"\n      :style=\"{\n        top: `${currentTop}%`,\n        left: `${currentLeft}%`\n      }\"\n    >\n      <div :class=\"nh.be('palette-pointer')\"></div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\nimport { boundRange, toFixed } from '@vexip-ui/utils'\n\nexport default defineComponent({\n  name: 'ColorPalette',\n  props: {\n    hue: {\n      type: Number,\n      default: 0,\n      validator: (value: number) => {\n        return value >= 0 && value <= 360\n      }\n    },\n    value: {\n      type: Number,\n      default: 1,\n      validator: (value: number) => {\n        return value >= 0 && value <= 1\n      }\n    },\n    saturation: {\n      type: Number,\n      default: 0,\n      validator: (value: number) => {\n        return value >= 0 && value <= 1\n      }\n    }\n  },\n  emits: ['edit-start', 'edit-end', 'change'],\n  setup(props, { emit }) {\n    const currentTop = ref((1 - props.value) * 100)\n    const currentLeft = ref(props.saturation * 100)\n\n    let prevTop = currentTop.value\n    let prevLeft = currentLeft.value\n    let widthLimit: number\n    let heightLimit: number\n    let topStartAt: number\n    let leftStartAt: number\n\n    const { target: wrapper } = useModifier({\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        if (modifier.up || modifier.down || modifier.left || modifier.right) {\n          event.preventDefault()\n\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\n          const sign = modifier.up || modifier.left ? -1 : 1\n          const delta = step * sign\n\n          if (modifier.up || modifier.down) {\n            currentTop.value += delta\n          } else {\n            currentLeft.value += delta\n          }\n\n          verifyPosition()\n          prevTop = currentTop.value\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      }\n    })\n\n    const { moving: editing } = useMoving({\n      target: wrapper,\n      onStart: (state, event) => {\n        if (!wrapper.value || event.button > 0) {\n          return false\n        }\n\n        const rect = wrapper.value.getBoundingClientRect()\n        const { top, left, width, height } = rect\n\n        widthLimit = width\n        heightLimit = height\n\n        currentTop.value = ((topStartAt = state.clientY - top) / height) * 100\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\n\n        verifyPosition()\n        emit('edit-start')\n\n        let changed = false\n\n        if (Math.abs(currentTop.value - prevTop) >= 0.01) {\n          prevTop = currentTop.value\n          changed = true\n        }\n\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\n          prevLeft = currentLeft.value\n          changed = true\n        }\n\n        changed && handleChange()\n      },\n      onMove: state => {\n        currentTop.value = ((topStartAt + state.deltaY) / heightLimit) * 100\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\n\n        verifyPosition()\n        handleChange()\n      },\n      onEnd: () => {\n        emit('edit-end')\n      }\n    })\n\n    watch(\n      () => props.value,\n      value => {\n        currentTop.value = (1 - value) * 100\n        verifyPosition()\n      },\n      { immediate: true }\n    )\n    watch(\n      () => props.saturation,\n      value => {\n        currentLeft.value = value * 100\n        verifyPosition()\n      },\n      { immediate: true }\n    )\n\n    function verifyPosition() {\n      currentTop.value = toFixed(boundRange(currentTop.value, 0, 100), 3)\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\n    }\n\n    function handleChange() {\n      emit('change', {\n        h: props.hue,\n        s: currentLeft.value / 100,\n        v: toFixed(1 - currentTop.value / 100, 3)\n      })\n    }\n\n    return {\n      nh: useNameHelper('color-picker'),\n      currentTop,\n      currentLeft,\n      editing,\n\n      wrapper\n\n      // handleMouseDown\n    }\n  }\n})\n</script>\n","<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"nh.be('palette')\"\n    tabindex=\"-1\"\n    role=\"group\"\n    :style=\"{\n      backgroundColor: `hsl(${hue}, 100%, 50%)`\n    }\"\n  >\n    <div :class=\"nh.be('saturation')\" role=\"none\"></div>\n    <div :class=\"nh.be('value')\" role=\"none\"></div>\n    <div\n      :class=\"nh.be('palette-handler')\"\n      :style=\"{\n        top: `${currentTop}%`,\n        left: `${currentLeft}%`\n      }\"\n    >\n      <div :class=\"nh.be('palette-pointer')\"></div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\nimport { boundRange, toFixed } from '@vexip-ui/utils'\n\nexport default defineComponent({\n  name: 'ColorPalette',\n  props: {\n    hue: {\n      type: Number,\n      default: 0,\n      validator: (value: number) => {\n        return value >= 0 && value <= 360\n      }\n    },\n    value: {\n      type: Number,\n      default: 1,\n      validator: (value: number) => {\n        return value >= 0 && value <= 1\n      }\n    },\n    saturation: {\n      type: Number,\n      default: 0,\n      validator: (value: number) => {\n        return value >= 0 && value <= 1\n      }\n    }\n  },\n  emits: ['edit-start', 'edit-end', 'change'],\n  setup(props, { emit }) {\n    const currentTop = ref((1 - props.value) * 100)\n    const currentLeft = ref(props.saturation * 100)\n\n    let prevTop = currentTop.value\n    let prevLeft = currentLeft.value\n    let widthLimit: number\n    let heightLimit: number\n    let topStartAt: number\n    let leftStartAt: number\n\n    const { target: wrapper } = useModifier({\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        if (modifier.up || modifier.down || modifier.left || modifier.right) {\n          event.preventDefault()\n\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\n          const sign = modifier.up || modifier.left ? -1 : 1\n          const delta = step * sign\n\n          if (modifier.up || modifier.down) {\n            currentTop.value += delta\n          } else {\n            currentLeft.value += delta\n          }\n\n          verifyPosition()\n          prevTop = currentTop.value\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      }\n    })\n\n    const { moving: editing } = useMoving({\n      target: wrapper,\n      onStart: (state, event) => {\n        if (!wrapper.value || event.button > 0) {\n          return false\n        }\n\n        const rect = wrapper.value.getBoundingClientRect()\n        const { top, left, width, height } = rect\n\n        widthLimit = width\n        heightLimit = height\n\n        currentTop.value = ((topStartAt = state.clientY - top) / height) * 100\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\n\n        verifyPosition()\n        emit('edit-start')\n\n        let changed = false\n\n        if (Math.abs(currentTop.value - prevTop) >= 0.01) {\n          prevTop = currentTop.value\n          changed = true\n        }\n\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\n          prevLeft = currentLeft.value\n          changed = true\n        }\n\n        changed && handleChange()\n      },\n      onMove: state => {\n        currentTop.value = ((topStartAt + state.deltaY) / heightLimit) * 100\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\n\n        verifyPosition()\n        handleChange()\n      },\n      onEnd: () => {\n        emit('edit-end')\n      }\n    })\n\n    watch(\n      () => props.value,\n      value => {\n        currentTop.value = (1 - value) * 100\n        verifyPosition()\n      },\n      { immediate: true }\n    )\n    watch(\n      () => props.saturation,\n      value => {\n        currentLeft.value = value * 100\n        verifyPosition()\n      },\n      { immediate: true }\n    )\n\n    function verifyPosition() {\n      currentTop.value = toFixed(boundRange(currentTop.value, 0, 100), 3)\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\n    }\n\n    function handleChange() {\n      emit('change', {\n        h: props.hue,\n        s: currentLeft.value / 100,\n        v: toFixed(1 - currentTop.value / 100, 3)\n      })\n    }\n\n    return {\n      nh: useNameHelper('color-picker'),\n      currentTop,\n      currentLeft,\n      editing,\n\n      wrapper\n\n      // handleMouseDown\n    }\n  }\n})\n</script>\n","<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"nh.be('hue')\"\n    tabindex=\"-1\"\n    role=\"group\"\n  >\n    <div :class=\"nh.be('hue-handler')\" :style=\"{ left: `${currentLeft}%` }\"></div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\nimport { boundRange, toFixed } from '@vexip-ui/utils'\n\nexport default defineComponent({\n  name: 'ColorHue',\n  props: {\n    hue: {\n      type: Number,\n      default: 0,\n      validator: (value: number) => {\n        return value >= 0 && value <= 360\n      }\n    }\n  },\n  emits: ['edit-start', 'edit-end', 'change'],\n  setup(props, { emit }) {\n    const currentLeft = ref(props.hue * 100)\n\n    let prevLeft = currentLeft.value\n    let widthLimit: number\n    let leftStartAt: number\n\n    const { target: wrapper } = useModifier({\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        if (modifier.left || modifier.right) {\n          event.preventDefault()\n\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\n          const delta = step * (modifier.left ? -1 : 1)\n\n          currentLeft.value += delta\n\n          verifyPosition()\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      }\n    })\n\n    const { moving: editing } = useMoving({\n      target: wrapper,\n      onStart: (state, event) => {\n        if (!wrapper.value || event.button > 0) {\n          return false\n        }\n\n        const rect = wrapper.value.getBoundingClientRect()\n        const { left, width } = rect\n\n        widthLimit = width\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\n\n        verifyPosition()\n        emit('edit-start')\n\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      },\n      onMove: state => {\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\n\n        verifyPosition()\n        handleChange()\n      },\n      onEnd: () => {\n        emit('edit-end')\n      }\n    })\n\n    watch(\n      () => props.hue,\n      value => {\n        currentLeft.value = (value / 360) * 100\n        verifyPosition()\n      },\n      { immediate: true }\n    )\n\n    function verifyPosition() {\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\n    }\n\n    function handleChange() {\n      emit('change', (currentLeft.value / 100) * 360)\n    }\n\n    return {\n      nh: useNameHelper('color-picker'),\n      currentLeft,\n      editing,\n\n      wrapper\n    }\n  }\n})\n</script>\n","<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"nh.be('hue')\"\n    tabindex=\"-1\"\n    role=\"group\"\n  >\n    <div :class=\"nh.be('hue-handler')\" :style=\"{ left: `${currentLeft}%` }\"></div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\nimport { boundRange, toFixed } from '@vexip-ui/utils'\n\nexport default defineComponent({\n  name: 'ColorHue',\n  props: {\n    hue: {\n      type: Number,\n      default: 0,\n      validator: (value: number) => {\n        return value >= 0 && value <= 360\n      }\n    }\n  },\n  emits: ['edit-start', 'edit-end', 'change'],\n  setup(props, { emit }) {\n    const currentLeft = ref(props.hue * 100)\n\n    let prevLeft = currentLeft.value\n    let widthLimit: number\n    let leftStartAt: number\n\n    const { target: wrapper } = useModifier({\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        if (modifier.left || modifier.right) {\n          event.preventDefault()\n\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\n          const delta = step * (modifier.left ? -1 : 1)\n\n          currentLeft.value += delta\n\n          verifyPosition()\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      }\n    })\n\n    const { moving: editing } = useMoving({\n      target: wrapper,\n      onStart: (state, event) => {\n        if (!wrapper.value || event.button > 0) {\n          return false\n        }\n\n        const rect = wrapper.value.getBoundingClientRect()\n        const { left, width } = rect\n\n        widthLimit = width\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\n\n        verifyPosition()\n        emit('edit-start')\n\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      },\n      onMove: state => {\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\n\n        verifyPosition()\n        handleChange()\n      },\n      onEnd: () => {\n        emit('edit-end')\n      }\n    })\n\n    watch(\n      () => props.hue,\n      value => {\n        currentLeft.value = (value / 360) * 100\n        verifyPosition()\n      },\n      { immediate: true }\n    )\n\n    function verifyPosition() {\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\n    }\n\n    function handleChange() {\n      emit('change', (currentLeft.value / 100) * 360)\n    }\n\n    return {\n      nh: useNameHelper('color-picker'),\n      currentLeft,\n      editing,\n\n      wrapper\n    }\n  }\n})\n</script>\n","<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"nh.be('alpha')\"\n    tabindex=\"-1\"\n    role=\"group\"\n  >\n    <div\n      :class=\"nh.be('opacity')\"\n      :style=\"{\n        backgroundImage: `linear-gradient(to right, rgba(${rgbString}, 0) 0%, rgb(${rgbString}) 100%)`\n      }\"\n    ></div>\n    <div :class=\"nh.be('alpha-handler')\" :style=\"{ left: `${currentLeft}%` }\"></div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\nimport { boundRange, toFixed } from '@vexip-ui/utils'\n\nimport type { PropType } from 'vue'\nimport type { RGBColor } from '@vexip-ui/utils'\n\nexport default defineComponent({\n  name: 'ColorAlpha',\n  props: {\n    rgb: {\n      type: Object as PropType<RGBColor>,\n      default: () => {\n        return { r: 0, g: 0, b: 0 }\n      },\n      validator: (value: RGBColor) => {\n        return 'r' in value && 'g' in value && 'b' in value\n      }\n    },\n    alpha: {\n      type: Number,\n      default: 1,\n      validator: (value: number) => {\n        return value >= 0 && value <= 1\n      }\n    }\n  },\n  emits: ['edit-start', 'edit-end', 'change'],\n  setup(props, { emit }) {\n    const currentLeft = ref(props.alpha * 100)\n\n    let prevLeft = currentLeft.value\n    let widthLimit: number\n    let leftStartAt: number\n\n    const { target: wrapper } = useModifier({\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        if (modifier.left || modifier.right) {\n          event.preventDefault()\n\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\n          const delta = step * (modifier.left ? -1 : 1)\n\n          currentLeft.value += delta\n\n          verifyPosition()\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      }\n    })\n\n    const { moving: editing } = useMoving({\n      target: wrapper,\n      onStart: (state, event) => {\n        if (!wrapper.value || event.button > 0) {\n          return false\n        }\n\n        const rect = wrapper.value.getBoundingClientRect()\n        const { left, width } = rect\n\n        widthLimit = width\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\n\n        verifyPosition()\n        emit('edit-start')\n\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      },\n      onMove: state => {\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\n\n        verifyPosition()\n        handleChange()\n      },\n      onEnd: () => {\n        emit('edit-end')\n      }\n    })\n\n    const rgbString = computed(() => {\n      const { r, g, b } = props.rgb\n\n      return `${r}, ${g}, ${b}`\n    })\n\n    verifyPosition()\n\n    watch(\n      () => props.alpha,\n      value => {\n        currentLeft.value = value * 100\n        verifyPosition()\n      },\n      { immediate: true }\n    )\n\n    function verifyPosition() {\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\n    }\n\n    function handleChange() {\n      emit('change', currentLeft.value / 100)\n    }\n\n    return {\n      nh: useNameHelper('color-picker'),\n      currentLeft,\n      editing,\n\n      rgbString,\n\n      wrapper\n    }\n  }\n})\n</script>\n","<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"nh.be('alpha')\"\n    tabindex=\"-1\"\n    role=\"group\"\n  >\n    <div\n      :class=\"nh.be('opacity')\"\n      :style=\"{\n        backgroundImage: `linear-gradient(to right, rgba(${rgbString}, 0) 0%, rgb(${rgbString}) 100%)`\n      }\"\n    ></div>\n    <div :class=\"nh.be('alpha-handler')\" :style=\"{ left: `${currentLeft}%` }\"></div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\nimport { boundRange, toFixed } from '@vexip-ui/utils'\n\nimport type { PropType } from 'vue'\nimport type { RGBColor } from '@vexip-ui/utils'\n\nexport default defineComponent({\n  name: 'ColorAlpha',\n  props: {\n    rgb: {\n      type: Object as PropType<RGBColor>,\n      default: () => {\n        return { r: 0, g: 0, b: 0 }\n      },\n      validator: (value: RGBColor) => {\n        return 'r' in value && 'g' in value && 'b' in value\n      }\n    },\n    alpha: {\n      type: Number,\n      default: 1,\n      validator: (value: number) => {\n        return value >= 0 && value <= 1\n      }\n    }\n  },\n  emits: ['edit-start', 'edit-end', 'change'],\n  setup(props, { emit }) {\n    const currentLeft = ref(props.alpha * 100)\n\n    let prevLeft = currentLeft.value\n    let widthLimit: number\n    let leftStartAt: number\n\n    const { target: wrapper } = useModifier({\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        if (modifier.left || modifier.right) {\n          event.preventDefault()\n\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\n          const delta = step * (modifier.left ? -1 : 1)\n\n          currentLeft.value += delta\n\n          verifyPosition()\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      }\n    })\n\n    const { moving: editing } = useMoving({\n      target: wrapper,\n      onStart: (state, event) => {\n        if (!wrapper.value || event.button > 0) {\n          return false\n        }\n\n        const rect = wrapper.value.getBoundingClientRect()\n        const { left, width } = rect\n\n        widthLimit = width\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\n\n        verifyPosition()\n        emit('edit-start')\n\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      },\n      onMove: state => {\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\n\n        verifyPosition()\n        handleChange()\n      },\n      onEnd: () => {\n        emit('edit-end')\n      }\n    })\n\n    const rgbString = computed(() => {\n      const { r, g, b } = props.rgb\n\n      return `${r}, ${g}, ${b}`\n    })\n\n    verifyPosition()\n\n    watch(\n      () => props.alpha,\n      value => {\n        currentLeft.value = value * 100\n        verifyPosition()\n      },\n      { immediate: true }\n    )\n\n    function verifyPosition() {\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\n    }\n\n    function handleChange() {\n      emit('change', currentLeft.value / 100)\n    }\n\n    return {\n      nh: useNameHelper('color-picker'),\n      currentLeft,\n      editing,\n\n      rgbString,\n\n      wrapper\n    }\n  }\n})\n</script>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n  stateProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { Color, HSLAColor, HSVAColor, RGBAColor } from '@vexip-ui/utils'\nimport type { ColorFormat, ColorPrickerSlots } from './symbol'\n\ntype FormattedColor = string | RGBAColor | HSLAColor | HSVAColor\n\nexport const colorPickerProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('colorPicker'),\n  value: [String, Object] as PropType<Color | null>,\n  visible: booleanProp,\n  format: String as PropType<ColorFormat>,\n  alpha: booleanProp,\n  disabled: booleanProp,\n  transitionName: String,\n  noInput: booleanProp,\n  shortcut: {\n    type: [Boolean, Array] as PropType<boolean | string[]>,\n    default: null\n  },\n  placement: String as PropType<Placement>,\n  transfer: booleanStringProp,\n  outsideClose: booleanProp,\n  clearable: booleanProp,\n  cancelText: String,\n  confirmText: String,\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  noSuffix: booleanProp,\n  staticSuffix: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  popperAlive: booleanProp,\n  showLabel: booleanProp,\n  labelFormat: String as PropType<ColorFormat>,\n  slots: Object as PropType<ColorPrickerSlots>,\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onClickOutside: eventProp(),\n  onOutsideClose: eventProp(),\n  onClear: eventProp(),\n  onChange: eventProp<(color: FormattedColor) => void>(),\n  onShortcut: eventProp<(color: FormattedColor) => void>()\n})\n\nexport type ColorPickerProps = ExtractPropTypes<typeof colorPickerProps>\nexport type ColorPickerCProps = ConfigurableProps<ColorPickerProps>\n","import { rgbToHsv } from '@vexip-ui/utils'\n\nimport type { RGBColor } from '@vexip-ui/utils'\n\nexport type ColorFormat = 'rgb' | 'hsl' | 'hsv' | 'hex'\n\nexport interface ColorPrickerSlots {\n  control?: (params: { color: RGBColor, alpha: number, empty: boolean }) => any,\n  prefix?: () => any,\n  suffix?: () => any,\n  label?: (params: { color: RGBColor, alpha: number, empty: boolean, label: string }) => any\n}\n\nexport const defaultShortcuts = Object.freeze([\n  '#2d8cf0',\n  '#19be6b',\n  '#ff9900',\n  '#ed4014',\n  '#00b5ff',\n  '#19c919',\n  '#f9e31c',\n  '#ea1a1a',\n  '#9b1dea',\n  '#00c2b1',\n  '#ac7a33',\n  '#1d35ea',\n  '#8bc34a',\n  '#f16b62',\n  '#ea4ca3',\n  '#0d94aa',\n  '#febd79',\n  '#5d4037',\n  '#00bcd4',\n  '#f06292',\n  '#cddc39',\n  '#607d8b',\n  '#000000',\n  '#ffffff'\n])\n\nexport const getDefaultHsv = () => rgbToHsv(0, 0, 0)\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Input } from '@/components/input'\nimport { Popper } from '@/components/popper'\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, nextTick, ref, toRef, watch } from 'vue'\n\nimport ColorPalette from './color-palette.vue'\nimport ColorHue from './color-hue.vue'\nimport ColorAlpha from './color-alpha.vue'\nimport { placementWhileList, useClickOutside, useHover, usePopper } from '@vexip-ui/hooks'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport {\n  getLast,\n  hsvToHsl,\n  hsvToRgb,\n  isClient,\n  isElement,\n  parseColorToRgba,\n  rgbToHex,\n  rgbToHsv,\n  rgbaToHex,\n  toAttrValue,\n  toFixed\n} from '@vexip-ui/utils'\nimport { colorPickerProps } from './props'\nimport { defaultShortcuts, getDefaultHsv } from './symbol'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type { Color, HSLAColor, HSVAColor, HSVColor, RGBAColor } from '@vexip-ui/utils'\nimport type { ColorFormat, ColorPrickerSlots } from './symbol'\n\ndefineOptions({ name: 'ColorPicker' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue\n} = useFieldStore<Color | null>(() => reference.value?.focus())\n\nconst nh = useNameHelper('color-picker')\n\nconst _props = defineProps(colorPickerProps)\nconst props = useProps('colorPicker', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  value: {\n    default: () => getFieldValue()!,\n    static: true\n  },\n  visible: false,\n  format: {\n    default: 'rgb',\n    validator: value => ['rgb', 'hsl', 'hsv', 'hex'].includes(value)\n  },\n  alpha: false,\n  disabled: () => disabled.value,\n  transitionName: () => nh.ns('drop'),\n  noInput: false,\n  shortcut: false,\n  placement: {\n    default: 'bottom',\n    validator: value => placementWhileList.includes(value)\n  },\n  transfer: false,\n  outsideClose: true,\n  clearable: false,\n  cancelText: null,\n  confirmText: null,\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  noSuffix: false,\n  staticSuffix: false,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  popperAlive: null,\n  showLabel: false,\n  labelFormat: null,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:value', 'update:visible'])\n\nconst slots = defineSlots<ColorPrickerSlots>()\n\nconst icons = useIcons()\nconst locale = useLocale('colorPicker', toRef(props, 'locale'))\n\nconst isEmpty = ref(true)\nconst currentVisible = ref(props.visible)\nconst currentValue = ref<HSVColor>(null!)\nconst currentAlpha = ref(1)\nconst editing = ref(false)\nconst placement = toRef(props, 'placement')\nconst transfer = toRef(props, 'transfer')\nconst shortcutHitting = ref(0)\nconst shortcutsFocused = ref(false)\n\nparseValue(props.value)\n\nconst palette = ref(null)\nconst hue = ref(null)\nconst alphaEl = ref(null)\nconst shortcutEl = ref(null)\nconst input = ref(null)\nconst cancel = ref(null)\nconst confirm = ref(null)\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst popper = ref<PopperExposed>()\nconst { reference, transferTo, updatePopper } = usePopper({\n  placement,\n  transfer,\n  wrapper,\n  popper: computed(() => popper.value?.wrapper),\n  isDrop: true\n})\nconst { isHover } = useHover(reference)\n\nconst unitList = computed(() => {\n  return [\n    palette.value,\n    hue.value,\n    alphaEl.value,\n    shortcutEl.value,\n    input.value,\n    cancel.value,\n    confirm.value\n  ].filter(Boolean) as any[]\n})\n\nconst lastValue = ref<HSVAColor>({\n  ...currentValue.value,\n  a: currentAlpha.value,\n  format: 'hsva'\n})\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.ns('input-vars')]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('empty')]: isEmpty.value && !currentVisible.value,\n    [nh.bm('focused')]: currentVisible.value,\n    [nh.bm('disabled')]: props.disabled,\n    [nh.bm('alpha')]: props.alpha,\n    [nh.bm(props.size)]: props.size !== 'default',\n    [nh.bm(props.state)]: props.state !== 'default'\n  }\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst selectorClass = computed(() => {\n  const baseCls = nh.be('selector')\n\n  return {\n    [baseCls]: true,\n    [`${baseCls}--disabled`]: props.disabled,\n    [`${baseCls}--readonly`]: readonly.value,\n    [`${baseCls}--loading`]: props.loading,\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\n    [`${baseCls}--focused`]: currentVisible.value,\n    [`${baseCls}--${props.state}`]: props.state !== 'default'\n  }\n})\nconst rgb = computed(() => {\n  const { h, s, v } =\n    currentValue.value && currentVisible.value\n      ? currentValue.value\n      : (lastValue.value ?? { h: 0, s: 0, v: 0 })\n\n  return hsvToRgb(h, s, v)\n})\nconst hex = computed(() => {\n  const { r, g, b } = rgb.value\n\n  if (props.alpha) {\n    return rgbaToHex(r, g, b, currentAlpha.value)\n  }\n\n  return rgbToHex(r, g, b)\n})\nconst shortcutList = computed(() => {\n  if (!props.shortcut) return []\n\n  if (Array.isArray(props.shortcut)) {\n    return props.shortcut\n  }\n\n  return defaultShortcuts\n})\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\nconst showClear = computed(() => {\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && !isEmpty.value\n})\nconst formattedColor = computed(() => getFormattedColor(props.format))\nconst labelColor = computed(() => {\n  return (\n    props.labelFormat ? getFormattedColor(props.labelFormat) : formattedColor.value\n  )?.toString()\n})\n\nwatch(\n  () => props.visible,\n  value => {\n    currentVisible.value = value\n  }\n)\nwatch(currentVisible, value => {\n  value && updatePopper()\n})\nwatch(\n  () => props.value,\n  value => {\n    parseValue(value)\n    lastValue.value = { ...currentValue.value, a: currentAlpha.value, format: 'hsva' }\n  }\n)\nwatch(\n  () => props.disabled,\n  value => {\n    if (value) {\n      setVisible(false)\n    }\n  }\n)\n\ndefineExpose({\n  idFor,\n  isEmpty,\n  currentVisible,\n  currentValue,\n  currentAlpha,\n  rgb,\n  hex,\n  labelColor,\n  wrapper,\n  reference,\n  popper,\n  toggleVisible,\n  focus,\n  blur\n})\n\nfunction parseValue(value: Color | null) {\n  if (value) {\n    const { r, g, b, a } = parseColorToRgba(value)\n\n    isEmpty.value = false\n    currentValue.value = rgbToHsv(r, g, b)\n    currentAlpha.value = a\n  } else {\n    isEmpty.value = true\n    currentValue.value = getDefaultHsv()\n    currentAlpha.value = 1\n  }\n}\n\nfunction setVisible(visible: boolean) {\n  if (currentVisible.value === visible) return\n\n  currentVisible.value = visible\n\n  emit('update:visible', visible)\n  emitEvent(props.onToggle, visible)\n}\n\nfunction getFormattedColor(format: ColorFormat) {\n  let color: Color\n\n  if (format === 'hex') {\n    const { r, g, b } = rgb.value\n\n    if (props.alpha) {\n      color = rgbaToHex(r, g, b, currentAlpha.value)\n    } else {\n      color = rgbToHex(r, g, b)\n    }\n  } else {\n    switch (format) {\n      case 'rgb': {\n        color = { ...rgb.value } as RGBAColor\n        color.r = Math.round(color.r)\n        color.g = Math.round(color.g)\n        color.b = Math.round(color.b)\n\n        break\n      }\n      case 'hsl': {\n        const { h, s, v } = currentValue.value\n\n        color = hsvToHsl(h, s, v) as HSLAColor\n        color.h = Math.round(color.h)\n        color.s = toFixed(color.s, 3)\n        color.l = toFixed(color.l, 3)\n\n        break\n      }\n      default: {\n        color = { ...currentValue.value } as HSVAColor\n        color.h = Math.round(color.h)\n        color.s = toFixed(color.s, 3)\n        color.v = toFixed(color.v, 3)\n      }\n    }\n\n    color.a = toFixed(currentAlpha.value, 3)\n  }\n\n  return color\n}\n\nfunction handleClickOutside() {\n  if (!editing.value) {\n    emitEvent(props.onClickOutside)\n\n    if (props.outsideClose && currentVisible.value) {\n      setVisible(false)\n      emitEvent(props.onOutsideClose)\n    }\n  }\n}\n\nfunction toggleVisible() {\n  if (props.disabled || readonly.value) return\n\n  setVisible(!currentVisible.value)\n}\n\nfunction handleClear() {\n  if (props.disabled || readonly.value) return\n\n  if (props.clearable) {\n    setVisible(false)\n    emit('update:value', '')\n    emitEvent(props.onChange, '')\n\n    nextTick(() => {\n      parseValue(null)\n      clearField()\n      emitEvent(props.onClear)\n    })\n  }\n}\n\nfunction handleConfirm() {\n  if (props.disabled || readonly.value) return\n\n  lastValue.value = { ...currentValue.value, a: currentAlpha.value, format: 'hsva' }\n  isEmpty.value = false\n  setVisible(false)\n  handleChange()\n}\n\nfunction handleChange() {\n  const color = formattedColor.value\n\n  emit('update:value', color)\n  setFieldValue(color)\n  emitEvent(props.onChange, color)\n  validateField()\n}\n\nfunction handlePaletteChange({ s, v }: HSVColor) {\n  currentValue.value.s = s\n  currentValue.value.v = v\n}\n\nfunction handleHueChange(hue: number) {\n  currentValue.value.h = hue\n}\n\nfunction handleAlphaChange(alpha: number) {\n  currentAlpha.value = alpha\n}\n\nfunction handleInputColor(value: string) {\n  const { r, g, b, a } = parseColorToRgba(value)\n\n  currentValue.value = rgbToHsv(r, g, b)\n  currentAlpha.value = a\n}\n\nfunction handleShortcutClick(color: string) {\n  const { r, g, b, a } = parseColorToRgba(color)\n\n  currentValue.value = rgbToHsv(r, g, b)\n  currentAlpha.value = a\n\n  emitEvent(props.onShortcut, formattedColor.value)\n}\n\nfunction toggleEditing(able: boolean) {\n  if (!able) {\n    setTimeout(() => {\n      editing.value = false\n    }, 0)\n  } else {\n    editing.value = true\n  }\n}\n\nfunction handleTabDown(event: KeyboardEvent) {\n  if (isClient && currentVisible.value) {\n    const activeEl = document && document.activeElement\n\n    if (!activeEl) return\n\n    event.preventDefault()\n\n    const shift = event.shiftKey\n    const elList = Array.from(unitList.value)\n    const index = elList.findIndex(unit => {\n      const el = isElement(unit) ? unit : unit.$el\n\n      return el === activeEl || el.contains(activeEl)\n    })\n\n    let maybeEl: any\n\n    if (!~index) {\n      maybeEl = shift ? getLast(elList) : elList[0]\n    } else if (shift ? !index : index === elList.length - 1) {\n      maybeEl = reference.value\n    } else {\n      maybeEl = elList[index + (shift ? -1 : 1)]\n    }\n\n    if (maybeEl) {\n      if (typeof maybeEl.focus === 'function') {\n        maybeEl.focus()\n      } else {\n        maybeEl.$el?.focus()\n      }\n    }\n  }\n}\n\nfunction handleShortcutsFocus() {\n  shortcutHitting.value = 0\n  shortcutsFocused.value = true\n}\n\nfunction handleShortcutsKeydown(event: KeyboardEvent) {\n  const key = event.code || event.key\n  const shortcutCount = shortcutList.value.length\n\n  switch (key) {\n    case 'ArrowUp':\n    case 'ArrowLeft': {\n      shortcutHitting.value--\n      break\n    }\n    case 'ArrowDown':\n    case 'ArrowRight': {\n      shortcutHitting.value++\n      break\n    }\n    case 'Enter':\n    case 'Space':\n    case ' ': {\n      const color = shortcutList.value[shortcutHitting.value]\n\n      color && handleShortcutClick(color)\n      break\n    }\n  }\n\n  shortcutHitting.value = (shortcutHitting.value + shortcutCount) % shortcutCount\n}\n\nfunction handleSpaceDown(event: KeyboardEvent) {\n  if (props.disabled) {\n    setVisible(false)\n  } else {\n    event.preventDefault()\n\n    if (currentVisible.value) {\n      handleConfirm()\n      reference.value?.focus()\n    } else {\n      setVisible(true)\n    }\n  }\n}\n\nfunction handleEscDown() {\n  setVisible(false)\n  reference.value?.focus()\n}\n\nfunction focus(options?: FocusOptions) {\n  reference.value?.focus(options)\n}\n\nfunction blur() {\n  reference.value?.blur()\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"group\"\n    :aria-disabled=\"toAttrValue(props.disabled)\"\n    :aria-expanded=\"toAttrValue(currentVisible)\"\n    aria-haspopup=\"listbox\"\n    :aria-labelledby=\"labelId\"\n    @click=\"toggleVisible\"\n    @keydown.tab.stop=\"handleTabDown\"\n    @keydown.space=\"handleSpaceDown\"\n    @keydown.escape=\"handleEscDown\"\n  >\n    <div ref=\"reference\" :class=\"selectorClass\" tabindex=\"0\">\n      <slot\n        name=\"control\"\n        :color=\"rgb\"\n        :alpha=\"currentAlpha\"\n        :empty=\"isEmpty\"\n      >\n        <Renderer\n          :renderer=\"props.slots.control\"\n          :data=\"{ color: rgb, alpha: currentAlpha, empty: isEmpty }\"\n        >\n          <div\n            v-if=\"hasPrefix\"\n            :class=\"[nh.be('icon'), nh.be('prefix')]\"\n            :style=\"{ color: props.prefixColor }\"\n          >\n            <slot name=\"prefix\">\n              <Renderer :renderer=\"props.slots.prefix\">\n                <Icon :icon=\"props.prefix\"></Icon>\n              </Renderer>\n            </slot>\n          </div>\n          <div :class=\"nh.be('control')\">\n            <div :class=\"[nh.be('marker'), showLabel && nh.bem('marker', 'with-label')]\">\n              <Icon v-if=\"!currentVisible && isEmpty\" v-bind=\"icons.close\"></Icon>\n              <div\n                v-else\n                :style=\"{\n                  width: '100%',\n                  height: '100%',\n                  backgroundColor: `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${\n                    currentVisible ? currentAlpha : lastValue.a\n                  })`\n                }\"\n              ></div>\n            </div>\n            <div v-if=\"showLabel\" :class=\"nh.be('label')\">\n              <slot\n                name=\"label\"\n                :color=\"rgb\"\n                :alpha=\"currentAlpha\"\n                :empty=\"isEmpty\"\n                :label=\"labelColor\"\n              >\n                <Renderer\n                  :renderer=\"props.slots.label\"\n                  :data=\"{ color: rgb, alpha: currentAlpha, empty: isEmpty, label: labelColor }\"\n                >\n                  {{ labelColor }}\n                </Renderer>\n              </slot>\n            </div>\n          </div>\n          <div\n            v-if=\"!props.noSuffix\"\n            :class=\"[nh.be('icon'), nh.be('suffix')]\"\n            :style=\"{\n              color: props.suffixColor,\n              opacity: showClear || props.loading ? '0%' : ''\n            }\"\n          >\n            <slot name=\"suffix\">\n              <Renderer :renderer=\"props.slots.suffix\">\n                <Icon\n                  v-if=\"props.suffix\"\n                  :icon=\"props.suffix\"\n                  :class=\"{\n                    [nh.be('arrow')]: !props.staticSuffix\n                  }\"\n                ></Icon>\n                <Icon v-else v-bind=\"icons.angleDown\" :class=\"nh.be('arrow')\"></Icon>\n              </Renderer>\n            </slot>\n          </div>\n          <div\n            v-else-if=\"props.clearable || props.loading\"\n            :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n          ></div>\n          <Transition :name=\"nh.ns('fade')\" appear>\n            <button\n              v-if=\"showClear\"\n              :class=\"[nh.be('icon'), nh.be('clear')]\"\n              type=\"button\"\n              tabindex=\"-1\"\n              :aria-label=\"locale.ariaLabel.clear\"\n              @click.stop=\"handleClear\"\n            >\n              <Icon v-bind=\"icons.clear\"></Icon>\n            </button>\n            <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n              <Icon\n                v-bind=\"icons.loading\"\n                :effect=\"props.loadingEffect || icons.loading.effect\"\n                :icon=\"props.loadingIcon || icons.loading.icon\"\n              ></Icon>\n            </div>\n          </Transition>\n        </Renderer>\n      </slot>\n    </div>\n    <Popper\n      ref=\"popper\"\n      :class=\"[nh.be('popper'), nh.bs('vars')]\"\n      :visible=\"currentVisible\"\n      :to=\"transferTo\"\n      :transition=\"props.transitionName\"\n      :alive=\"props.popperAlive ?? !transferTo\"\n      @click.stop\n      @keydown.tab.stop=\"handleTabDown\"\n      @keydown.space=\"handleSpaceDown\"\n      @keydown.escape=\"handleEscDown\"\n    >\n      <div :class=\"nh.be('panel')\">\n        <div :class=\"nh.be('section')\">\n          <ColorPalette\n            ref=\"palette\"\n            :hue=\"currentValue.h\"\n            :saturation=\"currentValue.s\"\n            :value=\"currentValue.v\"\n            @edit-start=\"toggleEditing(true)\"\n            @edit-end=\"toggleEditing(false)\"\n            @change=\"handlePaletteChange\"\n          ></ColorPalette>\n          <ColorHue\n            ref=\"hue\"\n            :hue=\"currentValue.h\"\n            @edit-start=\"toggleEditing(true)\"\n            @edit-end=\"toggleEditing(false)\"\n            @change=\"handleHueChange\"\n          ></ColorHue>\n          <ColorAlpha\n            v-if=\"props.alpha\"\n            ref=\"alphaEl\"\n            :rgb=\"rgb\"\n            :alpha=\"currentAlpha\"\n            @edit-start=\"toggleEditing(true)\"\n            @edit-end=\"toggleEditing(false)\"\n            @change=\"handleAlphaChange\"\n          ></ColorAlpha>\n          <div\n            v-if=\"props.shortcut\"\n            ref=\"shortcutEl\"\n            :class=\"nh.be('shortcuts')\"\n            tabindex=\"-1\"\n            @focus=\"handleShortcutsFocus\"\n            @blur=\"shortcutsFocused = false\"\n            @keydown=\"handleShortcutsKeydown\"\n          >\n            <div\n              v-for=\"(item, index) in shortcutList\"\n              :key=\"index\"\n              :class=\"{\n                [nh.be('shortcut-item')]: true,\n                [nh.bem('shortcut-item', 'hitting')]: shortcutsFocused && shortcutHitting === index\n              }\"\n              :style=\"{ backgroundColor: item }\"\n              @click=\"handleShortcutClick(item)\"\n            ></div>\n          </div>\n        </div>\n        <div :class=\"nh.be('action')\">\n          <Input\n            v-if=\"!props.noInput\"\n            ref=\"input\"\n            inherit\n            :class=\"nh.be('input')\"\n            size=\"small\"\n            :value=\"hex.toUpperCase()\"\n            :respond=\"false\"\n            @change=\"handleInputColor\"\n          ></Input>\n          <Button\n            v-if=\"props.clearable\"\n            ref=\"cancel\"\n            inherit\n            text\n            size=\"small\"\n            @click=\"handleClear\"\n          >\n            {{ props.cancelText || locale.cancel }}\n          </Button>\n          <Button\n            ref=\"confirm\"\n            inherit\n            type=\"primary\"\n            size=\"small\"\n            @click=\"handleConfirm\"\n          >\n            {{ props.confirmText || locale.confirm }}\n          </Button>\n        </div>\n      </div>\n    </Popper>\n  </div>\n</template>\n","import { wrapProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconsOptions, LocaleOptions } from '@vexip-ui/config'\nimport type { PropsOptions } from '@/components/props'\n\nexport const configProviderProps = wrapProps({\n  props: {\n    type: Object as PropType<PropsOptions>,\n    default: () => ({})\n  },\n  locale: {\n    type: Object as PropType<LocaleOptions>,\n    default: () => ({})\n  },\n  icons: {\n    type: Object as PropType<IconsOptions>,\n    default: () => ({})\n  },\n  zIndex: {\n    type: Number,\n    default: null\n  },\n  theme: {\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    type: String as PropType<'base' | 'dark' | (string & {})>,\n    default: null\n  },\n  hoverDelay: {\n    type: Number,\n    default: null\n  }\n})\n\nexport type ConfigProviderProps = ExtractPropTypes<typeof configProviderProps>\n","import { defineComponent, renderSlot, toRefs } from 'vue'\n\nimport {\n  configHoverDelay,\n  configIcons,\n  configLocale,\n  configProps,\n  configZIndex,\n  useNameHelper\n} from '@vexip-ui/config'\nimport { configProviderProps } from './props'\n\nexport default defineComponent({\n  name: 'ConfigProvider',\n  props: configProviderProps,\n  setup(_props, { slots }) {\n    const { props, locale, icons, zIndex, theme, hoverDelay } = toRefs(_props)\n\n    const nh = useNameHelper('config-provider')\n\n    configProps(props)\n    configLocale(locale)\n    configIcons(icons)\n    configZIndex(zIndex)\n    configHoverDelay(hoverDelay)\n\n    return () => {\n      if (theme.value) {\n        return (\n          <section class={[nh.b(), nh.ns(`theme-vars-${theme.value}`)]}>\n            {renderSlot(slots, 'default')}\n          </section>\n        )\n      }\n\n      return renderSlot(slots, 'default')\n    }\n  }\n})\n","import { booleanProp, booleanStringProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const maskerProps = buildProps({\n  active: booleanProp,\n  closable: booleanProp,\n  inner: booleanProp,\n  maskTransition: String,\n  transitionName: String,\n  disabled: booleanProp,\n  onBeforeClose: Function as PropType<() => any | Promise<any>>,\n  transfer: booleanStringProp,\n  autoRemove: booleanProp,\n  permeable: booleanProp,\n  disableEsc: booleanProp,\n  onToggle: eventProp<(active: boolean) => void>(),\n  onClose: eventProp(),\n  onHide: eventProp(),\n  onShow: eventProp(),\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>(),\n  onMaskClick: eventProp<(event: MouseEvent) => void>()\n})\n\nexport type MaskerProps = ExtractPropTypes<typeof maskerProps>\nexport type MaskerCProps = ConfigurableProps<MaskerProps, never, 'onBeforeClose'>\n","<script setup lang=\"ts\">\nimport { Portal } from '@/components/portal'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, nextTick, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\nimport { getLast, isPromise, queryTabables } from '@vexip-ui/utils'\nimport { maskerProps } from './props'\n\ndefineOptions({ name: 'Masker' })\n\nconst nh = useNameHelper('masker')\nconst _props = defineProps(maskerProps)\nconst props = useProps('masker', _props, {\n  active: {\n    default: false,\n    static: true\n  },\n  closable: false,\n  inner: false,\n  maskTransition: () => nh.ns('fade'),\n  transitionName: () => nh.ns('fade'),\n  disabled: false,\n  onBeforeClose: {\n    default: null,\n    isFunc: true\n  },\n  transfer: false,\n  autoRemove: false,\n  permeable: false,\n  disableEsc: false\n})\n\nconst emit = defineEmits(['update:active'])\n\nconst slots = defineSlots<{\n  mask?: () => any,\n  default?: (params: { show: boolean }) => any\n}>()\n\nconst getIndex = useZIndex()\n\nconst currentActive = ref(props.active)\n// If initial active, we should set a valid index as initial value\nconst zIndex = ref(props.active ? getIndex() : 0)\nconst wrapperShow = ref(props.active)\n\nconst wrapper = ref<HTMLElement>()\nconst topTrap = ref<HTMLElement>()\nconst bottomTrap = ref<HTMLElement>()\n\nlet maskShow = false\nlet contentShow = false\nlet stable = false\nlet prevFocusedEl: HTMLElement | null = null\n\nconst transferTo = computed(() => {\n  return props.inner\n    ? ''\n    : typeof props.transfer === 'boolean'\n      ? props.transfer\n        ? 'body'\n        : ''\n      : props.transfer\n})\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: transferTo.value !== 'body' && props.inherit,\n      [nh.bm('inner')]: props.inner,\n      [nh.bm('disabled')]: props.disabled\n    }\n  ]\n})\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n\n    if (value) {\n      wrapperShow.value = value\n    }\n  }\n)\nwatch(currentActive, value => {\n  if (!value) {\n    stable = false\n\n    if (prevFocusedEl) {\n      prevFocusedEl.focus()\n      prevFocusedEl = null\n    }\n  } else {\n    prevFocusedEl = document.activeElement as HTMLElement\n    zIndex.value = getIndex()\n  }\n\n  if ((!props.maskTransition || props.disabled) && !props.transitionName) {\n    value ? afterOpen() : afterClose()\n  }\n})\nwatch(\n  [() => props.permeable, wrapper],\n  () => {\n    if (wrapper.value) {\n      wrapper.value.removeEventListener('wheel', disableWheel)\n\n      if (!props.permeable) {\n        wrapper.value.addEventListener('wheel', disableWheel)\n      }\n    }\n  },\n  { immediate: true, flush: 'post' }\n)\n\ndefineExpose({\n  currentActive,\n  zIndex,\n  wrapperShow,\n  wrapper,\n  topTrap,\n  bottomTrap\n})\n\nfunction disableWheel(event: WheelEvent) {\n  event.preventDefault()\n  event.stopPropagation()\n}\n\nfunction toggleActive(active: boolean) {\n  if (currentActive.value === active) return\n\n  currentActive.value = active\n\n  emit('update:active', active)\n  emitEvent(props.onToggle, active)\n}\n\nasync function handleClose() {\n  if (!props.closable) return\n\n  let result: unknown = true\n\n  if (typeof props.onBeforeClose === 'function') {\n    result = props.onBeforeClose()\n\n    if (isPromise(result)) {\n      result = await result\n    }\n  }\n\n  if (result !== false) {\n    nextTick(() => {\n      toggleActive(false)\n      emitEvent(props.onClose)\n    })\n  }\n}\n\nfunction afterOpen() {\n  if (!currentActive.value) return\n\n  const activeEl = document && document.activeElement\n\n  if (!activeEl || !wrapper.value || !wrapper.value.contains(activeEl)) {\n    topTrap.value?.focus()\n  }\n\n  nextTick(() => {\n    stable = true\n    emitEvent(props.onShow)\n  })\n}\n\nfunction afterClose() {\n  if (currentActive.value) return\n\n  nextTick(() => {\n    wrapperShow.value = false\n    emitEvent(props.onHide)\n  })\n}\n\nfunction afterMaskOpen() {\n  if (!currentActive.value) return\n\n  maskShow = true\n  ;(!props.transitionName || !slots.default || contentShow) && afterOpen()\n}\n\nfunction afterMaskClose() {\n  if (currentActive.value) return\n\n  maskShow = false\n  ;(!props.transitionName || !slots.default || !contentShow) && afterClose()\n}\n\nfunction afterContentOpen() {\n  if (!currentActive.value) return\n\n  contentShow = true\n  ;(!props.maskTransition || props.disabled || maskShow) && afterOpen()\n}\n\nfunction afterContentClose() {\n  if (currentActive.value) return\n\n  contentShow = false\n  ;(!props.maskTransition || props.disabled || !maskShow) && afterClose()\n}\n\nfunction handleMaskClick(event: MouseEvent) {\n  emitEvent(props.onMaskClick, event)\n  handleClose()\n}\n\nfunction handleFocusIn(event: FocusEvent) {\n  const target = event.target as HTMLElement\n\n  if (!stable || !wrapper.value || !target || !topTrap.value || !bottomTrap.value) {\n    return\n  }\n\n  const tabables = queryTabables(wrapper.value)\n\n  if (!tabables.length) {\n    return\n  }\n\n  if (topTrap.value === target) {\n    getLast(tabables)!.focus()\n  } else if (bottomTrap.value === target) {\n    tabables[0].focus()\n  }\n}\n\nfunction handleResize(entry: ResizeObserverEntry) {\n  emitEvent(props.onResize, entry)\n}\n\nfunction handleEscape(event: KeyboardEvent) {\n  if (!props.disableEsc) {\n    event.preventDefault()\n    handleClose()\n  }\n}\n</script>\n\n<template>\n  <Portal v-if=\"!props.autoRemove || wrapperShow\" :to=\"transferTo\">\n    <div\n      v-bind=\"$attrs\"\n      ref=\"wrapper\"\n      :class=\"[className, $attrs.class]\"\n      tabindex=\"-1\"\n      :style=\"{\n        zIndex,\n        ...($attrs.style || {}),\n        pointerEvents: wrapperShow ? undefined : 'none',\n        visibility: wrapperShow ? undefined : 'hidden'\n      }\"\n      @focusin=\"handleFocusIn\"\n      @keydown.escape=\"handleEscape\"\n    >\n      <ResizeObserver @resize=\"handleResize\">\n        <Transition\n          v-if=\"!props.disabled\"\n          appear\n          :name=\"props.maskTransition\"\n          @after-enter=\"afterMaskOpen\"\n          @after-leave=\"afterMaskClose\"\n        >\n          <div v-show=\"currentActive\" :class=\"nh.be('mask')\" @click=\"handleMaskClick\">\n            <slot name=\"mask\">\n              <div :class=\"nh.be('mask-inner')\"></div>\n            </slot>\n          </div>\n        </Transition>\n        <div\n          v-else\n          :class=\"nh.be('placeholder')\"\n          role=\"none\"\n          aria-hidden\n        ></div>\n      </ResizeObserver>\n      <div\n        ref=\"topTrap\"\n        tabindex=\"0\"\n        role=\"none\"\n        style=\"width: 0; height: 0; overflow: hidden; outline: none\"\n      ></div>\n      <div :class=\"nh.be('content')\" @wheel.stop.prevent>\n        <Transition\n          v-if=\"props.transitionName\"\n          appear\n          :name=\"props.transitionName\"\n          @after-enter=\"afterContentOpen\"\n          @after-leave=\"afterContentClose\"\n        >\n          <slot :show=\"currentActive\"></slot>\n        </Transition>\n        <slot v-else :show=\"currentActive\"></slot>\n      </div>\n      <div\n        ref=\"bottomTrap\"\n        tabindex=\"0\"\n        role=\"none\"\n        style=\"width: 0; height: 0; overflow: hidden; outline: none\"\n      ></div>\n    </div>\n  </Portal>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  localeProp,\n  sizeProp,\n  styleProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ButtonType } from '@/components/button'\nimport type { ModalSlots, PositionPayload, SizePayload } from './symbol'\n\nconst positionType = [Number, String]\n\nexport const positionValidator = (value: string | number) => {\n  return value === 'auto' || !Number.isNaN(parseFloat(value as string))\n}\nexport const positionProp = {\n  default: 'auto' as const,\n  validator: positionValidator\n}\n\nexport const modalProps = buildProps({\n  locale: localeProp('modal'),\n  transfer: booleanStringProp,\n  active: booleanProp,\n  width: positionType,\n  height: positionType,\n  top: positionType,\n  left: positionType,\n  right: positionType,\n  bottom: positionType,\n  title: String,\n  closable: booleanProp,\n  inner: booleanProp,\n  maskClose: booleanProp,\n  modalClass: classProp,\n  modalStyle: styleProp,\n  noFooter: booleanProp,\n  hideMask: booleanProp,\n  draggable: booleanProp,\n  resizable: booleanProp,\n  onBeforeClose: Function as PropType<(isConfirm: boolean) => any>,\n  loading: booleanProp,\n  minWidth: Number,\n  minHeight: Number,\n  transitionName: String,\n  confirmText: String,\n  cancelText: String,\n  actionSize: sizeProp,\n  autoRemove: booleanProp,\n  confirmType: String as PropType<ButtonType>,\n  cancelType: String as PropType<ButtonType>,\n  undivided: booleanProp,\n  xOffset: positionType,\n  yOffset: positionType,\n  disableEsc: booleanProp,\n  slots: Object as PropType<ModalSlots>,\n  onToggle: eventProp<(active: boolean) => void>(),\n  onConfirm: eventProp(),\n  onCancel: eventProp(),\n  onClose: eventProp(),\n  onShow: eventProp(),\n  onHide: eventProp(),\n  onDragStart: eventProp<(position: PositionPayload) => void>(),\n  onDragMove: eventProp<(position: PositionPayload) => void>(),\n  onDragEnd: eventProp<(position: PositionPayload) => void>(),\n  onResizeStart: eventProp<(size: SizePayload) => void>(),\n  onResizeMove: eventProp<(size: SizePayload) => void>(),\n  onResizeEnd: eventProp<(size: SizePayload) => void>()\n})\n\nexport type ModalProps = ExtractPropTypes<typeof modalProps>\nexport type ModalCProps = ConfigurableProps<ModalProps, never, 'onBeforeClose'>\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Masker } from '@/components/masker'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, nextTick, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\n\nimport {\n  createSizeProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { useMoving } from '@vexip-ui/hooks'\nimport { getGlobalCount, isNull, isPromise, isValidNumber, toNumber } from '@vexip-ui/utils'\nimport { modalProps, positionProp } from './props'\n\nimport type { MaskerExposed } from '@/components/masker'\nimport type { ModalSlots } from './symbol'\n\ndefineOptions({ name: 'Modal' })\n\nconst nh = useNameHelper('modal')\n\nconst _props = defineProps(modalProps)\nconst props = useProps('modal', _props, {\n  locale: null,\n  transfer: false,\n  active: {\n    default: false,\n    static: true\n  },\n  width: positionProp,\n  height: positionProp,\n  top: positionProp,\n  left: positionProp,\n  right: positionProp,\n  bottom: positionProp,\n  title: '',\n  closable: true,\n  inner: false,\n  maskClose: true,\n  modalClass: null,\n  modalStyle: null,\n  noFooter: false,\n  hideMask: false,\n  draggable: false,\n  resizable: false,\n  onBeforeClose: {\n    default: null,\n    isFunc: true\n  },\n  loading: false,\n  minWidth: 150,\n  minHeight: 120,\n  transitionName: () => nh.ns('ease'),\n  confirmText: null,\n  cancelText: null,\n  autoRemove: false,\n  confirmType: 'primary',\n  cancelType: 'default',\n  actionSize: createSizeProp('small'),\n  undivided: false,\n  xOffset: 0,\n  yOffset: 0,\n  disableEsc: false,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:active'])\n\nconst slots = defineSlots<ModalSlots>()\n\nconst locale = useLocale('modal', toRef(props, 'locale'))\nconst icons = useIcons()\n\nfunction isSpecified(value?: string | number) {\n  return !isNull(value) && value !== 'auto'\n}\n\nfunction normalizeStyle(value?: string | number) {\n  return isValidNumber(value, true)\n    ? `${toNumber(value)}px`\n    : isNull(value)\n      ? 'auto'\n      : String(value)\n}\n\nconst currentActive = ref(props.active)\nconst rect = reactive({\n  top: normalizeStyle(props.top),\n  right: normalizeStyle(props.right),\n  bottom: normalizeStyle(props.bottom),\n  left: normalizeStyle(props.left),\n  width: normalizeStyle(props.width),\n  height: normalizeStyle(props.height)\n})\nconst maskerRect = reactive({ width: 0, height: 0 })\nconst modalRect = reactive({ width: 0, height: 0 })\n\nconst idIndex = `${getGlobalCount()}`\nconst transformed = ref(false)\n\nconst masker = ref<MaskerExposed>()\nconst wrapper = ref<HTMLElement>()\nconst footer = ref<HTMLElement>()\n\nconst uselessTop = computed(() => {\n  return props.top === 'auto' && isSpecified(props.bottom) && isSpecified(props.height)\n})\nconst uselessLeft = computed(() => {\n  return props.left === 'auto' && isSpecified(props.right) && isSpecified(props.width)\n})\n\nconst { target: header, moving: dragging } = useMoving({\n  capture: false,\n  onStart: (state, event) => {\n    if (!wrapper.value || !props.draggable || event.button > 0) {\n      return false\n    }\n\n    transferRect(false)\n\n    transformed.value = true\n    state.xStart = parseFloat(rect.left)\n    state.yStart = parseFloat(rect.top)\n\n    emitEvent(props.onDragStart, {\n      top: state.yStart,\n      left: state.xStart\n    })\n  },\n  onMove: state => {\n    rect.left = `${state.xEnd}px`\n    rect.top = `${state.yEnd}px`\n\n    emitEvent(props.onDragMove, {\n      top: state.yEnd,\n      left: state.xEnd\n    })\n  },\n  onEnd: state => {\n    emitEvent(props.onDragEnd, {\n      top: state.yEnd,\n      left: state.xEnd\n    })\n  }\n})\n\nconst { target: resizer, moving: resizing } = useMoving({\n  onStart: (state, event) => {\n    if (!wrapper.value || !props.resizable || event.button > 0) {\n      return false\n    }\n\n    transferRect()\n\n    let minHeight = 32\n\n    if (header.value) {\n      minHeight += header.value.offsetHeight\n    }\n\n    if (footer.value) {\n      minHeight += footer.value.offsetHeight\n    }\n\n    transformed.value = true\n    state.xStart = parseFloat(rect.width)\n    state.yStart = parseFloat(rect.height)\n    state.minHeight = Math.max(minHeight, props.minHeight)\n\n    emitEvent(props.onResizeStart, {\n      width: state.xStart,\n      height: state.yStart\n    })\n  },\n  onMove: state => {\n    const width = Math.max(props.minWidth, state.xEnd, 32)\n    const height = Math.max(state.minHeight as number, state.yEnd)\n\n    rect.width = `${width}px`\n    rect.height = `${height}px`\n\n    emitEvent(props.onResizeMove, { width, height })\n  },\n  onEnd: state => {\n    const width = Math.max(props.minWidth, state.xEnd, 32)\n    const height = Math.max(state.minHeight as number, state.yEnd)\n\n    emitEvent(props.onResizeEnd, { width, height })\n  }\n})\n\n// const shouldParse = computed(() => !props.draggable && !props.resizable)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('inner')]: props.inner,\n      [nh.bm('draggable')]: props.draggable,\n      [nh.bm('resizable')]: props.resizable,\n      [nh.bm('undivided')]: props.undivided\n    }\n  ]\n})\nconst wrapperClass = computed(() => {\n  return [\n    nh.be('wrapper'),\n    {\n      [nh.bem('wrapper', 'closable')]: props.closable,\n      [nh.bem('wrapper', 'dragging')]: dragging.value,\n      [nh.bem('wrapper', 'resizing')]: resizing.value\n    },\n    props.modalClass\n  ]\n})\nconst transform = computed(() => {\n  const transforms: string[] = []\n\n  if (props.xOffset) {\n    transforms.push(`translateX(${normalizeStyle(props.xOffset)})`)\n  }\n\n  if (props.yOffset) {\n    transforms.push(`translateY(${normalizeStyle(props.yOffset)})`)\n  }\n\n  if (transforms.length) {\n    transforms.push('translateZ(0)')\n  }\n\n  return transforms.length ? transforms.join(' ') : undefined\n})\nconst wrapperStyle = computed(() => {\n  return [\n    props.modalStyle,\n    {\n      ...rect,\n      height: rect.height !== 'auto' ? rect.height : undefined,\n      transform: transform.value\n    }\n  ]\n})\nconst transformOrigin = computed(() => {\n  const origin = { x: '50%', y: '50%' }\n\n  if (transformed.value) {\n    origin.x = `${parseFloat(rect.left) + 0.5 * modalRect.width}px`\n    origin.y = `${parseFloat(rect.top) + 0.5 * modalRect.height}px`\n  } else {\n    if (uselessTop.value) {\n      origin.y = `calc(100% - ${parseFloat(rect.bottom) + 0.5 * parseFloat(rect.height)}px)`\n    } else if (isSpecified(props.top)) {\n      const top = parseFloat(rect.top)\n\n      if (isSpecified(props.height)) {\n        origin.y = `${top + 0.5 * parseFloat(rect.height)}px`\n      } else if (isSpecified(props.bottom)) {\n        const bottom = parseFloat(rect.bottom)\n        const height = maskerRect.height - top - bottom\n\n        origin.y = `${top + 0.5 * height}px`\n      } else {\n        origin.y = `${parseFloat(rect.top) + 0.5 * modalRect.height}px`\n      }\n    }\n\n    if (uselessLeft.value) {\n      origin.x = `calc(100% - ${parseFloat(rect.right) + 0.5 * parseFloat(rect.width)}px)`\n    } else if (isSpecified(props.left)) {\n      const left = parseFloat(rect.left)\n\n      if (isSpecified(props.width)) {\n        origin.x = `${left + 0.5 * parseFloat(rect.width)}px`\n      } else if (isSpecified(props.right)) {\n        const right = parseFloat(rect.right)\n        const width = maskerRect.width - left - right\n\n        origin.x = `${left + 0.5 * width}px`\n      } else {\n        origin.x = `${parseFloat(rect.left) + 0.5 * modalRect.width}px`\n      }\n    }\n  }\n\n  return `${origin.x} ${origin.y}`\n})\nconst hasHeader = computed(() => {\n  return !!(slots.header || slots.title || props.title || props.slots.header || props.slots.title)\n})\nconst titleId = computed(() => `${nh.bs(idIndex)}__title`)\nconst bodyId = computed(() => `${nh.bs(idIndex)}__body`)\n\nfor (const style of Object.keys(rect) as Array<keyof typeof rect>) {\n  watch(\n    () => props[style],\n    value => {\n      rect[style] = normalizeStyle(value)\n    }\n  )\n}\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n  }\n)\nwatch(currentActive, value => {\n  props.hideMask && value && handleResize()\n})\nwatch([() => props.top, () => props.bottom, () => props.height], () => {\n  currentActive.value && nextTick(computeTop)\n})\nwatch([() => props.left, () => props.right, () => props.width], () => {\n  currentActive.value && nextTick(computeLeft)\n})\n\nconst handleResize = () => {\n  if (currentActive.value && !transformed.value) {\n    nextTick(() => {\n      computeTop()\n      computeLeft()\n    })\n  }\n\n  if (masker.value?.wrapper) {\n    maskerRect.width = masker.value.wrapper.offsetWidth\n    maskerRect.height = masker.value.wrapper.offsetHeight\n  }\n}\n\ndefineExpose({\n  dragging,\n  resizing,\n  titleId,\n  bodyId,\n  wrapper,\n  header,\n  footer,\n  resizer,\n  handleResize,\n  handleConfirm,\n  handleCancel,\n  handleClose\n})\n\nconst slotParams = shallowReadonly(\n  reactive({\n    dragging,\n    resizing,\n    handleResize,\n    handleConfirm,\n    handleCancel,\n    handleClose\n  })\n)\n\nfunction setActive(active: boolean) {\n  if (currentActive.value === active) return\n\n  currentActive.value = active\n\n  emit('update:active', active)\n  emitEvent(props.onToggle, active)\n}\n\nfunction findPositionalParent() {\n  if (!wrapper.value) return document.body\n\n  let parentElement = wrapper.value.parentElement as HTMLElement\n\n  while (parentElement && parentElement !== document.body) {\n    if (getComputedStyle(parentElement).position !== 'static') {\n      return parentElement\n    }\n\n    parentElement = parentElement.parentElement as HTMLElement\n  }\n\n  return parentElement\n}\n\nfunction computeTop() {\n  if (!wrapper.value || props.top !== 'auto' || uselessTop.value) return\n\n  const currentHeight = wrapper.value.offsetHeight\n\n  if (props.inner) {\n    rect.top = `${(findPositionalParent().offsetHeight - currentHeight) / 2}px`\n  } else {\n    rect.top = `${(window.innerHeight - currentHeight) / 2 - 20}px`\n  }\n}\n\nfunction computeLeft() {\n  if (!wrapper.value || props.left !== 'auto' || uselessLeft.value) return\n\n  const currentWidth = wrapper.value.offsetWidth\n\n  if (props.inner) {\n    rect.left = `${(findPositionalParent().offsetWidth - currentWidth) / 2}px`\n  } else {\n    rect.left = `${(window.innerWidth - currentWidth) / 2}px`\n  }\n}\n\nfunction transferRect(withSize = true) {\n  if (!wrapper.value) return\n\n  const { offsetWidth, offsetHeight, offsetTop, offsetLeft } = wrapper.value\n\n  // If user is using top/bottom or right/left to specify size,\n  // here need to force transfer to use offset size\n  if (\n    !withSize &&\n    ((!uselessTop.value && props.bottom !== 'auto') ||\n      (!uselessLeft.value && props.right !== 'auto'))\n  ) {\n    withSize = true\n  }\n\n  Object.assign(\n    rect,\n    {\n      top: `${offsetTop}px`,\n      right: 'auto',\n      bottom: 'auto',\n      left: `${offsetLeft}px`\n    },\n    withSize\n      ? {\n          width: `${offsetWidth}px`,\n          height: `${offsetHeight}px`\n        }\n      : {}\n  )\n}\n\nfunction handleConfirm() {\n  handleClose(true)\n  emitEvent(props.onConfirm)\n}\n\nfunction handleCancel() {\n  handleClose(false)\n  emitEvent(props.onCancel)\n}\n\nasync function handleClose(isConfirm = false) {\n  let result: unknown = true\n\n  if (typeof props.onBeforeClose === 'function') {\n    result = props.onBeforeClose(isConfirm)\n\n    if (isPromise(result)) {\n      result = await result\n    }\n  }\n\n  if (result !== false) {\n    await nextTick(() => {\n      setActive(false)\n      emitEvent(props.onClose)\n    })\n  }\n\n  return result\n}\n\nfunction handleShow() {\n  emitEvent(props.onShow)\n}\n\nfunction handleHide() {\n  emitEvent(props.onHide)\n}\n\nfunction handleMaskClose() {\n  if (props.maskClose) {\n    return handleClose(false)\n  }\n}\n\nfunction handleModalResize(entry: ResizeObserverEntry) {\n  const box = entry.borderBoxSize?.[0]\n\n  if (box) {\n    modalRect.width = box.inlineSize\n    modalRect.height = box.blockSize\n  } else {\n    modalRect.width = entry.contentRect.width\n    modalRect.height = entry.contentRect.height\n  }\n}\n</script>\n\n<template>\n  <Masker\n    ref=\"masker\"\n    v-model:active=\"currentActive\"\n    :inherit=\"props.inherit\"\n    :class=\"className\"\n    :inner=\"props.inner\"\n    :transition-name=\"props.transitionName\"\n    :closable=\"props.maskClose\"\n    :disabled=\"props.hideMask\"\n    :on-before-close=\"handleMaskClose\"\n    :transfer=\"props.transfer\"\n    :auto-remove=\"props.autoRemove\"\n    :disable-esc=\"props.disableEsc\"\n    @show=\"handleShow\"\n    @hide=\"handleHide\"\n    @resize=\"handleResize\"\n  >\n    <template #default=\"{ show }\">\n      <section v-show=\"show\" :class=\"nh.be('transform')\" :style=\"{ transformOrigin }\">\n        <ResizeObserver @resize=\"handleModalResize\">\n          <div\n            ref=\"wrapper\"\n            :class=\"wrapperClass\"\n            role=\"dialog\"\n            :style=\"wrapperStyle\"\n            :aria-modal=\"show ? 'true' : undefined\"\n            :aria-labelledby=\"titleId\"\n            :aria-describedby=\"bodyId\"\n          >\n            <div v-if=\"hasHeader\" ref=\"header\" :class=\"nh.be('header')\">\n              <slot name=\"header\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.header\" :data=\"slotParams\">\n                  <div :id=\"titleId\" :class=\"nh.be('title')\">\n                    <slot name=\"title\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.title\" :data=\"slotParams\">\n                        {{ props.title }}\n                      </Renderer>\n                    </slot>\n                  </div>\n                  <button\n                    v-if=\"props.closable\"\n                    type=\"button\"\n                    :class=\"nh.be('close')\"\n                    @pointerdown.stop\n                    @mousedown.stop\n                    @touchstart.stop\n                    @click=\"handleClose(false)\"\n                  >\n                    <slot name=\"close\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.close\" :data=\"slotParams\">\n                        <Icon\n                          v-bind=\"icons.close\"\n                          :scale=\"+(icons.close.scale || 1) * 1.2\"\n                          label=\"close\"\n                        ></Icon>\n                      </Renderer>\n                    </slot>\n                  </button>\n                </Renderer>\n              </slot>\n            </div>\n            <div\n              :id=\"bodyId\"\n              :class=\"nh.be('content')\"\n              :style=\"{\n                overflow: resizing ? 'hidden' : undefined\n              }\"\n            >\n              <slot v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.default\" :data=\"slotParams\"></Renderer>\n              </slot>\n            </div>\n            <div v-if=\"!props.noFooter\" ref=\"footer\" :class=\"nh.be('footer')\">\n              <slot name=\"footer\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.footer\" :data=\"slotParams\">\n                  <Button\n                    :class=\"[nh.be('button'), nh.bem('button', 'cancel')]\"\n                    inherit\n                    text\n                    :type=\"props.cancelType\"\n                    :size=\"props.actionSize\"\n                    @click=\"handleCancel\"\n                  >\n                    {{ props.cancelText || locale.cancel }}\n                  </Button>\n                  <Button\n                    :class=\"[nh.be('button'), nh.bem('button', 'confirm')]\"\n                    inherit\n                    :type=\"props.confirmType\"\n                    :size=\"props.actionSize\"\n                    :loading=\"props.loading\"\n                    @click=\"handleConfirm\"\n                  >\n                    {{ props.confirmText || locale.confirm }}\n                  </Button>\n                </Renderer>\n              </slot>\n            </div>\n            <div v-if=\"props.resizable\" ref=\"resizer\" :class=\"nh.be('resizer')\"></div>\n          </div>\n        </ResizeObserver>\n      </section>\n    </template>\n  </Masker>\n</template>\n","import { createApp, createVNode, getCurrentInstance, h, nextTick, ref, render, unref } from 'vue'\n\nimport Component from './modal.vue'\nimport { isClient, noop } from '@vexip-ui/utils'\n\nimport type { App, AppContext, ComponentPublicInstance, MaybeRef } from 'vue'\nimport type { ModalProps } from './props'\nimport type { ModalCommonSlot } from './symbol'\n\nexport type ModalOptions = Omit<ModalProps, 'active' | 'transfer' | 'loading' | 'autoRemove'> & {\n  /**\n   * Specify the app context, ensue the modal using same context\n   */\n  appContext: AppContext,\n  /**\n   * Specify whether the modal is loading\n   */\n  loading: MaybeRef<boolean>,\n  /**\n   * Another way to use default slot\n   */\n  renderer: ModalCommonSlot,\n  /**\n   * Another way to use header slot\n   */\n  headerRenderer: ModalCommonSlot,\n  /**\n   * Another way to use title slot\n   */\n  titleRenderer: ModalCommonSlot,\n  /**\n   * Another way to use close slot\n   */\n  closeRenderer: ModalCommonSlot,\n  /**\n   * Another way to use footer slot\n   */\n  footerRenderer: ModalCommonSlot\n}\n\nexport function useModal(options: Partial<ModalOptions> = {}): () => Promise<void> {\n  if (!isClient) return noop\n\n  const {\n    appContext,\n    loading,\n    renderer,\n    headerRenderer,\n    titleRenderer,\n    closeRenderer,\n    footerRenderer,\n    onHide,\n    ...props\n  } = options\n\n  const active = ref(false)\n\n  let instance = getCurrentInstance()\n\n  let container: HTMLElement | undefined = document.createElement('div')\n  let app: App | undefined\n\n  if (appContext || instance) {\n    const vnode = createVNode(createModal, null, null)\n\n    vnode.appContext = appContext || instance!.appContext\n    render(vnode, container)\n  } else {\n    app = createApp(createModal)\n    app.mount(container)\n  }\n\n  document.body.appendChild(container)\n\n  // Ensure Modal show transition is effective\n  nextTick(() => {\n    active.value = true\n  })\n\n  function createModal() {\n    return h(\n      Component,\n      {\n        ...props,\n        active: active.value,\n        transfer: false,\n        autoRemove: false,\n        loading: unref(loading),\n        onHide: Array.isArray(onHide) ? [...onHide, destroy] : onHide ? [onHide, destroy] : destroy\n      },\n      {\n        header: headerRenderer,\n        title: titleRenderer,\n        close: closeRenderer,\n        default: renderer,\n        footer: footerRenderer\n      }\n    )\n  }\n\n  function destroy() {\n    if (instance) {\n      container && render(null, container)\n      instance = null\n    }\n\n    if (app) {\n      app.unmount()\n      app = undefined\n    }\n\n    if (container) {\n      document.body.removeChild(container)\n      container = undefined\n    }\n  }\n\n  return () =>\n    nextTick(() => {\n      active.value = false\n    })\n}\n\nComponent.open = useModal\n\nconst Modal = Component as typeof Component & { open: typeof useModal }\n\nexport { Modal }\nexport { modalProps } from './props'\n\nexport type ModalExposed = ComponentPublicInstance & InstanceType<typeof Component>\n\nexport type { ModalProps, ModalCProps } from './props'\nexport type { ModalSlotParams } from './symbol'\n","import { booleanProp, buildProps, classProp, localeProp, styleProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { IconMinorProps } from '@/components/icon'\nimport type { ConfirmAlign, ConfirmButtonType, ConfirmRenderFn } from './symbol'\n\nconst positionType = [Number, String]\n\nexport const confirmProps = buildProps({\n  locale: localeProp('confirm'),\n  width: positionType,\n  height: positionType,\n  top: positionType,\n  left: positionType,\n  right: positionType,\n  bottom: positionType,\n  maskClose: booleanProp,\n  confirmType: String as PropType<ConfirmButtonType>,\n  cancelType: String as PropType<ConfirmButtonType>,\n  confirmText: String,\n  cancelText: String,\n  icon: {\n    type: [Boolean, Object, Function],\n    default: null\n  },\n  className: classProp,\n  style: styleProp,\n  renderer: Function as PropType<ConfirmRenderFn>,\n  iconProps: Object as PropType<IconMinorProps>,\n  closable: booleanProp,\n  contentAlign: String as PropType<ConfirmAlign>,\n  actionsAlign: String as PropType<ConfirmAlign>,\n  parseHtml: booleanProp,\n  cancelable: booleanProp,\n  xOffset: positionType,\n  yOffset: positionType\n})\n\nexport type ConfirmProps = ExtractPropTypes<typeof confirmProps>\nexport type ConfirmCProps = ConfigurableProps<ConfirmProps>\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Modal } from '@/components/modal'\nimport { Renderer } from '@/components/renderer'\n\nimport { nextTick, onMounted, reactive, ref, toRef } from 'vue'\n\nimport { useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { isFunction, isPromise } from '@vexip-ui/utils'\nimport { confirmProps } from './props'\n\nimport type { ConfirmButtonType, ConfirmOptions, ConfirmRenderFn, ConfirmState } from './symbol'\n\nconst positionValidator = (value: string | number) => {\n  return value === 'auto' || !Number.isNaN(parseFloat(value as string))\n}\nconst positionProp = {\n  default: 'auto',\n  validator: positionValidator\n}\n\nconst confirmButtonTypes = Object.freeze<ConfirmButtonType[]>([\n  'default',\n  'primary',\n  'info',\n  'success',\n  'warning',\n  'error'\n])\n\ndefineOptions({ name: 'Confirm' })\n\nconst _props = defineProps(confirmProps)\nconst props = useProps('confirm', _props, {\n  locale: null,\n  width: {\n    default: 420,\n    validator: positionValidator\n  },\n  height: positionProp,\n  top: positionProp,\n  left: positionProp,\n  right: positionProp,\n  bottom: positionProp,\n  maskClose: false,\n  confirmType: {\n    default: 'primary',\n    validator: value => confirmButtonTypes.includes(value)\n  },\n  cancelType: {\n    default: 'default',\n    validator: value => confirmButtonTypes.includes(value)\n  },\n  confirmText: null,\n  cancelText: null,\n  icon: {\n    isFunc: true,\n    default: false\n  },\n  className: null,\n  style: null,\n  renderer: {\n    default: null,\n    isFunc: true,\n    static: true\n  },\n  iconProps: () => ({}),\n  closable: false,\n  parseHtml: false,\n  contentAlign: 'left',\n  actionsAlign: 'right',\n  cancelable: true,\n  xOffset: 0,\n  yOffset: 0\n})\n\nconst nh = useNameHelper('confirm')\nconst icons = useIcons()\nconst locale = useLocale('confirm', toRef(props, 'locale'))\n\nconst commonProps = [\n  'className',\n  'style',\n  'icon',\n  'iconProps',\n  'maskClose',\n  'confirmType',\n  'cancelType',\n  'confirmText',\n  'cancelText',\n  'parseHtml',\n  'closable',\n  'contentAlign',\n  'actionsAlign',\n  'cancelable',\n  'width',\n  'height',\n  'top',\n  'right',\n  'bottom',\n  'left',\n  'xOffset',\n  'yOffset'\n] as const\n\nconst state = reactive<ConfirmState>({\n  ...commonProps.reduce((prev, current) => ((prev[current] = props[current]), prev), {} as any),\n  visible: false,\n  loading: false,\n  title: '',\n  content: '',\n  raw: {}\n})\n\nconst rendererR = ref<ConfirmRenderFn | null>(props.renderer)\n\nlet beforeConfirmR: (() => unknown) | null = null\n\nlet onConfirm: (() => void) | null = null\nlet onCancel: (() => void) | null = null\n\nconst mountedPromise = new Promise<void>(resolve => {\n  onMounted(() => {\n    nextTick(resolve)\n  })\n})\n\ndefineExpose({ state, openConfirm, handleReset })\n\nasync function openConfirm(options: ConfirmOptions) {\n  await mountedPromise\n\n  return await new Promise<boolean>(resolve => {\n    for (const prop of commonProps) {\n      ;(state as any)[prop] = options[prop] ?? props[prop]\n    }\n\n    state.title = options.title ?? ''\n    state.content = options.content ?? ''\n\n    state.raw = options\n\n    rendererR.value = isFunction(options.renderer) ? options.renderer : props.renderer\n    beforeConfirmR = isFunction(options.onBeforeConfirm) ? options.onBeforeConfirm : null\n\n    if (isFunction(rendererR.value)) {\n      const render = rendererR.value\n\n      rendererR.value = () => render(state, handleConfirm, handleCancel)\n    }\n\n    state.visible = true\n    onConfirm = () => {\n      resolve(true)\n      beforeConfirmR = null\n    }\n    onCancel = () => {\n      resolve(false)\n      beforeConfirmR = null\n    }\n  })\n}\n\nasync function handleConfirm() {\n  state.loading = true\n\n  if (isFunction(beforeConfirmR)) {\n    let result = beforeConfirmR()\n\n    if (isPromise(result)) {\n      result = await result\n    }\n\n    if (result === false) {\n      state.loading = false\n\n      return\n    }\n  }\n\n  state.visible = false\n  state.loading = false\n\n  if (isFunction(onConfirm)) {\n    onConfirm()\n    onConfirm = null\n  }\n}\n\nfunction handleCancel() {\n  state.visible = false\n\n  if (isFunction(onCancel)) {\n    onCancel()\n    onCancel = null\n  }\n}\n\nfunction handleReset() {\n  for (const prop of commonProps) {\n    ;(state as any)[prop] = props[prop]\n  }\n\n  state.visible = false\n  state.loading = false\n  state.title = ''\n  state.content = ''\n\n  state.raw = {}\n\n  rendererR.value = props.renderer\n}\n</script>\n\n<template>\n  <!-- eslint-disable vue/no-v-html -->\n  <div :class=\"[nh.b(), nh.bs('vars')]\">\n    <Modal\n      no-footer\n      :auto-remove=\"false\"\n      :transfer=\"false\"\n      :closable=\"false\"\n      :active=\"state.visible\"\n      :modal-class=\"state.className\"\n      :modal-style=\"state.style\"\n      :width=\"state.width\"\n      :height=\"state.height\"\n      :top=\"state.top\"\n      :left=\"state.left\"\n      :right=\"state.right\"\n      :bottom=\"state.bottom\"\n      :x-offset=\"state.xOffset\"\n      :y-offset=\"state.yOffset\"\n      :mask-close=\"state.maskClose\"\n      @hide=\"handleReset\"\n    >\n      <Renderer v-if=\"isFunction(rendererR)\" :renderer=\"rendererR\"></Renderer>\n      <template v-else>\n        <div v-if=\"state.title\" :class=\"nh.be('header')\">\n          <div :class=\"nh.be('title')\">\n            {{ state.title }}\n          </div>\n          <button\n            v-if=\"state.closable\"\n            type=\"button\"\n            :class=\"nh.be('close')\"\n            @mousedown.stop\n            @click=\"handleCancel\"\n          >\n            <slot name=\"close\">\n              <Icon\n                v-bind=\"icons.close\"\n                :scale=\"+(icons.close.scale || 1) * 1.2\"\n                label=\"close\"\n              ></Icon>\n            </slot>\n          </button>\n        </div>\n        <div\n          :class=\"[\n            nh.be('body'),\n            nh.bem('body', state.contentAlign),\n            !state.title && nh.bem('body', 'no-title')\n          ]\"\n        >\n          <div v-if=\"state.icon !== false\" :class=\"nh.be('icon')\">\n            <Icon\n              v-if=\"typeof state.icon !== 'boolean'\"\n              v-bind=\"state.iconProps\"\n              :icon=\"state.icon\"\n            ></Icon>\n            <Icon\n              v-else\n              :scale=\"2.2\"\n              v-bind=\"{\n                ...(state.cancelable ? icons.question : icons.warning),\n                ...state.iconProps\n              }\"\n              :icon=\"(state.cancelable ? icons.question : icons.warning).icon\"\n            ></Icon>\n          </div>\n          <div v-if=\"state.parseHtml\" :class=\"nh.be('content')\" v-html=\"state.content\"></div>\n          <div v-else :class=\"nh.be('content')\">\n            {{ state.content }}\n          </div>\n        </div>\n        <div :class=\"[nh.be('footer'), nh.bem('footer', state.actionsAlign)]\">\n          <Button\n            v-if=\"state.cancelable\"\n            :class=\"[nh.be('button'), nh.bem('button', 'cancel')]\"\n            inherit\n            no-pulse\n            :type=\"state.cancelType\"\n            @click=\"handleCancel\"\n          >\n            {{ state.cancelText || locale.cancel }}\n          </Button>\n          <Button\n            :class=\"[nh.be('button'), nh.bem('button', 'confirm')]\"\n            inherit\n            no-pulse\n            :type=\"state.confirmType\"\n            :loading=\"state.loading\"\n            @click=\"handleConfirm\"\n          >\n            {{ state.confirmText || locale.confirm }}\n          </Button>\n        </div>\n      </template>\n    </Modal>\n  </div>\n</template>\n","import { createApp, createVNode, markRaw, render } from 'vue'\n\nimport Component from './confirm.vue'\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\nimport { destroyObject, isClient } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { MaybeInstance } from '@vexip-ui/hooks'\nimport type { ConfirmButtonType, ConfirmInstance, ConfirmOptions, ConfirmState } from './symbol'\n\nexport { confirmProps } from './props'\n\nexport type { ConfirmProps, ConfirmCProps } from './props'\nexport type { ConfirmButtonType, ConfirmOptions, ConfirmState }\n\ntype FuzzyOptions = string | ConfirmOptions\n\nComponent.name = 'Confirm'\n\nexport class ConfirmManager {\n  name: string\n  defaults: Record<string, unknown>\n\n  private _mountedApp: App<unknown> | null\n  private _instance: ConfirmInstance | null\n  private _innerApp: App<unknown> | null\n  private _container: HTMLElement | null\n  private _wrapper: HTMLElement | SVGElement | null\n  private _mountedEl: HTMLElement | null\n\n  constructor(options: Partial<ConfirmOptions> = {}) {\n    this._mountedApp = null\n    this._instance = null\n    this._innerApp = null\n    this._container = null\n    this._wrapper = null\n    this._mountedEl = null\n    this.name = 'Confirm'\n    this.defaults = {}\n\n    this.config(options)\n  }\n\n  open(content: string, type?: ConfirmButtonType): Promise<boolean>\n  open(options: ConfirmOptions): Promise<boolean>\n  open(content: string, title: string, type?: ConfirmButtonType): Promise<boolean>\n  open(options: FuzzyOptions, title?: string, type?: ConfirmButtonType) {\n    if (!isClient) {\n      return\n    }\n\n    if (typeof options === 'string') {\n      if (type) {\n        options = { title, content: options, confirmType: type }\n      } else {\n        options = { content: options, confirmType: title as ConfirmButtonType }\n      }\n    }\n\n    const item: ConfirmOptions = { ...this.defaults, ...options }\n\n    if (item.icon && typeof item.icon === 'object') {\n      item.icon = markRaw(item.icon)\n    }\n\n    return this._getInstance()?.openConfirm(item)\n  }\n\n  config(options: Record<string, unknown>) {\n    this.defaults = { ...this.defaults, ...options }\n  }\n\n  clone() {\n    const manager = new ConfirmManager(this.defaults)\n\n    manager._mountedApp = this._mountedApp\n\n    return manager\n  }\n\n  destroy() {\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\n    this._innerApp?.unmount()\n    this._container && render(null, this._container)\n    destroyObject(this)\n  }\n\n  isDestroyed() {\n    return false\n  }\n\n  install(app: App, options: Partial<ConfirmOptions> & { property?: string } = {}) {\n    const { property, ...others } = options\n\n    this.config(others)\n    this._mountedApp = app\n\n    if (property || !app.config.globalProperties.$confirm) {\n      app.config.globalProperties[property || '$confirm'] = this\n    }\n  }\n\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\n    if (!isClient) return\n\n    const el = unrefElement(target)\n\n    if (el) {\n      this._wrapper = el\n\n      if (this._instance) {\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\n      } else {\n        this._getInstance()\n      }\n    }\n  }\n\n  private _getInstance() {\n    if (!this._instance && isClient) {\n      if (!this._mountedApp) {\n        console.warn('[vexip-ui:Confirm]: App missing, the plugin maybe not installed.')\n\n        this._container = document.createElement('div')\n        this._innerApp = createApp(Component)\n        this._instance = this._innerApp.mount(this._container) as ConfirmInstance\n      } else {\n        const vnode = createVNode(Component, null, null)\n\n        this._container = document.createElement('div')\n        vnode.appContext = this._mountedApp._context\n\n        render(vnode, this._container)\n\n        this._instance = proxyExposed<ConfirmInstance>(vnode)\n      }\n\n      this._mountedEl = this._container.firstElementChild as HTMLElement\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\n    }\n\n    return this._instance\n  }\n}\n\nexport const Confirm = new ConfirmManager()\n","import type { InjectionKey } from 'vue'\n\nexport type DropdownTrigger = 'hover' | 'click' | 'custom'\n\ntype SelectHandler = (labels: (string | number)[], metas: Array<Record<string, any>>) => void\n\nexport interface DropdownState {\n  alive: boolean,\n  handleSelect: SelectHandler,\n  handleTriggerEnter: () => void,\n  handleTriggerLeave: () => void\n}\n\nexport const SELECT_HANDLER = '__VXP_SELECT_HANDLER' as unknown as InjectionKey<SelectHandler>\nexport const DROPDOWN_STATE = '__VXP_DROPDOWN_STATE' as unknown as InjectionKey<DropdownState>\n","import { defineComponent, inject, provide, renderSlot } from 'vue'\n\nimport { DROPDOWN_STATE, SELECT_HANDLER } from './symbol'\n\nexport default defineComponent({\n  setup(_, { slots }) {\n    const dropdownState = inject(DROPDOWN_STATE, null)\n\n    dropdownState && provide(SELECT_HANDLER, dropdownState.handleSelect)\n\n    return () => renderSlot(slots, 'default')\n  }\n})\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  wrapProps\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { DropdownTrigger } from './symbol'\n\nexport const dropdownProps = buildProps({\n  visible: booleanProp,\n  placement: String as PropType<Placement>,\n  outsideClose: booleanProp,\n  trigger: String as PropType<DropdownTrigger>,\n  label: [String, Number],\n  transitionName: String,\n  transfer: booleanStringProp,\n  dropClass: classProp,\n  appear: booleanProp,\n  meta: Object as PropType<Record<string, any>>,\n  alive: booleanProp,\n  custom: booleanProp,\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onSelect: eventProp<(labels: (string | number)[], metas: Array<Record<string, any>>) => void>(),\n  onClickOutside: eventProp(),\n  onOutsideClose: eventProp()\n})\n\nexport type DropdownProps = ExtractPropTypes<typeof dropdownProps>\nexport type DropdownCProps = ConfigurableProps<DropdownProps>\n\nexport const dropdownItemProps = wrapProps({\n  label: {\n    type: [String, Number],\n    default: null\n  },\n  disabled: {\n    type: Boolean,\n    default: false\n  },\n  selected: {\n    type: Boolean,\n    default: false\n  },\n  divided: {\n    type: Boolean,\n    default: false\n  },\n  reference: {\n    type: Boolean,\n    default: false\n  },\n  meta: {\n    type: Object,\n    default: () => ({})\n  },\n  onSelect: eventProp<(label: string | number) => void>()\n})\n\nexport type DropdownItemProps = ExtractPropTypes<typeof dropdownItemProps>\n","import { nextTick, onMounted, ref, watch } from 'vue'\n\nimport type { Ref } from 'vue'\n\nexport function useLabel(\n  rawLabel: Ref<string | number | null>,\n  element: Ref<HTMLElement | null | undefined>\n) {\n  const label = ref(rawLabel.value)\n\n  function setLabel(value: string | number | null) {\n    if (element.value) {\n      label.value = value ?? element.value.textContent?.trim() ?? null\n    } else {\n      label.value = value\n    }\n  }\n\n  watch(rawLabel, value => {\n    setLabel(value)\n  })\n\n  onMounted(() => {\n    nextTick(() => {\n      setLabel(rawLabel.value)\n    })\n  })\n\n  return label\n}\n","<script setup lang=\"ts\">\nimport { Popper } from '@/components/popper'\n\nimport { computed, inject, nextTick, onMounted, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport {\n  placementWhileList,\n  useClickOutside,\n  usePopper,\n  useRtl,\n  useSetTimeout\n} from '@vexip-ui/hooks'\nimport { emitEvent, useHoverDelay, useNameHelper, useProps } from '@vexip-ui/config'\nimport DropdownDrop from './dropdown-drop'\nimport { dropdownProps } from './props'\nimport { useLabel } from './hooks'\nimport { DROPDOWN_STATE, SELECT_HANDLER } from './symbol'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type { Placement } from '@vexip-ui/hooks'\n\ndefineOptions({ name: 'Dropdown' })\n\nconst nh = useNameHelper('dropdown')\n\nconst _props = defineProps(dropdownProps)\nconst props = useProps('dropdown', _props, {\n  visible: {\n    default: false,\n    static: true\n  },\n  placement: {\n    default: 'bottom',\n    validator: value => placementWhileList.includes(value)\n  },\n  outsideClose: true,\n  trigger: {\n    default: 'hover',\n    validator: value => ['hover', 'click', 'custom'].includes(value)\n  },\n  label: {\n    default: null,\n    static: true\n  },\n  transitionName: () => nh.ns('drop'),\n  transfer: false,\n  dropClass: null,\n  appear: false,\n  meta: null,\n  alive: false,\n  custom: false\n})\n\nconst emit = defineEmits(['update:visible'])\n\nconst parentState = inject(DROPDOWN_STATE, null)\nconst { isRtl } = useRtl()\nconst hoverDelay = useHoverDelay()\n\nconst isNested = !!parentState\nconst label = toRef(props, 'label')\nconst placement = ref(props.placement)\nconst currentVisible = ref(props.visible)\nconst popperAlive = ref(false)\n\nconst transfer = isNested ? ref(false) : toRef(props, 'transfer')\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst popper = ref<PopperExposed>()\nconst { reference, transferTo, updatePopper } = usePopper({\n  placement,\n  transfer,\n  wrapper,\n  popper: computed(() => popper.value?.wrapper),\n  isDrop: true,\n  offset: isNested ? [-5, 0] : undefined\n})\nconst currentLabel = useLabel(label, reference)\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('visible')]: currentVisible.value\n  }\n})\nconst isAlive = computed(() => parentState?.alive || props.alive)\n\nprovide(SELECT_HANDLER, null!)\n!props.custom &&\n  provide(\n    DROPDOWN_STATE,\n    reactive({\n      alive: isAlive,\n      handleSelect,\n      handleTriggerEnter,\n      handleTriggerLeave\n    })\n  )\n\nwatch(\n  () => props.visible,\n  value => {\n    currentVisible.value = value\n  }\n)\n\nwatch(\n  () => props.placement,\n  value => {\n    setPlacement(value)\n  }\n)\n\nwatch(currentVisible, value => {\n  if (value) {\n    updatePopper()\n  }\n})\n\nonMounted(() => {\n  nextTick(() => {\n    setPlacement(props.placement)\n  })\n})\n\ndefineExpose({\n  isNested,\n  currentVisible,\n  isAlive,\n  wrapper,\n  reference,\n  popper,\n  handleTriggerEnter,\n  handleTriggerLeave,\n  handleTriggerClick\n})\n\nfunction setVisible(visible: boolean) {\n  if (currentVisible.value === visible) return\n\n  currentVisible.value = visible\n\n  emit('update:visible', visible)\n  emitEvent(props.onToggle, visible)\n}\n\nfunction handleClickOutside() {\n  emitEvent(props.onClickOutside)\n\n  if (props.outsideClose && props.trigger !== 'custom' && currentVisible.value) {\n    setVisible(false)\n    emitEvent(props.onOutsideClose)\n  }\n}\n\nfunction handleSelect(labels: (string | number)[], metaList: Array<Record<string, any>>) {\n  if (props.trigger !== 'custom') {\n    setVisible(false)\n    emitEvent(props.onSelect, labels, metaList)\n  }\n\n  if (typeof parentState?.handleSelect === 'function') {\n    parentState.handleSelect([currentLabel.value!, ...labels], [props.meta || {}, ...metaList])\n  }\n}\n\nfunction setPlacement(value: Placement) {\n  const [xPlacement] = value.split('-')\n\n  if (isNested && xPlacement !== 'right' && xPlacement !== 'left') {\n    placement.value = isRtl.value ? 'left-start' : 'right-start'\n  } else {\n    placement.value = value\n  }\n}\n\nconst { timer } = useSetTimeout()\n\nfunction handleTriggerEnter() {\n  if (props.trigger === 'hover') {\n    clearTimeout(timer.hover)\n\n    if (typeof parentState?.handleTriggerEnter === 'function') {\n      parentState.handleTriggerEnter()\n    }\n\n    timer.hover = setTimeout(() => {\n      setVisible(true)\n    }, hoverDelay.value)\n  }\n}\n\nfunction handleTriggerLeave() {\n  if (props.trigger === 'hover') {\n    clearTimeout(timer.hover)\n\n    if (typeof parentState?.handleTriggerLeave === 'function') {\n      parentState.handleTriggerLeave()\n    }\n\n    timer.hover = setTimeout(() => {\n      setVisible(false)\n    }, hoverDelay.value)\n  }\n}\n\nfunction handleTriggerClick() {\n  if (props.trigger === 'click') {\n    setVisible(!currentVisible.value)\n  }\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"className\"\n    @mouseenter=\"handleTriggerEnter\"\n    @mouseleave=\"handleTriggerLeave\"\n  >\n    <div\n      ref=\"reference\"\n      :class=\"[nh.be('trigger'), currentVisible ? nh.bem('trigger', 'active') : '']\"\n      @click=\"handleTriggerClick\"\n      @keydown.enter.prevent=\"handleTriggerClick\"\n      @keydown.space.prevent=\"handleTriggerClick\"\n    >\n      <slot></slot>\n    </div>\n    <DropdownDrop>\n      <Popper\n        ref=\"popper\"\n        :class=\"[\n          nh.be('popper'),\n          nh.bs('vars'),\n          isNested ? nh.bem('popper', 'nested') : null,\n          props.dropClass\n        ]\"\n        :visible=\"currentVisible\"\n        :alive=\"isAlive || popperAlive\"\n        :to=\"transferTo\"\n        :transition=\"props.transitionName\"\n        :appear=\"props.appear\"\n        @mouseenter=\"handleTriggerEnter\"\n        @mouseleave=\"handleTriggerLeave\"\n        @after-enter=\"popperAlive = true\"\n        @after-leave=\"popperAlive = false\"\n      >\n        <slot name=\"drop\"></slot>\n      </Popper>\n    </DropdownDrop>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useNameHelper } from '@vexip-ui/config'\n\ndefineOptions({ name: 'DropdownList' })\n\nconst nh = useNameHelper('dropdown')\n</script>\n\n<template>\n  <ul :class=\"nh.be('list')\" role=\"menu\">\n    <slot></slot>\n  </ul>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, ref, toRef } from 'vue'\n\nimport { emitEvent, useNameHelper } from '@vexip-ui/config'\nimport { dropdownItemProps } from './props'\nimport { useLabel } from './hooks'\nimport { SELECT_HANDLER } from './symbol'\n\ndefineOptions({ name: 'DropdownItem' })\n\nconst props = defineProps(dropdownItemProps)\n\nconst parentSelectHandler = inject(SELECT_HANDLER, null)\n\nconst nh = useNameHelper('dropdown')\nconst wrapper = ref(null)\nconst label = toRef(props, 'label')\nconst isReference = ref(props.reference)\n\nconst currentLabel = useLabel(label, wrapper)\n\nconst className = computed(() => {\n  const baseClass = nh.be('item')\n\n  return {\n    [baseClass]: true,\n    [`${baseClass}--disabled`]: props.disabled,\n    [`${baseClass}--selected`]: !props.disabled && props.selected,\n    [`${baseClass}--divided`]: props.divided\n  }\n})\n\ndefineExpose({ wrapper, handleSelect })\n\nfunction handleSelect() {\n  if (props.disabled || isReference.value) {\n    return\n  }\n\n  if (typeof parentSelectHandler === 'function') {\n    parentSelectHandler([currentLabel.value!], [props.meta || {}])\n  }\n\n  emitEvent(props.onSelect!, currentLabel.value!)\n}\n</script>\n\n<template>\n  <li\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"menuitem\"\n    tabindex=\"0\"\n    @click=\"handleSelect\"\n  >\n    <slot></slot>\n  </li>\n</template>\n","import { Dropdown } from '@/components/dropdown'\nimport { DropdownList } from '@/components/dropdown-list'\nimport { DropdownItem } from '@/components/dropdown-item'\nimport { Icon } from '@/components/icon'\n\nimport { useIcons } from '@vexip-ui/config'\nimport { useRtl } from '@vexip-ui/hooks'\n\nimport type { NameHelper } from '@vexip-ui/config'\nimport type { ContextmenuConfig } from './symbol'\n\nfunction renderItemIcon(item: ContextmenuConfig, nh: NameHelper) {\n  if (!item.icon) return null\n\n  return (\n    <div class={nh.be('icon')}>\n      <Icon\n        icon={item.icon}\n        style={[{ color: item.iconColor || item.color }, (item.icon as any).style]}\n      ></Icon>\n    </div>\n  )\n}\n\nfunction renderItemShortcut(item: ContextmenuConfig, nh: NameHelper) {\n  if (!item.shortcut) return null\n\n  return <div class={nh.be('shortcut')}>{item.shortcut}</div>\n}\n\nfunction renderGroupItem(item: ContextmenuConfig, nh: NameHelper) {\n  const icons = useIcons()\n  const { isRtl } = useRtl()\n\n  return (\n    <Dropdown\n      inherit\n      transfer={false}\n      {...{\n        onContextmenu: (event: MouseEvent) => {\n          event.preventDefault()\n          event.stopPropagation()\n        }\n      }}\n    >\n      {{\n        default: () => (\n          <DropdownItem\n            class={nh.be('item')}\n            label={item.key}\n            divided={item.divided}\n            disabled={item.disabled}\n          >\n            {renderItemIcon(item, nh)}\n            {typeof item.renderer === 'function' ? (\n              item.renderer()\n            ) : (\n              <span class={nh.be('label')} style={{ color: item.color }}>\n                {item.label || item.key}\n              </span>\n            )}\n            {renderItemShortcut(item, nh)}\n            <div class={[nh.be('icon'), nh.be('arrow')]}>\n              <Icon\n                {...(isRtl.value ? icons.value.angleLeft : icons.value.angleRight)}\n                style={{ color: item.iconColor || item.color }}\n              ></Icon>\n            </div>\n          </DropdownItem>\n        ),\n        drop: () => (\n          <DropdownList\n            class={[\n              nh.be('list'),\n              item.children!.some(c => c.icon)\n                ? nh.bem('list', 'icons')\n                : nh.bem('list', 'no-icon'),\n              item.children!.some(c => c.children?.length)\n                ? nh.bem('list', 'arrows')\n                : nh.bem('list', 'no-arrow')\n            ]}\n          >\n            {item.children!.map(i => renderItem({ nh, config: i }))}\n          </DropdownList>\n        )\n      }}\n    </Dropdown>\n  )\n}\n\nexport function renderItem({ config, nh }: { config: ContextmenuConfig, nh: NameHelper }) {\n  if (config.children?.length) {\n    return renderGroupItem(config, nh)\n  } else {\n    return (\n      <DropdownItem\n        class={nh.be('item')}\n        label={config.key}\n        divided={config.divided}\n        disabled={config.disabled}\n      >\n        {renderItemIcon(config, nh)}\n        {typeof config.renderer === 'function' ? (\n          config.renderer()\n        ) : (\n          <span class={nh.be('label')} style={{ color: config.color }}>\n            {config.label || config.key}\n          </span>\n        )}\n        {renderItemShortcut(config, nh)}\n      </DropdownItem>\n    )\n  }\n}\n","<script setup lang=\"ts\">\nimport { Dropdown } from '@/components/dropdown'\nimport { DropdownList } from '@/components/dropdown-list'\nimport { Renderer } from '@/components/renderer'\n\nimport { reactive, ref } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useRtl } from '@vexip-ui/hooks'\nimport { isFunction } from '@vexip-ui/utils'\nimport { renderItem } from './render'\n\nimport type { ContextmenuConfig, ContextmenuOptions, Key } from './symbol'\n\ndefineOptions({ name: 'Contextmenu' })\n\nconst nh = useNameHelper('contextmenu')\nconst { isRtl } = useRtl()\nconst visible = ref(false)\nconst configs = ref<ContextmenuConfig[]>([])\nconst appear = ref(false)\n\nconst position = reactive({\n  x: 0,\n  y: 0\n})\n\nconst onSelect = ref<((keys: Key[]) => void) | null>(null)\nconst onCancel = ref<(() => void) | null>(null)\n\nfunction openContextmenu(options: ContextmenuOptions) {\n  position.x = options.clientX || 0\n  position.y = options.clientY || 0\n  configs.value = options.configs\n  appear.value = options.appear ?? false\n\n  visible.value = true\n\n  return new Promise<Key[] | null>(resolve => {\n    onSelect.value = (keys: Key[]) => {\n      resolve(keys)\n    }\n    onCancel.value = () => {\n      resolve(null)\n    }\n  })\n}\n\nfunction afterContextmenu() {\n  onSelect.value = null\n  onCancel.value = null\n}\n\nfunction handleSelect(keys: Key[]) {\n  visible.value = false\n\n  if (isFunction(onSelect.value)) {\n    onSelect.value(keys)\n    afterContextmenu()\n  }\n}\n\nfunction handleCancel() {\n  visible.value = false\n\n  if (isFunction(onCancel.value)) {\n    onCancel.value()\n    afterContextmenu()\n  }\n}\n\ndefineExpose({ visible, position, openContextmenu, handleSelect, handleCancel })\n</script>\n\n<template>\n  <Dropdown\n    v-model:visible=\"visible\"\n    :class=\"[nh.b(), nh.bs('vars')]\"\n    trigger=\"click\"\n    :placement=\"isRtl ? 'left-start' : 'right-start'\"\n    :appear=\"appear\"\n    :transfer=\"false\"\n    :style=\"{\n      top: `${position.y}px`,\n      left: `${position.x}px`\n    }\"\n    @contextmenu.prevent.stop\n    @select=\"handleSelect\"\n    @outside-close=\"handleCancel\"\n  >\n    <!-- <div :class=\"nh.be('anchor')\"></div> -->\n    <template #drop>\n      <DropdownList\n        :class=\"[\n          nh.be('list'),\n          configs.some(c => c.icon) ? nh.bem('list', 'icons') : nh.bem('list', 'no-icon'),\n          configs.some(c => c.children && c.children.length)\n            ? nh.bem('list', 'arrows')\n            : nh.bem('list', 'no-arrow')\n        ]\"\n      >\n        <Renderer\n          v-for=\"item in configs\"\n          :key=\"item.key\"\n          :data=\"{ config: item, nh }\"\n          :renderer=\"renderItem\"\n        ></Renderer>\n      </DropdownList>\n    </template>\n  </Dropdown>\n</template>\n","import { createApp, createVNode, render } from 'vue'\n\nimport Component from './contextmenu.vue'\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\nimport { destroyObject, isClient } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { MaybeInstance } from '@vexip-ui/hooks'\nimport type { ContextmenuConfig, ContextmenuInstance, ContextmenuOptions, Key } from './symbol'\n\nexport type { ContextmenuConfig, ContextmenuOptions }\n\nexport class ContextmenuManager {\n  name: string\n\n  private _mountedApp: App<unknown> | null\n  private _instance: ContextmenuInstance | null\n  private _innerApp: App<unknown> | null\n  private _container: HTMLElement | null\n  private _pending: Promise<Key[] | null> | null\n  private _wrapper: HTMLElement | SVGElement | null\n  private _mountedEl: HTMLElement | null\n\n  constructor() {\n    this._mountedApp = null\n    this._instance = null\n    this._innerApp = null\n    this._container = null\n    this._pending = null\n    this._wrapper = null\n    this._mountedEl = null\n    this.name = 'Contextmenu'\n  }\n\n  open(options: ContextmenuOptions) {\n    if (!isClient) {\n      return\n    }\n\n    const { target = document.body, ...others } = options\n\n    this._pending = this._getInstance(target)!.openContextmenu(others)\n\n    return this._pending\n  }\n\n  destroy() {\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\n    this._innerApp?.unmount()\n    this._container && render(null, this._container)\n    destroyObject(this)\n  }\n\n  isDestroyed() {\n    return false\n  }\n\n  install(app: App, options: { property?: string } = {}) {\n    const { property } = options\n\n    this._mountedApp = app\n\n    if (property || !app.config.globalProperties.$contextmenu) {\n      app.config.globalProperties[property || '$contextmenu'] = this\n    }\n  }\n\n  private _getInstance(target: MaybeRef<string | MaybeInstance>) {\n    if (!isClient) return\n\n    if (this._pending) {\n      let innerApp = this._innerApp\n      let container = this._container\n\n      const unmount = () => {\n        innerApp?.unmount()\n        container && render(null, container)\n\n        innerApp = null\n        container = null\n      }\n\n      this._pending.finally(unmount)\n      this._instance?.handleCancel()\n    } else {\n      this._innerApp?.unmount()\n      this._container && render(null, this._container)\n    }\n\n    this._pending = null\n\n    if (!this._mountedApp) {\n      console.warn('[vexip-ui:Contextmenu]: App missing, the plugin maybe not installed.')\n\n      this._container = document.createElement('div')\n      this._innerApp = createApp(Component)\n      this._instance = this._innerApp.mount(this._container) as ContextmenuInstance\n    } else {\n      const vnode = createVNode(Component, null, null)\n\n      this._container = document.createElement('div')\n      vnode.appContext = this._mountedApp._context\n\n      render(vnode, this._container)\n\n      this._instance = proxyExposed<ContextmenuInstance>(vnode)\n    }\n\n    this._mountedEl = this._container.firstElementChild as HTMLElement\n    this._wrapper = unrefElement(target) || document.body\n\n    this._wrapper.appendChild(this._mountedEl)\n\n    return this._instance\n  }\n}\n\nexport const Contextmenu = new ContextmenuManager()\n","import type { Dateable } from '@vexip-ui/utils'\nimport type { CalendarPanelSlots } from '../calendar'\nimport type { WheelSlots } from '../wheel'\n\nexport type DateType = 'year' | 'month' | 'date'\nexport type TimeType = 'hour' | 'minute' | 'second'\nexport type DateTimeType = DateType | TimeType\n\nexport type DatePickerType = 'date' | 'datetime' | 'year' | 'month'\nexport type DateShortcutsPlacement = 'top' | 'right' | 'bottom' | 'left'\nexport type TimeShortcutsPlacement = DateShortcutsPlacement\n\nexport type DatePickerFormatFn = (timestamp: number, type: 'start' | 'end') => unknown\n\nexport interface DateShortcut {\n  name: string,\n  value: Dateable | Dateable[] | (() => Dateable | Dateable[])\n}\n\nexport interface TimeShortcut {\n  name: string,\n  value: string | string[] | (() => string | string[])\n}\n\nexport interface DatePickerState {\n  type: DatePickerType,\n  currentColumn: DateTimeType,\n  enabled: Record<DateTimeType, boolean>,\n  activated: Record<DateTimeType, boolean>,\n  dateValue: Record<DateTimeType, number>,\n  enterColumn(type: 'prev' | 'next'): void\n}\n\nexport interface DisabledTime {\n  hour?(hour: number): boolean,\n  minute?(hour: number, minute: number): boolean,\n  second?(hour: number, minute: number, second: number): boolean\n}\n\nexport const enum DisabledType {\n  UPSTREAM,\n  TRUE,\n  AT_MIN_TRUE,\n  AT_MAX_TRUE,\n  FALSE\n}\n\nexport type DatePickerChangeEvent = (value: number | number[] | null) => void\nexport type TimePickerChangeEvent = (value: string | string[]) => void\n\nexport const datePickerTypes = Object.freeze<DatePickerType[]>([\n  'date',\n  'datetime',\n  'year',\n  'month'\n])\n\nexport const invalidDate = new Date('')\n\n// export const TIME_REG = /^((?:[01]?[0-9])|(?:2[0-3]))((?::[0-5]?[0-9]))?((?::[0-5]?[0-9]))?$/\nexport const TIME_REG = /^((?:\\d{1,2}))((?::\\d{1,2}))?((?::\\d{1,2}))?$/\n\nexport interface TimeWheelSlots {\n  hour?: WheelSlots['default'],\n  minute?: WheelSlots['default'],\n  second?: WheelSlots['default']\n}\n\nexport interface DatePanelSlots {\n  title?: (params: {\n    panel: DateType,\n    yearStart: number,\n    year: number,\n    month: number,\n    togglePanel: (panel: DateType) => void\n  }) => any,\n  year?: (params: {\n    year: number,\n    selected: boolean,\n    isNext: boolean,\n    disabled: boolean,\n    inRange: boolean\n  }) => any,\n  month?: (params: {\n    year: number,\n    month: number,\n    selected: boolean,\n    disabled: boolean,\n    inRange: boolean\n  }) => any,\n  week?: CalendarPanelSlots['week'],\n  date?: CalendarPanelSlots['item']\n}\n\nexport interface DatePickerSlots {\n  prefix?: () => any,\n  suffix?: () => any,\n  exchange?: () => any,\n  panelTitle?: DatePanelSlots['title'],\n  panelYear?: DatePanelSlots['year'],\n  panelMonth?: DatePanelSlots['month'],\n  panelWeek?: DatePanelSlots['week'],\n  panelDate?: DatePanelSlots['date']\n}\n\nexport interface TimePickerSlots {\n  prefix?: () => any,\n  exchange?: () => any,\n  suffix?: () => any\n}\n","import { computed, reactive, ref } from 'vue'\n\nimport { getLast, toNumber } from '@vexip-ui/utils'\nimport { DisabledType } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type { DisabledTime } from './symbol'\n\ntype Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9\n\nconst numberKeys = Array.from({ length: 10 }, (_, i) => i) as Digit[]\n\nfunction isNumberKey(key: string, num: Digit) {\n  return key === `Digit${num}` || key === `Numpad${num}` || key === `${num}`\n}\n\nexport function handleKeyEnter(event: KeyboardEvent) {\n  const key = event.code || event.key\n\n  let type: null | number | 'next' | 'prev' | 'up' | 'down' | 'ok' | 'esc' = null\n  let isMatch = false\n\n  switch (key) {\n    case 'Tab': {\n      isMatch = true\n      type = event.shiftKey ? 'prev' : 'next'\n      break\n    }\n    case 'ArrowRight': {\n      // 下一列\n      isMatch = true\n      type = 'next'\n      break\n    }\n    case 'Delete':\n    case 'ArrowLeft': {\n      // 上一列\n      isMatch = true\n      type = 'prev'\n      break\n    }\n    case 'ArrowUp': {\n      // 加一\n      isMatch = true\n      type = 'up'\n      break\n    }\n    case 'ArrowDown': {\n      // 减一\n      isMatch = true\n      type = 'down'\n      break\n    }\n    case 'Space':\n    case ' ':\n    case 'Enter':\n    case 'NumpadEnter': {\n      // 确认\n      isMatch = true\n      type = 'ok'\n      break\n    }\n    case 'Escape': {\n      // 取消\n      isMatch = true\n      type = 'esc'\n      break\n    }\n  }\n\n  if (isMatch) {\n    event.preventDefault()\n    event.stopPropagation()\n  } else {\n    // 键入数字\n    const inputtedNumber = numberKeys.findIndex(num => isNumberKey(key, num))\n\n    if (~inputtedNumber) {\n      type = inputtedNumber\n\n      event.preventDefault()\n      event.stopPropagation()\n    }\n  }\n\n  return type\n}\n\nexport function useColumn<T extends string>(\n  colTypes: T[],\n  currentColumn = ref(colTypes[0]) as Ref<T | null>\n) {\n  const columnTypes = Array.from(colTypes)\n  const columnCount = columnTypes.length\n  const enabled = reactive(\n    columnTypes.reduce((prev, current) => {\n      prev[current] = false\n      return prev\n    }, {} as any)\n  ) as Record<T, boolean>\n\n  function findEnabledColumn(types: T[]) {\n    currentColumn.value = types.find(type => enabled[type]) ?? currentColumn.value\n  }\n\n  function resetColumn(type?: T | null, reverse = false) {\n    if (!type) {\n      currentColumn.value = null\n    }\n\n    const types = reverse ? Array.from(columnTypes).reverse() : columnTypes\n    const index = types.findIndex(column => column === type)\n\n    if (~index) {\n      findEnabledColumn(types.slice(index, columnCount).concat(types.slice(0, index)))\n    } else {\n      findEnabledColumn(types)\n    }\n  }\n\n  function enterColumn(type: 'prev' | 'next', canLoop = true) {\n    if (!currentColumn.value) {\n      currentColumn.value = (type === 'next' ? getLast(columnTypes) : columnTypes[0]) ?? null\n    }\n\n    for (let i = 0; i < columnCount; ++i) {\n      if (currentColumn.value === columnTypes[i]) {\n        const rawTypes = type === 'prev' ? Array.from(columnTypes).reverse() : columnTypes\n        const nextIndex = (type === 'prev' ? columnCount - i : i + 1) % columnCount\n        const types = canLoop\n          ? rawTypes.slice(nextIndex, columnCount).concat(rawTypes.slice(0, nextIndex))\n          : nextIndex\n            ? rawTypes.slice(nextIndex, columnCount)\n            : []\n\n        findEnabledColumn(types)\n\n        break\n      }\n    }\n  }\n\n  return {\n    currentColumn,\n    enabled,\n    resetColumn,\n    enterColumn\n  }\n}\n\nconst defaultMin = [0, 0, 0]\nconst defaultMax = [23, 59, 59]\n\nexport function useTimeBound(originMin: Ref<string>, originMax: Ref<string>) {\n  const minUnits = computed(() => {\n    return originMin.value ? originMin.value.split(':').map(toNumber) : defaultMin\n  })\n  const maxUnits = computed(() => {\n    return originMax.value ? originMax.value.split(':').map(toNumber) : defaultMax\n  })\n  const reversed = computed(() => {\n    const min = minUnits.value\n    const max = maxUnits.value\n\n    for (let i = 0; i < 3; ++i) {\n      if (min[i] < max[i]) return false\n      if (min[i] > max[i]) return true\n    }\n\n    return false\n  })\n\n  const isTimeDisabled: Required<DisabledTime> = {\n    hour: isHourDisabled,\n    minute: (hour, minute) => isMinuteDisabled(hour, minute) !== DisabledType.FALSE,\n    second: (hour, minute, second) => isSecondDisabled(hour, minute, second) !== DisabledType.FALSE\n  }\n\n  function isHourDisabled(hour: number) {\n    const min = minUnits.value[0] || defaultMin[0]\n    const max = maxUnits.value[0] || defaultMax[0]\n\n    return reversed.value ? hour > max && hour < min : hour < min || hour > max\n  }\n\n  function isMinuteDisabled(hour: number, minute: number) {\n    if (isHourDisabled(hour)) return DisabledType.UPSTREAM\n\n    if (minUnits.value[0] === maxUnits.value[0] && hour === minUnits.value[0]) {\n      const min = minUnits.value[1] || defaultMin[1]\n      const max = maxUnits.value[1] || defaultMax[1]\n\n      if (reversed.value ? minute > max && minute < min : minute < min || minute > max) {\n        return DisabledType.TRUE\n      }\n    }\n\n    if (hour === minUnits.value[0]) {\n      const min = minUnits.value[1] || defaultMin[1]\n\n      if (minute < min) return DisabledType.AT_MIN_TRUE\n    }\n\n    if (hour === maxUnits.value[0]) {\n      const max = maxUnits.value[1] || defaultMax[1]\n\n      if (minute > max) return DisabledType.AT_MAX_TRUE\n    }\n\n    return DisabledType.FALSE\n  }\n\n  function isSecondDisabled(hour: number, minute: number, second: number) {\n    if (isMinuteDisabled(hour, minute) !== DisabledType.FALSE) return DisabledType.UPSTREAM\n\n    if (\n      minUnits.value[0] === maxUnits.value[0] &&\n      hour === minUnits.value[0] &&\n      minUnits.value[1] === maxUnits.value[1] &&\n      minute === minUnits.value[1]\n    ) {\n      const min = minUnits.value[2] || defaultMin[2]\n      const max = maxUnits.value[2] || defaultMax[2]\n\n      if (reversed.value ? second > max && second < min : second < min || second > max) {\n        return DisabledType.TRUE\n      }\n    }\n\n    if (hour === minUnits.value[0] && minute === minUnits.value[1]) {\n      const min = minUnits.value[2] || defaultMin[2]\n\n      if (second < min) return DisabledType.AT_MIN_TRUE\n    }\n\n    if (hour === maxUnits.value[0] && minute === maxUnits.value[1]) {\n      const max = maxUnits.value[2] || defaultMax[2]\n\n      if (second > max) return DisabledType.AT_MAX_TRUE\n    }\n\n    return DisabledType.FALSE\n  }\n\n  return {\n    minUnits,\n    maxUnits,\n    reversed,\n    isTimeDisabled\n  }\n}\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { doubleDigits, getLastDayOfMonth } from '@vexip-ui/utils'\nimport { handleKeyEnter } from './helper'\n\nimport type { PropType } from 'vue'\nimport type { LocaleConfig } from '@vexip-ui/config'\nimport type { DateTimeType, DateType } from './symbol'\n\ndefineOptions({ name: 'DateControl' })\n\nconst props = defineProps({\n  unitType: {\n    type: String as PropType<DateTimeType | ''>,\n    default: ''\n  },\n  enabled: {\n    type: Object as PropType<Record<DateTimeType, boolean>>,\n    default: () => ({})\n  },\n  activated: {\n    type: Object as PropType<Record<DateTimeType, boolean>>,\n    default: () => ({})\n  },\n  dateValue: {\n    type: Object as PropType<Record<DateTimeType, number>>,\n    default: () => ({})\n  },\n  dateSeparator: {\n    type: String,\n    default: '/'\n  },\n  timeSeparator: {\n    type: String,\n    default: ':'\n  },\n  visible: {\n    type: Boolean,\n    default: false\n  },\n  focused: {\n    type: Boolean,\n    default: false\n  },\n  filler: {\n    type: String,\n    default: '-',\n    validator: (value: string) => {\n      return value.length === 1\n    }\n  },\n  steps: {\n    type: Array as PropType<number[]>,\n    default: () => [1, 1, 1]\n  },\n  ctrlSteps: {\n    type: Array as PropType<number[]>,\n    default: () => [5, 5, 5]\n  },\n  labels: {\n    type: Object as PropType<Partial<Record<DateTimeType, string>>>,\n    default: () => ({})\n  },\n  hasError: {\n    type: Boolean,\n    default: false\n  },\n  placeholder: {\n    type: String,\n    default: ''\n  },\n  readonly: {\n    type: Boolean,\n    default: false\n  },\n  labeledBy: {\n    type: String,\n    default: undefined\n  },\n  locale: {\n    type: Object as PropType<LocaleConfig['calendar'] & LocaleConfig['datePicker']>,\n    default: () => ({})\n  },\n  dateUnitOrder: {\n    type: Array as PropType<DateType[]>,\n    default: () => ['year', 'month', 'date']\n  }\n})\n\nconst emit = defineEmits([\n  'input',\n  'plus',\n  'minus',\n  'enter',\n  'cancel',\n  'unit-focus',\n  'prev-unit',\n  'next-unit',\n  'blur'\n])\n\nconst nh = useNameHelper('date-picker')\n\nconst wrapper = ref<HTMLElement>()\n\nconst label = computed(() => props.locale.ariaLabel ?? {})\nconst isActivated = computed(() => {\n  return (Object.keys(props.enabled) as DateTimeType[]).every(type => {\n    return !props.enabled[type] || props.activated[type]\n  })\n})\nconst className = computed(() => {\n  return {\n    [nh.be('input')]: true,\n    [nh.bem('input', 'activated')]: isActivated.value,\n    [nh.bem('input', 'error')]: props.hasError\n  }\n})\nconst showTimeUnits = computed(() => {\n  return props.enabled.hour || props.enabled.minute || props.enabled.second\n})\nconst formattedYear = computed(() => {\n  return formatValue('year')\n})\nconst formattedMonth = computed(() => {\n  return formatValue('month')\n})\nconst formattedDate = computed(() => {\n  return formatValue('date')\n})\nconst formattedHour = computed(() => {\n  return formatValue('hour')\n})\nconst formattedMinute = computed(() => {\n  return formatValue('minute')\n})\nconst formattedSecond = computed(() => {\n  return formatValue('second')\n})\nconst maxDateCount = computed(() => {\n  return getLastDayOfMonth(props.dateValue.year, props.dateValue.month)\n})\nconst dateUnitOrder = computed(() => {\n  const [one, two, three] = props.dateUnitOrder\n\n  return {\n    [one]: -4,\n    [two]: -2,\n    [three]: 0\n  }\n})\n\ndefineExpose({\n  isActivated,\n  wrapper,\n  focus: () => {\n    wrapper.value?.focus()\n  },\n  blur: () => {\n    wrapper.value?.blur()\n  }\n})\n\nfunction formatValue(type: DateTimeType) {\n  const isYear = type === 'year'\n  const filler = props.filler\n\n  return props.activated[type]\n    ? isYear\n      ? props.dateValue.year.toString().padStart(4, '0')\n      : doubleDigits(props.dateValue[type])\n    : `${isYear ? `${filler}${filler}` : ''}${filler}${filler}`\n}\n\nfunction getUnitFocusClass(type: DateTimeType) {\n  return props.visible && props.unitType === type ? nh.bem('unit', 'focused') : null\n}\n\nfunction handleInputFocus(type: DateTimeType) {\n  if (props.readonly) return\n\n  emit('unit-focus', type)\n}\n\nfunction handleInput(event: KeyboardEvent) {\n  if (!props.visible) return\n\n  const type = handleKeyEnter(event)\n\n  if (props.readonly) {\n    switch (type) {\n      case 'ok': {\n        emit('enter')\n        break\n      }\n      case 'esc': {\n        emit('cancel')\n        break\n      }\n    }\n\n    return\n  }\n\n  switch (type) {\n    case 'next': {\n      emit('next-unit')\n      break\n    }\n    case 'prev': {\n      emit('prev-unit')\n      break\n    }\n    case 'up': {\n      emit('minus', event.ctrlKey)\n      break\n    }\n    case 'down': {\n      emit('plus', event.ctrlKey)\n      break\n    }\n    case 'ok': {\n      emit('enter')\n      break\n    }\n    case 'esc': {\n      emit('cancel')\n      break\n    }\n    default: {\n      if (typeof type === 'number') {\n        emit('input', type)\n      }\n    }\n  }\n}\n\nfunction handleBlur() {\n  emit('blur')\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"none\"\n    tabindex=\"-1\"\n    @keydown=\"handleInput\"\n    @blur=\"handleBlur\"\n  >\n    <div v-if=\"!focused && !isActivated\" :class=\"nh.be('placeholder')\">\n      {{ placeholder }}\n    </div>\n    <template v-else>\n      <div\n        v-if=\"enabled.year\"\n        :class=\"[nh.be('unit'), getUnitFocusClass('year')]\"\n        role=\"spinbutton\"\n        :aria-label=\"label.year\"\n        :aria-valuenow=\"props.dateValue.year\"\n        :aria-valuetext=\"formattedYear\"\n        :aria-valuemin=\"1\"\n        :aria-valuemax=\"9999\"\n        :aria-labelledby=\"labeledBy\"\n        :style=\"{ order: dateUnitOrder['year'] }\"\n        @click=\"handleInputFocus('year')\"\n      >\n        {{ formattedYear }}\n      </div>\n      <div\n        v-if=\"labels.year\"\n        :class=\"nh.be('label')\"\n        aria-hidden\n        :style=\"{ order: dateUnitOrder['year'] }\"\n        @click=\"handleInputFocus('year')\"\n      >\n        {{ labels.year }}\n      </div>\n      <template v-if=\"enabled.month\">\n        <div\n          v-if=\"enabled.year\"\n          :class=\"nh.be('separator')\"\n          aria-hidden\n          style=\"order: -3\"\n        >\n          {{ dateSeparator }}\n        </div>\n        <div\n          :class=\"[nh.be('unit'), getUnitFocusClass('month')]\"\n          role=\"spinbutton\"\n          :aria-label=\"label.month\"\n          :aria-valuenow=\"props.dateValue.month\"\n          :aria-valuetext=\"formattedMonth\"\n          :aria-valuemin=\"1\"\n          :aria-valuemax=\"12\"\n          :aria-labelledby=\"labeledBy\"\n          :style=\"{ order: dateUnitOrder['month'] }\"\n          @click=\"handleInputFocus('month')\"\n        >\n          {{ formattedMonth }}\n        </div>\n        <div\n          v-if=\"labels.month\"\n          :class=\"nh.be('label')\"\n          aria-hidden\n          :style=\"{ order: dateUnitOrder['month'] }\"\n          @click=\"handleInputFocus('month')\"\n        >\n          {{ labels.month }}\n        </div>\n      </template>\n      <template v-if=\"enabled.date\">\n        <div\n          v-if=\"enabled.month || enabled.year\"\n          :class=\"nh.be('separator')\"\n          aria-hidden\n          style=\"order: -1\"\n        >\n          {{ dateSeparator }}\n        </div>\n        <div\n          :class=\"[nh.be('unit'), getUnitFocusClass('date')]\"\n          role=\"spinbutton\"\n          :aria-label=\"label.date\"\n          :aria-valuenow=\"props.dateValue.date\"\n          :aria-valuetext=\"formattedDate\"\n          :aria-valuemin=\"1\"\n          :aria-valuemax=\"maxDateCount || 31\"\n          :aria-labelledby=\"labeledBy\"\n          :style=\"{ order: dateUnitOrder['date'] }\"\n          @click=\"handleInputFocus('date')\"\n        >\n          {{ formattedDate }}\n        </div>\n        <div\n          v-if=\"labels.date\"\n          :class=\"nh.be('label')\"\n          aria-hidden\n          :style=\"{ order: dateUnitOrder['date'] }\"\n          @click=\"handleInputFocus('date')\"\n        >\n          {{ labels.date }}\n        </div>\n      </template>\n\n      <template v-if=\"showTimeUnits\">\n        <div :class=\"nh.be('pad')\"></div>\n        <div\n          v-if=\"enabled.hour\"\n          :class=\"[nh.be('unit'), getUnitFocusClass('hour')]\"\n          role=\"spinbutton\"\n          :aria-label=\"label.hour\"\n          :aria-valuenow=\"props.dateValue.hour\"\n          :aria-valuetext=\"formattedHour\"\n          :aria-valuemin=\"0\"\n          :aria-valuemax=\"23\"\n          :aria-labelledby=\"labeledBy\"\n          @click=\"handleInputFocus('hour')\"\n        >\n          {{ formattedHour }}\n        </div>\n        <div\n          v-if=\"labels.hour\"\n          :class=\"nh.be('label')\"\n          aria-hidden\n          @click=\"handleInputFocus('hour')\"\n        >\n          {{ labels.hour }}\n        </div>\n        <template v-if=\"enabled.minute\">\n          <div v-if=\"enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\n            {{ timeSeparator }}\n          </div>\n          <div\n            :class=\"[nh.be('unit'), getUnitFocusClass('minute')]\"\n            role=\"spinbutton\"\n            :aria-label=\"label.minute\"\n            :aria-valuenow=\"props.dateValue.minute\"\n            :aria-valuetext=\"formattedMinute\"\n            :aria-valuemin=\"0\"\n            :aria-valuemax=\"59\"\n            :aria-labelledby=\"labeledBy\"\n            @click=\"handleInputFocus('minute')\"\n          >\n            {{ formattedMinute }}\n          </div>\n          <div\n            v-if=\"labels.minute\"\n            :class=\"nh.be('label')\"\n            aria-hidden\n            @click=\"handleInputFocus('minute')\"\n          >\n            {{ labels.minute }}\n          </div>\n        </template>\n        <template v-if=\"enabled.second\">\n          <div v-if=\"enabled.minute || enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\n            {{ timeSeparator }}\n          </div>\n          <div\n            :class=\"[nh.be('unit'), getUnitFocusClass('second')]\"\n            role=\"spinbutton\"\n            :aria-label=\"label.second\"\n            :aria-valuenow=\"props.dateValue.second\"\n            :aria-valuetext=\"formattedSecond\"\n            :aria-valuemin=\"0\"\n            :aria-valuemax=\"59\"\n            :aria-labelledby=\"labeledBy\"\n            @click=\"handleInputFocus('second')\"\n          >\n            {{ formattedSecond }}\n          </div>\n          <div\n            v-if=\"labels.second\"\n            :class=\"nh.be('label')\"\n            aria-hidden\n            @click=\"handleInputFocus('second')\"\n          >\n            {{ labels.second }}\n          </div>\n        </template>\n      </template>\n    </template>\n  </div>\n</template>\n","import {\n  booleanNumberProp,\n  booleanProp,\n  buildProps,\n  classProp,\n  eventProp,\n  styleProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { BarScrollPayload, ScrollMode, ScrollPayload } from './symbol'\n\nexport const scrollProps = buildProps({\n  scrollClass: classProp,\n  scrollStyle: styleProp,\n  scrollAttrs: Object as PropType<Record<string, any>>,\n  mode: String as PropType<ScrollMode>,\n  width: [Number, String],\n  height: [Number, String],\n  deltaX: Number,\n  deltaY: Number,\n  disabled: booleanProp,\n  pointer: booleanProp,\n  wheel: booleanProp,\n  scrollX: Number,\n  scrollY: Number,\n  useXBar: booleanProp,\n  useYBar: booleanProp,\n  barFade: Number,\n  barClass: classProp,\n  autoplay: booleanNumberProp,\n  playWaiting: Number,\n  noBuffer: booleanProp,\n  noTransition: booleanProp,\n  onBeforeScroll: Function as PropType<(payload: { signX: number, signY: number }) => boolean>,\n  useBarTrack: booleanProp,\n  scrollTag: String,\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>(),\n  onXEnabledChange: eventProp<(enabled: boolean) => void>(),\n  onYEnabledChange: eventProp<(enabled: boolean) => void>(),\n  onWheel: eventProp<(payload: BarScrollPayload & { sign: 1 | -1 }) => void>(),\n  onScrollStart: eventProp<(payload: Omit<ScrollPayload, 'type'>) => void>(),\n  onScroll: eventProp<(payload: ScrollPayload) => void>(),\n  onScrollEnd: eventProp<(payload: Omit<ScrollPayload, 'type'>) => void>(),\n  onBarScrollStart: eventProp<(payload: BarScrollPayload) => void>(),\n  onBarScroll: eventProp<(payload: BarScrollPayload) => void>(),\n  onBarScrollEnd: eventProp<(payload: BarScrollPayload) => void>(),\n  onReady: eventProp()\n})\n\nexport type ScrollProps = ExtractPropTypes<typeof scrollProps>\nexport type ScrollCProps = ConfigurableProps<ScrollProps, 'scrollX' | 'scrollY', 'onBeforeScroll'>\n","import { computed, nextTick, onMounted, reactive, ref, watch } from 'vue'\n\nimport { useManualRef } from '@vexip-ui/hooks'\nimport { multipleFixed, toNumber } from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\nimport type { ScrollMode } from './symbol'\n\nexport function useScrollWrapper({\n  mode,\n  disabled,\n  width,\n  height,\n  scrollX,\n  scrollY,\n  onResize,\n  onBeforeRefresh,\n  onAfterRefresh\n}: {\n  mode: Ref<Exclude<ScrollMode, 'horizontal-exact'>>,\n  disabled: Ref<boolean>,\n  width: Ref<number | string>,\n  height: Ref<number | string>,\n  scrollX: Ref<number>,\n  scrollY: Ref<number>,\n  onResize?: (entry: ResizeObserverEntry) => void,\n  onBeforeRefresh?: () => void,\n  onAfterRefresh?: () => void\n}) {\n  const { manualRef, triggerUpdate } = useManualRef()\n\n  const wrapperEl = ref<HTMLElement>()\n  const contentEl = ref<HTMLElement>()\n\n  // 容器长宽\n  const wrapper = reactive({\n    el: wrapperEl,\n    width: toNumber(width.value),\n    height: toNumber(height.value)\n  })\n\n  // 内容长宽\n  const content = reactive({\n    el: contentEl,\n    width: 0,\n    height: 0\n  })\n\n  const x = manualRef(-scrollX.value)\n  const y = manualRef(-scrollY.value)\n\n  const isReady = ref(false)\n\n  const percentX = manualRef(0)\n  const percentY = manualRef(0)\n\n  const xScrollLimit = computed(() => {\n    return wrapper.width ? wrapper.width - content.width : 0\n  })\n  const yScrollLimit = computed(() => {\n    return wrapper.height ? wrapper.height - content.height : 0\n  })\n  const enableXScroll = computed(() => {\n    return (\n      !disabled.value &&\n      mode.value !== 'vertical' &&\n      !!wrapper.width &&\n      content.width - wrapper.width > 1\n    )\n  })\n  const enableYScroll = computed(() => {\n    return (\n      !disabled.value &&\n      mode.value !== 'horizontal' &&\n      !!wrapper.height &&\n      content.height - wrapper.height > 1\n    )\n  })\n  const xBarLength = computed(() => {\n    if (wrapper.width) {\n      return Math.max(Math.min((wrapper.width / (content.width || 1)) * 100, 99), 5)\n    }\n\n    return 35\n  })\n  const yBarLength = computed(() => {\n    if (wrapper.height) {\n      return Math.max(Math.min((wrapper.height / (content.height || 1)) * 100, 99), 5)\n    }\n\n    return 35\n  })\n\n  watch(wrapperEl, () => {\n    refreshWrapper()\n  })\n  watch(contentEl, () => {\n    computeContentSize()\n  })\n  watch(scrollX, value => {\n    x.value = -value\n    verifyScroll()\n  })\n  watch(scrollY, value => {\n    y.value = -value\n    verifyScroll()\n  })\n  watch(width, () => {\n    refreshWrapper().then(verifyScroll)\n  })\n  watch(height, () => {\n    refreshWrapper().then(verifyScroll)\n  })\n\n  function computeWrapperSize(sizeType: 'width' | 'height') {\n    return nextTick(() => {\n      if (!wrapper.el) return\n\n      const size = sizeType === 'width' ? width.value : height.value\n      const titleCaseSizeType = sizeType.slice(0, 1).toUpperCase() + sizeType.slice(1)\n\n      // 获取 wrapper 的 px 大小\n      if (typeof size === 'string') {\n        if (!size.endsWith('px') && (!size || Number.isNaN(Number(size)))) {\n          wrapper[sizeType] =\n            wrapper.el[`offset${titleCaseSizeType}` as 'offsetWidth' | 'offsetHeight']\n        } else {\n          wrapper[sizeType] = parseInt(size)\n        }\n      } else {\n        wrapper[sizeType] = size\n      }\n    })\n  }\n\n  async function refreshWrapper() {\n    const promises: Promise<void>[] = []\n\n    if (mode.value !== 'vertical') {\n      promises.push(computeWrapperSize('width'))\n    }\n\n    if (mode.value !== 'horizontal') {\n      promises.push(computeWrapperSize('height'))\n    }\n\n    await Promise.all(promises)\n  }\n\n  let timer: ReturnType<typeof setTimeout>\n\n  function computeContentSize() {\n    clearTimeout(timer)\n\n    return new Promise<void>(resolve => {\n      isReady.value = false\n\n      timer = setTimeout(() => {\n        if (!content.el) {\n          resolve()\n          return\n        }\n\n        if (mode.value !== 'vertical') {\n          content.width = content.el.offsetWidth\n\n          if (wrapper.width >= content.width) {\n            x.value = 0\n          } else {\n            if (x.value === 0) {\n              x.value = -scrollX.value\n            }\n          }\n        }\n\n        if (mode.value !== 'horizontal') {\n          content.height = content.el.offsetHeight\n\n          if (wrapper.height >= content.height) {\n            y.value = 0\n          } else {\n            if (y.value === 0) {\n              y.value = -scrollY.value\n            }\n          }\n        }\n\n        setTimeout(() => {\n          isReady.value = true\n          verifyScroll()\n          resolve()\n        }, 1)\n      }, 0)\n    })\n  }\n\n  /**\n   * Will post process the percent scroll values.\n   */\n  function verifyScroll() {\n    if (!isReady.value) {\n      return\n    }\n\n    if (mode.value !== 'vertical') {\n      x.value = Math.min(0, Math.max(x.value, xScrollLimit.value))\n\n      if (mode.value !== 'both') {\n        y.value = 0\n      }\n    }\n\n    if (mode.value !== 'horizontal') {\n      y.value = Math.min(0, Math.max(y.value, yScrollLimit.value))\n\n      if (mode.value !== 'both') {\n        x.value = 0\n      }\n    }\n\n    computePercent()\n    triggerUpdate()\n  }\n\n  function computePercent() {\n    percentX.value = multipleFixed(x.value / (xScrollLimit.value || -1), 100, 2)\n    percentY.value = multipleFixed(y.value / (yScrollLimit.value || -1), 100, 2)\n\n    percentX.value = Math.max(0, Math.min(percentX.value, 100))\n    percentY.value = Math.max(0, Math.min(percentY.value, 100))\n  }\n\n  function handleResize(entity: ResizeObserverEntry) {\n    refresh()\n    onResize?.(entity)\n  }\n\n  let isMounted = false\n\n  onMounted(() => {\n    refresh()\n    isMounted = true\n  })\n\n  async function refresh() {\n    if (typeof onBeforeRefresh === 'function') {\n      onBeforeRefresh()\n    }\n\n    refreshWrapper()\n    await computeContentSize().then(() => {\n      setTimeout(\n        () => {\n          verifyScroll()\n\n          if (typeof onAfterRefresh === 'function') {\n            onAfterRefresh()\n          }\n        },\n        isMounted ? 20 : 100\n      )\n    })\n  }\n\n  return {\n    wrapperEl,\n    contentEl,\n\n    wrapper,\n    content,\n    isReady,\n    x,\n    y,\n    percentX,\n    percentY,\n    xScrollLimit,\n    yScrollLimit,\n    enableXScroll,\n    enableYScroll,\n    xBarLength,\n    yBarLength,\n\n    handleResize,\n    verifyScroll,\n    computePercent,\n    refresh,\n    triggerUpdate\n  }\n}\n","import { USE_TOUCH } from '@vexip-ui/utils'\n\nexport type ScrollMode = 'horizontal' | 'horizontal-exact' | 'vertical' | 'both'\n\nexport interface ScrollPayload {\n  type: Exclude<ScrollMode, 'horizontal-exact'>,\n  clientX: number,\n  clientY: number,\n  percentX: number,\n  percentY: number\n}\n\nexport interface BarScrollPayload {\n  type: 'vertical' | 'horizontal',\n  clientX: number,\n  clientY: number,\n  percentX: number,\n  percentY: number\n}\n\nexport interface ScrollState {\n  scrollX: number,\n  scrollY: number,\n  percentX: number,\n  percentY: number,\n  enableXScroll: number,\n  enableYScroll: number\n}\n\nexport interface ScrollSlotParams {\n  getState: () => ScrollState,\n  refresh: () => void,\n  scrollTo: (clientX: number, clientY: number, duration?: number) => void,\n  scrollBy: (deltaX: number, deltaY: number, duration?: number) => void,\n  scrollToElement: (el: string | Element, duration?: number, offset?: number) => void,\n  ensureInView: (el: string | Element, duration?: number, offset?: number) => void\n}\n\nexport const scrollModes = Object.freeze<ScrollMode[]>([\n  'horizontal',\n  'horizontal-exact',\n  'vertical',\n  'both'\n])\n\nexport const MOVE_EVENT = USE_TOUCH ? 'touchmove' : 'mousemove'\nexport const UP_EVENT = USE_TOUCH ? 'touchend' : 'mouseup'\n","<script setup lang=\"ts\">\nimport { Scrollbar } from '@/components/scrollbar'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport {\n  computed,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  shallowReadonly,\n  toRef,\n  watch,\n  watchEffect\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useRtl, useSetTimeout } from '@vexip-ui/hooks'\nimport { USE_TOUCH, createEventEmitter, isClient, isElement, isTrue } from '@vexip-ui/utils'\nimport { scrollProps } from './props'\nimport { useScrollWrapper } from './hooks'\nimport { MOVE_EVENT, UP_EVENT, scrollModes } from './symbol'\n\nimport type { ScrollbarExposed } from '@/components/scrollbar'\nimport type { EventHandler } from '@vexip-ui/utils'\nimport type { ScrollMode } from './symbol'\n\ndefineOptions({ name: 'Scroll' })\n\nconst _props = defineProps(scrollProps)\nconst props = useProps('scroll', _props, {\n  scrollClass: null,\n  scrollStyle: null,\n  scrollAttrs: null,\n  mode: {\n    default: 'vertical',\n    validator: value => scrollModes.includes(value)\n  },\n  width: '',\n  height: '',\n  deltaX: 40,\n  deltaY: 40,\n  disabled: false,\n  pointer: USE_TOUCH,\n  wheel: true,\n  scrollX: {\n    default: 0,\n    static: true\n  },\n  scrollY: {\n    default: 0,\n    static: true\n  },\n  useXBar: false,\n  useYBar: false,\n  barFade: 1500,\n  barClass: null,\n  autoplay: false,\n  playWaiting: 500,\n  noBuffer: false,\n  noTransition: false,\n  onBeforeScroll: {\n    default: null,\n    isFunc: true\n  },\n  useBarTrack: false,\n  scrollTag: 'div'\n})\n\nconst emitter = createEventEmitter()\n\nconst nh = useNameHelper('scroll')\nconst { isRtl } = useRtl()\nconst { timer } = useSetTimeout()\n\nconst usingBar = ref(false)\nconst scrolling = ref(false)\nconst transitionDuration = ref<number>(0)\nconst mode = computed(() => (props.mode === 'horizontal-exact' ? 'horizontal' : props.mode))\n\nlet waitDelay = 180\n\nconst xBar = ref<ScrollbarExposed>()\nconst yBar = ref<ScrollbarExposed>()\n\nlet initialized = false\n\nconst {\n  wrapperEl,\n  contentEl,\n\n  wrapper,\n  isReady,\n  x,\n  y,\n  percentX,\n  percentY,\n  xScrollLimit,\n  yScrollLimit,\n  enableXScroll,\n  enableYScroll,\n  xBarLength,\n  yBarLength,\n\n  handleResize,\n  verifyScroll,\n  computePercent,\n  refresh,\n  triggerUpdate\n} = useScrollWrapper({\n  mode,\n  disabled: toRef(props, 'disabled'),\n  width: toRef(props, 'width'),\n  height: toRef(props, 'height'),\n  scrollX: toRef(props, 'scrollX'),\n  scrollY: toRef(props, 'scrollY'),\n  onResize: entry => {\n    emitEvent(props.onResize, entry)\n  },\n  // onBeforeRefresh: stopAutoplay,\n  onAfterRefresh: () => {\n    syncBarScroll()\n\n    if (!initialized) {\n      initialized = true\n      startAutoplay()\n    }\n  }\n})\n\nconst slotParams = shallowReadonly({\n  getState,\n  refresh,\n  scrollTo,\n  scrollBy,\n  scrollToElement,\n  ensureInView\n})\n\n/* autoplay */\nconst canPlay = ref(false)\n\nconst canAutoplay = computed(() => {\n  return (\n    mode.value !== 'both' &&\n    (isTrue(props.autoplay) || +props.autoplay > 1000) &&\n    ((mode.value === 'horizontal' && enableXScroll.value) ||\n      (mode.value === 'vertical' && enableYScroll.value))\n  )\n})\n\nwatch([() => props.autoplay, () => props.playWaiting], () => {\n  stopAutoplay()\n  nextTick(startAutoplay)\n})\n\nfunction startAutoplay() {\n  if (!canAutoplay.value) return\n\n  stopAutoplay()\n\n  const distance = mode.value === 'horizontal' ? 'width' : 'height'\n  const limit = mode.value === 'horizontal' ? xScrollLimit : yScrollLimit\n  // const prop = mode.value === 'horizontal' ? 'x' : 'y'\n  const prop = mode.value === 'horizontal' ? x : y\n  const waiting = props.playWaiting < 20 ? 20 : props.playWaiting\n\n  let playSpeed = 0.5\n\n  if (typeof props.autoplay === 'number') {\n    playSpeed = (wrapper[distance] / props.autoplay) * 16\n  }\n\n  const precessScroll = () => {\n    computePercent()\n    triggerUpdate()\n    syncBarScroll()\n    emitScrollEvent(mode.value)\n  }\n  const scroll = () => {\n    prop.value -= playSpeed\n\n    if (prop.value <= limit.value) {\n      prop.value = limit.value\n      canPlay.value = false\n\n      precessScroll()\n\n      timer.end = setTimeout(() => {\n        scrollTo(0, 0, 500)\n\n        timer.start = setTimeout(() => {\n          canPlay.value = true\n\n          emitScrollEvent(mode.value)\n          scroll()\n        }, 500 + waiting)\n      }, waiting)\n    } else {\n      precessScroll()\n\n      if (canPlay.value) {\n        requestAnimationFrame(scroll)\n      }\n    }\n  }\n\n  timer.play = setTimeout(() => {\n    canPlay.value = true\n    scroll()\n  }, waiting)\n}\n\nfunction stopAutoplay() {\n  canPlay.value = false\n\n  clearTimeout(timer.play)\n  clearTimeout(timer.start)\n  clearTimeout(timer.end)\n}\n/* autoplay */\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(mode.value),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('using-bar')]: usingBar.value,\n      [nh.bm('scrolling')]: scrolling.value,\n      [nh.bm('no-ready')]: !isReady.value,\n      [nh.bm('no-transition')]: props.noTransition\n    }\n  ]\n})\nconst style = computed(() => {\n  const { width, height } = props\n\n  return {\n    width: width\n      ? typeof width === 'string'\n        ? Number.isNaN(Number(width))\n          ? width\n          : `${Number(width)}px`\n        : `${width}px`\n      : undefined,\n    height: height\n      ? typeof height === 'string'\n        ? Number.isNaN(Number(height))\n          ? height\n          : `${Number(height)}px`\n        : `${height}px`\n      : undefined\n  }\n})\nconst wrapperClass = computed(() => {\n  return [props.scrollAttrs?.class, props.scrollClass, nh.be('wrapper')]\n})\nconst wrapperStyle = computed(() => {\n  return [props.scrollAttrs?.style, props.scrollStyle]\n})\n\nwatch(enableXScroll, value => {\n  emitEvent(props.onXEnabledChange, value)\n})\nwatch(enableYScroll, value => {\n  emitEvent(props.onYEnabledChange, value)\n})\nwatch(isReady, value => {\n  if (value) {\n    transitionDuration.value = -1\n    emitEvent(props.onReady)\n  } else {\n    transitionDuration.value = 0\n  }\n})\nwatchEffect(() => {\n  if (!contentEl.value) return\n\n  contentEl.value.style.transform = `translate3d(${isRtl.value ? -x.value : x.value}px, ${\n    y.value\n  }px, 0)`\n})\nwatchEffect(() => {\n  if (!contentEl.value) return\n\n  contentEl.value.style.transitionDuration =\n    transitionDuration.value < 0 ? '' : `${transitionDuration.value}ms`\n})\n\nonMounted(() => {\n  if (!isClient || !wrapperEl.value) return\n\n  const style = getComputedStyle(wrapperEl.value)\n  const duration = style.getPropertyValue(nh.cv('move-duration')).trim()\n\n  if (duration.endsWith('ms')) {\n    waitDelay = parseFloat(duration)\n  } else if (duration.endsWith('s')) {\n    waitDelay = parseFloat(duration) * 1000\n  }\n\n  waitDelay = Number.isNaN(waitDelay) ? 140 : waitDelay\n})\n\nonBeforeUnmount(stopAutoplay)\n\ndefineExpose({\n  percentX,\n  percentY,\n  x,\n  y,\n  isReady,\n\n  xBarLength,\n  yBarLength,\n  enableXScroll,\n  enableYScroll,\n\n  wrapper: wrapperEl,\n  content: contentEl,\n  xBar,\n  yBar,\n\n  refresh,\n  scrollTo,\n  scrollBy,\n  scrollToElement,\n  ensureInView,\n  getXScrollLimit,\n  getYScrollLimit,\n  addScrollListener,\n  removeScrollListener\n})\n\nfunction getCommonPayload() {\n  return {\n    clientX: -x.value,\n    clientY: -y.value,\n    percentX: percentX.value,\n    percentY: percentY.value\n  }\n}\n\nfunction syncBarScroll() {\n  xBar.value?.handleScroll(percentX.value)\n  yBar.value?.handleScroll(percentY.value)\n}\n\nfunction handleMouseDown(event: MouseEvent) {\n  if (!props.pointer || event.button > 0 || USE_TOUCH) {\n    return false\n  }\n\n  handlePointerDown(event)\n}\n\nfunction handleTouchStart(event: TouchEvent) {\n  if (!props.pointer || event.touches.length !== 1) {\n    return false\n  }\n\n  handlePointerDown(event)\n}\n\n// 记录滚动开始位置\nlet xScrollStartAt = 0\nlet yScrollStartAt = 0\n\n// 记录滚动开始鼠标位置\nlet cursorXPosition = 0\nlet cursorYPosition = 0\n\nlet moved = false\nlet target: EventTarget | null = null\nlet lastDate = 0\n\nfunction handlePointerDown(event: MouseEvent | TouchEvent) {\n  if (!enableXScroll.value && !enableYScroll.value) {\n    return false\n  }\n\n  if (event.cancelable) {\n    event.preventDefault()\n  }\n\n  prepareScroll()\n\n  transitionDuration.value = 0\n\n  const pointer = 'touches' in event ? event.touches[0] : event\n\n  xScrollStartAt = x.value\n  yScrollStartAt = y.value\n  cursorXPosition = pointer.clientX\n  cursorYPosition = pointer.clientY\n\n  moved = false\n  target = event.target\n  lastDate = Date.now()\n\n  document.addEventListener(MOVE_EVENT, handlePointerMove)\n  document.addEventListener(UP_EVENT, handlePointerUp)\n\n  emitEvent(props.onScrollStart, getCommonPayload())\n}\n\nfunction handlePointerMove(event: MouseEvent | TouchEvent) {\n  event.stopPropagation()\n\n  if (!USE_TOUCH) {\n    event.preventDefault()\n  }\n\n  const pointer = 'touches' in event ? event.touches[0] : event\n  const signX = pointer.clientX - cursorXPosition > 0 ? 1 : -1\n  const signY = pointer.clientY - cursorYPosition > 0 ? 1 : -1\n\n  if (props.onBeforeScroll?.({ signX, signY }) === false) {\n    return false\n  }\n\n  scrolling.value = true\n\n  if (enableXScroll.value) {\n    x.value = xScrollStartAt + pointer.clientX - cursorXPosition\n    moved = true\n  }\n\n  if (enableYScroll.value) {\n    y.value = yScrollStartAt + pointer.clientY - cursorYPosition\n    moved = true\n  }\n\n  if (props.noBuffer) {\n    verifyScroll()\n  } else {\n    computePercent()\n    triggerUpdate()\n  }\n\n  syncBarScroll()\n  emitScrollEvent(mode.value)\n}\n\nfunction handlePointerUp(event: MouseEvent | TouchEvent) {\n  if (!moved && target && event.target === target && Date.now() - lastDate <= 500) {\n    target.dispatchEvent(new MouseEvent('click', event))\n  }\n\n  document.removeEventListener(MOVE_EVENT, handlePointerMove)\n  document.removeEventListener(UP_EVENT, handlePointerUp)\n\n  transitionDuration.value = -1\n  moved = false\n\n  handleBuffer()\n  verifyScroll()\n  syncBarScroll()\n  emitEvent(props.onScrollEnd, getCommonPayload())\n  startAutoplay()\n}\n\n// 按下 shift 时为横向滚动，保持和原生操作一致\nfunction handleWheel(event: WheelEvent, type: 'vertical' | 'horizontal') {\n  const isVerticalScroll = enableYScroll.value && type === 'vertical'\n  const isHorizontalScroll = enableXScroll.value && type === 'horizontal'\n\n  // 纵横滚动均使用 deltaY 标记\n  const sign = event.deltaY > 0 ? -1 : 1\n\n  if (\n    props.wheel &&\n    (isVerticalScroll || isHorizontalScroll) &&\n    props.onBeforeScroll?.({ signX: -sign, signY: -sign }) !== false\n  ) {\n    event.preventDefault()\n    event.stopPropagation()\n  } else {\n    return true\n  }\n\n  if (mode.value !== 'both' && mode.value !== type) return false\n\n  prepareScroll()\n\n  const computedDelta = sign * (type === 'horizontal' ? props.deltaX : props.deltaY)\n\n  if (isVerticalScroll) {\n    y.value += computedDelta\n  } else if (isHorizontalScroll) {\n    x.value += computedDelta\n  }\n\n  verifyScroll()\n  syncBarScroll()\n  emitScrollEvent(type)\n\n  emitEvent(props.onWheel, {\n    ...getCommonPayload(),\n    type,\n    sign: -sign as 1 | -1\n  })\n\n  startAutoplay()\n}\n\nfunction prepareScroll() {\n  stopAutoplay()\n  clearTimeout(timer.buffer)\n}\n\nfunction handleBuffer() {\n  if (props.noBuffer) {\n    timer.buffer = setTimeout(() => {\n      scrolling.value = false\n    }, 300)\n  } else {\n    scrolling.value = false\n  }\n}\n\nfunction handleBarScrollStart(type: 'vertical' | 'horizontal') {\n  usingBar.value = true\n  emitEvent(props.onBarScrollStart, { ...getCommonPayload(), type })\n}\n\nfunction handleBarScrollEnd(type: 'vertical' | 'horizontal') {\n  usingBar.value = false\n  emitEvent(props.onBarScrollEnd, { ...getCommonPayload(), type })\n}\n\nfunction handleXBarScroll(percent: number) {\n  percentX.value = percent\n  x.value = (percent * xScrollLimit.value) / 100\n  triggerUpdate()\n\n  emitEvent(props.onBarScroll, {\n    ...getCommonPayload(),\n    type: 'horizontal'\n  })\n  emitScrollEvent('horizontal')\n}\n\nfunction handleYBarScroll(percent: number) {\n  percentY.value = percent\n  y.value = (percent * yScrollLimit.value) / 100\n  triggerUpdate()\n\n  emitEvent(props.onBarScroll, {\n    ...getCommonPayload(),\n    type: 'vertical'\n  })\n  emitScrollEvent('vertical')\n}\n\nfunction emitScrollEvent(type: Exclude<ScrollMode, 'horizontal-exact'>) {\n  emitEvent(props.onScroll, {\n    ...getCommonPayload(),\n    type\n  })\n  emitter.emit('scroll', {\n    ...getCommonPayload(),\n    type\n  })\n}\n\nfunction ensureScrollOffset() {\n  if (wrapperEl.value) {\n    wrapperEl.value.scrollTop = 0\n    wrapperEl.value.scrollLeft = 0\n  }\n}\n\nfunction getState() {\n  const { clientX: scrollX, clientY: scrollY, percentX, percentY } = getCommonPayload()\n\n  return {\n    scrollX,\n    scrollY,\n    percentX,\n    percentY,\n    enableXScroll: enableXScroll.value,\n    enableYScroll: enableYScroll.value\n  }\n}\n\nfunction waitTransition(duration = waitDelay) {\n  clearTimeout(timer.wait)\n\n  return new Promise<void>(resolve => {\n    timer.wait = setTimeout(() => resolve(), duration + 1)\n  })\n}\n\nfunction scrollTo(clientX: number, clientY: number, duration?: number) {\n  setDuration(duration)\n  nextTick(() => {\n    let changed = false\n\n    if (enableXScroll.value && Math.abs(x.value + clientX) > 0.01) {\n      x.value = -clientX\n      changed = true\n    }\n\n    if (enableYScroll.value && Math.abs(y.value + clientY) > 0.01) {\n      y.value = -clientY\n      changed = true\n    }\n\n    verifyScroll()\n    syncBarScroll()\n\n    if (!changed) transitionDuration.value = -1\n  })\n\n  return waitTransition(duration)\n}\n\nfunction scrollBy(deltaX: number, deltaY: number, duration?: number) {\n  setDuration(duration)\n  nextTick(() => {\n    let changed = false\n\n    if (deltaX && enableXScroll) {\n      x.value -= deltaX\n      changed = true\n    }\n\n    if (deltaY && enableYScroll) {\n      y.value -= deltaY\n      changed = true\n    }\n\n    verifyScroll()\n    syncBarScroll()\n\n    if (!changed) transitionDuration.value = -1\n  })\n\n  return waitTransition(duration)\n}\n\nfunction setDuration(duration?: number) {\n  if (typeof duration === 'number') {\n    transitionDuration.value = duration\n\n    if (transitionDuration.value === 0) {\n      nextTick(() => {\n        transitionDuration.value = -1\n      })\n    }\n  }\n}\n\nfunction scrollToElement(el: string | Element, duration?: number, offset = 0) {\n  if (!contentEl.value) return Promise.resolve()\n\n  if (typeof el === 'string') {\n    el = contentEl.value.querySelector(el)!\n  }\n\n  if (!isElement(el)) return Promise.resolve()\n\n  const wrapperRect = contentEl.value.getBoundingClientRect()\n  const elRect = el.getBoundingClientRect()\n\n  let clientX = 0\n  let clientY = 0\n\n  if (mode.value !== 'vertical') {\n    clientX = elRect.left - wrapperRect.left + offset\n  }\n\n  if (mode.value !== 'horizontal') {\n    clientY = elRect.top - wrapperRect.top + offset\n  }\n\n  return scrollTo(clientX, clientY, duration)\n}\n\nfunction ensureInView(el: string | Element, duration?: number, offset = 0) {\n  if (!wrapperEl.value) return Promise.resolve()\n\n  if (typeof el === 'string') {\n    el = wrapperEl.value.querySelector(el)!\n  }\n\n  if (!isElement(el)) return Promise.resolve()\n\n  const wrapperRect = wrapperEl.value.getBoundingClientRect()\n  const elRect = el.getBoundingClientRect()\n\n  let clientX = 0\n  let clientY = 0\n\n  if (mode.value !== 'vertical') {\n    if (elRect.left < wrapperRect.left + offset) {\n      clientX = elRect.left - wrapperRect.left - offset\n    } else if (elRect.right > wrapperRect.right - offset) {\n      clientX = elRect.right - wrapperRect.right + offset\n    }\n  }\n\n  if (mode.value !== 'horizontal') {\n    if (elRect.top < wrapperRect.top + offset) {\n      clientY = elRect.top - wrapperRect.top - offset\n    } else if (elRect.bottom > wrapperRect.bottom - offset) {\n      clientY = elRect.bottom - wrapperRect.bottom + offset\n    }\n  }\n\n  return scrollBy(clientX, clientY, duration)\n}\n\nfunction getXScrollLimit() {\n  return [0, -xScrollLimit.value]\n}\n\nfunction getYScrollLimit() {\n  return [0, -yScrollLimit.value]\n}\n\nfunction addScrollListener(listener: EventHandler) {\n  emitter.on('scroll', listener)\n}\n\nfunction removeScrollListener(listener: EventHandler) {\n  emitter.off('scroll', listener)\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapperEl\"\n    :class=\"className\"\n    :style=\"style\"\n    @mousedown=\"handleMouseDown\"\n    @touchstart=\"handleTouchStart\"\n    @scroll=\"ensureScrollOffset\"\n    @wheel.exact=\"\n      handleWheel($event, props.mode === 'horizontal-exact' ? 'horizontal' : 'vertical')\n    \"\n    @wheel.shift=\"handleWheel($event, 'horizontal')\"\n  >\n    <div v-if=\"$slots.extra\" :class=\"nh.be('extra')\">\n      <slot name=\"extra\" v-bind=\"slotParams\"></slot>\n    </div>\n    <ResizeObserver throttle :on-resize=\"handleResize\">\n      <component\n        :is=\"props.scrollTag || 'div'\"\n        v-bind=\"props.scrollAttrs\"\n        ref=\"contentEl\"\n        :class=\"wrapperClass\"\n        :style=\"wrapperStyle\"\n        @transitionend=\"transitionDuration = -1\"\n      >\n        <slot v-bind=\"slotParams\"></slot>\n      </component>\n    </ResizeObserver>\n    <Scrollbar\n      v-if=\"props.useXBar\"\n      ref=\"xBar\"\n      inherit\n      placement=\"bottom\"\n      :class=\"[nh.bem('bar', 'horizontal'), props.barClass]\"\n      :fade=\"props.barFade\"\n      :bar-length=\"xBarLength\"\n      :disabled=\"!enableXScroll\"\n      :duration=\"transitionDuration\"\n      :use-track=\"props.useBarTrack\"\n      @scroll-start=\"handleBarScrollStart('horizontal')\"\n      @scroll=\"handleXBarScroll\"\n      @scroll-end=\"handleBarScrollEnd('horizontal')\"\n    ></Scrollbar>\n    <Scrollbar\n      v-if=\"props.useYBar\"\n      ref=\"yBar\"\n      inherit\n      placement=\"right\"\n      :class=\"[nh.bem('bar', 'vertical'), props.barClass]\"\n      :fade=\"props.barFade\"\n      :bar-length=\"yBarLength\"\n      :disabled=\"!enableYScroll\"\n      :duration=\"transitionDuration\"\n      :use-track=\"props.useBarTrack\"\n      @scroll-start=\"handleBarScrollStart('vertical')\"\n      @scroll=\"handleYBarScroll\"\n      @scroll-end=\"handleBarScrollEnd('vertical')\"\n    ></Scrollbar>\n  </div>\n</template>\n","import type { InjectionKey } from 'vue'\n\nexport type WheelRawOption =\n  | string\n  | number\n  | {\n    value: string | number,\n    label?: string,\n    disabled?: boolean\n  }\n\nexport interface WheelOption {\n  value: string | number,\n  label: string,\n  disabled: boolean,\n  meta: WheelRawOption\n}\n\nexport interface ItemState {\n  width: number,\n  height: number,\n  el?: HTMLElement | null,\n  value: number | string,\n  disabled: boolean,\n  meta: any\n}\n\nexport interface WheelState {\n  increaseItem(item: ItemState): void,\n  decreaseItem(item: ItemState): void\n}\n\nexport interface WheelSlots {\n  default?: (params: { option: WheelOption, index: number }) => any\n}\n\nexport const WHEEL_STATE = '__VXP_WHEEL_STATE' as unknown as InjectionKey<WheelState>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, onMounted, reactive, ref, toRef } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { WHEEL_STATE } from './symbol'\n\ndefineOptions({ name: 'WheelItem' })\n\nconst props = defineProps({\n  value: {\n    type: [Number, String],\n    default: null\n  },\n  disabled: {\n    type: Boolean,\n    default: false\n  },\n  active: {\n    type: Boolean,\n    default: false\n  },\n  meta: {\n    type: [String, Number, Object],\n    default: null\n  }\n})\n\nconst nh = useNameHelper('wheel')\n\nconst wheelState = inject(WHEEL_STATE, null)\n\nconst width = ref(0)\nconst height = ref(0)\n\nconst wrapper = ref<HTMLElement>()\n\nconst state = reactive({\n  width,\n  height,\n  el: wrapper,\n  value: toRef(props, 'value'),\n  disabled: toRef(props, 'disabled'),\n  meta: toRef(props, 'meta')\n})\n\nconst style = computed(() => {\n  return {\n    width: width.value ? `${width.value}px` : undefined,\n    height: height.value ? `${height.value}px` : undefined\n  }\n})\n\nif (wheelState) {\n  onMounted(() => {\n    wheelState.increaseItem(state)\n  })\n\n  onBeforeUnmount(() => {\n    wheelState.decreaseItem(state)\n  })\n}\n\ndefineExpose({ wrapper })\n</script>\n\n<template>\n  <li\n    ref=\"wrapper\"\n    :class=\"[\n      nh.be('item'),\n      disabled && nh.bem('item', 'disabled'),\n      active && nh.bem('item', 'active')\n    ]\"\n    role=\"option\"\n    :aria-disabled=\"disabled ? 'true' : undefined\"\n    :aria-selected=\"active\"\n    :style=\"style\"\n  >\n    <slot>\n      {{ value }}\n    </slot>\n  </li>\n</template>\n","import { booleanProp, booleanStringProp, buildProps, eventProp, stateProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { WheelRawOption, WheelSlots } from './symbol'\n\nexport const wheelProps = buildProps({\n  state: stateProp,\n  horizontal: booleanProp,\n  value: [String, Number],\n  /**\n   * 上下或左右两侧的候选数\n   */\n  candidate: Number as PropType<0 | 1 | 2 | 3>,\n  arrow: booleanProp,\n  pointer: booleanProp,\n  options: Array as PropType<WheelRawOption[]>,\n  insertEmpty: booleanStringProp,\n  disabled: booleanProp,\n  loading: booleanProp,\n  loadingLock: booleanProp,\n  disabledItem: Function as PropType<(value: string | number, data: WheelRawOption) => boolean>,\n  noTransition: booleanProp,\n  selectable: booleanProp,\n  slots: Object as PropType<WheelSlots>,\n  onChange: eventProp<(value: string | number, data: WheelRawOption) => void>(),\n  onPrev: eventProp<(value: string | number, data: WheelRawOption) => void>(),\n  onNext: eventProp<(value: string | number, data: WheelRawOption) => void>(),\n  onItemClick: eventProp<(value: string | number, data: WheelRawOption) => void>()\n})\n\nexport type WheelProps = ExtractPropTypes<typeof wheelProps>\nexport type WheelCProps = ConfigurableProps<WheelProps>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon/'\nimport { Renderer } from '@/components/renderer'\nimport { Scroll } from '@/components/scroll'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, nextTick, provide, ref, watch } from 'vue'\n\nimport WheelItem from './wheel-item.vue'\nimport { createStateProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useDisplay, useModifier, useRtl } from '@vexip-ui/hooks'\nimport { USE_TOUCH, boundRange, debounce, debounceMinor, toFalse } from '@vexip-ui/utils'\nimport { wheelProps } from './props'\nimport { WHEEL_STATE } from './symbol'\n\nimport type { ItemState, WheelOption, WheelSlots } from './symbol'\n\ndefineOptions({ name: 'Wheel' })\n\nconst { idFor, labelId, state, disabled, loading, validateField, getFieldValue, setFieldValue } =\n  useFieldStore<string | number>(() => wrapper.value?.focus())\n\nconst _props = defineProps(wheelProps)\nconst props = useProps('wheel', _props, {\n  state: createStateProp(state),\n  horizontal: false,\n  value: {\n    default: () => getFieldValue(),\n    static: true\n  },\n  candidate: {\n    default: 2,\n    validator: value => [0, 1, 2, 3].includes(value)\n  },\n  arrow: false,\n  pointer: USE_TOUCH,\n  options: {\n    default: () => [],\n    static: true\n  },\n  insertEmpty: false,\n  disabled: () => disabled.value,\n  loading: () => loading.value,\n  loadingLock: false,\n  disabledItem: {\n    default: toFalse,\n    isFunc: true\n  },\n  noTransition: false,\n  selectable: false,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:value'])\n\ndefineSlots<WheelSlots>()\n\nconst nh = useNameHelper('wheel')\nconst icons = useIcons()\n\nconst items = ref(new Set<ItemState>())\nconst currentActive = ref(0)\nconst wrapperWidth = ref(0)\nconst wrapperHeight = ref(0)\nconst targetWidth = ref(0)\nconst targetHeight = ref(0)\nconst horizontalPadding = ref(0)\nconst verticalPadding = ref(0)\nconst isInit = ref(false)\n\nconst { isRtl } = useRtl()\n\nconst wrapper = useDisplay(displayInit)\nconst scroll = ref<InstanceType<typeof Scroll>>()\n\nuseModifier({\n  target: wrapper,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (modifier.up || modifier.down) {\n      event.preventDefault()\n      modifier.up ? handlePrev() : handleNext()\n    }\n  }\n})\n\nconst normalizedOptions = computed<WheelOption[]>(() => {\n  const options = props.options.map(option => {\n    if (typeof option === 'object') {\n      const { value, label, disabled = false } = option\n\n      return {\n        value,\n        label: label || String(value),\n        disabled,\n        meta: option\n      }\n    }\n\n    return { value: option, label: String(option), disabled: false, meta: option }\n  })\n\n  if (props.insertEmpty) {\n    options.unshift({\n      value: '',\n      label: typeof props.insertEmpty === 'string' ? props.insertEmpty : '-',\n      disabled: false,\n      meta: ''\n    })\n  }\n\n  return options\n})\nconst itemList = computed(() => {\n  return Array.from(items.value)\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(props.horizontal ? 'horizontal' : 'vertical'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('readonly')]: readonly.value,\n      [nh.bm('loading')]: props.loading\n    }\n  ]\n})\nconst listStyle = computed(() => {\n  if (props.horizontal) {\n    return {\n      paddingRight: `${horizontalPadding.value}px`,\n      paddingLeft: `${horizontalPadding.value}px`\n    }\n  }\n\n  return {\n    paddingTop: `${verticalPadding.value}px`,\n    paddingBottom: `${verticalPadding.value}px`\n  }\n})\nconst maskStyle = computed(() => {\n  if (props.horizontal) {\n    return {\n      width: horizontalPadding.value ? `${horizontalPadding.value}px` : undefined\n    }\n  }\n\n  return {\n    height: verticalPadding.value ? `${verticalPadding.value}px` : undefined\n  }\n})\nconst borderStyle = computed(() => {\n  const style: Record<string, string> = {\n    inset: props.horizontal\n      ? `0 ${horizontalPadding.value - 1}px`\n      : `${verticalPadding.value - 1}px 0`\n  }\n\n  if (props.horizontal) {\n    style.borderTop = '0'\n    style.borderBottom = '0'\n  } else {\n    style.borderRight = '0'\n    style.borderLeft = '0'\n  }\n\n  return style\n})\nconst prevDisabled = computed(() => {\n  return (\n    props.disabled ||\n    !itemList.value.slice(0, currentActive.value).some(item => !isItemDisabled(item))\n  )\n})\nconst nextDisabled = computed(() => {\n  return (\n    props.disabled ||\n    currentActive.value >= itemList.value.length - 1 ||\n    !itemList.value\n      .slice(currentActive.value + 1, itemList.value.length)\n      .some(item => !isItemDisabled(item))\n  )\n})\nconst prevIcon = computed(() =>\n  props.horizontal\n    ? isRtl.value\n      ? icons.value.angleRight\n      : icons.value.angleLeft\n    : icons.value.angleUp\n)\nconst nextIcon = computed(() =>\n  props.horizontal\n    ? isRtl.value\n      ? icons.value.angleLeft\n      : icons.value.angleRight\n    : icons.value.angleDown\n)\n\nprovide(WHEEL_STATE, { increaseItem, decreaseItem })\n\nconst updateActive = debounceMinor(() => {\n  const active = Math.max(\n    itemList.value.findIndex(item => item.value === props.value),\n    0\n  )\n\n  setActive(findEnabledActive(active))\n})\n\nconst computeSize = debounceMinor(() => {\n  nextTick(() => {\n    const horizontal = props.horizontal\n\n    itemList.value.forEach(item => {\n      if (item && item.el) {\n        targetWidth.value = Math.max(targetWidth.value, item.el.offsetWidth)\n        targetHeight.value = Math.max(targetHeight.value, item.el.offsetHeight)\n      }\n    })\n\n    const candidate = props.candidate\n    const showCount = 2 * candidate + 1\n\n    wrapperWidth.value = showCount * targetWidth.value\n    wrapperHeight.value = showCount * targetHeight.value\n\n    horizontalPadding.value = candidate * targetWidth.value\n    verticalPadding.value = candidate * targetHeight.value\n\n    items.value.forEach(item => {\n      if (horizontal) {\n        item.width = targetWidth.value\n      } else {\n        item.height = targetHeight.value\n      }\n    })\n\n    setTimeout(() => {\n      scroll.value?.refresh()\n    }, 0)\n  })\n})\n\nconst refreshScroll = debounce(() => {\n  if (scroll.value) {\n    let targetXScroll = 0\n    let targetYScroll = 0\n\n    if (props.horizontal) {\n      targetXScroll = currentActive.value * targetWidth.value\n    } else {\n      targetYScroll = currentActive.value * targetHeight.value\n    }\n\n    nextTick(() => {\n      scroll.value?.scrollTo(targetXScroll, targetYScroll)\n    })\n  }\n}, 20)\n\nwatch(\n  () => props.value,\n  () => {\n    updateActive()\n    refreshScroll()\n  },\n  { immediate: true }\n)\nwatch(() => props.horizontal, computeSize)\nwatch(() => props.candidate, computeSize)\n\ndefineExpose({\n  idFor,\n  currentActive,\n  isInit,\n  targetWidth,\n  targetHeight,\n  wrapperWidth,\n  wrapperHeight,\n  itemList,\n  wrapper,\n  scroll,\n  refreshScroll,\n  focus: (options?: FocusOptions) => wrapper.value?.focus(options),\n  blur: () => wrapper.value?.blur()\n})\n\nfunction isItemDisabled(item: ItemState) {\n  return item.disabled || props.disabledItem(item.value, item.meta)\n}\n\nfunction setActive(active: number) {\n  if (currentActive.value === active) return\n\n  currentActive.value = active\n\n  const item = itemList.value[active]\n  const value = item?.value\n\n  refreshScroll()\n  emit('update:value', value)\n  setFieldValue(value)\n  emitEvent(props.onChange, value, item?.meta)\n  validateField()\n}\n\nfunction queryEnabledActive(active: number, step: number) {\n  step = step / Math.abs(step)\n\n  while (itemList.value[active].disabled) {\n    active += step\n\n    if (active < 0 || active >= itemList.value.length) break\n  }\n\n  return active\n}\n\nfunction findEnabledActive(active: number, sign = 1) {\n  if (itemList.value[active] && isItemDisabled(itemList.value[active])) {\n    active = queryEnabledActive(active, 1 * sign)\n\n    if (sign > 0 ? active >= itemList.value.length : active < 0) {\n      active = queryEnabledActive(boundRange(active, 0, itemList.value.length - 1), -1 * sign)\n\n      // 全禁用\n      if (sign > 0 ? active < 0 : active >= itemList.value.length) active = 0\n    }\n  }\n\n  return active\n}\n\nfunction increaseItem(item: ItemState) {\n  items.value.add(item)\n  computeSize()\n  updateActive()\n}\n\nfunction decreaseItem(item: ItemState) {\n  items.value.delete(item)\n  computeSize()\n  updateActive()\n}\n\nfunction displayInit() {\n  computeSize()\n  scroll.value?.refresh()\n\n  nextTick(() => {\n    isInit.value = true\n\n    updateActive()\n    refreshScroll()\n  })\n}\n\nfunction beforeScroll({ signX, signY }: { signX: number, signY: number }) {\n  if (props.disabled || readonly.value) return false\n\n  const sign = props.horizontal ? signX : signY\n\n  return !((sign < 0 && prevDisabled.value) || (sign > 0 && nextDisabled.value))\n}\n\nfunction handleScrollEnd({ clientX, clientY }: { clientX: number, clientY: number }) {\n  const aboutActive = props.horizontal ? clientX / targetWidth.value : clientY / targetHeight.value\n  const active = Math.round(aboutActive)\n\n  if (active !== currentActive.value) {\n    setActive(findEnabledActive(active, active > aboutActive ? 1 : -1))\n  } else {\n    refreshScroll()\n  }\n}\n\nfunction handleWheel({\n  sign,\n  clientX,\n  clientY\n}: {\n  clientX: number,\n  clientY: number,\n  sign: 1 | -1\n}) {\n  const active = props.horizontal\n    ? Math.round(clientX / targetWidth.value)\n    : Math.round(clientY / targetHeight.value)\n\n  setActive(findEnabledActive(active, sign))\n}\n\nfunction handlePrev() {\n  if (!prevDisabled.value) {\n    setActive(findEnabledActive(currentActive.value - 1, -1))\n\n    const item = itemList.value[currentActive.value]\n\n    emitEvent(props.onPrev, item?.value, item?.meta)\n  }\n}\n\nfunction handleNext() {\n  if (!nextDisabled.value) {\n    setActive(findEnabledActive(currentActive.value + 1, 1))\n\n    const item = itemList.value[currentActive.value]\n\n    emitEvent(props.onNext, item?.value, item?.meta)\n  }\n}\n\nfunction handleItemClick(option: WheelOption, index: number) {\n  if (props.selectable && !isItemDisabled(itemList.value[index])) {\n    setActive(index)\n  }\n\n  emitEvent(props.onItemClick, option.value, option.meta)\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    tabindex=\"0\"\n    role=\"group\"\n    :aria-labelledby=\"labelId\"\n  >\n    <div\n      v-if=\"props.arrow\"\n      ref=\"prevArrow\"\n      :class=\"[\n        nh.be('arrow'),\n        nh.bem('arrow', 'prev'),\n        prevDisabled ? nh.bem('arrow', 'disabled') : ''\n      ]\"\n      aria-hidden\n      @click=\"handlePrev\"\n    >\n      <Icon v-bind=\"prevIcon\"></Icon>\n    </div>\n    <div :class=\"nh.be('scroll')\" role=\"none\">\n      <Scroll\n        ref=\"scroll\"\n        inherit\n        :scroll-x=\"props.horizontal ? targetWidth * currentActive : 0\"\n        :scroll-y=\"props.horizontal ? 0 : targetHeight * currentActive\"\n        :width=\"props.horizontal ? wrapperWidth : '100%'\"\n        :height=\"props.horizontal ? '100%' : wrapperHeight\"\n        :pointer=\"props.pointer\"\n        :mode=\"props.horizontal ? 'horizontal' : 'vertical'\"\n        :delta-x=\"targetWidth\"\n        :delta-y=\"targetHeight\"\n        :on-before-scroll=\"beforeScroll\"\n        :no-transition=\"props.noTransition\"\n        @wheel=\"handleWheel\"\n        @scroll-end=\"handleScrollEnd\"\n      >\n        <ul ref=\"list\" :class=\"nh.be('list')\" :style=\"listStyle\">\n          <template v-if=\"isInit\">\n            <WheelItem\n              v-for=\"(option, index) in normalizedOptions\"\n              :key=\"index\"\n              :value=\"option.value\"\n              :disabled=\"option.disabled || props.disabledItem(option.value, option)\"\n              :active=\"currentActive === index\"\n              :meta=\"option.meta\"\n              @click=\"handleItemClick(option, index)\"\n            >\n              <slot :option=\"option\" :index=\"index\">\n                <Renderer :renderer=\"props.slots.default\" :data=\"{ option, index }\">\n                  {{ option.label }}\n                </Renderer>\n              </slot>\n            </WheelItem>\n          </template>\n        </ul>\n      </Scroll>\n      <template v-if=\"props.candidate\">\n        <div :class=\"[nh.be('mask'), nh.bem('mask', 'top')]\" :style=\"maskStyle\"></div>\n        <div :class=\"[nh.be('mask'), nh.bem('mask', 'bottom')]\" :style=\"maskStyle\"></div>\n      </template>\n      <div\n        :class=\"{\n          [nh.be('border')]: true,\n          [nh.bem('border', 'active')]: props.loading,\n          [nh.bem('border', 'vertical')]: props.horizontal\n        }\"\n        :style=\"borderStyle\"\n      ></div>\n    </div>\n    <div\n      v-if=\"props.arrow\"\n      ref=\"nextArrow\"\n      :class=\"[\n        nh.be('arrow'),\n        nh.bem('arrow', 'next'),\n        nextDisabled ? nh.bem('arrow', 'disabled') : ''\n      ]\"\n      aria-hidden\n      @click=\"handleNext\"\n    >\n      <Icon v-bind=\"nextIcon\"></Icon>\n    </div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Wheel } from '@/components/wheel'\n\nimport { ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { USE_TOUCH, doubleDigits, range } from '@vexip-ui/utils'\n\nimport type { WheelExposed } from '@/components/wheel'\nimport type { PropType } from 'vue'\nimport type { DisabledTime, TimeType, TimeWheelSlots } from './symbol'\n\ndefineOptions({ name: 'TimeWheel' })\n\nconst props = defineProps({\n  noArrow: {\n    type: Boolean,\n    default: false\n  },\n  hour: {\n    type: Number,\n    default: 0,\n    validator: (value: number) => value >= 0 && value <= 23\n  },\n  minute: {\n    type: Number,\n    default: 0,\n    validator: (value: number) => value >= 0 && value <= 59\n  },\n  second: {\n    type: Number,\n    default: 0,\n    validator: (value: number) => value >= 0 && value <= 59\n  },\n  candidate: {\n    default: 2 as 0 | 1 | 2 | 3,\n    validator: (value: number) => [0, 1, 2, 3].includes(value)\n  },\n  steps: {\n    type: Array as PropType<number[]>,\n    default: () => [1, 1, 1],\n    validator: (value: [number, number, number]) => {\n      if (value[0] && 24 % value[0] !== 0) {\n        return false\n      }\n\n      for (let i = 1; i < 3; ++i) {\n        if (value[i] && 60 % value[i] !== 0) {\n          return false\n        }\n      }\n\n      return true\n    }\n  },\n  pointer: {\n    type: Boolean,\n    default: USE_TOUCH\n  },\n  disabledTime: {\n    type: Object as PropType<DisabledTime>,\n    default: () => ({})\n  },\n  noTransition: {\n    type: Boolean,\n    default: false\n  }\n})\n\nconst emit = defineEmits(['change', 'toggle-col', 'update:hour', 'update:minute', 'update:second'])\n\ndefineSlots<TimeWheelSlots>()\n\nconst nh = useNameHelper('time-picker')\n\nconst currentHour = ref(props.hour)\nconst currentMinute = ref(props.minute)\nconst currentSecond = ref(props.second)\nconst hourRange = ref<number[]>([])\nconst minuteRange = ref<number[]>([])\nconst secondRange = ref<number[]>([])\n\nconst hourWheel = ref<WheelExposed>()\nconst minuteWheel = ref<WheelExposed>()\nconst secondWheel = ref<WheelExposed>()\n\nwatch(() => props.steps, updateTimeRange, { immediate: true })\nwatch(\n  () => props.hour,\n  value => {\n    currentHour.value = value\n  }\n)\nwatch(\n  () => props.minute,\n  value => {\n    currentMinute.value = value\n  }\n)\nwatch(\n  () => props.second,\n  value => {\n    currentSecond.value = value\n  }\n)\nwatch(currentHour, value => {\n  emit('update:hour', value)\n  emit('change', 'hour', value)\n})\nwatch(currentMinute, value => {\n  emit('update:minute', value)\n  emit('change', 'minute', value)\n})\nwatch(currentSecond, value => {\n  emit('update:second', value)\n  emit('change', 'second', value)\n})\n\ndefineExpose({ refreshWheel })\n\nfunction isHourDisabled(hour: number) {\n  return typeof props.disabledTime.hour === 'function' && props.disabledTime.hour(hour)\n}\n\nfunction isMinuteDisabled(minute: number) {\n  return (\n    typeof props.disabledTime.minute === 'function' &&\n    props.disabledTime.minute(currentHour.value, minute)\n  )\n}\n\nfunction isSecondDisabled(second: number) {\n  return (\n    typeof props.disabledTime.second === 'function' &&\n    props.disabledTime.second(currentHour.value, currentMinute.value, second)\n  )\n}\n\nfunction updateTimeRange() {\n  const [hourStep = 1, minuteStep = 1, secondStep = 1] = props.steps\n\n  hourRange.value = range(24 / hourStep, 0, hourStep)\n  minuteRange.value = range(60 / minuteStep, 0, minuteStep)\n  secondRange.value = range(60 / secondStep, 0, secondStep)\n}\n\nfunction handleToggleColumn(type: TimeType) {\n  emit('toggle-col', type)\n}\n\nfunction refreshWheel() {\n  ;[hourWheel.value, minuteWheel.value, secondWheel.value].forEach(wheel => {\n    wheel?.refreshScroll()\n  })\n}\n</script>\n\n<template>\n  <div :class=\"nh.be('wheel')\">\n    <Wheel\n      ref=\"hourWheel\"\n      v-model:value=\"currentHour\"\n      inherit\n      :class=\"nh.be('hour-wheel')\"\n      :pointer=\"pointer\"\n      :arrow=\"!noArrow\"\n      :candidate=\"candidate\"\n      :options=\"hourRange\"\n      tabindex=\"-1\"\n      :no-transition=\"noTransition\"\n      @mouseenter=\"handleToggleColumn('hour')\"\n      @touchstart=\"handleToggleColumn('hour')\"\n      @keydown.stop\n      @item-click=\"currentHour = $event\"\n    >\n      <template #default=\"{ option, index }\">\n        <span\n          :class=\"[\n            nh.be('option'),\n            nh.be('hour'),\n            isHourDisabled(option.value as number) && nh.bem('option', 'disabled')\n          ]\"\n        >\n          <slot name=\"hour\" :option=\"option\" :index=\"index\">\n            {{ doubleDigits(option.value as number) }}\n          </slot>\n        </span>\n      </template>\n    </Wheel>\n    <Wheel\n      ref=\"minuteWheel\"\n      v-model:value=\"currentMinute\"\n      inherit\n      :class=\"nh.be('minute-wheel')\"\n      :pointer=\"pointer\"\n      :arrow=\"!noArrow\"\n      :candidate=\"candidate\"\n      :options=\"minuteRange\"\n      tabindex=\"-1\"\n      :no-transition=\"noTransition\"\n      @mouseenter=\"handleToggleColumn('minute')\"\n      @touchstart=\"handleToggleColumn('minute')\"\n      @keydown.stop\n      @item-click=\"currentMinute = $event\"\n    >\n      <template #default=\"{ option, index }\">\n        <span\n          :class=\"[\n            nh.be('option'),\n            nh.be('minute'),\n            isMinuteDisabled(option.value as number) && nh.bem('option', 'disabled')\n          ]\"\n        >\n          <slot name=\"minute\" :option=\"option\" :index=\"index\">\n            {{ doubleDigits(option.value as number) }}\n          </slot>\n        </span>\n      </template>\n    </Wheel>\n    <Wheel\n      ref=\"secondWheel\"\n      v-model:value=\"currentSecond\"\n      inherit\n      :class=\"nh.be('second-wheel')\"\n      :pointer=\"pointer\"\n      :arrow=\"!noArrow\"\n      :candidate=\"candidate\"\n      :options=\"secondRange\"\n      tabindex=\"-1\"\n      :no-transition=\"noTransition\"\n      @mouseenter=\"handleToggleColumn('second')\"\n      @touchstart=\"handleToggleColumn('second')\"\n      @keydown.stop\n      @item-click=\"currentSecond = $event\"\n    >\n      <template #default=\"{ option, index }\">\n        <span\n          :class=\"[\n            nh.be('option'),\n            nh.be('second'),\n            isSecondDisabled(option.value as number) && nh.bem('option', 'disabled')\n          ]\"\n        >\n          <slot name=\"second\" :option=\"option\" :index=\"index\">\n            {{ doubleDigits(option.value as number) }}\n          </slot>\n        </span>\n      </template>\n    </Wheel>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { CalendarPanel } from '@/components/calendar-panel'\nimport { Icon } from '@/components/icon'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, onMounted, reactive, ref, watch } from 'vue'\n\nimport TimeWheel from './time-wheel.vue'\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport { callIfFunc, range as rangeNumbers, toDate } from '@vexip-ui/utils'\nimport { useRtl } from '@vexip-ui/hooks'\nimport { datePickerTypes } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { MonthIndex } from '@/components/calendar'\nimport type { LocaleConfig } from '@vexip-ui/config'\nimport type { Dateable } from '@vexip-ui/utils'\nimport type {\n  DatePanelSlots,\n  DatePickerType,\n  DateShortcut,\n  DateShortcutsPlacement,\n  DateTimeType,\n  DateType,\n  DisabledTime,\n  TimeType\n} from './symbol'\n\ndefineOptions({ name: 'DatePanel' })\n\nconst props = defineProps({\n  type: {\n    default: 'date' as DatePickerType,\n    validator: (value: DatePickerType) => datePickerTypes.includes(value)\n  },\n  enabled: {\n    type: Object as PropType<Record<DateTimeType, boolean>>,\n    default: () => ({})\n  },\n  startValue: {\n    type: Object as PropType<Record<DateTimeType, number>>,\n    default: null\n  },\n  endValue: {\n    type: Object as PropType<Record<DateTimeType, number>>,\n    default: null\n  },\n  shortcuts: {\n    type: Array as PropType<DateShortcut[]>,\n    default: () => []\n  },\n  confirmText: {\n    type: String,\n    default: null\n  },\n  cancelText: {\n    type: String,\n    default: null\n  },\n  today: {\n    type: [Number, String, Date] as PropType<Dateable>,\n    default: () => new Date()\n  },\n  disabledDate: {\n    type: Function as PropType<(date: Date) => boolean>,\n    default: () => false\n  },\n  noAction: {\n    type: Boolean,\n    default: false\n  },\n  steps: {\n    type: Array as PropType<number[]>,\n    default: () => [1, 1, 1]\n  },\n  range: {\n    type: Boolean,\n    default: false\n  },\n  startActivated: {\n    type: Object as PropType<Record<DateTimeType, boolean>>,\n    default: () => ({})\n  },\n  endActivated: {\n    type: Object as PropType<Record<DateTimeType, boolean>>,\n    default: () => ({})\n  },\n  min: {\n    type: [Number, String, Date] as PropType<Dateable>,\n    default: null\n  },\n  max: {\n    type: [Number, String, Date] as PropType<Dateable>,\n    default: null\n  },\n  disabledTime: {\n    type: Object as PropType<DisabledTime>,\n    default: () => ({})\n  },\n  hasError: {\n    type: Boolean,\n    default: false\n  },\n  locale: {\n    type: Object as PropType<LocaleConfig['calendar'] & LocaleConfig['datePicker']>,\n    default: () => ({})\n  },\n  selectingType: {\n    type: String as PropType<'start' | 'end'>,\n    default: 'start'\n  },\n  weekStart: {\n    type: Number,\n    default: null\n  },\n  staticWheel: {\n    type: Boolean,\n    default: false\n  },\n  shortcutsPlacement: {\n    type: String as PropType<DateShortcutsPlacement>,\n    default: 'left'\n  },\n  labeledBy: {\n    type: String,\n    default: undefined\n  }\n})\n\nconst emit = defineEmits([\n  'click',\n  'shortcut',\n  'toggle-col',\n  'change',\n  'cancel',\n  'confirm',\n  'hover',\n  'type-change',\n  'time-change'\n])\n\ndefineSlots<DatePanelSlots>()\n\nconst nh = useNameHelper('date-picker')\nconst icons = useIcons()\nconst { isRtl } = useRtl()\n\nconst today = toDate(props.today)\nconst monthRange = rangeNumbers(12, 1, 1)\n\nconst currentPanel = ref<DateType>(\n  props.type === 'year' ? 'year' : props.type === 'month' ? 'month' : 'date'\n)\nconst calendarYear = ref(today.getFullYear())\nconst calendarMonth = ref(today.getMonth() + 1) // 1 ~ 12\nconst hoveredYear = ref(0) // 0 is no hover (falsy)\nconst hoveredMonth = ref(0) // 0 is no hover (falsy)\nconst yearRange = ref<number[]>([])\n\nconst shortcutsRect = reactive({ width: 0, height: 0 })\n\nconst panelStyle = computed(() => {\n  const { width, height } = shortcutsRect\n\n  switch (props.shortcutsPlacement) {\n    case 'top':\n      return { paddingTop: `${height}px` }\n    case 'right':\n      return { paddingRight: `${width}px` }\n    case 'bottom':\n      return { paddingBottom: `${height}px` }\n    default:\n      return { paddingLeft: `${width}px` }\n  }\n})\nconst startActivated = computed(() => {\n  const activated = props.startActivated\n\n  return activated.year && activated.month && activated.date\n})\nconst endActivated = computed(() => {\n  const activated = props.endActivated\n\n  return activated.year && activated.month && activated.date\n})\nconst isDatetime = computed(() => {\n  return props.type === 'datetime'\n})\nconst calendarValue = computed(() => {\n  return props.range\n    ? startActivated.value || endActivated.value\n      ? [getStringValue('start'), getStringValue('end')]\n      : ['', '']\n    : startActivated.value\n      ? getStringValue('start')\n      : ''\n})\nconst weekDays = computed(() => {\n  return [\n    props.locale.week7,\n    props.locale.week1,\n    props.locale.week2,\n    props.locale.week3,\n    props.locale.week4,\n    props.locale.week5,\n    props.locale.week6\n  ].map(week => week.slice(0, 2))\n})\n\nwatch(\n  calendarYear,\n  value => {\n    yearRange.value = rangeNumbers(12, Math.floor(value / 10) * 10, 1)\n  },\n  { immediate: true }\n)\n\nonMounted(() => {\n  refreshCalendar('start')\n})\n\ndefineExpose({ refreshCalendar })\n\nfunction getStringValue(type: 'start' | 'end') {\n  const value = type === 'start' ? props.startValue : props.endValue\n\n  return value ? `${value.year}-${value.month}-${value.date}` : ''\n}\n\nfunction getMonthLabel(index: number) {\n  return props.locale[`month${index as MonthIndex}`]\n}\n\nfunction togglePanel(type: DateType) {\n  currentPanel.value = type\n}\n\nfunction adjustCalendar(type: 'year' | 'month', amount: number) {\n  if (type === 'year') {\n    calendarYear.value += amount\n  } else {\n    // 月份存在进位\n    calendarMonth.value += amount\n\n    const date = new Date(calendarYear.value, calendarMonth.value - 1, 1)\n\n    calendarYear.value = date.getFullYear()\n    calendarMonth.value = date.getMonth() + 1\n  }\n}\n\nfunction handleClick(event: MouseEvent) {\n  emit('click', event)\n}\n\nfunction handleShortcut(index: number) {\n  const { value, name } = props.shortcuts[index]\n\n  emit('shortcut', name, callIfFunc(value))\n}\n\nfunction handleSelectDate(date: Date) {\n  emitChange([date.getFullYear(), date.getMonth() + 1, date.getDate()])\n}\n\nfunction handleSelectYear(year: number) {\n  if (isDisabledYear(year)) return\n\n  calendarYear.value = year\n\n  if (props.type !== 'year') {\n    togglePanel('month')\n  } else {\n    emitChange([year, 1, 1])\n  }\n}\n\nfunction handleSelectMonth(month: number) {\n  if (isDisabledMonth(month)) return\n\n  calendarMonth.value = month\n\n  if (props.type !== 'month') {\n    togglePanel('date')\n  } else {\n    emitChange([calendarYear.value, month, 1])\n  }\n}\n\nfunction emitChange(values: number[]) {\n  emit('change', values)\n}\n\nfunction handleStartTimeChange(type: TimeType, time: number) {\n  emit('time-change', 'start', type, time)\n}\n\nfunction handleEndTimeChange(type: TimeType, time: number) {\n  emit('time-change', 'end', type, time)\n}\n\nfunction handleDoublePrevClick() {\n  if (currentPanel.value === 'year') {\n    yearRange.value = rangeNumbers(12, yearRange.value[0] - 10, 1)\n  } else {\n    adjustCalendar('year', -1)\n  }\n}\nfunction handleDoubleNextClick() {\n  if (currentPanel.value === 'year') {\n    yearRange.value = rangeNumbers(12, yearRange.value[10], 1)\n  } else {\n    adjustCalendar('year', 1)\n  }\n}\n\nfunction handleCancel() {\n  emit('cancel')\n}\n\nfunction handleConfirm() {\n  emit('confirm')\n}\n\nfunction handleHoverDate(date: Date | null) {\n  emit('hover', date)\n}\n\nfunction isSelectedYear(year: number) {\n  if (!year) return false\n\n  return (\n    (props.startActivated.year && props.startValue.year === year) ||\n    (props.endActivated.year && props.endValue.year === year)\n  )\n}\n\nfunction isSelectedMonth(month: number) {\n  if (!month) return false\n\n  const monthYear = 100 * calendarYear.value + month\n\n  return (\n    (props.startActivated.month &&\n      100 * props.startValue.year + props.startValue.month === monthYear) ||\n    (props.endActivated.month && 100 * props.endValue.year + props.endValue.month === monthYear)\n  )\n}\n\nfunction isDisabledYear(year: number) {\n  if (props.type === 'year') {\n    return props.disabledDate(new Date(year, 0))\n  }\n\n  for (let i = 1; i <= 12; ++i) {\n    if (!isDisabledMonth(i, year)) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction isDisabledMonth(month: number, year = calendarYear.value) {\n  if (props.type === 'year') return false\n\n  if (props.type === 'month') {\n    return props.disabledDate(new Date(year, month - 1))\n  }\n\n  const current = new Date(year, month - 1)\n  const end = new Date(year, month, 0)\n  const dayCount = end.getDate()\n\n  for (let i = 1; i <= dayCount; ++i) {\n    current.setDate(i)\n\n    if (!props.disabledDate(current)) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction handleYearHover(year: number) {\n  hoveredYear.value = isDisabledYear(year) ? 0 : year\n}\n\nfunction handleMonthHover(month: number) {\n  hoveredMonth.value = isDisabledMonth(month) ? 0 : month\n}\n\nfunction isYearInRange(year: number) {\n  if (\n    !props.range ||\n    (!hoveredYear.value && !props.startActivated.year && !props.endActivated.year)\n  ) {\n    return false\n  }\n\n  // if (\n  //   (props.valueType === 'start' && !props.endActivated.year) ||\n  //   (props.valueType === 'end' && !props.startActivated.year)\n  // ) {\n  //   return false\n  // }\n\n  const startYear = props.startValue.year\n  const endYear = props.endValue.year\n\n  let min: number\n  let max: number\n\n  if (!hoveredYear.value && props.startActivated.year && props.endActivated.year) {\n    min = Math.min(startYear, endYear)\n    max = Math.max(startYear, endYear)\n  } else if (hoveredYear.value) {\n    if (!props.startActivated.year && !props.endActivated.year) return false\n\n    if (!props.startActivated.year || !props.endActivated.year) {\n      const selectedYear = props.startActivated.year ? startYear : endYear\n\n      min = Math.min(hoveredYear.value, selectedYear)\n      max = Math.max(hoveredYear.value, selectedYear)\n    } else {\n      const minYear = Math.min(startYear, endYear)\n      const maxYear = Math.max(startYear, endYear)\n\n      min = Math.min(hoveredYear.value, minYear)\n      max = Math.max(hoveredYear.value, maxYear)\n    }\n  } else {\n    return false\n  }\n\n  return year >= min && year <= max\n}\n\nfunction isMonthInRange(month: number) {\n  if (\n    !props.range ||\n    (!hoveredMonth.value && !props.startActivated.month && !props.endActivated.month)\n  ) {\n    return false\n  }\n\n  // if (\n  //   (props.valueType === 'start' && !props.endActivated.month) ||\n  //   (props.valueType === 'end' && !props.startActivated.month)\n  // ) {\n  //   return false\n  // }\n\n  const startMonthYear = 100 * props.startValue.year + props.startValue.month\n  const endMonthYear = 100 * props.endValue.year + props.endValue.month\n\n  let min: number\n  let max: number\n\n  if (!hoveredMonth.value && props.startActivated.month && props.endActivated.month) {\n    min = Math.min(startMonthYear, endMonthYear)\n    max = Math.max(startMonthYear, endMonthYear)\n  } else if (hoveredMonth.value) {\n    if (!props.startActivated.month && !props.endActivated.month) return false\n\n    const hoveredMonthYear = 100 * calendarYear.value + hoveredMonth.value\n\n    if (!props.startActivated.month || !props.endActivated.month) {\n      const selectedMonthYear = props.startActivated.month ? startMonthYear : endMonthYear\n\n      min = Math.min(hoveredMonthYear, selectedMonthYear)\n      max = Math.max(hoveredMonthYear, selectedMonthYear)\n    } else {\n      const minMonthYear = Math.min(startMonthYear, endMonthYear)\n      const maxMonthYear = Math.max(startMonthYear, endMonthYear)\n\n      min = Math.min(hoveredMonthYear, minMonthYear)\n      max = Math.max(hoveredMonthYear, maxMonthYear)\n    }\n  } else {\n    return false\n  }\n\n  const monthYear = 100 * calendarYear.value + month\n\n  return monthYear >= min && monthYear <= max\n}\n\n// 重新计算日历页面\nfunction refreshCalendar(valueType: 'start' | 'end') {\n  const today = toDate(props.today)\n\n  if (valueType === 'start') {\n    calendarYear.value = props.startActivated.year ? props.startValue.year : today.getFullYear()\n    calendarMonth.value = props.startActivated.month ? props.startValue.month : today.getMonth() + 1\n  } else {\n    calendarYear.value = props.endActivated.year ? props.endValue.year : today.getFullYear()\n    calendarMonth.value = props.endActivated.month ? props.endValue.month : today.getMonth() + 1\n  }\n}\n\nfunction handleShortcutsResize(entry: ResizeObserverEntry) {\n  const box = entry.borderBoxSize?.[0]\n\n  if (box) {\n    shortcutsRect.width = box.inlineSize\n    shortcutsRect.height = box.blockSize\n  } else {\n    shortcutsRect.width = entry.contentRect.width\n    shortcutsRect.height = entry.contentRect.height\n  }\n}\n</script>\n\n<template>\n  <div\n    :class=\"{\n      [nh.be('panel')]: true,\n      [nh.bem('panel', 'vertical')]:\n        shortcuts.length && (shortcutsPlacement === 'top' || shortcutsPlacement === 'bottom')\n    }\"\n    :aria-labelledby=\"labeledBy\"\n    :style=\"panelStyle\"\n    @click=\"handleClick\"\n  >\n    <ResizeObserver v-if=\"shortcuts.length\" :on-resize=\"handleShortcutsResize\">\n      <div\n        :class=\"[\n          nh.be('list'),\n          nh.bem('list', 'sub'),\n          nh.be('shortcuts'),\n          nh.bem('shortcuts', shortcutsPlacement)\n        ]\"\n      >\n        <div\n          v-for=\"(item, index) in shortcuts\"\n          :key=\"index\"\n          :class=\"nh.be('shortcut')\"\n          :title=\"item.name\"\n          @click=\"handleShortcut(index)\"\n        >\n          {{ item.name }}\n        </div>\n      </div>\n    </ResizeObserver>\n    <div :class=\"nh.be('list')\" role=\"application\">\n      <div :class=\"nh.be('panel-body')\">\n        <div :class=\"nh.be('date-panel')\">\n          <div :class=\"nh.be('header')\">\n            <div :class=\"[nh.be('arrow'), nh.be('prev-year')]\" @click=\"handleDoublePrevClick\">\n              <Icon v-bind=\"isRtl ? icons.anglesRight : icons.anglesLeft\"></Icon>\n            </div>\n            <div\n              v-show=\"currentPanel === 'date'\"\n              :class=\"[nh.be('arrow'), nh.be('prev-month')]\"\n              @click=\"adjustCalendar('month', -1)\"\n            >\n              <Icon v-bind=\"isRtl ? icons.angleRight : icons.angleLeft\"></Icon>\n            </div>\n            <div :class=\"nh.be('year-month')\">\n              <slot\n                name=\"title\"\n                :panel=\"currentPanel\"\n                :year-start=\"yearRange[0]\"\n                :year=\"calendarYear\"\n                :month=\"calendarMonth\"\n                :toggle-panel=\"togglePanel\"\n              >\n                <div key=\"year\" :class=\"nh.be('year')\" @click.stop=\"togglePanel('year')\">\n                  <template v-if=\"currentPanel === 'year'\">\n                    {{ `${yearRange[0]}${locale.year} - ${yearRange[9]}${locale.year}` }}\n                  </template>\n                  <template v-else>\n                    {{ `${calendarYear}${locale.year}` }}\n                  </template>\n                </div>\n                <div\n                  v-show=\"currentPanel === 'date'\"\n                  :class=\"nh.be('month')\"\n                  @click.stop=\"togglePanel('month')\"\n                >\n                  {{ getMonthLabel(calendarMonth) }}\n                </div>\n              </slot>\n            </div>\n            <div\n              v-show=\"currentPanel === 'date'\"\n              :class=\"[nh.be('arrow'), nh.be('next-month')]\"\n              @click=\"adjustCalendar('month', 1)\"\n            >\n              <Icon v-bind=\"isRtl ? icons.angleLeft : icons.angleRight\"></Icon>\n            </div>\n            <div :class=\"[nh.be('arrow'), nh.be('next-year')]\" @click=\"handleDoubleNextClick\">\n              <Icon v-bind=\"isRtl ? icons.anglesLeft : icons.anglesRight\"></Icon>\n            </div>\n          </div>\n          <div :class=\"nh.be('calendar')\">\n            <div\n              v-if=\"currentPanel === 'year'\"\n              :class=\"nh.be('year-panel')\"\n              @mouseleave=\"hoveredYear = 0\"\n            >\n              <div\n                v-for=\"(item, index) in yearRange\"\n                :key=\"index\"\n                :class=\"{\n                  [nh.be('year-item')]: true,\n                  [nh.bem('year-item', 'selected')]: isSelectedYear(item),\n                  [nh.bem('year-item', 'next')]: index > 9,\n                  [nh.bem('year-item', 'disabled')]: isDisabledYear(item),\n                  [nh.bem('year-item', 'in-range')]: isYearInRange(item)\n                }\"\n                @click.stop=\"handleSelectYear(item)\"\n                @mouseenter=\"handleYearHover(item)\"\n              >\n                <div :class=\"nh.be('year-label')\">\n                  <slot\n                    name=\"year\"\n                    :year=\"item\"\n                    :selected=\"isSelectedYear(item)\"\n                    :is-next=\"index > 9\"\n                    :disabled=\"isDisabledYear(item)\"\n                    :in-range=\"isYearInRange(item)\"\n                  >\n                    <div :class=\"nh.be('year-label-inner')\">\n                      {{ item }}\n                    </div>\n                  </slot>\n                </div>\n              </div>\n            </div>\n            <div\n              v-else-if=\"currentPanel === 'month'\"\n              :class=\"nh.be('month-panel')\"\n              @mouseleave=\"hoveredMonth = 0\"\n            >\n              <div\n                v-for=\"index in monthRange\"\n                :key=\"index\"\n                :class=\"{\n                  [nh.be('month-item')]: true,\n                  [nh.bem('month-item', 'selected')]: isSelectedMonth(index),\n                  [nh.bem('month-item', 'disabled')]: isDisabledMonth(index),\n                  [nh.bem('month-item', 'in-range')]: isMonthInRange(index)\n                }\"\n                @click.stop=\"handleSelectMonth(index)\"\n                @mouseenter=\"handleMonthHover(index)\"\n              >\n                <div :class=\"nh.be('month-label')\">\n                  <slot\n                    name=\"month\"\n                    :year=\"calendarYear\"\n                    :month=\"index\"\n                    :selected=\"isSelectedMonth(index)\"\n                    :disabled=\"isDisabledMonth(index)\"\n                    :in-range=\"isMonthInRange(index)\"\n                  >\n                    <div :class=\"nh.be('month-label-inner')\">\n                      {{ getMonthLabel(index) }}\n                    </div>\n                  </slot>\n                </div>\n              </div>\n            </div>\n            <CalendarPanel\n              v-else\n              inherit\n              :value=\"calendarValue\"\n              :year=\"calendarYear\"\n              :month=\"calendarMonth\"\n              :value-type=\"selectingType\"\n              :disabled-date=\"disabledDate\"\n              :range=\"range\"\n              :min=\"min\"\n              :max=\"max\"\n              :week-start=\"weekStart\"\n              :week-days=\"weekDays\"\n              @select=\"handleSelectDate\"\n              @hover=\"handleHoverDate\"\n            >\n              <template v-if=\"$slots.week\" #week=\"weekParams\">\n                <slot name=\"week\" v-bind=\"weekParams\"></slot>\n              </template>\n              <template v-if=\"$slots.date\" #itemContent=\"itemParams\">\n                <slot name=\"date\" v-bind=\"itemParams\"></slot>\n              </template>\n            </CalendarPanel>\n          </div>\n        </div>\n        <div v-if=\"isDatetime\" :class=\"nh.be('time-panel')\">\n          <div :class=\"[nh.be('header'), nh.bem('header', 'time')]\">\n            <template v-if=\"range\">\n              <div :class=\"nh.be('title')\">\n                {{ locale.startTime }}\n              </div>\n              <div :class=\"nh.be('title')\">\n                {{ locale.endTime }}\n              </div>\n            </template>\n          </div>\n          <div :class=\"nh.be('wheel')\">\n            <TimeWheel\n              :hour=\"startValue.hour\"\n              :minute=\"startValue.minute\"\n              :second=\"startValue.second\"\n              :candidate=\"3\"\n              :steps=\"steps\"\n              :disabled-time=\"disabledTime\"\n              :no-transition=\"staticWheel\"\n              @change=\"handleStartTimeChange\"\n            ></TimeWheel>\n            <TimeWheel\n              v-if=\"range\"\n              :hour=\"endValue.hour\"\n              :minute=\"endValue.minute\"\n              :second=\"endValue.second\"\n              :candidate=\"3\"\n              :steps=\"steps\"\n              :disabled-time=\"disabledTime\"\n              :no-transition=\"staticWheel\"\n              @change=\"handleEndTimeChange\"\n            ></TimeWheel>\n          </div>\n        </div>\n      </div>\n      <div v-if=\"!noAction\" :class=\"nh.be('action')\">\n        <Button\n          inherit\n          text\n          size=\"small\"\n          @click=\"handleCancel\"\n        >\n          {{ cancelText || locale.cancel }}\n        </Button>\n        <Button\n          inherit\n          type=\"primary\"\n          size=\"small\"\n          :disabled=\"hasError\"\n          @click=\"handleConfirm\"\n        >\n          {{ confirmText || locale.confirm }}\n        </Button>\n      </div>\n    </div>\n  </div>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n  stateProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps, EventListener, LocaleConfig } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { Dateable } from '@vexip-ui/utils'\nimport type {\n  DatePickerChangeEvent,\n  DatePickerFormatFn,\n  DatePickerSlots,\n  DatePickerType,\n  DateShortcut,\n  DateShortcutsPlacement,\n  DateTimeType,\n  TimePickerChangeEvent,\n  TimePickerSlots,\n  TimeShortcut,\n  TimeShortcutsPlacement,\n  TimeType\n} from './symbol'\n\nexport interface DatePickerShortcutEvent {\n  (name: string, value: Dateable | Dateable[]): void,\n  (name: string, value: Dateable): void,\n  (name: string, value: Dateable[]): void\n}\n\nexport const datePickerProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: Object as PropType<Partial<LocaleConfig['calendar'] & LocaleConfig['datePicker']>>,\n  type: String as PropType<DatePickerType>,\n  visible: booleanProp,\n  placement: String as PropType<Placement>,\n  transfer: booleanStringProp,\n  value: [Number, String, Date, Array] as PropType<Dateable | Dateable[]>,\n  format: String,\n  valueFormat: [String, Array, Function] as PropType<string | string[] | DatePickerFormatFn>,\n  filler: String,\n  clearable: booleanProp,\n  noAction: booleanProp,\n  labels: Object as PropType<Partial<Record<DateTimeType, string>>>,\n  dateSeparator: String,\n  timeSeparator: String,\n  shortcuts: Array as PropType<DateShortcut[]>,\n  disabledDate: Function as PropType<(date: Date) => boolean>,\n  steps: Array as PropType<number[]>,\n  ctrlSteps: Array as PropType<number[]>,\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  noSuffix: booleanProp,\n  disabled: booleanProp,\n  transitionName: String,\n  confirmText: String,\n  cancelText: String,\n  today: [Number, String, Date] as PropType<Dateable>,\n  range: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  min: [Number, String, Date] as PropType<Dateable>,\n  max: [Number, String, Date] as PropType<Dateable>,\n  outsideClose: booleanProp,\n  outsideCancel: booleanProp,\n  placeholder: [String, Array] as PropType<string | string[]>,\n  unitReadonly: booleanProp,\n  weekStart: Number,\n  popperAlive: booleanProp,\n  shortcutsPlacement: String as PropType<DateShortcutsPlacement>,\n  slots: Object as PropType<DatePickerSlots>,\n  onInput: eventProp<(type: DateTimeType, value: number) => void>(),\n  onPlus: eventProp<(type: DateTimeType, value: number) => void>(),\n  onMinus: eventProp<(type: DateTimeType, value: number) => void>(),\n  onEnter: eventProp(),\n  onCancel: eventProp(),\n  onChange: eventProp<EventListener<DatePickerChangeEvent>>(),\n  onClear: eventProp(),\n  onShortcut: eventProp<DatePickerShortcutEvent>(),\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onFocus: eventProp(),\n  onBlur: eventProp(),\n  onChangeCol: eventProp<(type: DateTimeType | null, inputType: 'start' | 'end') => void>(),\n  onClickOutside: eventProp(),\n  onOutsideClose: eventProp()\n})\n\nexport type DatePickerProps = ExtractPropTypes<typeof datePickerProps>\nexport type DatePickerCProps = ConfigurableProps<DatePickerProps>\n\nexport interface TimePickerShortcutEvent {\n  (name: string, value: string | string[]): void,\n  (name: string, value: string): void,\n  (name: string, value: string[]): void\n}\n\nexport const timePickerProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('timePicker'),\n  visible: booleanProp,\n  placement: String as PropType<Placement>,\n  transfer: booleanStringProp,\n  format: String,\n  separator: String,\n  value: [String, Array] as PropType<string | string[]>,\n  filler: String,\n  clearable: booleanProp,\n  noAction: booleanProp,\n  noArrow: booleanProp,\n  pointer: booleanProp,\n  candidate: Number as PropType<0 | 1 | 2 | 3>,\n  steps: Array as PropType<number[]>,\n  labels: Object as PropType<Partial<Record<TimeType, string>>>,\n  shortcuts: Array as PropType<TimeShortcut[]>,\n  range: booleanProp,\n  disabled: booleanProp,\n  transitionName: String,\n  confirmText: String,\n  cancelText: String,\n  ctrlSteps: Array as PropType<number[]>,\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  noSuffix: booleanProp,\n  exchange: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  min: String,\n  max: String,\n  outsideClose: booleanProp,\n  outsideCancel: booleanProp,\n  unitReadonly: booleanProp,\n  popperAlive: booleanProp,\n  shortcutsPlacement: String as PropType<TimeShortcutsPlacement>,\n  placeholder: [String, Array] as PropType<string | string[]>,\n  slots: Object as PropType<TimePickerSlots>,\n  onInput: eventProp<(type: TimeType, value: number) => void>(),\n  onPlus: eventProp<(type: TimeType, value: number) => void>(),\n  onMinus: eventProp<(type: TimeType, value: number) => void>(),\n  onEnter: eventProp(),\n  onCancel: eventProp(),\n  onChange: eventProp<EventListener<TimePickerChangeEvent>>(),\n  onClear: eventProp(),\n  onShortcut: eventProp<TimePickerShortcutEvent>(),\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onFocus: eventProp(),\n  onBlur: eventProp(),\n  onChangeCol: eventProp<(type: TimeType | null, inputType: 'start' | 'end') => void>(),\n  onClickOutside: eventProp(),\n  onOutsideClose: eventProp()\n})\n\nexport type TimePickerProps = ExtractPropTypes<typeof timePickerProps>\nexport type TimePickerCProps = ConfigurableProps<TimePickerProps>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Popper } from '@/components/popper'\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, nextTick, reactive, ref, toRef, watch } from 'vue'\n\nimport DateControl from './date-control.vue'\nimport DatePanel from './date-panel.vue'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  makeSentence,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n  useWordSpace\n} from '@vexip-ui/config'\nimport {\n  placementWhileList,\n  useClickOutside,\n  useHover,\n  usePopper,\n  useSetTimeout\n} from '@vexip-ui/hooks'\nimport {\n  boundRange,\n  differenceDays,\n  doubleDigits,\n  format,\n  getTime,\n  isLeapYear,\n  isObject,\n  mergeObjects,\n  startOfMonth,\n  toAttrValue,\n  toDate,\n  toFalse\n} from '@vexip-ui/utils'\nimport { datePickerProps } from './props'\nimport { useColumn, useTimeBound } from './helper'\nimport { datePickerTypes, invalidDate } from './symbol'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type { Dateable } from '@vexip-ui/utils'\nimport type {\n  DatePickerChangeEvent,\n  DatePickerFormatFn,\n  DatePickerSlots,\n  DateTimeType,\n  DateType,\n  TimeType\n} from './symbol'\n\ndefineOptions({ name: 'DatePicker' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue\n} = useFieldStore<Dateable | Dateable[]>(() => reference.value?.focus())\n\nconst nh = useNameHelper('date-picker')\n\nconst _props = defineProps(datePickerProps)\nconst props = useProps('datePicker', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  type: {\n    default: 'date',\n    validator: value => datePickerTypes.includes(value)\n  },\n  visible: false,\n  placement: {\n    default: 'bottom-start',\n    validator: value => placementWhileList.includes(value)\n  },\n  transfer: false,\n  value: {\n    default: () => getFieldValue(),\n    static: true\n  },\n  format: 'yMd Hms',\n  valueFormat: null,\n  filler: {\n    default: '-',\n    validator: value => value.length === 1\n  },\n  clearable: false,\n  noAction: false,\n  labels: () => ({}),\n  dateSeparator: '/',\n  timeSeparator: ':',\n  shortcuts: () => [],\n  disabledDate: {\n    default: toFalse,\n    isFunc: true\n  },\n  steps: () => [1, 1, 1],\n  ctrlSteps: () => [5, 5, 5],\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  noSuffix: false,\n  disabled: () => disabled.value,\n  transitionName: () => nh.ns('drop'),\n  confirmText: null,\n  cancelText: null,\n  today: {\n    default: () => new Date(),\n    validator: value => !Number.isNaN(new Date(value))\n  },\n  range: null,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  min: null,\n  max: null,\n  outsideClose: true,\n  outsideCancel: false,\n  placeholder: null,\n  unitReadonly: false,\n  weekStart: null,\n  popperAlive: null,\n  shortcutsPlacement: 'left',\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:value', 'update:formatted-value', 'update:visible'])\n\nconst slots = defineSlots<DatePickerSlots>()\n\nconst calendarLocale = useLocale('calendar')\nconst datePickerLocale = useLocale('datePicker')\nconst icons = useIcons()\nconst wordSpace = useWordSpace()\n\nconst placement = toRef(props, 'placement')\nconst transfer = toRef(props, 'transfer')\nconst currentVisible = ref(props.visible)\nconst focused = ref(false)\nconst startState = createDateState()\nconst endState = createDateState()\nconst currentState = ref<'start' | 'end'>('start')\nconst lastValue = ref('')\nconst firstSelected = ref<number[] | undefined>()\nconst hoveredDate = ref(new Date())\nconst staticWheel = ref(false)\nconst dateUnitOrder = ref<DateType[]>([])\n\nconst { timer } = useSetTimeout()\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst popper = ref<PopperExposed>()\nconst { reference, transferTo, updatePopper } = usePopper({\n  placement,\n  transfer,\n  wrapper,\n  popper: computed(() => popper.value?.wrapper),\n  isDrop: true\n})\nconst { isHover } = useHover(reference)\n\nconst startInput = ref<InstanceType<typeof DateControl>>()\nconst endInput = ref<InstanceType<typeof DateControl>>()\nconst datePanel = ref<InstanceType<typeof DatePanel>>()\n\nconst mergedLocale = computed(() => {\n  const locale = mergeObjects(calendarLocale.value, datePickerLocale.value, true)\n\n  return isObject(props.locale) ? mergeObjects(locale, props.locale) : locale\n})\nconst startPlaceholder = computed(() => {\n  if (props.placeholder) {\n    return Array.isArray(props.placeholder) ? props.placeholder[0] : props.placeholder\n  }\n\n  const { select, start, [props.type]: type } = mergedLocale.value.placeholder\n\n  return makeSentence(props.range ? `${start} ${type}` : `${select} ${type}`, wordSpace.value)\n})\nconst endPlaceholder = computed(() => {\n  if (props.placeholder) {\n    return Array.isArray(props.placeholder)\n      ? props.placeholder[1] || props.placeholder[0]\n      : props.placeholder\n  }\n\n  const { end, [props.type]: type } = mergedLocale.value.placeholder\n\n  return makeSentence(`${end} ${type}`, wordSpace.value)\n})\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.ns('input-vars'),\n    nh.bs('vars'),\n    nh.bm(props.type),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm('no-hour')]: !startState.enabled.hour,\n      [nh.bm('no-minute')]: !startState.enabled.minute,\n      [nh.bm('no-second')]: !startState.enabled.second,\n      [nh.bm('visible')]: currentVisible.value,\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm('is-range')]: props.range\n    }\n  ]\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst selectorClass = computed(() => {\n  const baseCls = nh.be('selector')\n\n  return {\n    [baseCls]: true,\n    [`${baseCls}--disabled`]: props.disabled,\n    [`${baseCls}--readonly`]: readonly.value,\n    [`${baseCls}--loading`]: props.loading,\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\n    [`${baseCls}--focused`]: focused.value,\n    [`${baseCls}--${props.state}`]: props.state !== 'default'\n  }\n})\nconst hasPrefix = computed(() => {\n  return !!(slots.prefix || props.prefix)\n})\nconst currentValue = computed(() => {\n  const values = [startState, endState].map(state => {\n    const values = Object.values(state.dateValue).map(doubleDigits)\n\n    return `${values.slice(0, 3).join('-')} ${values.slice(3).join(':')}`\n  })\n\n  return props.range ? values : values[0]\n})\nconst hoveredLarge = computed(() => {\n  if (!firstSelected.value) return false\n\n  const [year, month, date] = firstSelected.value\n  const firstTime = new Date(`${year}-${month}-${date}`).getTime()\n  const hoverTime = hoveredDate.value.getTime()\n\n  return firstTime < hoverTime\n})\nconst showClear = computed(() => {\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && !!lastValue.value\n})\nconst min = computed(() => {\n  if (props.min) {\n    const date = rawValueToDate(props.min, invalidDate)\n\n    if (Number.isNaN(+date)) return -Infinity\n\n    date.setHours(0, 0, 0, 0)\n\n    return date.getTime()\n  }\n\n  return -Infinity\n})\nconst max = computed(() => {\n  if (props.max) {\n    let date = rawValueToDate(props.max, invalidDate)\n\n    if (Number.isNaN(+date)) return Infinity\n\n    if (props.type !== 'datetime') {\n      date.setHours(23, 59, 59, 999)\n\n      if (props.type === 'year') {\n        date.setMonth(11)\n        date.setDate(31)\n      } else if (props.type === 'month') {\n        date.setMonth(date.getMonth() + 1)\n        date = startOfMonth(date)\n        date.setDate(date.getDate() - 1)\n      }\n    }\n\n    return date.getTime()\n  }\n\n  return Infinity\n})\nconst reversed = computed(() => {\n  if (Number.isNaN(min.value) || Number.isNaN(max.value)) {\n    return false\n  }\n\n  return min.value > max.value\n})\nconst startMinTime = computed(() => {\n  if (props.type === 'datetime' && props.min && !differenceDays(props.min, startState.getDate())) {\n    return getTime(props.min)\n  }\n\n  return ''\n})\nconst startMaxTime = computed(() => {\n  if (props.type === 'datetime' && props.max && !differenceDays(props.max, startState.getDate())) {\n    return getTime(props.max)\n  }\n\n  return ''\n})\nconst endMinTime = computed(() => {\n  if (\n    props.type === 'datetime' &&\n    props.range &&\n    props.min &&\n    !differenceDays(props.min, startState.getDate())\n  ) {\n    return getTime(props.min)\n  }\n\n  return ''\n})\nconst endMaxTime = computed(() => {\n  if (\n    props.type === 'datetime' &&\n    props.range &&\n    props.max &&\n    !differenceDays(props.max, startState.getDate())\n  ) {\n    return getTime(props.max)\n  }\n\n  return ''\n})\nconst startReversed = computed(() => {\n  if (!props.range) return false\n\n  const startValue = startState.dateValue\n  const endValue = endState.dateValue\n\n  let types: DateTimeType[]\n\n  if (props.type === 'year') {\n    types = ['year']\n  } else if (props.type === 'month') {\n    types = ['year', 'month']\n  } else if (props.type === 'date') {\n    types = ['year', 'month', 'date']\n  } else {\n    types = ['year', 'month', 'date', 'hour', 'minute', 'second']\n  }\n\n  for (const type of types) {\n    if (startValue[type] < endValue[type]) return false\n    if (startValue[type] > endValue[type]) return true\n  }\n\n  return false\n})\n\nconst startTimeBound = useTimeBound(startMinTime, startMaxTime)\nconst endTimeBound = useTimeBound(endMinTime, endMaxTime)\n\nconst isTimeDisabled = computed(() => {\n  return currentState.value === 'start'\n    ? startTimeBound.isTimeDisabled\n    : endTimeBound.isTimeDisabled\n})\nconst startError = computed(() => {\n  const { hour, minute, second } = startState.dateValue\n  const { isTimeDisabled } = startTimeBound\n\n  return (\n    startReversed.value ||\n    isDateDisabled(startState.getDate()) ||\n    isTimeDisabled.hour(hour) ||\n    isTimeDisabled.minute(hour, minute) ||\n    isTimeDisabled.second(hour, minute, second)\n  )\n})\nconst endError = computed(() => {\n  if (!props.range) return false\n\n  const { hour, minute, second } = endState.dateValue\n  const { isTimeDisabled } = endTimeBound\n\n  return (\n    startReversed.value ||\n    isDateDisabled(endState.getDate()) ||\n    isTimeDisabled.hour(hour) ||\n    isTimeDisabled.minute(hour, minute) ||\n    isTimeDisabled.second(hour, minute, second)\n  )\n})\nconst noActionMode = computed(() => props.type !== 'datetime' && props.noAction)\n\nwatch(() => props.type, parseFormat)\nwatch(\n  () => props.value,\n  value => {\n    parseValue(value)\n\n    lastValue.value = (Array.isArray(value) ? value[0] || value[1] : value) ? getStringValue() : ''\n  },\n  { immediate: true }\n)\nwatch(\n  () => props.type,\n  value => {\n    const hasMonth = value !== 'year'\n    const hasDate = hasMonth && value !== 'month'\n\n    startState.enabled.year = true\n    endState.enabled.year = true\n    startState.enabled.month = hasMonth\n    endState.enabled.month = hasMonth\n    startState.enabled.date = hasDate\n    endState.enabled.date = hasDate\n  },\n  { immediate: true }\n)\nwatch(() => props.format, parseFormat, { immediate: true })\nwatch(\n  () => props.visible,\n  value => {\n    currentVisible.value = value\n  }\n)\nwatch(currentVisible, value => {\n  if (value) {\n    updatePopper()\n  }\n})\nwatch(focused, value => {\n  if (value) {\n    emitEvent(props.onFocus)\n  } else {\n    emitEvent(props.onBlur)\n  }\n})\nwatch(currentState, value => {\n  if (!props.unitReadonly && currentVisible.value) {\n    emitEvent(props.onChangeCol, getCurrentState().column, value)\n  }\n})\nwatch(\n  () => startState.column,\n  value => {\n    if (!props.unitReadonly && currentVisible.value && currentState.value === 'start') {\n      emitEvent(props.onChangeCol, value, 'start')\n    }\n  }\n)\nwatch(\n  () => endState.column,\n  value => {\n    if (!props.unitReadonly && currentVisible.value && currentState.value === 'end') {\n      emitEvent(props.onChangeCol, value, 'end')\n    }\n  }\n)\nwatch(\n  () => props.disabled,\n  value => {\n    if (value) {\n      setVisible(false)\n      handleBlur()\n    }\n  }\n)\nwatch(readonly, value => {\n  if (value) {\n    setVisible(false)\n  }\n})\n\ndefineExpose({\n  idFor,\n  currentVisible,\n  focused,\n  isHover,\n  startState,\n  endState,\n  currentState,\n  startError,\n  endError,\n  wrapper,\n  reference,\n  popper,\n  start: startInput,\n  end: endInput,\n  panel: datePanel,\n  updatePopper,\n  focus: (options?: FocusOptions) => reference.value?.focus(options),\n  blur: () => reference.value?.blur()\n})\n\nfunction createDateState() {\n  // const noFiller = props.noFiller\n  const { currentColumn, enabled, resetColumn, enterColumn } = useColumn([\n    'year',\n    'month',\n    'date',\n    'hour',\n    'minute',\n    'second'\n  ] as DateTimeType[])\n\n  const dateValue = reactive({\n    year: 1970,\n    month: 1, // 1 ~ 12\n    date: 1,\n    hour: 0,\n    minute: 0,\n    second: 0\n  })\n  const activated = reactive({\n    year: false,\n    month: false,\n    date: false,\n    hour: false,\n    minute: false,\n    second: false\n  })\n\n  let valueRecord = { ...dateValue }\n  let activatedRecord = { ...activated }\n\n  return reactive({\n    column: currentColumn,\n    enabled,\n    activated,\n    dateValue,\n    resetColumn,\n    enterColumn,\n    setDate: (date: Date, withTime = true) => {\n      dateValue.year = date.getFullYear()\n      dateValue.month = date.getMonth() + 1\n      dateValue.date = date.getDate()\n\n      if (withTime) {\n        dateValue.hour = date.getHours()\n        dateValue.minute = date.getMinutes()\n        dateValue.second = date.getSeconds()\n      }\n    },\n    getDate: () => {\n      return new Date(\n        dateValue.year,\n        dateValue.month - 1,\n        dateValue.date,\n        dateValue.hour,\n        dateValue.minute,\n        dateValue.second\n      )\n    },\n    record() {\n      valueRecord = { ...dateValue }\n      activatedRecord = { ...activated }\n    },\n    restore() {\n      Object.assign(dateValue, valueRecord)\n      Object.assign(activated, activatedRecord)\n    }\n  })\n}\n\nfunction getCurrentState() {\n  return currentState.value === 'start' ? startState : endState\n}\n\nfunction rawValueToDate(value: Dateable, defaultValue = new Date(props.today)) {\n  let date = toDate(value)\n\n  if (Number.isNaN(date.getTime())) {\n    date = defaultValue\n  }\n\n  return date\n}\n\nfunction parseValue<T extends Dateable | null>(value: T | T[]) {\n  if (!Array.isArray(value)) {\n    value = [value, value]\n  }\n\n  for (let i = 0; i < 2; ++i) {\n    const date = rawValueToDate(value[i] ?? '')\n    const state = i === 0 ? startState : endState\n\n    state.setDate(date)\n    toggleActivated(!!value[i], i === 0 ? 'start' : 'end')\n\n    if (!props.range) break\n  }\n}\n\nfunction parseDateUnitOrder() {\n  const orderSet = new Set<DateType>()\n\n  // to ignore 'xxx'\n  let inQuotation = false\n\n  for (let i = 0, len = props.format.length; i < len; ++i) {\n    const char = props.format.charAt(i)\n\n    if (char === \"'\") {\n      inQuotation = !inQuotation\n    } else if (!inQuotation) {\n      switch (char) {\n        case 'y':\n          orderSet.add('year')\n          break\n        case 'M':\n          orderSet.add('month')\n          break\n        case 'd':\n          orderSet.add('date')\n          break\n      }\n    }\n  }\n\n  dateUnitOrder.value = [...orderSet]\n}\n\nfunction parseTimeUnitEnabled() {\n  const isDatetime = props.type === 'datetime'\n\n  ;[startState, endState].forEach(state => {\n    state.enabled.hour = false\n    state.enabled.minute = false\n    state.enabled.second = false\n\n    if (isDatetime && props.format) {\n      // to ignore 'H', 'm' and 's'\n      let inQuotation = false\n\n      for (let i = 0, len = props.format.length; i < len; ++i) {\n        const char = props.format.charAt(i)\n\n        if (char === \"'\") {\n          inQuotation = !inQuotation\n        } else if (!inQuotation) {\n          switch (char) {\n            case 'H':\n              state.enabled.hour = true\n              break\n            case 'm':\n              state.enabled.minute = true\n              break\n            case 's':\n              state.enabled.second = true\n              break\n          }\n        }\n      }\n    }\n  })\n}\n\nfunction parseFormat() {\n  parseDateUnitOrder()\n  parseTimeUnitEnabled()\n}\n\nfunction toggleActivated(value: boolean, valueType?: 'start' | 'end') {\n  const states = valueType\n    ? valueType === 'start'\n      ? [startState]\n      : [endState]\n    : [startState, endState]\n\n  states.forEach(state => {\n    ;(Object.keys(state.activated) as DateTimeType[]).forEach(type => {\n      state.activated[type] = value\n    })\n  })\n}\n\nfunction getStringValue() {\n  return Array.isArray(currentValue.value) ? currentValue.value.join('|') : currentValue.value\n}\n\nfunction isDateDisabled(date: Date) {\n  if (typeof props.disabledDate === 'function') {\n    if (props.disabledDate(date)) {\n      return true\n    }\n  }\n\n  const time = date.getTime()\n\n  if (reversed.value) {\n    if (time > max.value && time < min.value) {\n      return true\n    }\n  } else {\n    if (time < min.value || time > max.value) {\n      return true\n    }\n  }\n\n  return false\n}\n\nfunction verifyDate() {\n  if (startError.value || (props.range && endError.value)) {\n    parseValue(props.value)\n  }\n}\n\nfunction setVisible(visible: boolean) {\n  if (currentVisible.value === visible) return\n\n  currentVisible.value = visible\n\n  emit('update:visible', visible)\n  emitEvent(props.onToggle, visible)\n}\n\nfunction emitChange() {\n  verifyDate()\n\n  if (lastValue.value !== getStringValue()) {\n    lastValue.value = getStringValue()\n\n    const values = Array.isArray(currentValue.value) ? currentValue.value : [currentValue.value]\n    const emitValues: number[] = []\n    const formattedValues: unknown[] = []\n\n    const valueFormat = props.valueFormat\n    const formatValue: DatePickerFormatFn =\n      typeof valueFormat === 'function'\n        ? valueFormat\n        : valueFormat\n          ? (timestamp, type) =>\n              format(\n                timestamp,\n                !Array.isArray(valueFormat)\n                  ? valueFormat\n                  : type === 'start'\n                    ? valueFormat[0]\n                    : valueFormat[1]\n              )\n          : timestamp => timestamp\n\n    for (let i = 0; i < 2; ++i) {\n      if (props.type === 'year') {\n        emitValues[i] = new Date(\n          i === 0 ? startState.dateValue.year : endState.dateValue.year,\n          0\n        ).getTime()\n      } else if (props.type !== 'datetime') {\n        emitValues[i] = new Date(values[i].split(' ')[0] + ' 00:00:00').getTime()\n      } else {\n        emitValues[i] = new Date(values[i]).getTime()\n      }\n\n      formattedValues[i] = formatValue(emitValues[i], i === 0 ? 'start' : 'end')\n\n      if (!props.range) break\n    }\n\n    const emitValue = props.range ? emitValues : emitValues[0]\n    const formattedValue = props.range ? formattedValues : formattedValues[0]\n\n    toggleActivated(true)\n    emit('update:value', emitValue)\n    emit('update:formatted-value', formattedValue)\n    setFieldValue(emitValue)\n    emitEvent(props.onChange as DatePickerChangeEvent, emitValue)\n    validateField()\n  }\n}\n\nfunction finishInput(shouldChange = true) {\n  setVisible(false)\n\n  shouldChange && emitChange()\n  startState.resetColumn()\n  endState.resetColumn()\n}\n\nfunction verifyValue(type: DateTimeType) {\n  const dateValue = getCurrentState().dateValue\n\n  switch (type) {\n    case 'year': {\n      dateValue.year = boundRange(dateValue.year, 1970, 9999)\n      break\n    }\n    case 'month': {\n      dateValue.month = boundRange(dateValue.month, 1, 12)\n      break\n    }\n    case 'date': {\n      const month = dateValue.month\n\n      let lastDay\n\n      if (month < 7) {\n        if (month !== 2) {\n          lastDay = 30 + (month % 2)\n        } else {\n          if (isLeapYear(dateValue.year)) {\n            lastDay = 29\n          } else {\n            lastDay = 28\n          }\n        }\n      } else {\n        lastDay = 31 - (month % 2)\n      }\n\n      dateValue.date = boundRange(dateValue.date, 1, lastDay)\n      break\n    }\n    case 'hour':\n    case 'minute':\n    case 'second': {\n      dateValue[type] = boundRange(dateValue[type], 0, type === 'hour' ? 23 : 59)\n      dateValue[type] = Math.round(dateValue[type] / getStep(type)) * getStep(type)\n    }\n  }\n}\n\nfunction handleFocused() {\n  if (props.disabled) return\n\n  focused.value = true\n\n  timer.focus = setTimeout(() => {\n    if (focused.value) {\n      if (currentState.value === 'start') {\n        startInput.value?.focus()\n      } else {\n        endInput.value?.focus()\n      }\n    }\n  }, 120)\n}\n\nfunction handleBlur() {\n  clearTimeout(timer.focus)\n\n  focused.value = false\n  startInput.value?.blur()\n  endInput.value?.blur()\n}\n\nfunction showPanel(event: Event) {\n  if (props.disabled || readonly.value) return\n\n  const target = event.target as Node\n\n  setVisible(true)\n\n  if (wrapper.value && target) {\n    const units = Array.from(wrapper.value.querySelectorAll(`.${nh.be('unit')}`))\n    const index = units.findIndex(unit => unit === target || unit.contains(target))\n\n    if (!~index) {\n      startState.column = null\n      endState.column = null\n    }\n\n    if (props.range && index >= units.length / 2) {\n      toggleCurrentState('end')\n    } else {\n      toggleCurrentState('start')\n    }\n  }\n\n  handleFocused()\n}\n\nfunction handleInput(value: number) {\n  const state = getCurrentState()\n  const type = state.column\n\n  if (!type) return\n\n  handleInputNumber(type, value)\n\n  if (type === 'year' ? state.dateValue.year >= 1000 : state.dateValue[type] >= 10) {\n    state.enterColumn('next', false)\n  }\n}\n\nfunction handleInputNumber(type: DateTimeType, number: number) {\n  const state = getCurrentState()\n  const prev = state.dateValue[type]\n\n  if (state.activated[type] && prev > 0 && prev < (type === 'year' ? 1000 : 10)) {\n    state.dateValue[type] = prev * 10 + number\n  } else {\n    state.dateValue[type] = number\n    setActivatedTrue(type)\n  }\n\n  type !== 'year' && verifyValue(type)\n  emitEvent(props.onInput, type, state.dateValue[type])\n}\n\nfunction setActivatedTrue(type: DateTimeType) {\n  const activated = getCurrentState().activated\n\n  if (type === 'date') {\n    activated.year = true\n    activated.month = true\n  } else if (type === 'month') {\n    activated.year = true\n  } else if (type === 'minute') {\n    activated.hour = true\n  } else if (type === 'second') {\n    activated.hour = true\n    activated.minute = true\n  }\n\n  activated[type] = true\n}\n\nfunction handleInputFocus(type: DateTimeType) {\n  getCurrentState().column = type\n}\n\nfunction isTimeType(type: DateTimeType): type is TimeType {\n  return ['hour', 'minute', 'second'].includes(type)\n}\n\nfunction handleAdjust(adjustType: 'plus' | 'minus', ctrlKey: boolean) {\n  const isPlus = adjustType === 'plus'\n  const sign = isPlus ? 1 : -1\n  const state = getCurrentState()\n  const type = state.column\n\n  if (!type) return\n\n  if (state.enabled[type]) {\n    if (isTimeType(type)) {\n      state.dateValue[type] += sign * (ctrlKey ? getCtrlStep(type) : getStep(type))\n    } else {\n      if (ctrlKey) {\n        if (type === 'year') {\n          state.dateValue.year += sign * 10\n        } else {\n          state.dateValue[type === 'date' ? 'month' : 'year'] += sign\n        }\n      } else {\n        state.dateValue[type] += sign\n      }\n\n      computeDate()\n      updateDateActivated(type)\n    }\n\n    verifyValue(type)\n    emitEvent(props[isPlus ? 'onPlus' : 'onMinus'], type, state.dateValue[type])\n    datePanel.value?.refreshCalendar(currentState.value)\n  }\n}\n\nfunction handlePlus(ctrlKey: boolean) {\n  handleAdjust('plus', ctrlKey)\n}\n\nfunction handleMinus(ctrlKey: boolean) {\n  handleAdjust('minus', ctrlKey)\n}\n\nfunction computeDate() {\n  const dateValue = getCurrentState().dateValue\n  const date = new Date(dateValue.year, dateValue.month - 1, dateValue.date)\n\n  dateValue.year = date.getFullYear()\n  dateValue.month = date.getMonth() + 1\n  dateValue.date = date.getDate()\n}\n\nfunction fallbackFocus() {\n  requestAnimationFrame(() => {\n    handleBlur()\n    reference.value?.focus()\n  })\n}\n\nfunction handleEnter() {\n  fallbackFocus()\n  finishInput()\n  emitEvent(props.onEnter)\n}\n\nfunction handleCancel() {\n  fallbackFocus()\n  parseValue(lastValue.value.split('|'))\n  finishInput(false)\n  emitEvent(props.onCancel)\n}\n\nfunction handleClear(finish = true) {\n  if (props.disabled || readonly.value) return\n\n  if (props.clearable) {\n    nextTick(() => {\n      const emitValue = props.range ? ([] as number[]) : null\n\n      parseValue(null)\n      finish && finishInput(false)\n      emit('update:value', emitValue)\n      emit('update:formatted-value', props.range ? [] : null)\n      emitEvent(props.onChange as DatePickerChangeEvent, emitValue)\n      emitEvent(props.onClear)\n      clearField(emitValue!)\n      finish && handleBlur()\n\n      lastValue.value = ''\n\n      nextTick(() => {\n        toggleActivated(false)\n      })\n    })\n  }\n}\n\nfunction handleShortcut(name: string, value: Dateable | Dateable[]) {\n  fallbackFocus()\n  parseValue(value)\n  emitEvent(props.onShortcut as (name: string, value: Dateable | Dateable[]) => void, name, value)\n  finishInput()\n}\n\n// 只有时分秒\nfunction getStep(type: TimeType) {\n  return props.steps[type === 'hour' ? 0 : type === 'minute' ? 1 : 2] || 1\n}\n\n// 只有时分秒\nfunction getCtrlStep(type: TimeType) {\n  return props.ctrlSteps[type === 'hour' ? 0 : type === 'minute' ? 1 : 2] || 1\n}\n\nfunction handleDateHover(hoverDate: Date | null) {\n  if (props.range && hoverDate) {\n    hoveredDate.value = hoverDate\n\n    if (firstSelected.value) {\n      const hoverValues = [hoverDate.getFullYear(), hoverDate.getMonth() + 1, hoverDate.getDate()]\n      const start = hoveredLarge.value ? firstSelected.value : hoverValues\n      const end = hoveredLarge.value ? hoverValues : firstSelected.value\n\n      let types: DateTimeType[]\n\n      if (props.type === 'year') {\n        types = ['year']\n      } else if (props.type === 'month') {\n        types = ['year', 'month']\n      } else {\n        types = ['year', 'month', 'date']\n      }\n\n      for (let i = 0, len = types.length; i < len; ++i) {\n        startState.dateValue[types[i]] = start[i]\n        endState.dateValue[types[i]] = end[i]\n      }\n    }\n  }\n}\n\nfunction handlePanelChange(values: number[]) {\n  let types: DateTimeType[]\n\n  if (props.type === 'year') {\n    types = ['year']\n  } else if (props.type === 'month') {\n    types = ['year', 'month']\n  } else {\n    types = ['year', 'month', 'date']\n  }\n\n  if (!props.range) {\n    for (let i = 0, len = types.length; i < len; ++i) {\n      startState.dateValue[types[i]] = values[i]\n      updateDateActivated(types[i], 'start')\n    }\n\n    if (noActionMode.value) handleEnter()\n\n    return\n  }\n\n  if (!firstSelected.value) {\n    firstSelected.value = values\n\n    for (let i = 0, len = types.length; i < len; ++i) {\n      startState.dateValue[types[i]] = values[i]\n      endState.dateValue[types[i]] = values[i]\n      updateDateActivated(types[i], 'start')\n      updateDateActivated(types[i], 'end')\n    }\n  } else {\n    const [year, month, date] = firstSelected.value\n    const firstTime = new Date(`${year}-${month}-${date}`).getTime()\n    const secondTime = new Date(`${values[0]}-${values[1]}-${values[2]}`).getTime()\n    const start = firstTime < secondTime ? firstSelected.value : values\n    const end = firstTime < secondTime ? values : firstSelected.value\n\n    for (let i = 0, len = types.length; i < len; ++i) {\n      startState.dateValue[types[i]] = start[i]\n      endState.dateValue[types[i]] = end[i]\n      updateDateActivated(types[i], 'start')\n      updateDateActivated(types[i], 'end')\n    }\n\n    verifyRangeValue()\n    firstSelected.value = undefined\n\n    if (noActionMode.value) handleEnter()\n  }\n}\n\nfunction handleTimeChange(valueType: 'start' | 'end', type: TimeType, time: number) {\n  const state = valueType === 'start' ? startState : endState\n\n  state.dateValue[type] = time\n  updateDateActivated('hour', valueType)\n  updateDateActivated('minute', valueType)\n  updateDateActivated('second', valueType)\n}\n\nfunction updateDateActivated(type: DateTimeType, valueType?: 'start' | 'end') {\n  const state = valueType ? (valueType === 'start' ? startState : endState) : getCurrentState()\n\n  if (type === 'month') {\n    state.activated.year = true\n  } else if (type === 'date') {\n    state.activated.year = true\n    state.activated.month = true\n  }\n\n  state.activated[type] = true\n}\n\nfunction verifyRangeValue() {\n  if (!props.range) return\n\n  const startDate = startState.getDate()\n  const endDate = endState.getDate()\n\n  if (startDate.getTime() > endDate.getTime()) {\n    startState.setDate(endDate)\n    endState.setDate(startDate)\n  }\n}\n\nfunction toggleCurrentState(type: 'start' | 'end') {\n  currentState.value = type\n}\n\nfunction enterColumn(type: 'prev' | 'next') {\n  if (props.range) {\n    if (type === 'prev' && currentState.value === 'start' && !startState.column) {\n      toggleCurrentState('end')\n    }\n\n    const state = getCurrentState()\n    const currentColumn = state.column\n\n    state.enterColumn(type, !currentColumn)\n\n    if (currentColumn === state.column) {\n      const isStart = currentState.value === 'start'\n      const otherState = isStart ? endState : startState\n\n      otherState.resetColumn(type === 'prev' ? 'second' : 'year', type === 'prev')\n      toggleCurrentState(isStart ? 'end' : 'start')\n    }\n  } else {\n    startState.enterColumn(type)\n  }\n}\n\nfunction handleStartInput(type: DateTimeType) {\n  toggleCurrentState('start')\n  handleInputFocus(type)\n\n  nextTick(() => {\n    datePanel.value?.refreshCalendar('start')\n  })\n}\n\nfunction handleEndInput(type: DateTimeType) {\n  toggleCurrentState('end')\n  handleInputFocus(type)\n\n  nextTick(() => {\n    datePanel.value?.refreshCalendar('end')\n  })\n}\n\nfunction handleClickOutside() {\n  emitEvent(props.onClickOutside)\n\n  if (props.outsideClose && currentVisible.value) {\n    finishInput(!noActionMode.value && !props.outsideCancel)\n    handleBlur()\n    emitEvent(props.onOutsideClose)\n  }\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"group\"\n    :aria-disabled=\"toAttrValue(props.disabled)\"\n    :aria-expanded=\"toAttrValue(currentVisible)\"\n    aria-haspopup=\"dialog\"\n    :aria-labelledby=\"labelId\"\n    @click=\"showPanel\"\n  >\n    <div\n      ref=\"reference\"\n      :class=\"selectorClass\"\n      tabindex=\"0\"\n      @keydown.space.prevent=\"showPanel\"\n      @keydown.backspace.prevent=\"handleClear(false)\"\n    >\n      <div\n        v-if=\"hasPrefix\"\n        :class=\"[nh.be('icon'), nh.be('prefix')]\"\n        :style=\"{ color: props.prefixColor }\"\n      >\n        <slot name=\"prefix\">\n          <Renderer :renderer=\"props.slots.prefix\">\n            <Icon :icon=\"props.prefix\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div :class=\"nh.be('control')\">\n        <DateControl\n          ref=\"start\"\n          :unit-type=\"currentState === 'start' ? startState.column! : ''\"\n          :enabled=\"startState.enabled\"\n          :activated=\"startState.activated\"\n          :date-value=\"startState.dateValue\"\n          :steps=\"props.steps\"\n          :ctrl-steps=\"props.ctrlSteps\"\n          :focused=\"focused\"\n          :visible=\"currentVisible\"\n          :date-separator=\"props.dateSeparator\"\n          :time-separator=\"props.timeSeparator\"\n          :filler=\"props.filler\"\n          :labels=\"props.labels\"\n          :has-error=\"startError\"\n          :placeholder=\"startPlaceholder\"\n          :readonly=\"props.unitReadonly\"\n          :labeled-by=\"labelId\"\n          :date-unit-order=\"dateUnitOrder\"\n          @input=\"handleInput\"\n          @plus=\"handlePlus\"\n          @minus=\"handleMinus\"\n          @enter=\"handleEnter\"\n          @cancel=\"handleCancel\"\n          @unit-focus=\"handleStartInput\"\n          @prev-unit=\"enterColumn('prev')\"\n          @next-unit=\"enterColumn('next')\"\n          @blur=\"startState.column = null\"\n        ></DateControl>\n        <template v-if=\"props.range\">\n          <div :class=\"nh.be('exchange')\">\n            <slot name=\"exchange\">\n              <Renderer :renderer=\"props.slots.exchange\">\n                <Icon v-bind=\"icons.exchange\" style=\"padding-top: 1px\"></Icon>\n              </Renderer>\n            </slot>\n          </div>\n          <DateControl\n            ref=\"end\"\n            :unit-type=\"currentState === 'end' ? endState.column! : ''\"\n            :enabled=\"endState.enabled\"\n            :activated=\"endState.activated\"\n            :date-value=\"endState.dateValue\"\n            :steps=\"props.steps\"\n            :ctrl-steps=\"props.ctrlSteps\"\n            :focused=\"focused\"\n            :visible=\"currentVisible\"\n            :date-separator=\"props.dateSeparator\"\n            :time-separator=\"props.timeSeparator\"\n            :filler=\"props.filler\"\n            :labels=\"props.labels\"\n            :has-error=\"endError\"\n            :placeholder=\"endPlaceholder\"\n            :readonly=\"props.unitReadonly\"\n            :labeled-by=\"labelId\"\n            :date-unit-order=\"dateUnitOrder\"\n            @input=\"handleInput\"\n            @plus=\"handlePlus\"\n            @minus=\"handleMinus\"\n            @enter=\"handleEnter\"\n            @cancel=\"handleCancel\"\n            @unit-focus=\"handleEndInput\"\n            @prev-unit=\"enterColumn('prev')\"\n            @next-unit=\"enterColumn('next')\"\n            @blur=\"endState.column = null\"\n          ></DateControl>\n        </template>\n      </div>\n      <div\n        v-if=\"!props.noSuffix\"\n        :class=\"[nh.be('icon'), nh.be('suffix')]\"\n        :style=\"{\n          color: props.suffixColor,\n          opacity: showClear || props.loading ? '0%' : ''\n        }\"\n      >\n        <slot name=\"suffix\">\n          <Renderer :renderer=\"props.slots.suffix\">\n            <Icon v-bind=\"icons.calendar\" :icon=\"props.suffix || icons.calendar.icon\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div\n        v-else-if=\"props.clearable || props.loading\"\n        :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n      ></div>\n      <Transition :name=\"nh.ns('fade')\" appear>\n        <button\n          v-if=\"showClear\"\n          :class=\"[nh.be('icon'), nh.be('clear')]\"\n          type=\"button\"\n          tabindex=\"-1\"\n          :aria-label=\"mergedLocale.ariaLabel.clear\"\n          @click.stop=\"handleClear()\"\n        >\n          <Icon v-bind=\"icons.clear\" label=\"clear\"></Icon>\n        </button>\n        <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"props.loadingEffect || icons.loading.effect\"\n            :icon=\"props.loadingIcon || icons.loading.icon\"\n            label=\"loading\"\n          ></Icon>\n        </div>\n      </Transition>\n    </div>\n    <Popper\n      ref=\"popper\"\n      :class=\"[nh.be('popper'), nh.ns('calendar-vars'), nh.ns('time-picker-vars'), nh.bs('vars')]\"\n      :visible=\"currentVisible\"\n      :to=\"transferTo\"\n      :transition=\"props.transitionName\"\n      :alive=\"props.popperAlive ?? !transferTo\"\n      @click.stop=\"handleFocused\"\n      @before-enter=\"staticWheel = true\"\n      @before-leave=\"staticWheel = true\"\n      @after-enter=\"staticWheel = false\"\n      @after-leave=\"staticWheel = false\"\n    >\n      <DatePanel\n        ref=\"panel\"\n        :type=\"props.type\"\n        :start-value=\"startState.dateValue\"\n        :end-value=\"endState.dateValue\"\n        :start-activated=\"startState.activated\"\n        :end-activated=\"endState.activated\"\n        :value-type=\"currentState\"\n        :shortcuts=\"props.shortcuts\"\n        :confirm-text=\"props.confirmText\"\n        :cancel-text=\"props.cancelText\"\n        :today=\"props.today\"\n        :no-action=\"props.noAction\"\n        :steps=\"props.steps\"\n        :range=\"props.range\"\n        :min=\"props.min\"\n        :max=\"props.max\"\n        :disabled-date=\"isDateDisabled\"\n        :disabled-time=\"isTimeDisabled\"\n        :has-error=\"startError || endError\"\n        :selecting-type=\"hoveredLarge ? 'end' : 'start'\"\n        :locale=\"mergedLocale\"\n        :week-start=\"props.weekStart\"\n        :static-wheel=\"staticWheel\"\n        :shortcuts-placement=\"props.shortcutsPlacement\"\n        :labeled-by=\"labelId\"\n        @shortcut=\"handleShortcut\"\n        @change=\"handlePanelChange\"\n        @confirm=\"handleEnter\"\n        @cancel=\"handleCancel\"\n        @hover=\"handleDateHover\"\n        @time-change=\"handleTimeChange\"\n      >\n        <template v-if=\"$slots.panelTitle || props.slots.panelTitle\" #title=\"titleParams\">\n          <slot name=\"panelTitle\" v-bind=\"titleParams\">\n            <Renderer :renderer=\"props.slots.panelTitle\" :data=\"titleParams\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"$slots.panelYear || props.slots.panelYear\" #year=\"yearParams\">\n          <slot name=\"panelYear\" v-bind=\"yearParams\">\n            <Renderer :renderer=\"props.slots.panelYear\" :data=\"yearParams\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"$slots.panelMonth || props.slots.panelMonth\" #month=\"monthParams\">\n          <slot name=\"panelMonth\" v-bind=\"monthParams\">\n            <Renderer :renderer=\"props.slots.panelMonth\" :data=\"monthParams\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"$slots.panelWeek || props.slots.panelWeek\" #week=\"weekParams\">\n          <slot name=\"panelWeek\" v-bind=\"weekParams\">\n            <Renderer :renderer=\"props.slots.panelWeek\" :data=\"weekParams\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"$slots.panelDate || props.slots.panelDate\" #date=\"dateParams\">\n          <slot name=\"panelDate\" v-bind=\"dateParams\">\n            <Renderer :renderer=\"props.slots.panelDate\" :data=\"dateParams\"></Renderer>\n          </slot>\n        </template>\n      </DatePanel>\n    </Popper>\n  </div>\n</template>\n","import { booleanProp, buildProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { DividerTextPosition } from './symbol'\n\nexport const dividerProps = buildProps({\n  vertical: booleanProp,\n  textPosition: String as PropType<DividerTextPosition>,\n  /**\n   * 字体增大加粗\n   */\n  primary: booleanProp,\n  dashed: booleanProp,\n  margin: [String, Number]\n})\n\nexport type DividerProps = ExtractPropTypes<typeof dividerProps>\nexport type DividerCProps = ConfigurableProps<DividerProps>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { toCssSize } from '@vexip-ui/utils'\nimport { dividerProps } from './props'\n\ndefineOptions({ name: 'Divider' })\n\nconst _props = defineProps(dividerProps)\nconst props = useProps('divider', _props, {\n  vertical: false,\n  textPosition: {\n    default: 'center',\n    validator: value => ['center', 'left', 'right'].includes(value)\n  },\n  primary: false,\n  dashed: false,\n  margin: null\n})\n\nconst slots = defineSlots<{ default: () => any }>()\n\nconst nh = useNameHelper('divider')\n\nconst hasText = computed(() => !!slots.default)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(props.vertical ? 'vertical' : 'horizontal'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('primary')]: !props.vertical && props.primary,\n      [nh.bm('dashed')]: props.dashed,\n      [nh.bm('with-text')]: !props.vertical && hasText.value,\n      [nh.bm(`with-text-${props.textPosition}`)]:\n        !props.vertical && hasText.value && props.textPosition !== 'center'\n    }\n  ]\n})\nconst margin = computed(() => toCssSize(props.margin))\nconst style = computed(() => {\n  if (!margin.value) return {}\n\n  return props.vertical\n    ? {\n        marginRight: margin.value,\n        marginLeft: margin.value\n      }\n    : {\n        marginTop: margin.value,\n        marginBottom: margin.value\n      }\n})\n</script>\n\n<template>\n  <div :class=\"className\" role=\"separator\" :style=\"style\">\n    <span v-if=\"!props.vertical && hasText\" :class=\"nh.be('text')\">\n      <slot></slot>\n    </span>\n  </div>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  localeProp,\n  sizeProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ButtonType } from '@/components/button'\nimport type { DrawerPlacement, DrawerSlots } from './symbol'\n\nexport const drawerProps = buildProps({\n  locale: localeProp('drawer'),\n  transfer: booleanStringProp,\n  active: booleanProp,\n  width: [Number, String],\n  height: [Number, String],\n  placement: String as PropType<DrawerPlacement>,\n  title: String,\n  closable: booleanProp,\n  inner: booleanProp,\n  maskClose: booleanProp,\n  drawerClass: classProp,\n  hideMask: booleanProp,\n  onBeforeClose: Function as PropType<(isConfirm?: boolean) => any>,\n  resizable: booleanProp,\n  autoRemove: booleanProp,\n  footer: booleanProp,\n  confirmText: String,\n  cancelText: String,\n  loading: booleanProp,\n  confirmType: String as PropType<ButtonType>,\n  cancelType: String as PropType<ButtonType>,\n  actionSize: sizeProp,\n  undivided: booleanProp,\n  disableEsc: booleanProp,\n  slots: Object as PropType<DrawerSlots>,\n  onToggle: eventProp<(active: boolean) => void>(),\n  onClose: eventProp(),\n  onShow: eventProp(),\n  onHide: eventProp(),\n  onResizeStart: eventProp<(rect: { width: number, height: number }) => void>(),\n  onResizeMove: eventProp<(rect: { width: number, height: number }) => void>(),\n  onResizeEnd: eventProp<(rect: { width: number, height: number }) => void>(),\n  onConfirm: eventProp(),\n  onCancel: eventProp()\n})\n\nexport type DrawerProps = ExtractPropTypes<typeof drawerProps>\nexport type DrawerCProps = ConfigurableProps<DrawerProps, never, 'onBeforeClose'>\n","export type DrawerPlacement = 'top' | 'right' | 'bottom' | 'left'\n\nexport interface DrawerSlotParams {\n  resizing: boolean,\n  handleConfirm: () => void,\n  handleCancel: () => void,\n  handleClose: (isConfirm?: boolean) => Promise<unknown>\n}\n\nexport type DrawerCommonSlot = (params: DrawerSlotParams) => any\n\nexport interface DrawerSlots {\n  header?: DrawerCommonSlot,\n  title?: DrawerCommonSlot,\n  close?: DrawerCommonSlot,\n  default?: DrawerCommonSlot,\n  footer?: DrawerCommonSlot,\n  handler?: DrawerCommonSlot\n}\n\nexport const drawerPlacements = Object.freeze<DrawerPlacement[]>(['top', 'right', 'bottom', 'left'])\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Masker } from '@/components/masker'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, nextTick, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\n\nimport {\n  createSizeProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { useMoving } from '@vexip-ui/hooks'\nimport { getGlobalCount, isPromise, toNumber } from '@vexip-ui/utils'\nimport { drawerProps } from './props'\nimport { drawerPlacements } from './symbol'\n\nimport type { DrawerSlots } from './symbol'\n\ndefineOptions({ name: 'Drawer' })\n\nconst _props = defineProps(drawerProps)\nconst props = useProps('drawer', _props, {\n  locale: null,\n  transfer: false,\n  active: {\n    default: false,\n    static: true\n  },\n  width: {\n    default: 280,\n    validator: value => typeof value === 'string' || value > 0\n  },\n  height: {\n    default: 280,\n    validator: value => typeof value === 'string' || value > 0\n  },\n  placement: {\n    default: 'right',\n    validator: value => drawerPlacements.includes(value)\n  },\n  title: '',\n  closable: true,\n  inner: false,\n  maskClose: true,\n  drawerClass: null,\n  hideMask: false,\n  onBeforeClose: {\n    default: null,\n    isFunc: true\n  },\n  resizable: false,\n  autoRemove: false,\n  footer: false,\n  confirmText: null,\n  cancelText: null,\n  loading: false,\n  confirmType: 'primary',\n  cancelType: 'default',\n  actionSize: createSizeProp('small'),\n  undivided: false,\n  disableEsc: false,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:active'])\n\nconst slots = defineSlots<DrawerSlots>()\n\nconst nh = useNameHelper('drawer')\nconst icons = useIcons()\nconst locale = useLocale('drawer', toRef(props, 'locale'))\n\nconst currentActive = ref(props.active)\nconst currentWidth = ref(props.width)\nconst currentHeight = ref(props.height)\n\nconst wrapper = ref<HTMLElement>()\n\nconst idIndex = `${getGlobalCount()}`\n\nconst { target: resizer, moving: resizing } = useMoving({\n  onStart: (state, event) => {\n    if (!props.resizable || event.button > 0 || !wrapper.value) {\n      return false\n    }\n\n    const width = `${currentWidth.value}`.endsWith('%')\n      ? wrapper.value.offsetWidth\n      : toNumber(currentWidth.value)\n    const height = `${currentHeight.value}`.endsWith('%')\n      ? wrapper.value.offsetHeight\n      : toNumber(currentHeight.value)\n\n    state.xStart = width\n    state.yStart = height\n\n    emitEvent(props.onResizeStart, { width, height })\n  },\n  onMove: (state, event) => {\n    const deltaX = event.clientX - state.clientX\n    const deltaY = event.clientY - state.clientY\n\n    let width = toNumber(currentWidth.value)\n    let height = toNumber(currentHeight.value)\n\n    switch (props.placement) {\n      case 'top': {\n        height = state.yStart + deltaY\n        break\n      }\n      case 'right': {\n        width = state.xStart - deltaX\n        break\n      }\n      case 'bottom': {\n        height = state.yStart - deltaY\n        break\n      }\n      default: {\n        width = state.xStart + deltaX\n      }\n    }\n\n    currentWidth.value = Math.max(width, 100)\n    currentHeight.value = Math.max(height, 100)\n\n    emitEvent(props.onResizeMove, {\n      width: toNumber(currentWidth.value),\n      height: toNumber(currentHeight.value)\n    })\n  },\n  onEnd: () => {\n    emitEvent(props.onResizeEnd, {\n      width: toNumber(currentWidth.value),\n      height: toNumber(currentHeight.value)\n    })\n  }\n})\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('inner')]: props.inner,\n      [nh.bm('closable')]: props.closable,\n      [nh.bm('resizable')]: props.resizable,\n      [nh.bm('undivided')]: props.undivided\n    }\n  ]\n})\nconst moveTransition = computed(() => {\n  return nh.ns(`move-${props.placement}`)\n})\nconst wrapperClass = computed(() => {\n  return [\n    nh.be('wrapper'),\n    nh.bem('wrapper', props.placement),\n    {\n      [nh.bem('wrapper', 'hide-mask')]: props.hideMask,\n      [nh.bem('wrapper', 'resizing')]: resizing.value\n    },\n    props.drawerClass\n  ]\n})\nconst wrapperStyle = computed(() => {\n  const placement = props.placement\n\n  if (placement === 'top' || placement === 'bottom') {\n    const height = currentHeight.value\n\n    return {\n      height: `${height}`.endsWith('%') ? height : `${height}px`\n    }\n  }\n\n  const width = currentWidth.value\n\n  return {\n    width: `${width}`.endsWith('%') ? width : `${width}px`\n  }\n})\nconst hasTitle = computed(() => {\n  return !!(slots.header || slots.title || props.title || props.slots.header || props.slots.title)\n})\nconst titleId = computed(() => `${nh.bs(idIndex)}__title`)\nconst bodyId = computed(() => `${nh.bs(idIndex)}__body`)\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n  }\n)\nwatch(\n  () => props.width,\n  value => {\n    currentWidth.value = value\n  }\n)\nwatch(\n  () => props.height,\n  value => {\n    currentHeight.value = value\n  }\n)\n\ndefineExpose({\n  resizing,\n  titleId,\n  bodyId,\n  wrapper,\n  resizer,\n  handleConfirm,\n  handleCancel,\n  handleClose\n})\n\nconst slotParams = shallowReadonly(\n  reactive({\n    resizing,\n    handleConfirm,\n    handleCancel,\n    handleClose\n  })\n)\n\nfunction setActive(active: boolean) {\n  if (currentActive.value === active) return\n\n  currentActive.value = active\n\n  emit('update:active', active)\n  emitEvent(props.onToggle, active)\n}\n\nasync function handleClose(isConfirm = false) {\n  let result: unknown = true\n\n  if (typeof props.onBeforeClose === 'function') {\n    result = props.onBeforeClose(isConfirm)\n\n    if (isPromise(result)) {\n      result = await result\n    }\n  }\n\n  if (result !== false) {\n    nextTick(() => {\n      setActive(false)\n      emitEvent(props.onClose)\n    })\n  }\n\n  return result\n}\n\nfunction handleMaskClose() {\n  if (props.maskClose) {\n    return handleClose()\n  }\n}\n\nfunction handleShow() {\n  emitEvent(props.onShow)\n}\n\nfunction handleHide() {\n  emitEvent(props.onHide)\n}\n\nfunction handleConfirm() {\n  handleClose(true)\n  emitEvent(props.onConfirm)\n}\n\nfunction handleCancel() {\n  handleClose(false)\n  emitEvent(props.onCancel)\n}\n</script>\n\n<template>\n  <Masker\n    v-model:active=\"currentActive\"\n    :inherit=\"props.inherit\"\n    :class=\"className\"\n    :inner=\"props.inner\"\n    :transition-name=\"moveTransition\"\n    :closable=\"props.maskClose\"\n    :disabled=\"props.hideMask\"\n    :on-before-close=\"handleMaskClose\"\n    :transfer=\"props.transfer\"\n    :auto-remove=\"props.autoRemove\"\n    :disable-esc=\"props.disableEsc\"\n    @show=\"handleShow\"\n    @hide=\"handleHide\"\n  >\n    <template #default=\"{ show }\">\n      <section\n        v-show=\"show\"\n        ref=\"wrapper\"\n        :class=\"wrapperClass\"\n        :style=\"wrapperStyle\"\n        role=\"dialog\"\n        :aria-modal=\"show ? 'true' : undefined\"\n        :aria-labelledby=\"titleId\"\n        :aria-describedby=\"bodyId\"\n      >\n        <div v-if=\"hasTitle\" :class=\"nh.be('header')\">\n          <slot name=\"header\" v-bind=\"slotParams\">\n            <Renderer :renderer=\"props.slots.header\" :data=\"slotParams\">\n              <div :id=\"titleId\" :class=\"nh.be('title')\">\n                <slot name=\"title\" v-bind=\"slotParams\">\n                  <Renderer :renderer=\"props.slots.title\" :data=\"slotParams\">\n                    {{ props.title }}\n                  </Renderer>\n                </slot>\n              </div>\n              <button\n                v-if=\"props.closable\"\n                type=\"button\"\n                :class=\"nh.be('close')\"\n                @click=\"handleClose()\"\n              >\n                <slot name=\"close\" v-bind=\"slotParams\">\n                  <Renderer :renderer=\"props.slots.close\" :data=\"slotParams\">\n                    <Icon\n                      v-bind=\"icons.close\"\n                      :scale=\"+(icons.close.scale || 1) * 1.2\"\n                      label=\"close\"\n                    ></Icon>\n                  </Renderer>\n                </slot>\n              </button>\n            </Renderer>\n          </slot>\n        </div>\n        <div :id=\"bodyId\" :class=\"nh.be('content')\">\n          <slot v-bind=\"slotParams\">\n            <Renderer :renderer=\"props.slots.default\" :data=\"slotParams\"></Renderer>\n          </slot>\n        </div>\n        <div v-if=\"props.footer || slots.footer || props.slots.footer\" :class=\"nh.be('footer')\">\n          <slot name=\"footer\" v-bind=\"slotParams\">\n            <Renderer :renderer=\"props.slots.footer\" :data=\"slotParams\">\n              <Button\n                :class=\"[nh.be('button'), nh.bem('button', 'cancel')]\"\n                inherit\n                text\n                :type=\"props.cancelType\"\n                :size=\"props.actionSize\"\n                @click=\"handleCancel\"\n              >\n                {{ props.cancelText || locale.cancel }}\n              </Button>\n              <Button\n                :class=\"[nh.be('button'), nh.bem('button', 'confirm')]\"\n                inherit\n                :type=\"props.confirmType\"\n                :size=\"props.actionSize\"\n                :loading=\"props.loading\"\n                @click=\"handleConfirm\"\n              >\n                {{ props.confirmText || locale.confirm }}\n              </Button>\n            </Renderer>\n          </slot>\n        </div>\n        <div\n          v-if=\"props.resizable\"\n          ref=\"resizer\"\n          :class=\"[\n            nh.be('handler'),\n            nh.bem('handler', props.placement),\n            {\n              [nh.bem('handler', 'resizing')]: resizing\n            }\n          ]\"\n        >\n          <slot name=\"handler\" v-bind=\"slotParams\">\n            <Renderer :renderer=\"props.slots.handler\" :data=\"slotParams\"></Renderer>\n          </slot>\n        </div>\n      </section>\n    </template>\n  </Masker>\n</template>\n","import { booleanProp, booleanStringProp, buildProps, classProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { TooltipShift, TooltipTheme } from '@/components/tooltip'\n\nexport const ellipsisProps = buildProps({\n  placement: String as PropType<Placement>,\n  transfer: booleanStringProp,\n  noHover: booleanProp,\n  transitionName: String,\n  tooltipTheme: String as PropType<TooltipTheme>,\n  tipClass: classProp,\n  maxLines: Number,\n  tipMaxWidth: [Number, String],\n  tipDisabled: booleanProp,\n  tipShift: {\n    type: [Boolean, String] as PropType<boolean | TooltipShift>,\n    default: null\n  }\n})\n\nexport type EllipsisProps = ExtractPropTypes<typeof ellipsisProps>\nexport type EllipsisCProps = ConfigurableProps<EllipsisProps>\n","<script setup lang=\"ts\">\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, ref } from 'vue'\n\nimport { useHoverDelay, useNameHelper, useProps } from '@vexip-ui/config'\nimport { placementWhileList, useSetTimeout } from '@vexip-ui/hooks'\nimport { getRangeWidth } from '@vexip-ui/utils'\nimport { ellipsisProps } from './props'\n\ndefineOptions({ name: 'Ellipsis' })\n\nconst nh = useNameHelper('ellipsis')\n\nconst _props = defineProps(ellipsisProps)\nconst props = useProps('ellipsis', _props, {\n  placement: {\n    default: 'top',\n    validator: value => placementWhileList.includes(value)\n  },\n  transfer: 'body',\n  noHover: false,\n  transitionName: () => nh.ns('fade'),\n  tooltipTheme: {\n    default: 'dark',\n    validator: value => ['light', 'dark'].includes(value)\n  },\n  tipClass: null,\n  maxLines: null,\n  tipMaxWidth: 500,\n  tipDisabled: false,\n  tipShift: false\n})\n\nconst hoverDelay = useHoverDelay()\nconst visible = ref(false)\nconst content = ref('')\n\nconst { timer } = useSetTimeout()\n\nconst wrapper = ref<HTMLElement>()\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('multiple')]: props.maxLines\n  }\n})\nconst ellipsisStyle = computed(() => {\n  return props.maxLines > 0 ? { '-webkit-line-clamp': props.maxLines } : ''\n})\nconst tipStyle = computed(() => {\n  return {\n    maxWidth:\n      typeof props.tipMaxWidth === 'string'\n        ? parseFloat(props.tipMaxWidth) || props.tipMaxWidth\n        : `${props.tipMaxWidth}px`\n  }\n})\n\ndefineExpose({\n  visible,\n  wrapper\n})\n\nfunction handleTriggerEnter() {\n  clearTimeout(timer.hover)\n\n  if (props.tipDisabled) return\n\n  timer.hover = setTimeout(() => {\n    if (!wrapper.value || !wrapper.value.childNodes.length) {\n      visible.value = false\n      return\n    }\n\n    // In the case of multiple lines, use visual height and\n    // real content height to control whether to display\n    if (props.maxLines > 0) {\n      const scrollHeight = wrapper.value.scrollHeight\n      const clientHeight = wrapper.value.clientHeight\n\n      visible.value = scrollHeight > clientHeight\n    } else {\n      visible.value = getRangeWidth(wrapper.value) > wrapper.value.getBoundingClientRect().width\n    }\n\n    content.value = visible.value ? wrapper.value.textContent ?? '' : ''\n  }, hoverDelay.value)\n}\n\nfunction handleTriggerLeave() {\n  clearTimeout(timer.hover)\n\n  if (props.tipDisabled) return\n\n  timer.hover = setTimeout(() => {\n    visible.value = false\n  }, hoverDelay.value)\n}\n</script>\n\n<template>\n  <Tooltip\n    :visible=\"visible\"\n    trigger=\"custom\"\n    :disabled=\"props.tipDisabled\"\n    :transfer=\"props.transfer\"\n    :placement=\"props.placement\"\n    :no-hover=\"props.noHover\"\n    :transition-name=\"props.transitionName\"\n    :tip-class=\"props.tipClass\"\n    :tip-style=\"tipStyle\"\n    :reverse=\"props.tooltipTheme === 'dark'\"\n    :shift=\"props.tipShift\"\n    @tip-enter=\"handleTriggerEnter\"\n    @tip-leave=\"handleTriggerLeave\"\n  >\n    <template #trigger>\n      <div\n        ref=\"wrapper\"\n        v-bind=\"$attrs\"\n        :class=\"className\"\n        :style=\"ellipsisStyle\"\n        @mouseenter=\"handleTriggerEnter\"\n        @mouseleave=\"handleTriggerLeave\"\n      >\n        <slot></slot>\n      </div>\n    </template>\n    {{ content }}\n  </Tooltip>\n</template>\n","<script setup lang=\"ts\">\nimport { Column } from '@/components/column'\nimport { Icon } from '@/components/icon'\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, inject, onBeforeUnmount, onMounted, provide, ref, toRef, watch } from 'vue'\n\nimport {\n  makeSentence,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n  useWordSpace\n} from '@vexip-ui/config'\nimport { useDisplay } from '@vexip-ui/hooks'\nimport { createEventEmitter, getGlobalCount, isFunction, isNull, isObject } from '@vexip-ui/utils'\nimport { formItemProps } from './props'\nimport { validate as asyncValidate } from './validator'\nimport { getValueByPath, setValueByPath } from './helper'\nimport { FIELD_OPTIONS, FORM_ACTIONS, FORM_FIELDS, FORM_PROPS } from './symbol'\n\nimport type { ComponentState } from '@vexip-ui/config'\nimport type { Rule } from './validator'\n\ndefineOptions({ name: 'FormItem', inheritAttrs: true })\n\nconst nh = useNameHelper('form')\nconst _props = defineProps(formItemProps)\nconst props = useProps('formItem', _props, {\n  locale: null,\n  label: {\n    default: '',\n    static: true\n  },\n  prop: {\n    default: '',\n    static: true\n  },\n  name: {\n    default: '',\n    static: true\n  },\n  rules: () => [],\n  labelWidth: null,\n  required: false,\n  htmlFor: {\n    default: null,\n    static: true\n  },\n  errorTransition: () => nh.ns('fade'),\n  defaultValue: {\n    default: null,\n    static: true\n  },\n  hideErrorTip: false,\n  validateAll: null,\n  hideAsterisk: null,\n  hideLabel: null,\n  action: false,\n  help: '',\n  pure: false,\n  span: 24,\n  offset: null,\n  push: null,\n  pull: null,\n  order: null,\n  xs: null,\n  sm: null,\n  md: null,\n  lg: null,\n  xl: null,\n  xxl: null,\n  flex: null\n})\n\nconst slots = defineSlots<{\n  default?: () => any,\n  help?: () => any,\n  label?: () => any,\n  error?: (params: { tip: string }) => any\n}>()\n\nconst formProps = inject(FORM_PROPS, {})\nconst formActions = inject(FORM_ACTIONS, null)\nconst formFields = inject(FORM_FIELDS, null)\nconst emitter = createEventEmitter()\n\nconst locale = useLocale('form', toRef(props, 'locale'))\nconst icons = useIcons()\nconst wordSpace = useWordSpace()\n\nconst idIndex = `${getGlobalCount()}`\n\nconst initValue = ref(props.defaultValue)\nconst isError = ref(false)\nconst errorTip = ref('')\nconst validating = ref(false)\nconst disabledValidate = ref(false)\nconst labelWidth = ref(0)\n\nconst placeholder = useDisplay(() => {\n  if (placeholder.value) {\n    labelWidth.value = placeholder.value.offsetWidth\n  }\n})\n\nconst labelId = computed(() => nh.bs(`${idIndex}__label`))\nconst isRequired = computed(() => formProps.allRequired || props.required)\nconst requiredTip = computed(() => {\n  return makeSentence(`${props.label || props.prop} ${locale.value.notNullable}`, wordSpace.value)\n})\nconst allRules = computed(() => {\n  if (!props.prop) return []\n\n  const requiredRule: Rule[] = isRequired.value\n    ? [{ required: isRequired.value, message: requiredTip.value }]\n    : []\n  const selfRules = Array.isArray(props.rules) ? props.rules : [props.rules]\n\n  let formRules: Rule[] = []\n\n  if (formProps.rules) {\n    formRules = (getValueByPath(formProps.rules, props.prop) as Rule[]) ?? []\n  }\n\n  formRules = Array.isArray(formRules) ? formRules : [formRules]\n\n  return requiredRule.concat(formRules, selfRules)\n})\nconst currentValue = computed(getValue)\nconst isValidateAll = computed(() => {\n  return isNull(props.validateAll) ? (formProps.validateAll ?? false) : props.validateAll\n})\nconst useAsterisk = computed(() => {\n  if (props.hideAsterisk === true || formProps.hideAsterisk) {\n    return false\n  }\n\n  for (const rule of allRules.value) {\n    if (rule.required) return true\n  }\n\n  return isRequired.value\n})\nconst hideLabel = computed(() => props.action || props.hideLabel === true || formProps.hideLabel)\nconst hasLabel = computed(() => !(hideLabel.value || !(props.label || slots.label)))\nconst labelAlign = computed(() => formProps.labelAlign)\nconst computedLabelWidth = computed(() => {\n  if (labelAlign.value) {\n    return getLabelWidth(\n      labelAlign.value === 'top'\n        ? 0\n        : hideLabel.value\n          ? 0\n          : props.labelWidth || formProps.labelWidth || 80\n    )\n  }\n\n  return getLabelWidth(hideLabel.value ? 0 : props.labelWidth || 80)\n})\nconst className = computed(() => {\n  return {\n    [nh.be('item')]: true,\n    [nh.bs('vars')]: true,\n    [nh.bem('item', 'inherit')]: formFields || props.inherit,\n    [nh.bem('item', 'required')]: !formProps.hideAsterisk && useAsterisk.value,\n    [nh.bem('item', 'error')]: isError.value,\n    [nh.bem('item', 'action')]: props.action,\n    [nh.bem('item', 'padding')]: formProps.inline && labelAlign.value === 'top' && !hasLabel.value\n  }\n})\nconst controlStyle = computed(() => {\n  return {\n    width: labelAlign.value === 'top' ? undefined : `calc(100% - ${computedLabelWidth.value}px)`,\n    marginLeft:\n      hasLabel.value || labelAlign.value === 'top' ? undefined : `${computedLabelWidth.value}px`\n  }\n})\nconst inputValue = computed(() => {\n  const value = currentValue.value\n\n  if (Array.isArray(value) || isObject(value)) {\n    return JSON.stringify(value)\n  }\n\n  return value\n})\nconst columnFlex = computed(() => {\n  return { justify: props.action ? 'center' : 'start', align: 'middle' } as const\n})\n\nconst instances = new Set<any>()\n\nconst fieldObject = Object.freeze({\n  prop: computed(() => props.prop),\n  idFor: computed(() => props.prop),\n  labelId,\n  state: computed<ComponentState>(() => (isError.value ? 'error' : 'default')),\n  disabled: computed(() => !!formProps.disabled),\n  loading: computed(() => !!formProps.loading),\n  size: computed(() => formProps.size || 'default'),\n  emitter,\n  labelWidth,\n  validate,\n  clearError,\n  reset,\n  getValue,\n  setValue,\n  sync: (instance: any) => {\n    if (instances.size) {\n      console.warn('[vexip-ui:Form]: must only be one control component under FormItem.')\n    }\n\n    instances.add(instance)\n  },\n  unSync: (instance: any) => {\n    instances.delete(instance)\n  }\n})\n\nprovide(FIELD_OPTIONS, fieldObject)\n\nwatch(\n  () => props.defaultValue,\n  value => {\n    initValue.value = value\n  }\n)\n\nonMounted(() => {\n  const value = currentValue.value\n\n  if (isNull(initValue.value)) {\n    initValue.value = Array.isArray(value) ? Array.from(value) : value\n  }\n\n  if (formFields) {\n    formFields.add(fieldObject)\n  }\n})\n\nonBeforeUnmount(() => {\n  if (formFields) {\n    formFields.delete(fieldObject)\n  }\n})\n\ndefineExpose({ isError, inputValue, computedLabelWidth })\n\nfunction getLabelWidth(width: number | 'auto') {\n  return width === 'auto' ? formActions?.getLabelWidth() || 80 : width\n}\n\nlet initialized = false\n\nfunction getValue(defaultValue: unknown = initValue.value) {\n  if (!formProps.model || !props.prop) return defaultValue\n\n  try {\n    const value = getValueByPath(formProps.model, props.prop, true)\n    initialized = true\n\n    return value\n  } catch (e) {\n    if (!initialized) {\n      setValueByPath(formProps.model, props.prop, defaultValue, false)\n      initialized = true\n    }\n\n    return defaultValue\n  }\n}\n\nfunction setValue(value: unknown, strict = false) {\n  if (!formProps.model || !props.prop) return\n\n  try {\n    return setValueByPath(formProps.model, props.prop, value, strict)\n  } catch (e) {}\n}\n\nfunction validate() {\n  return handleValidate()\n}\n\nfunction clearError() {\n  isError.value = false\n  errorTip.value = ''\n}\n\nfunction reset() {\n  clearError()\n\n  if (!formProps.model || !props.prop) return false\n\n  const value = currentValue.value\n\n  let resetValue\n\n  if (Array.isArray(value)) {\n    resetValue = Array.isArray(initValue.value) ? Array.from(initValue.value) : []\n  } else {\n    resetValue = isFunction(initValue.value) ? initValue.value() : initValue.value\n  }\n\n  return setValueByPath(formProps.model, props.prop, resetValue, true)\n}\n\nasync function handleValidate() {\n  if (disabledValidate.value) {\n    disabledValidate.value = false\n\n    return handleValidateEnd(null)\n  }\n\n  if (!props.prop || !formProps.model || validating.value) {\n    return handleValidateEnd(null)\n  }\n\n  validating.value = true\n\n  const value = currentValue.value\n  const useRules = allRules.value\n  const model = formProps.model\n\n  let errors: string[] | null = await asyncValidate(\n    useRules,\n    value,\n    model,\n    isValidateAll.value,\n    locale.value.validateFail\n  )\n\n  errors = errors.length ? errors : null\n\n  return handleValidateEnd(errors)\n}\n\nfunction handleValidateEnd(errors: string[] | null) {\n  validating.value = false\n\n  if (!errors) {\n    clearError()\n  } else {\n    isError.value = true\n    errorTip.value = Array.isArray(errors) ? errors[0] : errors\n  }\n\n  return errors\n}\n\nfunction handleLabelClick() {\n  emitter.emit('focus')\n}\n\nconst isNative = computed(() => !!(formProps.action && formProps.method))\n</script>\n\n<template>\n  <slot v-if=\"props.pure\"></slot>\n  <Column\n    v-else\n    v-bind=\"$attrs\"\n    :class=\"className\"\n    :inherit=\"props.inherit\"\n    role=\"group\"\n    tag=\"div\"\n    :span=\"props.span\"\n    :offset=\"props.offset\"\n    :push=\"props.push\"\n    :pull=\"props.pull\"\n    :order=\"props.order\"\n    :xs=\"props.xs\"\n    :sm=\"props.sm\"\n    :md=\"props.md\"\n    :lg=\"props.lg\"\n    :xl=\"props.xl\"\n    :xxl=\"props.xxl\"\n    :flex=\"props.flex\"\n    :use-flex=\"columnFlex\"\n  >\n    <input\n      v-if=\"isNative\"\n      type=\"hidden\"\n      :name=\"props.name || props.prop\"\n      :value=\"inputValue\"\n      style=\"display: none\"\n    />\n    <span v-if=\"hasLabel && labelAlign !== 'top'\" ref=\"placeholder\" :class=\"nh.be('placeholder')\">\n      <slot name=\"label\">\n        {{ props.label + (formProps.labelSuffix || '') }}\n      </slot>\n    </span>\n    <label\n      v-if=\"hasLabel\"\n      :id=\"labelId\"\n      :class=\"nh.be('label')\"\n      :style=\"{ width: labelAlign !== 'top' ? `${computedLabelWidth}px` : undefined }\"\n      :for=\"props.htmlFor || props.prop\"\n      @click=\"handleLabelClick\"\n    >\n      <Tooltip v-if=\"props.help || slots.help\" transfer>\n        <template #trigger>\n          <Icon v-bind=\"icons.help\" :class=\"nh.be('help')\"></Icon>\n        </template>\n        <slot name=\"help\">\n          <div :class=\"nh.be('help-tip')\">\n            {{ props.help }}\n          </div>\n        </slot>\n      </Tooltip>\n      <slot name=\"label\">\n        {{ props.label + (formProps.labelSuffix || '') }}\n      </slot>\n    </label>\n    <div\n      :class=\"{\n        [nh.be('control')]: true,\n        [nh.bem('control', 'no-label')]: !hasLabel,\n        [nh.bem('control', 'action')]: props.action\n      }\"\n      role=\"alert\"\n      aria-relevant=\"all\"\n      :style=\"controlStyle\"\n    >\n      <slot></slot>\n      <Transition :name=\"props.errorTransition\">\n        <div v-if=\"!props.hideErrorTip && isError\" :class=\"nh.be('error-tip')\">\n          <slot name=\"error\" :tip=\"errorTip\">\n            {{ errorTip }}\n          </slot>\n        </div>\n      </Transition>\n    </div>\n  </Column>\n</template>\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\n\nimport { computed, inject, toRef } from 'vue'\n\nimport { createIconProp, emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { isPromise } from '@vexip-ui/utils'\nimport { formResetProps } from './props'\nimport { FORM_ACTIONS } from './symbol'\n\ndefineOptions({ name: 'FormReset' })\n\nconst _props = defineProps(formResetProps)\nconst props = useProps('formReset', _props, {\n  size: null,\n  locale: null,\n  type: 'default',\n  label: null,\n  dashed: null,\n  text: null,\n  simple: null,\n  ghost: null,\n  disabled: null,\n  loading: null,\n  circle: null,\n  loadingIcon: createIconProp(),\n  loadingEffect: null,\n  icon: createIconProp(),\n  color: null,\n  buttonType: null,\n  block: null,\n  onBeforeReset: {\n    default: null,\n    isFunc: true\n  }\n})\n\nconst slots = defineSlots<{\n  default?: () => any,\n  icon?: () => any,\n  loading?: () => any\n}>()\n\nconst actions = inject(FORM_ACTIONS, null)\n\nconst nh = useNameHelper('form')\nconst locale = useLocale('form', toRef(props, 'locale'))\n\nconst isInherit = computed(() => !!actions || props.inherit)\n\nasync function handleReset() {\n  if (props.disabled) return\n\n  let result: unknown = true\n\n  if (typeof props.onBeforeReset === 'function') {\n    result = props.onBeforeReset()\n\n    if (isPromise(result)) {\n      result = await result\n    }\n  }\n\n  if (result !== false) {\n    actions?.reset()\n    emitEvent(props.onReset)\n  }\n}\n</script>\n\n<template>\n  <Button\n    v-bind=\"$attrs\"\n    :inherit=\"isInherit\"\n    :class=\"nh.be('reset')\"\n    :size=\"props.size\"\n    :type=\"props.type\"\n    :simple=\"props.simple\"\n    :ghost=\"props.ghost\"\n    :dashed=\"props.dashed\"\n    :text=\"props.text\"\n    :disabled=\"props.disabled\"\n    :loading=\"props.loading\"\n    :circle=\"props.circle\"\n    :loading-icon=\"props.loadingIcon\"\n    :loading-effect=\"props.loadingEffect\"\n    :icon=\"props.icon\"\n    :color=\"props.color\"\n    :button-type=\"props.buttonType\"\n    :block=\"props.block\"\n    :tag=\"props.tag\"\n    @click=\"handleReset\"\n  >\n    <slot>\n      {{ props.label || locale.reset }}\n    </slot>\n    <template v-if=\"slots.icon\" #icon>\n      <slot name=\"icon\"></slot>\n    </template>\n    <template v-if=\"slots.loading\" #loading>\n      <slot name=\"loading\"></slot>\n    </template>\n  </Button>\n</template>\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { FIELD_OPTIONS } from '@/components/form/symbol'\n\nimport { computed, inject, ref, toRef } from 'vue'\n\nimport { createIconProp, emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useSetTimeout } from '@vexip-ui/hooks'\nimport { isPromise } from '@vexip-ui/utils'\nimport { formSubmitProps } from './props'\nimport { FORM_ACTIONS, FORM_PROPS } from './symbol'\n\ndefineOptions({ name: 'FormSubmit' })\n\nconst _props = defineProps(formSubmitProps)\nconst props = useProps('form-submit', _props, {\n  size: null,\n  locale: null,\n  type: 'primary',\n  label: null,\n  dashed: null,\n  text: null,\n  simple: null,\n  ghost: null,\n  disabled: null,\n  circle: null,\n  loadingIcon: createIconProp(),\n  loadingEffect: null,\n  icon: createIconProp(),\n  color: null,\n  buttonType: null,\n  block: null,\n  onBeforeSubmit: {\n    default: null,\n    isFunc: true\n  }\n})\n\nconst slots = defineSlots<{\n  default?: () => any,\n  icon?: () => any,\n  loading?: () => any\n}>()\n\nconst fieldActions = inject(FIELD_OPTIONS, null)\n\nconst formProps = inject(FORM_PROPS, {})\nconst actions = inject(FORM_ACTIONS, null)\n\nconst nh = useNameHelper('form')\nconst locale = useLocale('form', toRef(props, 'locale'))\n\nconst { timer } = useSetTimeout()\n\nconst loading = ref(false)\n\nconst submit = ref<HTMLElement>()\n\nconst isNative = computed(() => formProps.method && formProps.action)\nconst isInherit = computed(() => !!actions || props.inherit)\nconst isLoading = computed(() => {\n  return loading.value || (fieldActions ? fieldActions.loading.value : false)\n})\n\ndefineExpose({ submit, isNative, isLoading })\n\nasync function handleSubmit() {\n  if (props.disabled || loading.value || !actions) return\n\n  loading.value = true\n\n  const errors = await actions.validate()\n\n  if (errors.length) {\n    emitEvent(props.onError, errors)\n  } else {\n    let result: unknown = true\n\n    if (typeof props.onBeforeSubmit === 'function') {\n      result = props.onBeforeSubmit()\n\n      if (isPromise(result)) {\n        result = await result\n      }\n    }\n\n    if (result !== false) {\n      emitEvent(props.onSubmit)\n\n      if (isNative.value) {\n        submit.value?.click()\n      }\n    }\n  }\n\n  timer.loading = setTimeout(() => {\n    loading.value = false\n  }, 300)\n}\n</script>\n\n<template>\n  <Button\n    v-bind=\"$attrs\"\n    :inherit=\"isInherit\"\n    :class=\"nh.be('submit')\"\n    :size=\"props.size\"\n    :type=\"props.type\"\n    :simple=\"props.simple\"\n    :ghost=\"props.ghost\"\n    :dashed=\"props.dashed\"\n    :text=\"props.text\"\n    :disabled=\"props.disabled\"\n    :loading=\"isLoading\"\n    :circle=\"props.circle\"\n    :loading-icon=\"props.loadingIcon\"\n    :loading-effect=\"props.loadingEffect\"\n    :icon=\"props.icon\"\n    :color=\"props.color\"\n    :button-type=\"props.buttonType\"\n    :block=\"props.block\"\n    :tag=\"props.tag\"\n    @click=\"handleSubmit\"\n  >\n    <slot>\n      {{ props.label || locale.submit }}\n    </slot>\n    <template v-if=\"slots.icon\" #icon>\n      <slot name=\"icon\"></slot>\n    </template>\n    <template v-if=\"slots.loading\" #loading>\n      <slot name=\"loading\"></slot>\n    </template>\n    <button\n      v-if=\"isNative\"\n      ref=\"submit\"\n      type=\"submit\"\n      style=\"display: none\"\n      @click.stop\n    ></button>\n  </Button>\n</template>\n","import { buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { FullScreenType } from './symbol'\n\nexport const fullScreenProps = buildProps({\n  tag: String,\n  onToggle: eventProp<(full: false | FullScreenType) => void>()\n})\n\nexport type FullScreenProps = ExtractPropTypes<typeof fullScreenProps>\nexport type FullScreenCProps = ConfigurableProps<FullScreenProps, 'model'>\n","<script setup lang=\"ts\">\nimport { Portal } from '@/components/portal'\n\nimport { computed, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useFullScreen } from '@vexip-ui/hooks'\nimport { getGlobalCount } from '@vexip-ui/utils'\nimport { fullScreenProps } from './props'\n// import { getIndexId } from './symbol'\n\nimport type { FullScreenSlotParams, FullScreenType } from './symbol'\n\ndefineOptions({ name: 'FullScreen' })\n\nconst _props = defineProps(fullScreenProps)\nconst props = useProps('fullScreen', _props, {\n  tag: 'div'\n})\n\ndefineSlots<{ default: (params: FullScreenSlotParams) => any }>()\n\nconst nh = useNameHelper('full-screen')\n\nconst placeId = `__vxp-full-screen-id-${getGlobalCount()}`\n\nconst isEntered = ref(false)\nconst zIndex = ref<number>()\nconst fullType = ref<FullScreenType>()\n\nconst full = computed(() => isEntered.value && fullType.value!)\nconst className = computed(() => [nh.b(), nh.bs('vars'), { [nh.bm('full')]: full.value }])\nconst transferTo = computed(() => (fullType.value === 'window' ? 'body' : ''))\n\nconst {\n  enter: browserEnter,\n  exit: browserExit,\n  target: wrapper,\n  full: browserFull\n} = useFullScreen()\n\nwatch(browserFull, value => {\n  if (!value) {\n    isEntered.value = false\n    fullType.value = undefined\n  }\n})\nwatch(full, value => {\n  emitEvent(props.onToggle, value)\n})\n\nasync function enter(type: FullScreenType = 'window', customZIndex?: number) {\n  if (isEntered.value) {\n    await exit()\n  }\n\n  if (type !== 'window') {\n    await browserEnter()\n  }\n\n  isEntered.value = true\n  zIndex.value = customZIndex\n  fullType.value = type !== 'window' ? 'browser' : 'window'\n}\n\nasync function exit() {\n  await browserExit()\n\n  zIndex.value = undefined\n  isEntered.value = false\n  fullType.value = undefined\n}\n\nasync function toggle(type: FullScreenType = 'window', zIndex?: number) {\n  if (isEntered.value) {\n    if (fullType.value !== type) {\n      await enter(type, zIndex)\n    } else {\n      await exit()\n    }\n  } else {\n    await enter(type, zIndex)\n  }\n}\n\ndefineExpose({\n  full,\n  placeId,\n  wrapper,\n  enter,\n  exit,\n  toggle\n})\n</script>\n\n<template>\n  <Portal :to=\"transferTo\">\n    <component\n      :is=\"props.tag || 'div'\"\n      v-bind=\"$attrs\"\n      ref=\"wrapper\"\n      :class=\"className\"\n      :style=\"{ [nh.cv('z-index')]: zIndex }\"\n    >\n      <slot\n        :full=\"full\"\n        :place-id=\"placeId\"\n        :enter=\"enter\"\n        :exit=\"exit\"\n        :toggle=\"toggle\"\n      ></slot>\n      <div :id=\"placeId\" :class=\"nh.be('place')\" role=\"none\"></div>\n    </component>\n  </Portal>\n</template>\n","import { computed, defineComponent, h, provide, reactive, toRef } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { gridProps } from './props'\nimport { GRID_STATE } from './symbol'\n\nimport type { CSSProperties } from 'vue'\nimport type { GridAlign, GridJustify, LayoutProp } from './symbol'\n\nconst numberRE = /^\\d+$/\n\nconst justifyList = Object.freeze<GridJustify[]>([\n  'start',\n  'end',\n  'center',\n  'space-around',\n  'space-between',\n  'space-evenly'\n])\nconst alignList = Object.freeze<GridAlign[]>(['top', 'middle', 'bottom', 'stretch'])\n\nexport default defineComponent({\n  name: 'Grid',\n  props: gridProps,\n  setup(_props, { slots }) {\n    const props = useProps('grid', _props, {\n      tag: 'div',\n      gap: 0,\n      rows: 'none',\n      columns: 24,\n      autoRows: 'auto',\n      autoColumns: 'auto',\n      dense: false,\n      justify: {\n        default: 'start',\n        validator: value => justifyList.includes(value)\n      },\n      align: {\n        default: 'stretch',\n        validator: value => alignList.includes(value)\n      },\n      cellFlex: false\n    })\n\n    const nh = useNameHelper('grid')\n\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bm(props.justify)]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.align)]: props.align !== 'stretch',\n        [nh.bm('dense')]: props.dense\n      }\n    })\n    const style = computed(() => {\n      const style: CSSProperties = {}\n\n      if (props.gap) {\n        style.gap = Array.isArray(props.gap)\n          ? `${props.gap[0]}px ${props.gap[1]}px`\n          : `${props.gap}px`\n      }\n\n      style.gridTemplateColumns = parseSizeLayout(props.columns)\n\n      if (props.rows !== 'none') {\n        style.gridTemplateRows = parseSizeLayout(props.rows)\n      }\n\n      if (props.autoRows !== 'auto') {\n        style.gridAutoRows = parseAutoLayout(props.autoRows)\n      }\n\n      if (props.autoColumns !== 'auto') {\n        style.gridAutoColumns = parseAutoLayout(props.autoColumns)\n      }\n\n      return style\n    })\n    const cellFlex = computed(() => {\n      if (props.cellFlex === true) {\n        return {\n          justify: 'start',\n          align: 'top'\n        } as const\n      } else if (props.cellFlex) {\n        return {\n          justify: 'start',\n          align: 'top',\n          ...props.cellFlex\n        } as const\n      }\n\n      return false\n    })\n\n    provide(GRID_STATE, reactive({ cellFlex, columns: toRef(props, 'columns') }))\n\n    function parseSizeLayout(value: LayoutProp) {\n      if (typeof value === 'number') {\n        return `repeat(${value}, 1fr)`\n      }\n\n      if (typeof value === 'string') {\n        return numberRE.test(value.trim()) ? `repeat(${value}, 1fr)` : value\n      }\n\n      if (Array.isArray(value)) {\n        return value\n          .map(item => {\n            if (typeof item === 'number') {\n              return `${item}fr`\n            }\n\n            if (typeof item === 'string') {\n              return numberRE.test(item.trim()) ? `${item}fr` : item\n            }\n\n            return item\n          })\n          .join(' ')\n      }\n\n      return value\n    }\n\n    function parseAutoLayout(value: LayoutProp) {\n      if (typeof value === 'number') {\n        return `${value}fr`\n      }\n\n      if (typeof value === 'string') {\n        return numberRE.test(value.trim()) ? `repeat(${value}, 1fr)` : value\n      }\n\n      if (Array.isArray(value)) {\n        return value\n          .map(item => {\n            if (typeof item === 'number') {\n              return `${item}fr`\n            }\n\n            if (typeof item === 'string') {\n              return numberRE.test(item.trim()) ? `${item}fr` : item\n            }\n\n            return item\n          })\n          .join(' ')\n      }\n\n      return value\n    }\n\n    return () =>\n      h(\n        props.tag || 'div',\n        {\n          class: className.value,\n          style: style.value\n        },\n        {\n          default: () => slots.default?.()\n        }\n      )\n  }\n})\n","import { booleanProp, buildProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const highlightProps = buildProps({\n  content: String,\n  keyWords: Array as PropType<string[]>,\n  ignoreCase: booleanProp\n})\n\nexport type HighlightProps = ExtractPropTypes<typeof highlightProps>\nexport type HighlightCProps = ConfigurableProps<HighlightProps, 'content' | 'keyWords'>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { highlightProps } from './props'\n\ndefineOptions({ name: 'Highlight' })\n\nconst _props = defineProps(highlightProps)\nconst props = useProps('highlight', _props, {\n  content: {\n    default: '',\n    static: true\n  },\n  keyWords: {\n    default: () => [],\n    static: true\n  },\n  ignoreCase: false\n})\n\nconst nh = useNameHelper('highlight')\n\nconst splitRE = computed(() => {\n  const keyWords = props.keyWords?.filter(Boolean)\n\n  if (!keyWords?.length) {\n    return null\n  }\n\n  return new RegExp(\n    `(${keyWords.sort((p, n) => n.length - p.length).join('|')})`,\n    `${props.ignoreCase ? 'i' : ''}g`\n  )\n})\nconst renderTexts = computed(() => {\n  if (!splitRE.value || !props.content) {\n    return [{ isKey: false, text: props.content }]\n  }\n\n  return props.content.split(splitRE.value).map(text => {\n    return { isKey: splitRE.value!.test(text), text }\n  })\n})\n</script>\n\n<template>\n  <div :class=\"[nh.b(), nh.bs('vars'), props.inherit && nh.bm('inherit')]\">\n    <template v-for=\"(item, index) in renderTexts\" :key=\"index\">\n      <span v-if=\"item.isKey\" :class=\"nh.be('key-word')\">\n        <slot name=\"light\" :text=\"item.text\">\n          {{ item.text }}\n        </slot>\n      </span>\n      <span v-else>\n        <slot :text=\"item.text\">\n          {{ item.text }}\n        </slot>\n      </span>\n    </template>\n  </div>\n</template>\n","import { booleanNumberProp, booleanProp, buildProps, eventProp, localeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type {\n  ViewerActionLayout,\n  ViewerState,\n  ViewerToolbarAction,\n  ViewerToolbarPlacement\n} from './symbol'\n\nexport const viewerProps = buildProps({\n  locale: localeProp('viewer'),\n  width: [String, Number],\n  height: [String, Number],\n  moveDisabled: booleanProp,\n  zoomDisabled: booleanProp,\n  zoomDelta: Number,\n  zoomMin: Number,\n  zoomMax: Number,\n  flipDisabled: booleanProp,\n  rotateDisabled: booleanProp,\n  rotateDelta: Number,\n  fullDisabled: booleanProp,\n  toolbarPlacement: String as PropType<ViewerToolbarPlacement>,\n  actions: Array as PropType<ViewerToolbarAction[]>,\n  toolbarFade: booleanNumberProp,\n  noTransition: booleanProp,\n  centerScale: booleanProp,\n  actionLayout: Array as PropType<ViewerActionLayout>,\n  onMoveStart: eventProp<(state: ViewerState) => void>(),\n  onMove: eventProp<(state: ViewerState) => void>(),\n  onMoveEnd: eventProp<(state: ViewerState) => void>(),\n  onWheel: eventProp<(sign: 1 | -1, state: ViewerState) => void>(),\n  onRotate: eventProp<(deg: number, state: ViewerState) => void>(),\n  onFlipX: eventProp<(flip: boolean, state: ViewerState) => void>(),\n  onFlipY: eventProp<(flip: boolean, state: ViewerState) => void>(),\n  onZoom: eventProp<(zoom: number, state: ViewerState) => void>(),\n  onFull: eventProp<(full: boolean, state: ViewerState) => void>(),\n  onReset: eventProp<(state: ViewerState) => void>()\n})\n\nexport type ViewerProps = ExtractPropTypes<typeof viewerProps>\nexport type ViewerCProps = ConfigurableProps<ViewerProps>\n","import type { ClassType, StyleType } from '@vexip-ui/config'\n\nexport type ViewerToolbarPlacement =\n  | 'top'\n  | 'top-start'\n  | 'top-end'\n  | 'bottom'\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'left'\n  | 'left-start'\n  | 'left-end'\n  | 'right'\n  | 'right-start'\n  | 'right-end'\nexport type ViewerPresetAction =\n  | 'rotate-right'\n  | 'rotate-left'\n  | 'flip-x'\n  | 'flip-y'\n  | 'zoom-in'\n  | 'zoom-out'\n  | 'full-screen'\n  | 'full-screen-exit'\n  | 'reset'\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type ViewerActionName = ViewerPresetAction | (string & {})\nexport type ViewerActionLayout = ViewerActionName[][]\n\nexport interface ViewerState {\n  x: number,\n  y: number,\n  zoom: number,\n  rotate: number,\n  flipX: boolean,\n  flipY: boolean,\n  full: boolean,\n  moving: boolean,\n  [custom: string]: unknown\n}\n\nexport interface ViewerToolbarAction {\n  name: string,\n  process: (state: ViewerState) => void,\n  icon?: Record<string, any> | (() => any),\n  iconRenderer?: (data: { state: ViewerState }) => any,\n  class?: ClassType | ((state: ViewerState) => string),\n  title?: string | ((state: ViewerState) => string),\n  iconScale?: number | ((state: ViewerState) => number),\n  iconStyle?: StyleType | ((state: ViewerState) => StyleType),\n  /** @deprecated */\n  divided?: boolean | ((state: ViewerState) => boolean),\n  hidden?: boolean | ((state: ViewerState) => boolean),\n  disabled?: boolean | ((state: ViewerState) => boolean)\n}\n\nexport const enum InternalActionName {\n  RotateRight = 'rotate-right',\n  RotateLeft = 'rotate-left',\n  FlipX = 'flip-x',\n  FlipY = 'flip-y',\n  ZoomIn = 'zoom-in',\n  ZoomOut = 'zoom-out',\n  FullScreen = 'full-screen',\n  Reset = 'reset'\n}\n\nconst defaultActionLayout: ViewerActionLayout = [\n  ['rotate-right', 'rotate-left'],\n  ['flip-x', 'flip-y'],\n  ['zoom-in', 'zoom-out'],\n  ['full-screen'],\n  ['reset']\n]\n\nfor (let i = 0, len = defaultActionLayout.length; i < len; ++i) {\n  defaultActionLayout[i] = Object.freeze(defaultActionLayout[i]) as any\n}\n\nexport const viewerDefaultActionLayout = Object.freeze(defaultActionLayout) as ViewerActionLayout\n","<script setup lang=\"ts\">\nimport { Divider } from '@/components/divider'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, h, nextTick, onMounted, reactive, ref, toRef } from 'vue'\n\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useFullScreen, useModifier, useMoving, useSetTimeout } from '@vexip-ui/hooks'\nimport { boundRange, callIfFunc, toCssSize, toFixed } from '@vexip-ui/utils'\nimport { viewerProps } from './props'\nimport { InternalActionName, viewerDefaultActionLayout } from './symbol'\n\nimport type { ViewerActionLayout, ViewerState, ViewerToolbarAction } from './symbol'\n\ndefineOptions({ name: 'Viewer' })\n\nconst _props = defineProps(viewerProps)\nconst props = useProps('viewer', _props, {\n  locale: null,\n  width: '100%',\n  height: '100%',\n  moveDisabled: false,\n  zoomDisabled: false,\n  zoomDelta: 0.15,\n  zoomMin: 0.1,\n  zoomMax: Infinity,\n  rotateDisabled: false,\n  rotateDelta: 90,\n  flipDisabled: false,\n  fullDisabled: false,\n  toolbarPlacement: 'bottom',\n  actions: () => [],\n  toolbarFade: false,\n  noTransition: false,\n  centerScale: false,\n  actionLayout: () => []\n})\n\ndefineSlots<{\n  default: (params: { state: ViewerState }) => any,\n  [action: `action-${string}`]: (params: { state: ViewerState }) => any\n}>()\n\nconst nh = useNameHelper('viewer')\nconst locale = useLocale('viewer', toRef(props, 'locale'))\nconst icons = useIcons()\n\nconst { timer } = useSetTimeout()\nconst toolbarActive = ref(false)\n\nconst zoom = ref(1)\nconst rotate = ref(0)\nconst flipX = ref(false)\nconst flipY = ref(false)\n\nconst viewer = ref<HTMLElement>()\nconst transition = ref<HTMLElement>()\n\nconst { supported: fullSupported, full, enter: enterFull, exit: exitFull } = useFullScreen(viewer)\nconst {\n  target: container,\n  x: currentLeft,\n  y: currentTop,\n  moving\n} = useMoving({\n  onStart: (_, event) => {\n    if (props.moveDisabled || event.button > 0) {\n      return false\n    }\n\n    emitEvent(props.onMoveStart, getState())\n  },\n  onMove: () => {\n    emitEvent(props.onMoveStart, getState())\n  },\n  onEnd: () => {\n    emitEvent(props.onMoveStart, getState())\n  }\n})\n\nconst state = reactive({\n  zoom,\n  rotate,\n  flipX,\n  flipY,\n  full,\n  moving,\n  x: currentLeft,\n  y: currentTop\n}) as ViewerState\n\nconst zoomOrigin = {\n  x: 0,\n  y: 0\n}\n\nuseModifier({\n  target: viewer,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (moving.value) return\n\n    if (modifier.up || modifier.down || modifier.left || modifier.right) {\n      event.preventDefault()\n\n      const current = modifier.up || modifier.down ? currentTop : currentLeft\n      const step = modifier.up || modifier.left ? -10 : 10\n\n      current.value += event.ctrlKey ? 5 * step : step\n\n      modifier.resetAll()\n    }\n  }\n})\n\nfunction getState() {\n  return state\n}\n\nfunction getActionProp<\n  K extends Exclude<keyof ViewerToolbarAction, 'name' | 'icon' | 'iconRenderer' | 'process'>\n>(action: ViewerToolbarAction, prop: K) {\n  return callIfFunc(action[prop] as any, state) as Exclude<\n    ViewerToolbarAction[K],\n    (...args: any) => any\n  >\n}\n\nfunction getActionClass(name: string) {\n  return nh.be(name)\n}\n\nconst internalActions: ViewerToolbarAction[] = [\n  {\n    name: InternalActionName.RotateRight,\n    process: () => handleRotate(props.rotateDelta),\n    iconRenderer: () => h(Icon, icons.value.rotateRight),\n    class: getActionClass(InternalActionName.RotateRight),\n    title: () => locale.value.rotateRight,\n    hidden: () => props.rotateDisabled\n  },\n  {\n    name: InternalActionName.RotateLeft,\n    process: () => handleRotate(-1 * props.rotateDelta),\n    iconRenderer: () => h(Icon, icons.value.rotateLeft),\n    class: getActionClass(InternalActionName.RotateLeft),\n    title: () => locale.value.rotateLeft,\n    hidden: () => props.rotateDisabled\n  },\n  {\n    name: InternalActionName.FlipX,\n    process: () => toggleFlipX(),\n    iconRenderer: () => h(Icon, icons.value.flipX),\n    class: getActionClass(InternalActionName.FlipX),\n    title: () => locale.value.flipHorizontal,\n    hidden: () => props.flipDisabled\n  },\n  {\n    name: InternalActionName.FlipY,\n    process: () => toggleFlipY(),\n    iconRenderer: () => h(Icon, icons.value.flipY),\n    class: getActionClass(InternalActionName.FlipY),\n    title: () => locale.value.flipVertical,\n    hidden: () => props.flipDisabled\n  },\n  {\n    name: InternalActionName.ZoomIn,\n    process: () => handleZoom(props.zoomDelta),\n    iconRenderer: () => h(Icon, icons.value.zoomIn),\n    class: getActionClass(InternalActionName.ZoomIn),\n    title: () => locale.value.zoomIn,\n    hidden: () => props.zoomDisabled\n  },\n  {\n    name: InternalActionName.ZoomOut,\n    process: () => handleZoom(-1 * props.zoomDelta),\n    iconRenderer: () => h(Icon, icons.value.zoonOut),\n    class: getActionClass(InternalActionName.ZoomOut),\n    title: () => locale.value.zoomOut,\n    hidden: () => props.zoomDisabled\n  },\n  {\n    name: InternalActionName.FullScreen,\n    process: () => toggleFull(!full.value),\n    iconRenderer: () => h(Icon, full.value ? icons.value.resetScreen : icons.value.fullScreen),\n    class: getActionClass(InternalActionName.FullScreen),\n    title: () => (full.value ? locale.value.fullScreenExit : locale.value.fullScreen),\n    hidden: () => props.fullDisabled\n  },\n  {\n    name: InternalActionName.Reset,\n    process: () => handleReset(),\n    iconRenderer: () => h(Icon, icons.value.refresh),\n    class: getActionClass(InternalActionName.Reset),\n    title: () => locale.value.reset\n  }\n]\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('draggable')]: !props.moveDisabled,\n    [nh.bm('resizable')]: !props.zoomDisabled,\n    [nh.bm('full')]: full.value,\n    [nh.bm('moving')]: moving.value,\n    [nh.bm('static')]: props.noTransition\n  }\n})\nconst style = computed(() => {\n  return {\n    width: toCssSize(props.width),\n    height: toCssSize(props.height)\n  }\n})\nconst toolbarVertical = computed(() => {\n  const [layout] = props.toolbarPlacement.split('-')\n\n  return layout === 'left' || layout === 'right'\n})\nconst toolbarFade = computed(() => {\n  return typeof props.toolbarFade === 'number' ? props.toolbarFade : props.toolbarFade ? 1500 : 0\n})\nconst toolbarClass = computed(() => {\n  return {\n    [nh.be('toolbar')]: true,\n    [nh.bem('toolbar', 'active')]: toolbarFade.value < 300 || toolbarActive.value,\n    [nh.bem('toolbar', props.toolbarPlacement)]: true,\n    [nh.bem('toolbar', 'vertical')]: toolbarVertical.value\n  }\n})\nconst contentStyle = computed(() => {\n  return {\n    transform: `translate3d(${currentLeft.value}px, ${currentTop.value}px, 0) scale(${zoom.value})`\n  }\n})\nconst transitionStyle = computed(() => {\n  return {\n    transform: `scaleX(${flipX.value ? -1 : 1}) scaleY(${flipY.value ? -1 : 1}) rotate(${\n      rotate.value\n    }deg)`\n  }\n})\nconst allActions = computed(() => {\n  const map = new Map<string, ViewerToolbarAction>()\n  const actions: ViewerToolbarAction[][] = []\n\n  internalActions.concat(props.actions).forEach(action => {\n    if (action.name) {\n      map.set(action.name, action)\n    }\n  })\n\n  let layout: ViewerActionLayout\n\n  if (!props.actionLayout?.length) {\n    layout = [...viewerDefaultActionLayout]\n\n    if (props.actions.length) {\n      layout.push(props.actions.map(action => action.name))\n    }\n  } else {\n    layout = props.actionLayout\n  }\n\n  for (const names of layout) {\n    const group = names.map(name => map.get(name)!).filter(Boolean)\n\n    group.length && actions.push(group)\n  }\n\n  return actions\n})\n\ndefineExpose({\n  moving,\n  fullSupported,\n  state,\n  viewer,\n  container,\n  transition,\n  handleRotate,\n  toggleFlipHorizontal: toggleFlipX,\n  toggleFlipVertical: toggleFlipY,\n  handleZoom,\n  toggleFull,\n  handleReset\n})\n\nonMounted(() => {\n  if (container.value) {\n    const rect = container.value.getBoundingClientRect()\n\n    zoomOrigin.x = rect.left + rect.width * 0.5\n    zoomOrigin.y = rect.top + rect.height * 0.5\n  }\n})\n\nfunction handleWheel(event: WheelEvent) {\n  event.stopPropagation()\n  event.preventDefault()\n\n  const sign = event.deltaY > 0 ? -1 : 1\n\n  zoomOrigin.x = event.clientX\n  zoomOrigin.y = event.clientY\n\n  emitEvent(props.onWheel, sign, state)\n  handleZoom(sign * props.zoomDelta)\n}\n\nfunction handleRotate(deg: number, emit = true) {\n  if (props.rotateDisabled) return\n\n  rotate.value += deg\n\n  if (props.noTransition && rotate.value % 360 === 0) {\n    rotate.value = 0\n  }\n\n  emit && emitEvent(props.onRotate, deg, state)\n\n  if (props.noTransition) {\n    nextTick(normalizeProps)\n  }\n}\n\nfunction toggleFlipX(target = !flipX.value, emit = true) {\n  if (props.flipDisabled) return\n\n  flipX.value = target\n  emit && emitEvent(props.onFlipX, target, state)\n}\n\nfunction toggleFlipY(target = !flipY.value, emit = true) {\n  if (props.flipDisabled) return\n\n  flipY.value = target\n  emit && emitEvent(props.onFlipY, target, state)\n}\n\nfunction handleZoom(ratio: number, emit = true) {\n  if (props.zoomDisabled || !container.value || moving.value) return\n\n  const containerRect = container.value.getBoundingClientRect()\n  const { x, y } = zoomOrigin\n  const { offsetWidth, offsetHeight } = container.value\n  const prevZoom = zoom.value\n\n  zoom.value = toFixed(boundRange(zoom.value + ratio, props.zoomMin, props.zoomMax), 5)\n\n  const delta = zoom.value / prevZoom - 1\n  const originX = delta * offsetWidth * 0.5\n  const originY = delta * offsetHeight * 0.5\n\n  if (!props.centerScale) {\n    currentLeft.value -= delta * (x - containerRect.left - currentLeft.value) - originX\n    currentTop.value -= delta * (y - containerRect.top - currentTop.value) - originY\n  }\n\n  emit && emitEvent(props.onZoom, zoom.value, state)\n}\n\nasync function toggleFull(isFull = !full.value, emit = true) {\n  isFull ? await enterFull() : await exitFull()\n\n  emit && emitEvent(props.onFull, isFull, state)\n}\n\nfunction handleReset(emit = true) {\n  currentTop.value = 0\n  currentLeft.value = 0\n  rotate.value = 0\n  flipX.value = false\n  flipY.value = false\n  zoom.value = 1\n\n  emit && emitEvent(props.onReset, state)\n}\n\nfunction normalizeProps() {\n  if (props.noTransition) {\n    if (rotate.value % 360 === 0) {\n      rotate.value = 0\n    }\n\n    return\n  }\n\n  const queue: Array<() => void> = []\n\n  if (rotate.value % 360 === 0) {\n    queue.push(\n      () => {\n        if (transition.value) {\n          transition.value.style.transitionDuration = '0ms'\n        }\n      },\n      () => {\n        rotate.value = 0\n      },\n      () => {\n        if (transition.value) {\n          transition.value.style.transitionDuration = ''\n        }\n      }\n    )\n  }\n\n  const run = () => {\n    queue.shift()?.()\n    queue.length && requestAnimationFrame(run)\n  }\n\n  run()\n}\n\nfunction handleEnterToolbar() {\n  clearTimeout(timer.toolbarFade)\n  toolbarActive.value = true\n}\n\nfunction handleLeaveToolbar() {\n  clearTimeout(timer.toolbarFade)\n\n  if (toolbarFade.value >= 300) {\n    timer.toolbarFade = setTimeout(() => {\n      toolbarActive.value = false\n    }, toolbarFade.value)\n  }\n}\n</script>\n\n<template>\n  <div\n    ref=\"viewer\"\n    :class=\"className\"\n    tabindex=\"0\"\n    :style=\"style\"\n  >\n    <div ref=\"container\" :class=\"nh.be('container')\" @wheel=\"handleWheel\">\n      <div :class=\"nh.be('content')\" :style=\"contentStyle\">\n        <div\n          ref=\"transition\"\n          :class=\"nh.be('transition')\"\n          :style=\"transitionStyle\"\n          @transitionend=\"normalizeProps\"\n        >\n          <slot :state=\"state\"></slot>\n        </div>\n      </div>\n    </div>\n    <div\n      :class=\"toolbarClass\"\n      role=\"toolbar\"\n      @mouseenter=\"handleEnterToolbar\"\n      @mouseleave=\"handleLeaveToolbar\"\n    >\n      <template v-for=\"(group, index) in allActions\" :key=\"index\">\n        <template v-for=\"action in group\" :key=\"action.name\">\n          <template v-if=\"!getActionProp(action, 'hidden')\">\n            <button\n              type=\"button\"\n              :class=\"[\n                {\n                  [nh.be('action')]: true,\n                  [nh.bem('action', 'disabled')]: getActionProp(action, 'disabled')\n                },\n                getActionProp(action, 'class')\n              ]\"\n              :title=\"getActionProp(action, 'title')\"\n              @click.stop=\"action.process(state)\"\n            >\n              <slot :name=\"`action-${action.name}`\" :state=\"state\">\n                <Renderer\n                  v-if=\"action.iconRenderer\"\n                  :renderer=\"action.iconRenderer\"\n                  :data=\"state\"\n                ></Renderer>\n                <Icon\n                  v-else-if=\"action.icon\"\n                  :icon=\"action.icon\"\n                  :style=\"getActionProp(action, 'iconStyle')\"\n                  :scale=\"getActionProp(action, 'iconScale') || 1\"\n                ></Icon>\n                <template v-else>\n                  {{ action.name }}\n                </template>\n              </slot>\n            </button>\n          </template>\n        </template>\n        <Divider\n          v-if=\"index !== allActions.length - 1\"\n          inherit\n          :vertical=\"!toolbarVertical\"\n        ></Divider>\n      </template>\n    </div>\n  </div>\n</template>\n","import { booleanProp, booleanStringProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ViewerProps } from '@/components/viewer'\nimport type {\n  ImageGroupSlots,\n  ImageObjectFit,\n  ImageSkeletonProps,\n  ImageSlots,\n  ImageViewerSlots\n} from './symbol'\n\nexport const imageProps = buildProps({\n  src: String,\n  fallbackSrc: String,\n  alt: String,\n  fit: String as PropType<ImageObjectFit>,\n  width: [String, Number],\n  height: [String, Number],\n  imgAttrs: Object as PropType<Record<string, any>>,\n  lazy: booleanProp,\n  root: [String, Object, Function] as PropType<unknown>,\n  rootMargin: String,\n  preview: booleanProp,\n  skeleton: {\n    type: [Boolean, Object] as PropType<boolean | ImageSkeletonProps>,\n    default: null\n  },\n  placeholder: String,\n  errorTip: String,\n  radius: Number,\n  border: booleanStringProp,\n  previewSrc: String,\n  viewerTransfer: booleanStringProp,\n  viewerProps: Object as PropType<ViewerProps>,\n  slots: Object as PropType<ImageSlots>,\n  onLoad: eventProp<(event: Event) => void>(),\n  onError: eventProp<(event: Event) => void>(),\n  onPreview: eventProp<(src: string) => void>()\n})\n\nexport type ImageProps = ExtractPropTypes<typeof imageProps>\nexport type ImageCProps = ConfigurableProps<ExtractPropTypes<typeof imageProps>, 'src'>\n\nexport const imageGroupProps = buildProps({\n  showAll: booleanProp,\n  preview: booleanProp,\n  viewerTransfer: booleanStringProp,\n  slots: Object as PropType<ImageGroupSlots>,\n  onPreview: eventProp<(src: string, srcList: string[]) => void>()\n})\n\nexport type ImageGroupProps = ExtractPropTypes<typeof imageGroupProps>\nexport type ImageGroupCProps = ConfigurableProps<ExtractPropTypes<typeof imageGroupProps>>\n\nexport const imageViewerProps = buildProps({\n  active: booleanProp,\n  index: Number,\n  srcList: [String, Array] as PropType<string | string[]>,\n  transfer: booleanStringProp,\n  viewerProps: Object as PropType<ViewerProps>,\n  slots: Object as PropType<ImageViewerSlots>,\n  onToggle: eventProp<(active: boolean) => void>(),\n  onChange: eventProp<(index: number, src: string) => void>(),\n  onPrev: eventProp<(index: number, src: string) => void>(),\n  onNext: eventProp<(index: number, src: string) => void>(),\n  onClose: eventProp(),\n  onShow: eventProp(),\n  onHide: eventProp()\n})\n\nexport type ImageViewerProps = ExtractPropTypes<typeof imageViewerProps>\nexport type ImageViewerCProps = ConfigurableProps<ExtractPropTypes<typeof imageViewerProps>, 'srcs'>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Masker } from '@/components/masker'\nimport { Renderer } from '@/components/renderer'\nimport { Viewer } from '@/components/viewer'\n\nimport { computed, ref, watch } from 'vue'\n\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { boundRange, ensureArray, isDefined } from '@vexip-ui/utils'\nimport { imageViewerProps } from './props'\n\nimport type { ImageViewerSlots } from './symbol'\n\ndefineOptions({ name: 'ImageViewer' })\n\nconst _props = defineProps(imageViewerProps)\nconst props = useProps('imageViewer', _props, {\n  active: false,\n  index: 0,\n  srcList: {\n    default: '',\n    static: true\n  },\n  transfer: false,\n  viewerProps: () => ({}),\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:active', 'update:index'])\n\ndefineSlots<ImageViewerSlots>()\n\nconst nh = useNameHelper('image-viewer')\nconst icons = useIcons()\n\nconst currentActive = ref(props.active)\nconst currentIndex = ref(props.index)\n\nconst viewer = ref<InstanceType<typeof Viewer>>()\n\nconst className = computed(() => {\n  return [nh.b(), nh.ns('image-vars'), props.inherit && nh.bm('inherit')]\n})\nconst srcArray = computed(() => ensureArray(isDefined(props.srcList) ? props.srcList : ''))\nconst prevDisabled = computed(() => currentIndex.value <= 0)\nconst nextDisabled = computed(() => currentIndex.value >= srcArray.value.length - 1)\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n  }\n)\nwatch(\n  () => props.index,\n  value => {\n    currentIndex.value = value\n  }\n)\nwatch(() => srcArray.value.length, verifyIndex)\n\ndefineExpose({\n  currentActive,\n  currentIndex,\n  prevDisabled,\n  nextDisabled,\n  viewer\n})\n\nfunction setActive(active: boolean) {\n  if (currentActive.value === active) return\n\n  currentActive.value = active\n\n  emit('update:active', active)\n  emitEvent(props.onToggle, active)\n}\n\nfunction verifyIndex() {\n  currentIndex.value = boundRange(currentIndex.value, 0, srcArray.value.length - 1)\n}\n\nfunction handleChange() {\n  const value = currentIndex.value\n\n  viewer.value?.handleReset()\n  emit('update:index', value)\n  emitEvent(props.onChange, value, srcArray.value[value])\n}\n\nfunction handlePrev() {\n  if (prevDisabled.value) return\n\n  const prev = currentIndex.value\n\n  currentIndex.value--\n  verifyIndex()\n  currentIndex.value !== prev && handleChange()\n  emitEvent(props.onPrev, currentIndex.value, srcArray.value[currentIndex.value])\n}\n\nfunction handleNext() {\n  if (nextDisabled.value) return\n\n  const prev = currentIndex.value\n\n  currentIndex.value++\n  verifyIndex()\n  currentIndex.value !== prev && handleChange()\n  emitEvent(props.onNext, currentIndex.value, srcArray.value[currentIndex.value])\n}\n\nfunction handleClose() {\n  setActive(false)\n  emitEvent(props.onClose)\n}\n\nfunction handleShow() {\n  emitEvent(props.onShow)\n}\n\nfunction handleHide() {\n  emitEvent(props.onHide)\n}\n</script>\n\n<template>\n  <Masker\n    v-slot=\"{ show }\"\n    :active=\"currentActive\"\n    :inherit=\"props.inherit\"\n    :class=\"className\"\n    closable\n    auto-remove\n    :transfer=\"props.transfer\"\n    @show=\"handleShow\"\n    @hide=\"handleHide\"\n    @toggle=\"setActive\"\n  >\n    <div v-show=\"show\" :class=\"nh.be('wrapper')\">\n      <Viewer v-bind=\"props.viewerProps\" ref=\"viewer\">\n        <slot :src=\"srcArray[currentIndex]\">\n          <Renderer :renderer=\"props.slots.default\" :data=\"{ src: srcArray[currentIndex] }\">\n            <img :src=\"srcArray[currentIndex]\" />\n          </Renderer>\n        </slot>\n      </Viewer>\n      <template v-if=\"srcArray.length > 1\">\n        <button\n          type=\"button\"\n          :class=\"[nh.be('prev'), prevDisabled && nh.bem('prev', 'disabled')]\"\n          @click.stop=\"handlePrev\"\n        >\n          <slot name=\"prev\" :disabled=\"prevDisabled\">\n            <Renderer :renderer=\"props.slots.prev\" :data=\"{ disabled: prevDisabled }\">\n              <div :class=\"nh.be('prev-handler')\">\n                <Icon\n                  v-bind=\"icons.angleLeft\"\n                  :scale=\"+(icons.angleLeft.scale || 1) * 1.4\"\n                  label=\"prev\"\n                ></Icon>\n              </div>\n            </Renderer>\n          </slot>\n        </button>\n        <button\n          type=\"button\"\n          :class=\"[nh.be('next'), nextDisabled && nh.bem('next', 'disabled')]\"\n          @click.stop=\"handleNext\"\n        >\n          <slot name=\"next\" :disabled=\"nextDisabled\">\n            <Renderer :renderer=\"props.slots.next\" :data=\"{ disabled: nextDisabled }\">\n              <div :class=\"nh.be('next-handler')\">\n                <Icon\n                  v-bind=\"icons.angleRight\"\n                  :scale=\"+(icons.angleRight.scale || 1) * 1.4\"\n                  label=\"next\"\n                ></Icon>\n              </div>\n            </Renderer>\n          </slot>\n        </button>\n      </template>\n      <button type=\"button\" :class=\"nh.be('close')\" @click.stop=\"handleClose\">\n        <slot name=\"close\">\n          <Renderer :renderer=\"props.slots.close\">\n            <div :class=\"nh.be('close-handler')\">\n              <Icon\n                v-bind=\"icons.close\"\n                :scale=\"+(icons.close.scale || 1) * 1.4\"\n                label=\"close\"\n              ></Icon>\n            </div>\n          </Renderer>\n        </slot>\n      </button>\n    </div>\n  </Masker>\n</template>\n","import { booleanProp, booleanStringProp, buildProps, iconProp, sizeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const skeletonProps = buildProps({\n  size: sizeProp,\n  width: [Number, String],\n  height: [Number, String],\n  repeat: Number,\n  tag: String,\n  activated: booleanProp,\n  image: booleanProp,\n  imageIcon: iconProp,\n  iconScale: Number,\n  round: booleanProp,\n  circle: booleanProp,\n  block: booleanProp,\n  spread: Number,\n  loading: booleanProp\n})\n\nexport type SkeletonProps = ExtractPropTypes<typeof skeletonProps>\nexport type SkeletonCProps = ConfigurableProps<SkeletonProps>\n\nexport const skeletonGroupProps = buildProps({\n  size: sizeProp,\n  tag: booleanStringProp,\n  itemTag: String,\n  activated: booleanProp,\n  round: booleanProp,\n  circle: booleanProp,\n  block: booleanProp,\n  loading: booleanProp\n})\n\nexport type SkeletonGroupProps = ExtractPropTypes<typeof skeletonGroupProps>\nexport type SkeletonGroupCProps = ConfigurableProps<SkeletonGroupProps>\n","import type { InjectionKey } from 'vue'\nimport type { ComponentSize } from '@vexip-ui/config'\n\nexport interface GroupState {\n  size: ComponentSize,\n  itemTag: string,\n  activated: boolean,\n  round: boolean,\n  circle: boolean,\n  block: boolean,\n  loading: boolean\n}\n\nexport const GROUP_STATE = '__VXP_SKELETON_GROUP_STATE' as unknown as InjectionKey<GroupState>\n","import { Icon } from '@/components/icon'\n\nimport { computed, defineComponent, inject, renderSlot } from 'vue'\n\nimport { createIconProp, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { skeletonProps } from './props'\nimport { GROUP_STATE } from './symbol'\n\nexport default defineComponent({\n  name: 'Skeleton',\n  inheritAttrs: false,\n  props: skeletonProps,\n  setup(_props, { attrs, slots }) {\n    const props = useProps('skeleton', _props, {\n      size: null,\n      width: null,\n      height: null,\n      repeat: {\n        default: 1,\n        validator: (value: number) => value > 0\n      },\n      tag: 'div',\n      activated: null,\n      image: false,\n      imageIcon: createIconProp(),\n      iconScale: 4,\n      round: null,\n      circle: null,\n      block: null,\n      spread: 0,\n      loading: null\n    })\n\n    const groupState = inject(GROUP_STATE, {} as any)\n\n    const nh = useNameHelper('skeleton')\n    const icons = useIcons()\n\n    const activated = computed(() => {\n      return props.activated ?? groupState.activated ?? false\n    })\n    const round = computed(() => {\n      return props.round ?? groupState.round ?? false\n    })\n    const circle = computed(() => {\n      return props.circle ?? groupState.circle ?? false\n    })\n    const block = computed(() => {\n      return props.block ?? groupState.block ?? false\n    })\n    const loading = computed(() => {\n      return props.loading ?? groupState.loading ?? true\n    })\n    const tag = computed(() => {\n      return props.tag || groupState.itemTag || 'div'\n    })\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: Object.keys(groupState).length || props.inherit,\n        [nh.bm(props.size)]: props.size ?? groupState?.size,\n        [nh.bm('block')]: block.value,\n        [nh.bm('image')]: props.image,\n        [nh.bm('round')]: round.value && !circle.value,\n        [nh.bm('circle')]: circle.value,\n        [nh.bm('activated')]: activated.value\n      }\n    })\n    const style = computed(() => {\n      const style: Record<string, string> = {}\n\n      if (props.width !== null) {\n        style[nh.cv('width')] = parseSize(props.width)\n      }\n\n      if (props.height !== null) {\n        style[nh.cv('height')] = parseSize(props.height)\n      }\n\n      if (props.spread) {\n        style[nh.cv('spread')] = parseSize(props.spread)\n      }\n\n      return style\n    })\n\n    function parseSize(value: string | number) {\n      if (typeof value === 'number') {\n        return `${value}px`\n      }\n\n      value = value.trim()\n\n      if (/\\d$/.test(value)) {\n        return `${value}px`\n      }\n\n      return value\n    }\n\n    function renderSkeleton() {\n      const Wrapper = tag.value || 'div'\n\n      return (\n        <Wrapper\n          {...attrs}\n          class={[className.value, attrs.class]}\n          style={[style.value, attrs.style]}\n        >\n          {props.image ? (\n            <Icon\n              {...icons.value.image}\n              icon={props.imageIcon || icons.value.image.icon}\n              scale={props.iconScale}\n            ></Icon>\n          ) : null}\n        </Wrapper>\n      )\n    }\n\n    return () => {\n      if (!loading.value) {\n        return renderSlot(slots, 'default')\n      }\n\n      if (props.repeat > 1) {\n        return Array.from({ length: props.repeat }, () => renderSkeleton())\n      }\n\n      return renderSkeleton()\n    }\n  }\n})\n","import type { InjectionKey } from 'vue'\nimport type { ClassType, StyleType } from '@vexip-ui/config'\nimport type { SkeletonProps } from '@/components/skeleton'\n\nexport type ImageObjectFit = 'fill' | 'contain' | 'cover' | 'none' | 'scale-down'\nexport type ImageSkeletonProps = Pick<\n  SkeletonProps,\n  'tag' | 'activated' | 'iconScale' | 'imageIcon'\n> & {\n  class?: ClassType,\n  StyleType?: StyleType\n}\n\nexport interface ImageState {\n  src: string,\n  index: number,\n  total: number\n}\n\nexport interface GroupState {\n  showAll: boolean,\n  preview: boolean,\n  increaseItem: (item: ImageState) => void,\n  decreaseItem: (item: ImageState) => void,\n  handlePreview: (item: ImageState) => void\n}\n\nexport interface ImageSlots {\n  placeholder?: () => any,\n  error?: () => any,\n  preview?: (params: { src: string }) => any\n}\n\nexport interface ImageGroupSlots {\n  /**\n   * @internal\n   */\n  default?: () => any,\n  preview?: (params: { src: string }) => any\n}\n\nexport interface ImageViewerSlots {\n  default?: (params: { src: string }) => any,\n  prev?: (params: { disabled: boolean }) => any,\n  next?: (params: { disabled: boolean }) => any,\n  close?: () => any\n}\n\nexport const GROUP_STATE = '__VXP_IMAGE_GROUP_STATE' as unknown as InjectionKey<GroupState>\n\nexport const objectFitValues = Object.freeze<ImageObjectFit[]>([\n  'fill',\n  'contain',\n  'cover',\n  'none',\n  'scale-down'\n])\n","<script setup lang=\"ts\">\nimport { ImageViewer } from '@/components/image-viewer'\nimport { Renderer } from '@/components/renderer'\nimport { Skeleton } from '@/components/skeleton'\n\nimport { computed, inject, onBeforeUnmount, reactive, ref, watch, watchEffect } from 'vue'\n\nimport { emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useIntersection } from '@vexip-ui/hooks'\nimport { isClient, supportImgLoading, toCssSize } from '@vexip-ui/utils'\nimport { imageProps } from './props'\nimport { GROUP_STATE, objectFitValues } from './symbol'\n\nimport type { ImageSlots, ImageState } from './symbol'\n\nconst useImgLoading = supportImgLoading()\n\ndefineOptions({ name: 'Image' })\n\nconst _props = defineProps(imageProps)\nconst props = useProps('image', _props, {\n  src: {\n    default: '',\n    static: true\n  },\n  fallbackSrc: '',\n  alt: '',\n  fit: {\n    default: 'cover',\n    validator: value => objectFitValues.includes(value)\n  },\n  width: '',\n  height: '',\n  imgAttrs: () => ({}),\n  lazy: false,\n  root: {\n    default: null,\n    static: true\n  },\n  rootMargin: '',\n  preview: false,\n  skeleton: false,\n  placeholder: '',\n  errorTip: '',\n  radius: 0,\n  border: false,\n  previewSrc: '',\n  viewerTransfer: null,\n  viewerProps: () => ({}),\n  slots: () => ({})\n})\n\nconst slots = defineSlots<ImageSlots>()\n\nconst groupState = inject(GROUP_STATE, null)\n\nconst nh = useNameHelper('image')\nconst locale = useLocale('image')\n\nconst showImg = ref(useImgLoading)\nconst loading = ref(showImg.value)\nconst currentSrc = ref('')\nconst loadFail = ref(false)\nconst fallbackFail = ref(false)\nconst viewerActive = ref(false)\nconst hidden = ref(false)\n\nconst wrapper = ref<HTMLElement>()\n\nconst showError = computed(() => {\n  return loadFail.value && (!props.fallbackSrc || fallbackFail.value)\n})\nconst hasPreview = computed(() => !groupState && props.preview)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('border')]: props.border,\n      [nh.bm('loading')]: loading.value,\n      [nh.bm('error')]: showError.value,\n      [nh.bm('preview')]: groupState?.preview || hasPreview.value\n    }\n  ]\n})\nconst style = computed(() => {\n  const style: Record<string, string> = {\n    width: toCssSize(props.width),\n    height: toCssSize(props.height),\n    [nh.cv('fit')]: props.fit,\n    [nh.cv('radius')]: props.radius ? `${props.radius}px` : ''\n  }\n\n  if (props.border && typeof props.border === 'string') {\n    style[nh.cv('b-color')] = props.border\n  }\n\n  return style\n})\nconst imageSrc = computed(() => props.src || (props.imgAttrs?.src as string))\nconst imgLoading = computed(() => {\n  return hidden.value || (useImgLoading && props.lazy) ? 'lazy' : undefined\n})\nconst skeletonProps = computed(() => {\n  return typeof props.skeleton === 'object'\n    ? Object.assign({ activated: true }, props.skeleton)\n    : { activated: true }\n})\n\nwatch(imageSrc, value => {\n  loading.value = showImg.value\n  currentSrc.value = value\n  loadFail.value = false\n  fallbackFail.value = false\n})\nwatch(\n  () => props.fallbackSrc,\n  value => {\n    fallbackFail.value = false\n\n    if (loadFail.value) {\n      loading.value = showImg.value\n      currentSrc.value = value\n    }\n  }\n)\n\ncurrentSrc.value = imageSrc.value\n\nconst state: ImageState = reactive({\n  src: computed(() => props.previewSrc || currentSrc.value),\n  index: 0,\n  total: 0\n})\n\nif (groupState) {\n  groupState.increaseItem(state)\n\n  const stopWatch = watchEffect(() => {\n    hidden.value = !groupState.showAll && state.index > 0\n  })\n\n  onBeforeUnmount(() => {\n    stopWatch()\n    groupState.decreaseItem(state)\n  })\n}\n\nif (!useImgLoading) {\n  let disconnect: (() => void) | undefined\n\n  const stopWatch = watchEffect(() => {\n    disconnect?.()\n    disconnect = undefined\n\n    if (!isClient) return\n\n    const root =\n      typeof props.root === 'string' ? document.querySelector(props.root) : (props.root as Element)\n\n    if (props.lazy) {\n      disconnect = useIntersection({\n        root: typeof root === 'object' ? root : document.documentElement,\n        rootMargin: props.rootMargin,\n        target: wrapper,\n        handler: () => {\n          disconnect?.()\n          disconnect = undefined\n          showImg.value = true\n          loading.value = true\n        }\n      }).disconnect\n    }\n  })\n\n  onBeforeUnmount(() => {\n    stopWatch()\n    disconnect?.()\n  })\n}\n\ndefineExpose({\n  loading,\n  fallbackFail,\n  viewerActive,\n  hidden,\n  wrapper\n})\n\nfunction handleLoad(event: Event) {\n  loading.value = false\n\n  if (!props.fallbackSrc || currentSrc.value !== props.fallbackSrc) {\n    emitEvent(props.onLoad, event)\n  }\n}\n\nfunction handleError(event: Event) {\n  if (props.fallbackSrc) {\n    if (currentSrc.value === props.fallbackSrc) {\n      loading.value = false\n      fallbackFail.value = true\n\n      return\n    }\n\n    currentSrc.value = props.fallbackSrc\n  } else {\n    loading.value = false\n  }\n\n  loadFail.value = true\n  emitEvent(props.onError, event)\n}\n\nfunction handlePreview() {\n  if (!groupState) {\n    if (props.preview) {\n      viewerActive.value = true\n    }\n\n    emitEvent(props.onPreview, props.previewSrc || currentSrc.value)\n    return\n  }\n\n  groupState.handlePreview(state)\n}\n</script>\n\n<template>\n  <div\n    v-show=\"!hidden\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"none\"\n    :style=\"style\"\n  >\n    <slot v-if=\"loading\" name=\"placeholder\">\n      <Renderer :renderer=\"props.slots.placeholder\">\n        <Skeleton\n          v-if=\"props.skeleton\"\n          v-bind=\"skeletonProps\"\n          :class=\"nh.be('skeleton')\"\n          image\n        ></Skeleton>\n        <template v-else>\n          <span :class=\"nh.be('placeholder')\">\n            {{ props.placeholder || locale.placeholder }}\n          </span>\n        </template>\n      </Renderer>\n    </slot>\n    <slot v-else-if=\"showError\" name=\"error\">\n      <Renderer :renderer=\"props.slots.error\">\n        <span :class=\"nh.be('error')\">\n          {{ props.errorTip || props.alt || locale.error }}\n        </span>\n      </Renderer>\n    </slot>\n    <img\n      v-if=\"showImg && !showError\"\n      v-bind=\"props.imgAttrs\"\n      :class=\"nh.be('img')\"\n      :src=\"currentSrc\"\n      :alt=\"props.alt\"\n      :width=\"props.width || undefined\"\n      :height=\"props.height || undefined\"\n      :loading=\"imgLoading\"\n      :aria-label=\"props.alt\"\n      @load=\"handleLoad\"\n      @error=\"handleError\"\n      @click=\"handlePreview\"\n    />\n    <ImageViewer\n      v-if=\"hasPreview\"\n      v-bind=\"viewerProps\"\n      v-model:active=\"viewerActive\"\n      :src-list=\"props.previewSrc || currentSrc\"\n      :transfer=\"props.viewerTransfer\"\n    >\n      <template v-if=\"slots.preview || props.slots.preview\" #default=\"{ src }\">\n        <slot name=\"preview\" :src=\"src\">\n          <Renderer :renderer=\"props.slots.preview\" :data=\"{ src }\"></Renderer>\n        </slot>\n      </template>\n    </ImageViewer>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ImageViewer } from '@/components/image-viewer'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, provide, reactive, ref, toRef } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { debounceMinor } from '@vexip-ui/utils'\nimport { imageGroupProps } from './props'\nimport { GROUP_STATE } from './symbol'\n\nimport type { ImageGroupSlots, ImageState } from './symbol'\n\ndefineOptions({ name: 'ImageGroup' })\n\nconst _props = defineProps(imageGroupProps)\nconst props = useProps('imageGroup', _props, {\n  showAll: false,\n  preview: false,\n  viewerTransfer: null,\n  slots: () => ({})\n})\n\nconst slots = defineSlots<ImageGroupSlots>()\n\nconst nh = useNameHelper('image-group')\n\nconst currentActive = ref(false)\nconst currentIndex = ref(0)\nconst imageStates = reactive(new Set<ImageState>())\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.ns('image-vars'),\n    {\n      [nh.bm('preview')]: props.preview\n    }\n  ]\n})\nconst srcList = computed(() => Array.from(imageStates).map(state => state.src))\n\nconst refreshIndex = debounceMinor(() => {\n  const total = imageStates.size\n\n  Array.from(imageStates).forEach((item, index) => {\n    item.index = index\n    item.total = total\n  })\n})\n\nprovide(\n  GROUP_STATE,\n  reactive({\n    showAll: toRef(props, 'showAll'),\n    preview: toRef(props, 'preview'),\n    increaseItem,\n    decreaseItem,\n    handlePreview\n  })\n)\n\ndefineExpose({ currentActive, currentIndex })\n\nfunction increaseItem(item: ImageState) {\n  imageStates.add(item)\n  refreshIndex()\n}\n\nfunction decreaseItem(item: ImageState) {\n  imageStates.delete(item)\n  refreshIndex()\n}\n\nfunction handlePreview(item: ImageState) {\n  currentIndex.value = item.index\n  currentActive.value = true\n\n  emitEvent(props.onPreview, item.src, Array.from(srcList.value))\n}\n</script>\n\n<template>\n  <div :class=\"className\">\n    <slot></slot>\n    <ImageViewer\n      v-if=\"props.preview\"\n      v-model:active=\"currentActive\"\n      v-model:index=\"currentIndex\"\n      :src-list=\"srcList\"\n      :transfer=\"props.viewerTransfer\"\n    >\n      <template v-if=\"slots.preview || props.slots.preview\" #default=\"{ src }\">\n        <slot name=\"preview\" :src=\"src\">\n          <Renderer :renderer=\"props.slots.preview\" :data=\"{ src }\"></Renderer>\n        </slot>\n      </template>\n    </ImageViewer>\n  </div>\n</template>\n","import { booleanProp, booleanStringProp, buildProps, eventProp, localeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { BreakPoint } from '@/components/grid'\nimport type { MenuOptions } from '@/components/menu'\nimport type {\n  LayoutConfig,\n  LayoutFooterLink,\n  LayoutHeaderAction,\n  LayoutInnerClass,\n  LayoutMediaJudger,\n  LayoutMenuProps,\n  LayoutSignType,\n  LayoutUser\n} from './symbol'\n\nconst breakpointProp = {\n  type: [String, Boolean, Function] as PropType<\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    boolean | BreakPoint | LayoutMediaJudger | (string & {})\n  >,\n  default: null\n}\n\nexport const layoutProps = buildProps({\n  locale: localeProp('layout'),\n  noAside: booleanProp,\n  footer: booleanProp,\n  tag: String,\n  menus: Object as PropType<MenuOptions[]>,\n  menuProps: Object as PropType<LayoutMenuProps>,\n  logo: String,\n  signName: String,\n  config: Array as PropType<LayoutConfig[]>,\n  user: Object as PropType<LayoutUser>,\n  actions: Array as PropType<LayoutHeaderAction[]>,\n  expanded: booleanProp,\n  reduced: booleanProp,\n  avatarCircle: booleanProp,\n  signType: String as PropType<LayoutSignType>,\n  headerFixed: breakpointProp,\n  asideFixed: breakpointProp,\n  copyright: String,\n  links: Array as PropType<LayoutFooterLink[]>,\n  colors: Array as PropType<string[]>,\n  color: String,\n  miniHeaderSign: breakpointProp,\n  verticalLinks: breakpointProp,\n  darkMode: booleanProp,\n  fixedMain: booleanProp,\n  fitWindow: booleanProp,\n  innerClasses: Object as PropType<LayoutInnerClass>,\n  noHeader: booleanProp,\n  noMasker: booleanProp,\n  onExpandedChange: eventProp<(expanded: boolean) => void>(),\n  onReducedChange: eventProp<(reduced: boolean) => void>(),\n  onSignClick: eventProp<(event: MouseEvent) => void>(),\n  onMenuSelect: eventProp<(label: string, meta: any) => void>(),\n  onUserAction: eventProp<(label: string, meta: any) => void>(),\n  onNavChange: eventProp<(type: LayoutSignType) => void>(),\n  onColorChange: eventProp<(color: string) => void>(),\n  onToggleTheme: eventProp<(isDark: boolean) => void>(),\n  onContentResize: eventProp<() => void>()\n})\n\nexport type LayoutProps = ExtractPropTypes<typeof layoutProps>\nexport type LayoutCProps = ConfigurableProps<LayoutProps, 'menus'>\n\nexport const layoutAsideProps = buildProps({\n  tag: String,\n  expanded: booleanProp,\n  reduced: booleanProp,\n  menus: Array as PropType<MenuOptions[]>,\n  menuProps: Object as PropType<LayoutMenuProps>,\n  logo: String,\n  signName: String,\n  fixed: booleanStringProp,\n  signType: String as PropType<LayoutSignType>,\n  onExpandedChange: eventProp<(expanded: boolean) => void>(),\n  onReducedChange: eventProp<(reduced: boolean) => void>(),\n  onSignClick: eventProp<(event: MouseEvent) => void>(),\n  onMenuSelect: eventProp<(label: string, meta: any) => void>()\n})\n\nexport type LayoutAsideProps = ExtractPropTypes<typeof layoutAsideProps>\nexport type LayoutAsideCProps = ConfigurableProps<LayoutAsideProps, 'menus'>\n\nexport const layoutHeaderProps = buildProps({\n  locale: localeProp('layout'),\n  tag: String,\n  logo: String,\n  signName: String,\n  user: Object as PropType<LayoutUser>,\n  userDropped: booleanProp,\n  avatarCircle: booleanProp,\n  config: Array as PropType<LayoutConfig[]>,\n  actions: Array as PropType<LayoutHeaderAction[]>,\n  signType: String as PropType<LayoutSignType>,\n  colors: Array as PropType<string[]>,\n  color: String,\n  menus: Object as PropType<MenuOptions[]>,\n  menuProps: Object as PropType<LayoutMenuProps>,\n  darkMode: booleanProp,\n  onNavChange: eventProp<(type: LayoutSignType) => void>(),\n  onColorChange: eventProp<(color: string) => void>(),\n  onUserAction: eventProp<(label: string, meta: any) => void>(),\n  onSignClick: eventProp<(event: MouseEvent) => void>(),\n  onDroppedChange: eventProp<(target: boolean) => void>(),\n  onExpandedChange: eventProp<(expanded: boolean) => void>(),\n  onReducedChange: eventProp<(reduced: boolean) => void>(),\n  onMenuSelect: eventProp<(label: string, meta: any) => void>(),\n  onToggleTheme: eventProp<(isDark: boolean) => void>()\n})\n\nexport type LayoutHeaderProps = ExtractPropTypes<typeof layoutHeaderProps>\nexport type LayoutHeaderCProps = ConfigurableProps<LayoutHeaderProps, 'user' | 'menus'>\n\nexport const layoutMainProps = buildProps({\n  tag: String,\n  fixed: booleanProp\n})\n\nexport type LayoutMainProps = ExtractPropTypes<typeof layoutMainProps>\nexport type LayoutMainCProps = ConfigurableProps<LayoutMainProps>\n\nexport const layoutFooterProps = buildProps({\n  tag: String,\n  copyright: String,\n  links: Array as PropType<LayoutFooterLink[]>,\n  verticalLinks: booleanStringProp\n})\n\nexport type LayoutFooterProps = ExtractPropTypes<typeof layoutFooterProps>\nexport type LayoutFooterCProps = ConfigurableProps<LayoutFooterProps>\n","import type { ComponentPublicInstance, InjectionKey } from 'vue'\nimport type { Router } from 'vue-router'\nimport type { IconMinorProps } from '@/components/icon'\nimport type { MenuExposed, MenuGroupType, MenuMarkerType } from '@/components/menu'\nimport type { NativeScrollExposed } from '@/components/native-scroll'\nimport type { ClassType } from '@vexip-ui/config'\nimport type { BreakPoint } from '@/components/grid'\n\nexport type LayoutSignType = 'aside' | 'header'\nexport type LayoutConfig = 'nav' | 'color' | 'theme'\nexport type LayoutSection =\n  | 'wrapper'\n  | 'section'\n  | 'header'\n  | 'headerLeft'\n  | 'headerMain'\n  | 'headerRight'\n  | 'headerUser'\n  | 'sidebar'\n  | 'aside'\n  | 'asideTop'\n  | 'asideMain'\n  | 'asideBottom'\n  | 'expandHandler'\n  | 'main'\n  | 'footer'\n  | 'footerLinks'\n  | 'copyright'\n  | 'scrollbar'\n\nexport type LayoutInnerClass = Partial<Record<LayoutSection, ClassType>>\nexport type LayoutMediaJudger = (breakpoint: BreakPoint) => boolean\n\nexport interface LayoutMenuProps {\n  active?: string,\n  accordion?: boolean,\n  markerType?: MenuMarkerType,\n  groupType?: MenuGroupType,\n  tooltipReverse?: boolean,\n  router?: Router,\n  manualRoute?: boolean,\n  onExpand?: (label: string, meta: Record<string, any>) => void,\n  onReduce?: (label: string, meta: Record<string, any>) => void\n}\n\nexport interface LayoutHeaderAction {\n  label: string,\n  icon?: Record<string, any>,\n  iconProps?: IconMinorProps,\n  name?: string,\n  disabled?: boolean,\n  divided?: boolean,\n  hidden?: boolean,\n  meta?: Record<string, any>\n}\n\nexport interface LayoutUser {\n  name: string,\n  email?: string,\n  avatar?: string | Record<string, any>\n}\n\nexport interface LayoutFooterLink {\n  name: string,\n  subname?: string,\n  icon?: Record<string, any>,\n  iconProps?: IconMinorProps,\n  to?: string,\n  target?: string,\n  children?: Array<Omit<LayoutFooterLink, 'children'>>\n}\n\nexport interface LayoutState {\n  isLayout: boolean,\n  locked: boolean,\n  affixed: boolean,\n  scrollY: number,\n  affixMatched: boolean,\n  expandMatched: boolean,\n  useExpand: boolean,\n  expanded: boolean,\n  reduced: boolean,\n  navConfig: boolean,\n  classes: LayoutInnerClass,\n  changeInLock: (doChange: () => void) => void\n}\n\nexport interface LayoutSlotParams {\n  expanded: boolean,\n  reduced: boolean,\n  toggleExpanded: (expanded?: boolean) => void,\n  toggleReduced: (reduced: boolean) => void\n}\n\nexport interface LayoutHeaderSlotParams extends LayoutSlotParams {\n  handleColorChange: (color: string) => void,\n  toggleUserDropped: (dropped?: boolean) => void\n}\n\nexport interface LayoutExposed extends ComponentPublicInstance {\n  scroll?: NativeScrollExposed,\n  menu?: MenuExposed,\n  toggleExpanded: (expanded?: boolean) => void,\n  toggleReduced: (reduced?: boolean) => void,\n  expandMenuByLabel: (label: string) => void\n}\n\nexport interface LayoutHeaderExposed extends ComponentPublicInstance {\n  menu?: MenuExposed,\n  toggleExpanded: (expanded?: boolean) => void,\n  toggleReduced: (reduced?: boolean) => void,\n  expandMenuByLabel: (label: string) => void,\n  toggleUserDropped: (dropped: boolean) => void\n}\n\nexport interface LayoutMainExposed extends ComponentPublicInstance {}\n\nexport interface LayoutAsideExposed extends ComponentPublicInstance {\n  menu?: MenuExposed,\n  toggleExpanded: (expanded?: boolean) => void,\n  toggleReduced: (reduced?: boolean) => void,\n  expandMenuByLabel: (label: string) => void\n}\n\nexport const LAYOUT_STATE = '___VXP_LAYOUT_STATE' as unknown as InjectionKey<LayoutState>\n","import { currentBreakPoint } from '@/components/grid'\n\nimport { computed, inject, onBeforeUnmount, onMounted, onUpdated, reactive, ref, watch } from 'vue'\n\nimport { adjustAlpha, isClient, mixColor, noop, parseColorToRgba, toFixed } from '@vexip-ui/utils'\nimport { LAYOUT_STATE } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type { Color } from '@vexip-ui/utils'\nimport type { BreakPoint } from '@/components/grid'\nimport type { LayoutMediaJudger, LayoutState } from './symbol'\n\nconst rootEl = isClient ? document.documentElement : undefined\nconst rootStyle = rootEl && getComputedStyle(rootEl)\n\nexport function computeSeriesColors(value: Color) {\n  if (!rootEl || !rootStyle) return\n\n  const colors: Record<string, string[]> = {\n    light: [],\n    opacity: [],\n    dark: []\n  }\n  const black = parseColorToRgba(\n    rootStyle.getPropertyValue('--vxp-color-black') || { r: 0, g: 0, b: 0, a: 1 }\n  )\n  const white = parseColorToRgba(\n    rootStyle.getPropertyValue('--vxp-color-white') || { r: 255, g: 255, b: 255, a: 1 }\n  )\n  const style = rootEl.style\n\n  for (let i = 1; i < 10; ++i) {\n    const light = mixColor(white, value, i * 0.1).toString()\n    const opacity = adjustAlpha(value, toFixed(1 - i * 0.1, 1)).toString()\n\n    style.setProperty(`--vxp-color-primary-light-${i}`, light)\n    style.setProperty(`--vxp-color-primary-opacity-${i}`, opacity)\n\n    colors.light.push(light)\n    colors.opacity.push(opacity)\n  }\n\n  for (let i = 1; i < 3; ++i) {\n    const dark = mixColor(black, value, i * 0.1).toString()\n\n    style.setProperty(`--vxp-color-primary-dark-${i}`, dark)\n    colors.dark.push(dark)\n  }\n\n  style.setProperty('--vxp-color-primary-base', `${value}`)\n\n  return colors\n}\n\nexport function useLayoutState() {\n  return inject(\n    LAYOUT_STATE,\n    reactive({\n      isLayout: false,\n      locked: false,\n      affixed: false,\n      scrollY: 0,\n      affixMatched: false,\n      expandMatched: false,\n      useExpand: false,\n      expanded: false,\n      reduced: false,\n      navConfig: false,\n      classes: Object.freeze({}),\n      changeInLock: noop\n    }) as LayoutState\n  )\n}\n\nconst breakPoints = Object.freeze<BreakPoint[]>(['xs', 'sm', 'md', 'lg', 'xl', 'xxl'])\n\nexport function useMediaQuery(query: Ref<boolean | string | LayoutMediaJudger>) {\n  const matched = ref(false)\n  const updateTrigger = ref(0)\n\n  const computedStyle = isClient && getComputedStyle(document.documentElement)\n  const computedQuery = computed(() => {\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n    updateTrigger.value\n\n    if (typeof query.value !== 'function' && breakPoints.includes(query.value as any)) {\n      const usedQuery = query.value === 'xs' ? 'sm' : query.value\n\n      if (usedQuery === currentBreakPoint.value) return true\n\n      const media =\n        computedStyle && computedStyle.getPropertyValue(`--vxp-break-point-${usedQuery}`).trim()\n\n      return media && `only screen and ${media}`\n    }\n\n    return query.value\n  })\n\n  let isMounted = false\n  let mediaQuery: MediaQueryList | undefined\n\n  const update = () => {\n    if (typeof computedQuery.value === 'boolean') {\n      matched.value = computedQuery.value\n      return\n    }\n\n    if (!computedQuery.value || computedQuery.value === 'min') {\n      matched.value = false\n      return\n    }\n\n    if (computedQuery.value === 'max') {\n      matched.value = true\n      return\n    }\n\n    if (typeof computedQuery.value === 'function') {\n      matched.value = computedQuery.value(currentBreakPoint.value)\n      return\n    }\n\n    if (isMounted) {\n      mediaQuery = matchMedia(computedQuery.value)\n      mediaQuery?.addEventListener('change', update)\n    }\n\n    matched.value = mediaQuery!.matches\n  }\n\n  watch(computedQuery, () => {\n    update()\n  })\n\n  onMounted(() => {\n    ++updateTrigger.value\n    isMounted = true\n    update()\n  })\n\n  onBeforeUnmount(() => {\n    isMounted = false\n    mediaQuery?.removeEventListener('change', update)\n    mediaQuery = undefined\n  })\n\n  return matched\n}\n\nexport function useUpdateCounter() {\n  const counter = ref(0)\n\n  onMounted(() => {\n    counter.value++\n  })\n  onUpdated(() => {\n    counter.value++\n  })\n\n  return counter\n}\n","import { computed, defineComponent } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { layoutMainProps } from './props'\nimport { useLayoutState } from './helper'\n\nexport default defineComponent({\n  name: 'LayoutMain',\n  props: layoutMainProps,\n  setup(_props, { slots }) {\n    const props = useProps('layoutMain', _props, {\n      tag: 'main',\n      fixed: false\n    })\n\n    const nh = useNameHelper('layout')\n    const state = useLayoutState()\n\n    const className = computed(() => {\n      return [nh.be('main'), props.fixed && nh.bem('main', 'fixed'), state.classes.main]\n    })\n\n    return () => {\n      const CustomTag = (props.tag || 'main') as any\n\n      return <CustomTag class={className.value}>{slots.default?.()}</CustomTag>\n    }\n  }\n})\n","import { booleanProp, booleanStringProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { RouteLocationRaw, Router } from 'vue-router'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { IconMinorProps } from '@/components/icon'\nimport type { MenuGroupType, MenuMarkerType, MenuOptions } from './symbol'\n\nexport const menuProps = buildProps({\n  active: String,\n  accordion: booleanProp,\n  markerType: String as PropType<MenuMarkerType>,\n  reduced: booleanProp,\n  horizontal: booleanProp,\n  transfer: booleanStringProp,\n  trigger: String as PropType<'hover' | 'click'>,\n  groupType: String as PropType<MenuGroupType>,\n  tooltipReverse: booleanProp,\n  options: Array as PropType<MenuOptions[]>,\n  router: Object as PropType<Router>,\n  manualRoute: booleanProp,\n  indent: [String, Number],\n  onSelect: eventProp<(label: string, meta: any) => void>(),\n  onExpand: eventProp<(label: string, meta: any) => void>(),\n  onReduce: eventProp<(label: string, meta: any) => void>()\n})\n\nexport type MenuProps = ExtractPropTypes<typeof menuProps>\nexport type MenuCProps = ConfigurableProps<MenuProps>\n\nexport const menuItemProps = buildProps({\n  label: String,\n  icon: iconProp,\n  iconProps: Object as PropType<IconMinorProps>,\n  disabled: booleanProp,\n  transfer: booleanStringProp,\n  trigger: String as PropType<'hover' | 'click'>,\n  transitionName: String,\n  meta: Object,\n  children: Array as PropType<MenuOptions[]>,\n  route: [String, Object] as PropType<RouteLocationRaw>,\n  onSelect: eventProp()\n})\n\nexport type MenuItemProps = ExtractPropTypes<typeof menuItemProps>\nexport type MenuItemCProps = ConfigurableProps<MenuItemProps, 'children'>\n\nexport const menuGroupProps = buildProps({\n  label: String,\n  children: Array as PropType<MenuOptions[]>\n})\n\nexport type MenuGroupProps = ExtractPropTypes<typeof menuGroupProps>\n","import type { ComponentPublicInstance, InjectionKey } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport type { IconMinorProps } from '@/components/icon'\n\nexport type MenuMarkerType = 'top' | 'right' | 'bottom' | 'left' | 'none'\nexport type MenuGroupType = 'collapse' | 'dropdown'\n\nexport interface MenuOptions {\n  label: string,\n  icon?: Record<string, any> | (() => any),\n  iconProps?: IconMinorProps,\n  name?: string | (() => string),\n  disabled?: boolean,\n  group?: boolean,\n  meta?: Record<string, any>,\n  route?: RouteLocationRaw,\n  children?: MenuOptions[]\n}\n\nexport interface MenuItemState {\n  el: Readonly<HTMLElement | null | undefined>,\n  label: Readonly<string>,\n  indent: Readonly<number>,\n  groupExpanded: boolean,\n  showGroup: Readonly<boolean>,\n  isUsePopper: Readonly<boolean>,\n  parentState: MenuItemState | null,\n  transfer: Readonly<boolean | string>,\n  cachedExpanded: boolean,\n  updateSonSelected(selected: boolean, upstream?: boolean): void,\n  toggleGroupExpanded(expanded: boolean, upward?: boolean): void,\n  handleMouseEnter(): void,\n  handleMouseLeave(): void\n}\n\nexport interface MenuGroupState {\n  indent: number\n}\n\nexport interface MenuState {\n  horizontal: boolean,\n  accordion: boolean,\n  groupType: MenuGroupType,\n  tooltipReverse: boolean,\n  currentActive: string,\n  isReduced: boolean,\n  transfer: boolean | string,\n  trigger: 'hover' | 'click',\n  markerType: MenuMarkerType,\n  handleSelect(label: string, meta: Record<string, any>, route?: RouteLocationRaw): void,\n  handleExpand(label: string, expanded: boolean, meta: Record<string, any>): void,\n  increaseItem(state: MenuItemState): void,\n  decreaseItem(state: MenuItemState): void,\n  doForEachItem(cb: (item: MenuItemState) => void): void\n}\n\nexport interface MenuExposed extends ComponentPublicInstance {\n  expandItemByLabel: (label: string) => void\n}\n\nexport interface MenuItemExposed extends ComponentPublicInstance {\n  groupExpanded: boolean,\n  isGroup: boolean,\n  showGroup: boolean,\n  isUsePopper: boolean,\n  handleSelect: () => void,\n  handleMouseEnter: () => void,\n  handleMouseLeave: () => void\n}\n\nexport const MENU_ITEM_STATE = '__VXP_MENU_ITEM_STATE' as unknown as InjectionKey<MenuItemState>\nexport const MENU_GROUP_STATE = '__VXP_MENU_GROUP_STATE' as unknown as InjectionKey<MenuGroupState>\nexport const MENU_STATE = '__VXP_MENU_STATE' as unknown as InjectionKey<MenuState>\n","import { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { Popper } from '@/components/popper'\nimport { Tooltip } from '@/components/tooltip'\n\nimport {\n  computed,\n  defineAsyncComponent,\n  defineComponent,\n  inject,\n  nextTick,\n  onBeforeUnmount,\n  // onMounted,\n  provide,\n  reactive,\n  ref,\n  renderSlot,\n  toRef,\n  watch\n} from 'vue'\n\nimport {\n  createIconProp,\n  emitEvent,\n  useHoverDelay,\n  useIcons,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { useClickOutside, usePopper, useRtl, useSetTimeout } from '@vexip-ui/hooks'\nimport { callIfFunc } from '@vexip-ui/utils'\nimport { menuItemProps } from './props'\nimport { MENU_GROUP_STATE, MENU_ITEM_STATE, MENU_STATE } from './symbol'\n\n// For types build\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type { RouteLocationRaw } from 'vue-router'\nimport type { PopperExposed } from '@/components/popper'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { MenuOptions } from './symbol'\n\nconst MenuGroup = defineAsyncComponent(() => import('./menu-group'))\n\nconst MenuItem = defineComponent({\n  name: 'MenuItem',\n  props: menuItemProps,\n  emits: [],\n  setup(_props, { slots, expose }) {\n    const props = useProps('menuItem', _props, {\n      label: {\n        default: null,\n        static: true\n      },\n      icon: createIconProp(),\n      iconProps: null,\n      disabled: false,\n      transfer: null,\n      trigger: null,\n      transitionName: null,\n      meta: null,\n      children: {\n        default: () => [],\n        static: true\n      },\n      route: null\n    })\n\n    const menuState = inject(MENU_STATE, null)\n    const parentItemState = inject(MENU_ITEM_STATE, null)\n    const groupState = inject(MENU_GROUP_STATE, null)\n\n    const nh = useNameHelper('menu')\n    const icons = useIcons()\n    const hoverDelay = useHoverDelay()\n\n    const { isRtl } = useRtl()\n\n    const baseClass = nh.be('item')\n    const placement = ref<Placement>(isRtl.value ? 'left-start' : 'right-start')\n    const groupExpanded = ref(false)\n    const selected = ref(false)\n    const sonSelected = ref(false)\n    const popperShow = ref(false)\n\n    const indent = computed(() => (parentItemState?.indent ?? 0) + 1)\n    const propTransfer = computed(() => props.transfer ?? menuState?.transfer ?? false)\n    const inTransfer = computed(() => (parentItemState ? parentItemState.transfer : false))\n    const transfer = computed(() => !inTransfer.value && propTransfer.value)\n    const markerType = computed(() => menuState?.markerType || 'right')\n\n    const wrapper = useClickOutside(handleClickOutside)\n    const popper = ref<PopperExposed>()\n    const { reference, transferTo, updatePopper } = usePopper({\n      placement,\n      transfer,\n      wrapper,\n      popper: computed(() => popper.value?.wrapper),\n      shift: { crossAxis: true }\n    })\n\n    const isGroup = computed(() => !!(slots.group || props.children?.length))\n    const showGroup = computed(() => isGroup.value && groupExpanded.value)\n    const className = computed(() => {\n      return {\n        [baseClass]: true,\n        [`${baseClass}--disabled`]: props.disabled,\n        [`${baseClass}--group-visible`]: showGroup.value,\n        [`${baseClass}--selected`]: selected.value,\n        [`${baseClass}--no-icon`]: !props.icon,\n        [`${baseClass}--son-selected`]: sonSelected.value\n      }\n    })\n    const labelStyle = computed(() => {\n      if (menuState?.horizontal || parentItemState?.isUsePopper) {\n        return {}\n      }\n\n      const indentWidth = nh.gcv('indent-width')\n      const multiplier =\n        indent.value + (menuState?.isReduced ? 0 : (groupState?.indent ?? 0)) * 0.25\n\n      return {\n        paddingInlineStart:\n          parentItemState && parentItemState.isUsePopper\n            ? undefined\n            : `calc(${indentWidth} * ${multiplier})`\n      }\n    })\n    const isUsePopper = computed(() => {\n      return (\n        (menuState && (menuState.horizontal || menuState.groupType === 'dropdown')) ||\n        (isGroup.value && menuState?.isReduced && !parentItemState) ||\n        !!parentItemState?.isUsePopper\n      )\n    })\n    const tooltipDisabled = computed(() => {\n      return (\n        isGroup.value || !!(parentItemState?.isUsePopper || (menuState && !menuState.isReduced))\n      )\n    })\n    const tooltipReverse = computed(() => !!menuState?.tooltipReverse)\n    const isHorizontal = computed(() => menuState?.horizontal && !parentItemState)\n    const transition = computed(() => {\n      return (props.transitionName ?? isHorizontal.value) ? nh.ns('drop') : nh.ns('zoom')\n    })\n    const dropTrigger = computed(() => props.trigger || menuState?.trigger || 'hover')\n\n    const itemState = reactive({\n      el: wrapper,\n      label: toRef(props, 'label'),\n      indent,\n      groupExpanded,\n      showGroup,\n      isUsePopper,\n      parentState: parentItemState,\n      transfer: computed(() => inTransfer.value || propTransfer.value),\n      cachedExpanded: groupExpanded.value,\n      updateSonSelected,\n      toggleGroupExpanded,\n      handleMouseEnter,\n      handleMouseLeave\n    })\n\n    provide(MENU_ITEM_STATE, itemState)\n\n    watch(\n      showGroup,\n      value => {\n        if (value && isUsePopper.value) {\n          popperShow.value = true\n          updatePopper()\n        }\n      },\n      { immediate: true }\n    )\n    watch(selected, value => {\n      if (value) {\n        emitEvent(props.onSelect)\n      }\n\n      menuState?.doForEachItem(item => item.updateSonSelected(false, false))\n      value &&\n        nextTick(() => {\n          parentItemState?.updateSonSelected(value)\n        })\n    })\n    watch(groupExpanded, expanded => {\n      if (typeof menuState?.handleExpand === 'function') {\n        menuState.handleExpand(props.label, expanded, props.meta || {})\n      }\n    })\n    watch(\n      isHorizontal,\n      value => {\n        placement.value = value ? 'bottom' : isRtl.value ? 'left-start' : 'right-start'\n      },\n      { immediate: true }\n    )\n\n    if (menuState) {\n      watch(\n        [() => props.label, () => menuState.currentActive],\n        () => {\n          selected.value = props.label === menuState.currentActive\n        },\n        { immediate: true }\n      )\n\n      if (typeof menuState.increaseItem === 'function') {\n        menuState.increaseItem(itemState)\n      }\n    }\n\n    // onMounted(() => {\n    //   if (typeof menuState?.increaseItem === 'function') {\n    //     menuState.increaseItem(itemState)\n    //   }\n    // })\n\n    onBeforeUnmount(() => {\n      if (typeof menuState?.decreaseItem === 'function') {\n        menuState.decreaseItem(itemState)\n      }\n    })\n\n    expose({\n      groupExpanded,\n      isGroup,\n      showGroup,\n      isUsePopper,\n      handleSelect,\n      handleMouseEnter,\n      handleMouseLeave\n    })\n\n    function updateSonSelected(selected: boolean, upstream = true) {\n      sonSelected.value = selected\n      upstream && parentItemState?.updateSonSelected(selected)\n    }\n\n    const { timer } = useSetTimeout()\n\n    function handleSelect() {\n      clearTimeout(timer.hover)\n\n      if (props.disabled) return\n\n      if (isGroup.value) {\n        if (isUsePopper.value && dropTrigger.value !== 'click') return\n\n        menuState?.doForEachItem(item => {\n          if (menuState.accordion) {\n            item.groupExpanded = false\n          }\n        })\n        groupExpanded.value = !groupExpanded.value\n      } else {\n        if (isUsePopper.value) {\n          toggleGroupExpanded(false, true)\n        }\n\n        if (menuState) {\n          menuState.handleSelect(props.label, props.meta || {}, props.route)\n        }\n\n        selected.value = true\n      }\n    }\n\n    function toggleGroupExpanded(expanded: boolean, upward = false) {\n      clearTimeout(timer.hover)\n\n      menuState?.doForEachItem(item => {\n        if (menuState.accordion) {\n          item.groupExpanded = false\n        }\n      })\n      groupExpanded.value = expanded\n\n      if (upward && typeof parentItemState?.toggleGroupExpanded === 'function') {\n        parentItemState.toggleGroupExpanded(expanded, upward)\n      }\n    }\n\n    let mouseInList = false\n    let reproduce = false\n\n    function handleMouseEnter() {\n      clearTimeout(timer.hover)\n\n      if (mouseInList || !isUsePopper.value || dropTrigger.value !== 'hover') return\n\n      if (!groupExpanded.value && popperShow.value) {\n        reproduce = true\n        return\n      }\n\n      if (typeof parentItemState?.handleMouseEnter === 'function') {\n        parentItemState.handleMouseEnter()\n      }\n\n      if (props.disabled || !isGroup.value) return\n\n      timer.hover = setTimeout(() => {\n        groupExpanded.value = true\n      }, hoverDelay.value)\n    }\n\n    function handleMouseLeave() {\n      clearTimeout(timer.hover)\n\n      if (mouseInList || !popperShow.value || !isUsePopper.value || dropTrigger.value !== 'hover') {\n        return\n      }\n\n      if (typeof parentItemState?.handleMouseLeave === 'function') {\n        parentItemState.handleMouseLeave()\n      }\n\n      if (props.disabled || !isGroup.value) return\n\n      timer.hover = setTimeout(() => {\n        groupExpanded.value = false\n      }, hoverDelay.value)\n    }\n\n    function handleClickOutside() {\n      if (isUsePopper.value && dropTrigger.value === 'click') {\n        nextTick(() => {\n          groupExpanded.value = false\n        })\n      }\n    }\n\n    function handlePopperHide() {\n      popperShow.value = false\n      groupExpanded.value = false\n\n      if (reproduce) {\n        reproduce = false\n\n        if (typeof parentItemState?.handleMouseEnter === 'function') {\n          parentItemState.handleMouseEnter()\n        }\n\n        if (props.disabled || !isGroup.value) return\n\n        groupExpanded.value = true\n      }\n    }\n\n    function handleKeySelect(event: KeyboardEvent) {\n      const key = event.code || event.key\n\n      if (key === 'Enter' || key === 'NumpadEnter') {\n        event.stopPropagation()\n        handleSelect()\n      } else if (key === 'Space') {\n        event.stopPropagation()\n        event.preventDefault()\n        handleSelect()\n      }\n    }\n\n    function renderChildren() {\n      if (!props.children?.length) {\n        return null\n      }\n\n      const renderItem = (item: MenuOptions) => (\n        <MenuItem\n          label={item.label}\n          icon={item.icon}\n          icon-props={item.iconProps}\n          disabled={item.disabled}\n          children={item.children}\n          route={item.route}\n          meta={item.meta}\n        >\n          {item.name ? callIfFunc(item.name) : item.label}\n        </MenuItem>\n      )\n\n      return props.children.map(child => {\n        if (child.group) {\n          return (\n            <MenuGroup key={child.label} label={child.name ? callIfFunc(child.name) : child.label}>\n              {child.children?.map(renderItem)}\n            </MenuGroup>\n          )\n        }\n\n        return renderItem(child)\n      })\n    }\n\n    function renderLabel() {\n      return (\n        <Tooltip\n          placement={isRtl.value ? 'left' : 'right'}\n          reverse={tooltipReverse.value}\n          shift\n          transfer\n          disabled={tooltipDisabled.value}\n        >\n          {{\n            trigger: () => (\n              <div\n                ref={reference}\n                class={{\n                  [nh.be('label')]: true,\n                  [nh.bem('label', `marker-${markerType.value}`)]: true,\n                  [nh.bem('label', 'in-popper')]: parentItemState?.isUsePopper\n                }}\n                role={'menuitem'}\n                tabindex={0}\n                aria-disabled={props.disabled ? 'true' : undefined}\n                style={labelStyle.value}\n                onClick={handleSelect}\n                onKeydown={handleKeySelect}\n                onMouseenter={handleMouseEnter}\n                onMouseleave={handleMouseLeave}\n              >\n                {(slots.icon || props.icon) && (\n                  <div class={nh.be('icon')}>\n                    {slots.icon ? (\n                      renderSlot(slots, 'icon')\n                    ) : (\n                      <Icon {...props.iconProps} icon={props.icon}></Icon>\n                    )}\n                  </div>\n                )}\n                <span\n                  class={{\n                    [nh.be('title')]: true,\n                    [nh.bem('title', 'in-group')]: !isHorizontal.value && isGroup.value\n                  }}\n                >\n                  {slots.default ? renderSlot(slots, 'default') : props.label}\n                </span>\n                {isGroup.value && (\n                  <Icon\n                    {...icons.value.angleDown}\n                    class={{\n                      [nh.be('arrow')]: true,\n                      [nh.bem('arrow', 'visible')]: groupExpanded.value,\n                      [nh.bem('arrow', '')]: sonSelected.value\n                    }}\n                  ></Icon>\n                )}\n              </div>\n            ),\n            default: () => (\n              <span class={nh.be('tooltip-title')}>\n                {slots.default ? renderSlot(slots, 'default') : props.label}\n              </span>\n            )\n          }}\n        </Tooltip>\n      )\n    }\n\n    return () => {\n      return (\n        <li ref={wrapper} class={className.value} role={'none'}>\n          {renderLabel()}\n          <CollapseTransition appear>\n            {isGroup.value && !isUsePopper.value && (\n              <ul v-show={showGroup.value} class={nh.be('list')}>\n                {slots.group ? renderSlot(slots, 'group') : renderChildren()}\n              </ul>\n            )}\n          </CollapseTransition>\n          {isGroup.value && isUsePopper.value && (\n            <Popper\n              ref={popper}\n              class={[\n                nh.be('popper'),\n                nh.bs('vars'),\n                isHorizontal.value && nh.bem('popper', 'drop')\n              ]}\n              visible={popperShow.value && showGroup.value}\n              alive={!transferTo.value || popperShow.value}\n              to={transferTo.value}\n              transition={transition.value}\n              onAfterLeave={handlePopperHide}\n              onMouseenter={() => ((mouseInList = true), handleMouseEnter())}\n              onMouseleave={() => ((mouseInList = false), handleMouseLeave())}\n            >\n              <ul class={nh.be('list')}>\n                {slots.group ? renderSlot(slots, 'group') : renderChildren()}\n              </ul>\n            </Popper>\n          )}\n        </li>\n      )\n    }\n  }\n})\n\n// eslint-disable-next-line vue/require-direct-export\nexport default MenuItem\n","import { MenuItem } from '@/components/menu-item'\n\nimport { computed, defineComponent, inject, provide, reactive, ref, renderSlot } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { callIfFunc } from '@vexip-ui/utils'\nimport { MENU_GROUP_STATE, MENU_ITEM_STATE, MENU_STATE } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { MenuOptions } from './symbol'\n\nconst MenuGroup = defineComponent({\n  name: 'MenuGroup',\n  props: {\n    label: String,\n    children: Array as PropType<MenuOptions[]>\n  },\n  setup(_props, { slots }) {\n    const props = useProps('menuGroup', _props, {\n      label: {\n        default: '',\n        static: true\n      },\n      children: {\n        default: () => [],\n        static: true\n      }\n    })\n\n    const menuState = inject(MENU_STATE, null)\n    const parentItemState = inject(MENU_ITEM_STATE, null)\n\n    const nh = useNameHelper('menu-group')\n    const menuNh = useNameHelper('menu')\n    const indent = ref(1)\n\n    if (parentItemState) {\n      indent.value = parentItemState.indent + 1\n    }\n\n    const titleStyle = computed(() => {\n      return {\n        paddingLeft: parentItemState?.isUsePopper\n          ? undefined\n          : `calc(${menuNh.gcv('indent-width')} * ${indent.value})`\n      }\n    })\n    const onlyShowSlot = computed(() => {\n      return menuState?.horizontal && !parentItemState\n    })\n\n    provide(MENU_GROUP_STATE, reactive({ indent }))\n\n    function renderChildren() {\n      return renderSlot(slots, 'default', {}, () => {\n        if (!props.children?.length) {\n          return []\n        }\n\n        const renderItem = (item: MenuOptions) => (\n          <MenuItem\n            label={item.label}\n            icon={item.icon}\n            icon-props={item.iconProps}\n            disabled={item.disabled}\n            children={item.children}\n            route={item.route}\n            meta={item.meta}\n          >\n            {item.name ? callIfFunc(item.name) : item.label}\n          </MenuItem>\n        )\n\n        return props.children.map(child => {\n          if (child.group) {\n            return (\n              <MenuGroup\n                key={child.label}\n                label={child.name ? callIfFunc(child.name) : child.label}\n              >\n                {child.children?.map(renderItem)}\n              </MenuGroup>\n            )\n          }\n\n          return renderItem(child)\n        })\n      })\n    }\n\n    return () => {\n      if (onlyShowSlot.value) {\n        return slots.default?.()\n      }\n\n      return (\n        <li class={nh.b()}>\n          <div class={nh.be('label')}>\n            <span class={nh.be('title')} style={titleStyle.value}>\n              {slots.label ? slots.label() : props.label}\n            </span>\n          </div>\n          <ul class={nh.be('list')}>{renderChildren()}</ul>\n        </li>\n      )\n    }\n  }\n})\n\n// eslint-disable-next-line vue/require-direct-export\nexport default MenuGroup\n","import { Icon } from '@/components/icon'\nimport { MenuItem } from '@/components/menu-item'\nimport { Popper } from '@/components/popper'\n\nimport { computed, defineComponent, inject, nextTick, provide, reactive, ref, watch } from 'vue'\n\nimport { useHoverDelay, useIcons, useNameHelper } from '@vexip-ui/config'\nimport { useClickOutside, usePopper, useSetTimeout } from '@vexip-ui/hooks'\nimport { callIfFunc } from '@vexip-ui/utils'\nimport { MENU_ITEM_STATE, MENU_STATE } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { PopperExposed } from '@/components/popper'\nimport type { MenuOptions } from './symbol'\n\nexport default defineComponent({\n  name: 'MenuRest',\n  props: {\n    menus: {\n      type: Array as PropType<MenuOptions[]>,\n      default: () => []\n    }\n  },\n  setup(props) {\n    const menuState = inject(MENU_STATE, null)\n\n    const nh = useNameHelper('menu')\n    const icons = useIcons()\n    const hoverDelay = useHoverDelay()\n\n    const groupExpanded = ref(false)\n    const sonSelected = ref(false)\n    const popperShow = ref(false)\n\n    const transfer = computed(() => menuState?.transfer ?? false)\n    const dropTrigger = computed(() => menuState?.trigger || 'hover')\n\n    const wrapper = useClickOutside(handleClickOutside)\n    const popper = ref<PopperExposed>()\n    const { reference, transferTo, updatePopper } = usePopper({\n      placement: ref('bottom'),\n      transfer,\n      wrapper,\n      popper: computed(() => popper.value?.wrapper)\n    })\n\n    const itemState = reactive({\n      el: wrapper,\n      label: '',\n      indent: 1,\n      groupExpanded,\n      showGroup: groupExpanded,\n      isUsePopper: true,\n      parentState: null,\n      transfer,\n      cachedExpanded: false,\n      updateSonSelected,\n      toggleGroupExpanded,\n      handleMouseEnter,\n      handleMouseLeave\n    })\n\n    provide(MENU_ITEM_STATE, itemState)\n\n    watch(groupExpanded, value => {\n      if (value) {\n        popperShow.value = true\n        updatePopper()\n      }\n    })\n\n    function updateSonSelected(selected: boolean) {\n      sonSelected.value = selected\n    }\n\n    function toggleGroupExpanded(expanded: boolean) {\n      groupExpanded.value = expanded\n    }\n\n    const { timer } = useSetTimeout()\n\n    let mouseInList = false\n    let reproduce = false\n\n    function handleMouseEnter() {\n      clearTimeout(timer.hover)\n\n      if (mouseInList || dropTrigger.value !== 'hover') return\n\n      if (!groupExpanded.value && popperShow.value) {\n        reproduce = true\n        return\n      }\n\n      timer.hover = setTimeout(() => {\n        groupExpanded.value = true\n      }, hoverDelay.value)\n    }\n\n    function handleMouseLeave() {\n      clearTimeout(timer.hover)\n\n      if (mouseInList || !popperShow.value || dropTrigger.value !== 'hover') return\n\n      timer.hover = setTimeout(() => {\n        groupExpanded.value = false\n      }, hoverDelay.value)\n    }\n\n    function handleClick() {\n      if (dropTrigger.value === 'click') {\n        groupExpanded.value = true\n      }\n    }\n\n    function handleClickOutside() {\n      if (dropTrigger.value === 'click') {\n        nextTick(() => {\n          groupExpanded.value = false\n        })\n      }\n    }\n\n    function handlePopperHide() {\n      popperShow.value = false\n      groupExpanded.value = false\n\n      if (reproduce) {\n        reproduce = false\n        groupExpanded.value = true\n      }\n    }\n\n    function renderMenuItems() {\n      if (!props.menus?.length) {\n        return null\n      }\n\n      return props.menus.map(item => (\n        <MenuItem\n          key={item.label}\n          label={item.label}\n          icon={item.icon}\n          icon-props={item.iconProps}\n          disabled={item.disabled}\n          children={item.children}\n          route={item.route}\n          meta={item.meta}\n        >\n          {item.name ? callIfFunc(item.name) : item.label}\n        </MenuItem>\n      ))\n    }\n\n    return () => {\n      return (\n        <div\n          ref={wrapper}\n          class={nh.be('rest')}\n          onMouseenter={handleMouseEnter}\n          onMouseleave={handleMouseLeave}\n        >\n          <div\n            ref={reference}\n            class={[nh.be('rest-handler'), sonSelected.value && nh.bem('rest-handler', 'selected')]}\n            onClick={handleClick}\n          >\n            <Icon {...icons.value.ellipsis}></Icon>\n          </div>\n          <Popper\n            ref={popper}\n            class={[nh.be('popper'), nh.bs('vars'), nh.bem('popper', 'drop')]}\n            visible={popperShow.value && groupExpanded.value}\n            alive={!transferTo.value || popperShow.value}\n            to={transferTo.value}\n            transition={nh.ns('drop')}\n            onAfterLeave={handlePopperHide}\n            onMouseenter={() => ((mouseInList = true), handleMouseEnter())}\n            onMouseleave={() => ((mouseInList = false), handleMouseLeave())}\n          >\n            <ul class={[nh.be('list'), nh.bem('list', 'theme')]}>{renderMenuItems()}</ul>\n          </Popper>\n        </div>\n      )\n    }\n  }\n})\n","import { MenuItem } from '@/components/menu-item'\nimport { MenuGroup } from '@/components/menu-group'\nimport { Overflow } from '@/components/overflow'\n\nimport {\n  computed,\n  defineComponent,\n  nextTick,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  renderSlot,\n  toRef,\n  watch\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { callIfFunc, isDefined } from '@vexip-ui/utils'\nimport MenuRest from './menu-rest'\nimport { menuProps } from './props'\nimport { MENU_STATE } from './symbol'\n\nimport type { RouteLocationRaw, RouteRecordRaw } from 'vue-router'\nimport type { MenuItemState, MenuMarkerType, MenuOptions, MenuState } from './symbol'\n\nconst menuMarkerTypes = Object.freeze<MenuMarkerType[]>(['top', 'right', 'bottom', 'left', 'none'])\n\nexport default defineComponent({\n  name: 'Menu',\n  components: {\n    MenuRest,\n    MenuItem,\n    MenuGroup,\n    Overflow\n  },\n  props: menuProps,\n  emits: ['update:active'],\n  setup(_props, { slots, emit, expose }) {\n    const props = useProps('menu', _props, {\n      active: {\n        default: null,\n        static: true\n      },\n      accordion: false,\n      markerType: {\n        default: 'right',\n        validator: value => menuMarkerTypes.includes(value)\n      },\n      reduced: false,\n      horizontal: false,\n      transfer: false,\n      trigger: 'hover',\n      groupType: {\n        default: 'collapse',\n        validator: value => ['collapse', 'dropdown'].includes(value)\n      },\n      tooltipReverse: null,\n      options: {\n        default: () => [],\n        static: true\n      },\n      router: null,\n      manualRoute: false,\n      indent: null\n    })\n\n    const nh = useNameHelper('menu')\n    const menuItemSet = new Set<MenuItemState>()\n    const currentActive = ref(props.active)\n    const isReduced = ref(false)\n\n    const wrapper = ref<HTMLElement>()\n    const rest = ref<InstanceType<typeof MenuRest>>()\n\n    const markerType = computed(() => {\n      if (props.horizontal && (props.markerType === 'left' || props.markerType === 'right')) {\n        return 'bottom'\n      } else if (\n        !props.horizontal &&\n        (props.markerType === 'top' || props.markerType === 'bottom')\n      ) {\n        return 'right'\n      } else {\n        return props.markerType ?? (props.horizontal ? 'bottom' : 'right')\n      }\n    })\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        nh.bm(`marker-${markerType.value}`),\n        {\n          [nh.bm('inherit')]: props.inherit,\n          [nh.bm('reduced')]: isReduced.value,\n          [nh.bm('dropdown')]: props.groupType === 'dropdown',\n          [nh.bm('horizontal')]: props.horizontal\n        }\n      ]\n    })\n    const style = computed(() => {\n      const style: Record<string, string> = {}\n\n      if (isDefined(props.indent)) {\n        style[nh.cv('indent-width')] =\n          typeof props.indent === 'number' ? `${props.indent}px` : props.indent\n      }\n\n      return style\n    })\n    const menus = computed(() => {\n      if (props.options?.length) {\n        return props.options\n      }\n\n      const routes = props.router?.options.routes\n\n      if (!routes?.length) {\n        return []\n      }\n\n      return parseRoutesToMenus(routes)\n    })\n    const currentRoute = computed(() => props.router?.currentRoute.value)\n\n    provide<MenuState>(\n      MENU_STATE,\n      reactive({\n        currentActive,\n        isReduced,\n        horizontal: toRef(props, 'horizontal'),\n        accordion: toRef(props, 'accordion'),\n        groupType: toRef(props, 'groupType'),\n        tooltipReverse: toRef(props, 'tooltipReverse'),\n        transfer: toRef(props, 'transfer'),\n        trigger: toRef(props, 'trigger'),\n        markerType,\n        handleSelect,\n        handleExpand,\n        increaseItem,\n        decreaseItem,\n        doForEachItem\n      })\n    )\n\n    watch(\n      () => props.active,\n      value => {\n        if (value !== currentActive.value) {\n          currentActive.value = value\n        }\n      }\n    )\n    watch(\n      () => props.reduced,\n      value => {\n        if (props.horizontal) return\n\n        if (value) {\n          handleMenuReduce()\n        } else {\n          handleMenuExpand()\n        }\n      }\n    )\n    watch(currentRoute, value => {\n      if (!props.manualRoute && value) {\n        currentActive.value = (value.meta?.label as string) ?? value.path\n      }\n    })\n\n    onMounted(() => {\n      nextTick(() => {\n        if (!props.horizontal && props.reduced) handleMenuReduce()\n      })\n\n      if (props.router && !props.manualRoute && !currentActive.value) {\n        const route = currentRoute.value\n\n        if (route) {\n          currentActive.value = (route.meta?.label as string) ?? currentRoute.value.path\n        }\n      }\n    })\n\n    expose({ expandItemByLabel })\n\n    function parseRoutesToMenus(routes: Readonly<RouteRecordRaw[]>) {\n      const root: MenuOptions = { label: '', children: [] }\n      const loop = Array.from(routes).map(route => ({ parent: root, route }))\n\n      while (loop.length) {\n        const { parent, route } = loop.shift()!\n        const routeMeta = (route.meta || {}) as any\n\n        if (routeMeta.menu === false) {\n          continue\n        }\n\n        const options = {\n          ...routeMeta,\n          route,\n          label: routeMeta.label || route.path,\n          name: routeMeta.name || route.name\n        } as MenuOptions\n\n        if (!parent.children) {\n          parent.children = []\n        }\n\n        parent.children.push(options)\n\n        if (route.children) {\n          loop.push(...route.children.map(route => ({ parent: options, route })))\n        }\n      }\n\n      return root.children!\n    }\n\n    function increaseItem(state: MenuItemState) {\n      menuItemSet.add(state)\n    }\n\n    function decreaseItem(state: MenuItemState) {\n      menuItemSet.delete(state)\n    }\n\n    function doForEachItem(cb: (item: MenuItemState) => void) {\n      for (const item of menuItemSet) {\n        cb(item)\n      }\n    }\n\n    function handleSelect(label: string, meta: Record<string, any>, route?: RouteLocationRaw) {\n      if (currentActive.value !== label) {\n        currentActive.value = label\n\n        emit('update:active', label)\n        emitEvent(props.onSelect, label, meta)\n\n        if (!props.manualRoute && props.router && route) {\n          props.router.push(route)\n        }\n      }\n    }\n\n    function handleExpand(label: string, expanded: boolean, meta: Record<string, any>) {\n      if (expanded) {\n        emitEvent(props.onExpand, label, meta)\n      } else {\n        emitEvent(props.onReduce, label, meta)\n      }\n    }\n\n    function handleMenuReduce() {\n      if (props.horizontal) return\n\n      let firstExpandedItem: MenuItemState | null = null\n\n      for (const item of menuItemSet) {\n        item.cachedExpanded = item.showGroup\n\n        if (!firstExpandedItem && item.showGroup) {\n          firstExpandedItem = item\n        }\n\n        item.toggleGroupExpanded(false)\n      }\n\n      isReduced.value = true\n    }\n\n    function handleMenuExpand() {\n      if (props.horizontal) return\n\n      isReduced.value = false\n\n      if (wrapper.value) {\n        const el = wrapper.value\n        const callback = () => {\n          requestAnimationFrame(() => {\n            el.removeEventListener('transitionend', callback)\n\n            const selectedItem = Array.from(menuItemSet).find(\n              item => item.label === currentActive.value\n            )\n\n            requestAnimationFrame(() => {\n              requestAnimationFrame(() => {\n                for (const item of menuItemSet) {\n                  item.groupExpanded = item.cachedExpanded\n                }\n\n                if (selectedItem) {\n                  let parent = selectedItem.parentState\n\n                  while (parent) {\n                    parent.groupExpanded = true\n                    parent = parent.parentState\n                  }\n                }\n              })\n            })\n          })\n        }\n\n        el.addEventListener('transitionend', callback)\n      }\n    }\n\n    function expandItemByLabel(label: string) {\n      for (const item of menuItemSet) {\n        if (item.label === label) {\n          item.toggleGroupExpanded(true, true)\n        }\n      }\n    }\n\n    function renderMenuItem(item: MenuOptions) {\n      return (\n        <MenuItem\n          label={item.label}\n          icon={item.icon}\n          icon-props={item.iconProps}\n          disabled={item.disabled}\n          children={item.children}\n          route={item.route}\n          meta={item.meta}\n        >\n          {item.name ? callIfFunc(item.name) : item.label}\n        </MenuItem>\n      )\n    }\n\n    function renderMenus() {\n      return menus.value.map(menu =>\n        menu.group ? (\n          <MenuGroup key={menu.label} label={menu.name ? callIfFunc(menu.name) : menu.label}>\n            {menu.children?.length ? menu.children.map(renderMenuItem) : null}\n          </MenuGroup>\n        ) : (\n          renderMenuItem(menu)\n        )\n      )\n    }\n\n    return () => {\n      return (\n        <ul ref={wrapper} class={className.value} role={'menu'} tabindex={-1} style={style.value}>\n          {renderSlot(slots, 'default', {}, () => {\n            return props.horizontal\n              ? [\n                <Overflow class={nh.be('overflow')} inherit key={0}>\n                  {{\n                    default: renderMenus,\n                    counter: ({ count }: { count: number }) => (\n                      <MenuRest ref={rest} menus={menus.value.slice(-count)}></MenuRest>\n                    )\n                  }}\n                </Overflow>\n                ]\n              : renderMenus()\n          })}\n        </ul>\n      )\n    }\n  }\n})\n","import { booleanProp, buildProps, eventProp, iconProp, sizeProp, stateProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { SwitchSlots } from './symbol'\n\nexport const switchProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  value: booleanProp,\n  disabled: booleanProp,\n  openColor: String,\n  closeColor: String,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingEffect: String as PropType<IconEffect>,\n  openIcon: iconProp,\n  closeIcon: iconProp,\n  openText: String,\n  closeText: String,\n  onBeforeChange: Function as PropType<(checked: boolean) => unknown>,\n  rectangle: booleanProp,\n  name: String,\n  slots: Object as PropType<SwitchSlots>,\n  onChange: eventProp<(value: boolean) => void>()\n})\n\nexport type SwitchProps = ExtractPropTypes<typeof switchProps>\nexport type SwitchCProps = ConfigurableProps<SwitchProps, never, 'onBeforeChange'>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, ref, watch } from 'vue'\n\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { isPromise } from '@vexip-ui/utils'\nimport { switchProps } from './props'\n\nimport type { SwitchSlots } from './symbol'\n\ndefineOptions({ name: 'Switch' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  getFieldValue,\n  setFieldValue\n} = useFieldStore<boolean>(() => input.value?.focus())\n\nconst _props = defineProps(switchProps)\nconst props = useProps('switch', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  value: {\n    default: () => getFieldValue(),\n    static: true\n  },\n  disabled: () => disabled.value,\n  openColor: '',\n  closeColor: '',\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingEffect: null,\n  openIcon: createIconProp(),\n  closeIcon: createIconProp(),\n  openText: '',\n  closeText: '',\n  onBeforeChange: {\n    default: null,\n    isFunc: true\n  },\n  rectangle: false,\n  name: {\n    default: '',\n    static: true\n  },\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:value'])\n\ndefineSlots<SwitchSlots>()\n\nconst nh = useNameHelper('switch')\nconst icons = useIcons()\nconst currentValue = ref(props.value)\n\nconst input = ref<HTMLInputElement>()\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('open')]: currentValue.value,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('loading')]: props.loading,\n      [nh.bm('rectangle')]: props.rectangle\n    }\n  ]\n})\nconst style = computed(() => {\n  return {\n    backgroundColor: currentValue.value ? props.openColor : props.closeColor\n  }\n})\nconst signalStyle = computed(() => {\n  return {\n    color: currentValue.value ? props.openColor : props.closeColor\n  }\n})\nconst isDisabled = computed(() => {\n  return props.disabled || props.loading\n})\n\nwatch(\n  () => props.value,\n  value => {\n    currentValue.value = value\n  }\n)\n\ndefineExpose({\n  idFor,\n  labelId,\n  currentValue,\n  input,\n  focus: (options?: FocusOptions) => input.value?.focus(options),\n  blur: () => input.value?.blur()\n})\n\nasync function handleChange(checked = !currentValue.value) {\n  if (checked === currentValue.value) return\n\n  let result: unknown = true\n\n  if (typeof props.onBeforeChange === 'function') {\n    result = props.onBeforeChange(checked)\n\n    if (isPromise(result)) {\n      result = await result\n    }\n  }\n\n  if (result !== false) {\n    currentValue.value = checked\n\n    emit('update:value', checked)\n    setFieldValue(checked)\n    emitEvent(props.onChange, checked)\n    validateField()\n  }\n}\n</script>\n\n<template>\n  <label\n    :id=\"idFor\"\n    :class=\"className\"\n    role=\"switch\"\n    :aria-checked=\"currentValue\"\n    :aria-disabled=\"isDisabled\"\n    :aria-labelledby=\"labelId\"\n    :style=\"style\"\n  >\n    <input\n      ref=\"input\"\n      type=\"checkbox\"\n      :class=\"nh.be('input')\"\n      :checked=\"currentValue\"\n      :disabled=\"isDisabled\"\n      :name=\"props.name\"\n      @submit.prevent\n      @change=\"handleChange()\"\n      @click.stop\n    />\n    <span :class=\"nh.be('placeholder')\" aria-hidden>\n      <span :class=\"nh.be('open-text')\">\n        <slot name=\"open\">\n          <Renderer :renderer=\"props.slots.open\">{{ props.openText }}</Renderer>\n        </slot>\n      </span>\n      <span :class=\"nh.be('close-text')\">\n        <slot name=\"close\">\n          <Renderer :renderer=\"props.slots.open\">{{ props.closeText }}</Renderer>\n        </slot>\n      </span>\n    </span>\n    <span :class=\"nh.be('signal')\" :style=\"signalStyle\">\n      <slot v-if=\"props.loading\" name=\"loading\">\n        <Renderer :renderer=\"props.slots.loading\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"props.loadingEffect || icons.loading.effect\"\n            :icon=\"props.loadingIcon || icons.loading.icon\"\n            label=\"loading\"\n          ></Icon>\n        </Renderer>\n      </slot>\n      <slot v-else name=\"icon\" :value=\"currentValue\">\n        <Renderer :renderer=\"props.slots.icon\" :data=\"{ value: currentValue }\">\n          <Icon v-if=\"currentValue && props.openIcon\" :icon=\"props.openIcon\"></Icon>\n          <Icon v-else-if=\"!currentValue && props.closeIcon\" :icon=\"props.closeIcon\"></Icon>\n        </Renderer>\n      </slot>\n    </span>\n    <span :class=\"nh.be('label')\">\n      <span v-if=\"currentValue\" :class=\"nh.be('open-text')\">\n        <slot name=\"open\">\n          <Renderer :renderer=\"props.slots.open\">{{ props.openText }}</Renderer>\n        </slot>\n      </span>\n      <span v-else :class=\"nh.be('close-text')\">\n        <slot name=\"close\">\n          <Renderer :renderer=\"props.slots.open\">{{ props.closeText }}</Renderer>\n        </slot>\n      </span>\n    </span>\n  </label>\n</template>\n","import { Avatar } from '@/components/avatar'\nimport { Dropdown } from '@/components/dropdown'\nimport { DropdownList } from '@/components/dropdown-list'\nimport { DropdownItem } from '@/components/dropdown-item'\nimport { Icon } from '@/components/icon'\nimport { Menu } from '@/components/menu'\nimport { Switch } from '@/components/switch'\n\nimport {\n  computed,\n  defineComponent,\n  onBeforeMount,\n  onMounted,\n  reactive,\n  ref,\n  renderSlot,\n  shallowReadonly,\n  toRef,\n  watch\n} from 'vue'\n\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useMounted, useRtl } from '@vexip-ui/hooks'\nimport { isClient } from '@vexip-ui/utils'\nimport { layoutHeaderProps } from './props'\nimport { computeSeriesColors, useLayoutState } from './helper'\n\nimport type { MenuExposed } from '@/components/menu'\nimport type { LayoutConfig, LayoutHeaderAction, LayoutSignType } from './symbol'\n\nexport default defineComponent({\n  name: 'LayoutHeader',\n  props: layoutHeaderProps,\n  emits: ['update:sign-type', 'update:color', 'update:user-dropped', 'update:dark-mode'],\n  setup(_props, { slots, emit, expose }) {\n    const props = useProps('layoutHeader', _props, {\n      locale: null,\n      tag: 'header',\n      logo: '',\n      signName: '',\n      user: {\n        default: () => ({ name: '' }),\n        static: true\n      },\n      userDropped: false,\n      avatarCircle: false,\n      config: () => ['nav', 'theme', 'color'] as LayoutConfig[],\n      actions: () => [],\n      signType: 'aside',\n      colors: () => ['#339af0', '#f03e3e', '#be4bdb', '#7950f2', '#1b9e44', '#f76707'],\n      color: '',\n      menus: {\n        default: () => [],\n        static: true\n      },\n      menuProps: null,\n      darkMode: null\n    })\n\n    const nh = useNameHelper('layout')\n    const icons = useIcons()\n    const locale = useLocale('layout', toRef(props, 'locale'))\n    const layoutState = useLayoutState()\n    const currentSignType = ref<LayoutSignType>(props.signType)\n    const currentUserDropped = ref(props.userDropped)\n\n    const menu = ref<MenuExposed>()\n\n    const { isRtl } = useRtl()\n    const { isMounted } = useMounted()\n\n    const rootEl = computed(() => {\n      // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n      isMounted.value\n      return isClient ? document.documentElement : null\n    })\n    const currentColor = ref(props.color || getBaseColor() || props.colors?.[0])\n    const isDark = ref(false)\n\n    const className = computed(() => {\n      return [\n        nh.be('header'),\n        {\n          [nh.bs('vars')]: !layoutState.isLayout,\n          [nh.bem('header', 'inherit')]: layoutState.isLayout || props.inherit,\n          [nh.bem('header', 'away')]: !layoutState.affixMatched,\n          [nh.bem('header', 'affixed')]: layoutState.affixed\n        },\n        layoutState.classes.header\n      ]\n    })\n    const userActions = computed(() => {\n      if (!props.actions?.length) {\n        return [\n          {\n            label: 'signOut',\n            name: locale.value.signOut,\n            icon: icons.value.signOut.icon,\n            iconProps: icons.value.signOut\n          }\n        ] as LayoutHeaderAction[]\n      }\n\n      return props.actions.filter(action => !action.hidden)\n    })\n    const hasLeft = computed(() => {\n      return !!(props.logo || props.signName || slots.left)\n    })\n    const hasMenu = computed(() => {\n      return !!(props.menus?.length || props.menuProps?.router)\n    })\n\n    const slotParams = shallowReadonly(\n      reactive({\n        expanded: toRef(layoutState, 'expanded'),\n        reduced: toRef(layoutState, 'reduced'),\n        toggleExpanded,\n        toggleReduced,\n        handleColorChange,\n        toggleUserDropped\n      })\n    )\n\n    expose({ menu, toggleExpanded, toggleReduced, expandMenuByLabel, toggleUserDropped })\n\n    watch(\n      () => props.signType,\n      value => {\n        currentSignType.value = value\n      }\n    )\n    watch(\n      () => props.userDropped,\n      value => {\n        currentUserDropped.value = value\n      }\n    )\n    watch(currentColor, computeSeriesColors)\n    watch(\n      () => props.darkMode,\n      value => {\n        isDark.value = value ?? rootEl.value?.classList.contains('dark') ?? false\n      },\n      { immediate: true }\n    )\n\n    onMounted(() => {\n      toggleTheme(isDark.value)\n    })\n\n    onBeforeMount(() => {\n      watch(\n        () => props.color,\n        value => {\n          currentColor.value = value || getBaseColor() || props.colors?.[0]\n        },\n        { immediate: true }\n      )\n\n      computeSeriesColors(currentColor.value)\n    })\n\n    function getBaseColor() {\n      if (rootEl.value) {\n        return getComputedStyle(rootEl.value).getPropertyValue('--vxp-color-primary-base')\n      }\n\n      return '#339af0'\n    }\n\n    function handleUserActionSelect(label: string, meta: Record<string, any>) {\n      emitEvent(props.onUserAction, label, meta)\n    }\n\n    function handleSignTypeChange(type: LayoutSignType) {\n      layoutState.changeInLock(() => {\n        currentSignType.value = type\n\n        emit('update:sign-type', type)\n        emitEvent(props.onNavChange, type)\n      })\n    }\n\n    function toggleExpanded(expanded = !layoutState.expanded) {\n      layoutState.expanded = expanded\n\n      emitEvent(props.onExpandedChange, expanded)\n    }\n\n    function toggleReduced(reduced = !layoutState.reduced) {\n      layoutState.reduced = reduced\n\n      emitEvent(props.onReducedChange, reduced)\n    }\n\n    function handleColorChange(color: string) {\n      currentColor.value = color\n\n      emit('update:color', color)\n      emitEvent(props.onColorChange, color)\n    }\n\n    function handleSignClick(event: MouseEvent) {\n      emitEvent(props.onSignClick, event)\n    }\n\n    function toggleUserDropped(dropped = !currentUserDropped.value) {\n      currentUserDropped.value = dropped\n\n      emit('update:user-dropped', dropped)\n      emitEvent(props.onDroppedChange, dropped)\n    }\n\n    function handleMenuSelect(label: string, meta: Record<string, any>) {\n      toggleUserDropped(false)\n      emitEvent(props.onMenuSelect, label, meta)\n    }\n\n    function expandMenuByLabel(label: string) {\n      menu.value?.expandItemByLabel(label)\n    }\n\n    function toggleTheme(darkMode: boolean) {\n      isDark.value = darkMode\n\n      emit('update:dark-mode', darkMode)\n      emitEvent(props.onToggleTheme, darkMode)\n\n      if (!isClient) return\n\n      requestAnimationFrame(() => {\n        if (rootEl.value) {\n          if (darkMode) {\n            rootEl.value.classList.add('dark')\n          } else {\n            rootEl.value.classList.remove('dark')\n          }\n        }\n      })\n    }\n\n    function renderCheck() {\n      return <Icon {...icons.value.check}></Icon>\n    }\n\n    function renderLayoutConfig() {\n      return (\n        <div class={nh.be('config-unit')}>\n          <div\n            class={[nh.be('brief-block'), nh.bem('brief-block', 'aside')]}\n            onClick={() => handleSignTypeChange('aside')}\n          >\n            {currentSignType.value === 'aside' && renderCheck()}\n          </div>\n          <div class={nh.be('brief-block')} onClick={() => handleSignTypeChange('header')}>\n            {currentSignType.value === 'header' && renderCheck()}\n          </div>\n        </div>\n      )\n    }\n\n    function renderThemeConfig() {\n      return (\n        <div class={nh.be('config-unit')}>\n          <Switch\n            value={isDark.value}\n            class={[nh.be('theme-mode'), isDark.value && nh.bem('theme-mode', 'dark')]}\n            aria-label={'theme'}\n            onChange={toggleTheme}\n          >\n            {{\n              icon: () =>\n                isDark.value ? (\n                  <Icon {...icons.value.dark}></Icon>\n                ) : (\n                  <Icon {...icons.value.light}></Icon>\n                )\n            }}\n          </Switch>\n        </div>\n      )\n    }\n\n    function renderColorConfig() {\n      if (!props.colors?.length) {\n        return null\n      }\n\n      return (\n        <div class={nh.be('config-unit')}>\n          {props.colors.map(color => (\n            <div\n              key={color}\n              class={nh.be('major-color')}\n              style={{\n                backgroundColor: color\n              }}\n              onClick={() => handleColorChange(color)}\n            >\n              {currentColor.value === color && renderCheck()}\n            </div>\n          ))}\n        </div>\n      )\n    }\n\n    function renderUserAvatar() {\n      if (slots.avatar) {\n        return renderSlot(slots, 'avatar', slotParams)\n      }\n\n      if (typeof props.user?.avatar === 'string') {\n        return (\n          <Avatar\n            src={props.user.avatar}\n            circle={props.avatarCircle}\n            onClick={() => toggleUserDropped()}\n          >\n            {{\n              icon: () => <Icon {...icons.value.user}></Icon>\n            }}\n          </Avatar>\n        )\n      }\n\n      return (\n        <Avatar circle={props.avatarCircle} onClick={() => toggleUserDropped()}>\n          {{\n            icon: () => (\n              <Icon {...icons.value.user} icon={props.user.avatar || icons.value.user.icon}></Icon>\n            )\n          }}\n        </Avatar>\n      )\n    }\n\n    function renderUserDrop() {\n      return (\n        <DropdownList>\n          {props.user?.name && (\n            <li class={nh.be('user-profile')}>\n              <span class={nh.be('user-name')}>{props.user.name}</span>\n              {props.user.email && <span class={nh.be('user-email')}>{props.user.email}</span>}\n            </li>\n          )}\n          {props.config?.length ? renderConfigs() : null}\n          {userActions.value.map(action => (\n            <DropdownItem\n              key={action.label}\n              class={nh.be('user-action')}\n              label={action.label}\n              disabled={action.disabled}\n              divided={action.divided}\n              onSelect={() => handleUserActionSelect(action.label, action.meta || {})}\n            >\n              {action.icon && (\n                <Icon\n                  {...action.iconProps}\n                  icon={action.icon}\n                  style={{ marginRight: '6px' }}\n                ></Icon>\n              )}\n              {action.name || action.label}\n            </DropdownItem>\n          ))}\n        </DropdownList>\n      )\n    }\n\n    function renderConfigs() {\n      return (\n        <li class={nh.be('config')}>\n          {props.config.includes('nav') &&\n            layoutState.navConfig && [\n              <div key={1} class={nh.be('config-label')}>\n                {locale.value.signType}\n              </div>,\n              renderLayoutConfig()\n          ]}\n          {props.config.includes('theme') && [\n            <div key={2} class={nh.be('config-label')}>\n              {locale.value.themeMode}\n            </div>,\n            renderThemeConfig()\n          ]}\n          {props.config.includes('color') && [\n            <div key={3} class={nh.be('config-label')}>\n              {locale.value.majorColor}\n            </div>,\n            renderColorConfig()\n          ]}\n        </li>\n      )\n    }\n\n    return () => {\n      const CustomTag = (props.tag || 'header') as any\n\n      return (\n        <CustomTag class={className.value}>\n          {hasLeft.value && (\n            <div class={[nh.be('header-left'), layoutState.classes.headerLeft]}>\n              {slots.left ? (\n                renderSlot(slots, 'left', slotParams)\n              ) : props.signType === 'header' ? (\n                <div class={nh.be('sign')} onClick={handleSignClick}>\n                  {props.logo && (\n                    <div class={nh.be('logo')}>\n                      <img src={props.logo} alt={'Logo'} />\n                    </div>\n                  )}\n                  {props.signName && <span class={nh.be('sign-name')}>{props.signName}</span>}\n                </div>\n              ) : null}\n            </div>\n          )}\n          <div class={[nh.be('header-main'), layoutState.classes.headerMain]}>\n            {slots.default ? (\n              renderSlot(slots, 'default', slotParams)\n            ) : hasMenu.value ? (\n              <Menu\n                ref={menu}\n                {...(props.menuProps || {})}\n                horizontal\n                transfer\n                options={props.menus}\n                onSelect={handleMenuSelect}\n              ></Menu>\n            ) : null}\n          </div>\n          {slots.right && (\n            <div class={[nh.be('header-right'), layoutState.classes.headerRight]}>\n              {renderSlot(slots, 'right', slotParams)}\n            </div>\n          )}\n          {slots.user ? (\n            renderSlot(slots, 'user', slotParams)\n          ) : (\n            <Dropdown\n              class={[nh.be('user'), layoutState.classes.headerUser]}\n              transfer\n              placement={isRtl.value ? 'bottom-start' : 'bottom-end'}\n              visible={currentUserDropped.value}\n              trigger={'custom'}\n              onClickOutside={() => toggleUserDropped(false)}\n            >\n              {{\n                default: renderUserAvatar,\n                drop: renderUserDrop\n              }}\n            </Dropdown>\n          )}\n        </CustomTag>\n      )\n    }\n  }\n})\n","import { booleanProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { LinkerType } from './symbol'\n\nexport const linkerProps = buildProps({\n  to: String,\n  type: String as PropType<LinkerType>,\n  icon: iconProp,\n  underline: booleanProp,\n  disabled: booleanProp,\n  target: String,\n  onClick: eventProp<(event: MouseEvent) => void>()\n})\n\nexport type LinkerProps = ExtractPropTypes<typeof linkerProps>\nexport type LinkerCProps = ConfigurableProps<LinkerProps, 'to'>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\n\nimport { computed } from 'vue'\n\nimport { createIconProp, emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { linkerProps } from './props'\n\nimport type { LinkerType } from './symbol'\n\nconst linkerTypes = Object.freeze<LinkerType[]>([\n  'default',\n  'primary',\n  'success',\n  'error',\n  'warning',\n  'info'\n])\n\ndefineOptions({ name: 'Linker' })\n\nconst _props = defineProps(linkerProps)\nconst props = useProps('linker', _props, {\n  to: {\n    default: null,\n    static: true\n  },\n  type: {\n    default: 'default' as LinkerType,\n    validator: (value: LinkerType) => linkerTypes.includes(value)\n  },\n  icon: createIconProp(),\n  underline: false,\n  disabled: false,\n  target: '_blank'\n})\n\nconst nh = useNameHelper('linker')\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm(props.type)]: props.type !== 'default',\n    [nh.bm('disabled')]: props.disabled,\n    [nh.bm('underline')]: props.underline\n  }\n})\n\nfunction handleClick(event: MouseEvent) {\n  if (props.disabled) {\n    event.preventDefault()\n  }\n\n  emitEvent(props.onClick, event)\n}\n</script>\n\n<template>\n  <a\n    :class=\"className\"\n    :href=\"props.to\"\n    tabindex=\"0\"\n    :target=\"props.target\"\n    @click=\"handleClick\"\n  >\n    <slot name=\"icon\">\n      <Icon v-if=\"props.icon\" :class=\"nh.be('icon')\" :icon=\"props.icon\"></Icon>\n    </slot>\n    <slot></slot>\n  </a>\n</template>\n","import { Icon } from '@/components/icon'\nimport { Linker } from '@/components/linker'\n\nimport { computed, defineComponent, renderSlot, toRef } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { layoutFooterProps } from './props'\nimport { useLayoutState, useMediaQuery } from './helper'\n\nexport default defineComponent({\n  name: 'LayoutFooter',\n  props: layoutFooterProps,\n  setup(_props, { slots }) {\n    const props = useProps('layoutFooter', _props, {\n      tag: 'footer',\n      copyright: '',\n      links: () => [],\n      verticalLinks: 'md'\n    })\n\n    const nh = useNameHelper('layout')\n    const layoutState = useLayoutState()\n    const horizontalMatched = useMediaQuery(toRef(props, 'verticalLinks'))\n\n    const className = computed(() => {\n      return [\n        nh.be('footer'),\n        {\n          [nh.bs('vars')]: !layoutState.isLayout,\n          [nh.bem('footer', 'inherit')]: layoutState.isLayout || props.inherit\n        },\n        layoutState.classes.footer\n      ]\n    })\n\n    function renderLinks() {\n      if (!props.links?.length) {\n        return <div role={'none'} aria-hidden style={'display: none'}></div>\n      }\n\n      return (\n        <div\n          class={[\n            nh.be('links'),\n            !horizontalMatched.value && nh.bem('links', 'vertical'),\n            layoutState.classes.footerLinks\n          ]}\n        >\n          <div class={nh.be('links-row')}>\n            {props.links.map((group, index) => (\n              <div\n                key={index}\n                class={[\n                  nh.be('link-group'),\n                  !horizontalMatched.value && nh.bem('link-group', 'vertical')\n                ]}\n              >\n                <div class={[nh.be('link-name'), nh.bem('link-name', 'group')]}>\n                  {group.to ? (\n                    <Linker icon={group.icon} to={group.to} target={group.target}>\n                      {group.name}\n                    </Linker>\n                  ) : (\n                    [group.icon && <Icon icon={group.icon}></Icon>, group.name]\n                  )}\n                  {group.subname && <div class={nh.be('link-subname')}>{`- ${group.subname}`}</div>}\n                </div>\n                {group.children?.length\n                  ? group.children.map((link, index) => (\n                    <div key={index} class={nh.be('link')}>\n                      <Linker icon={link.icon} to={link.to} target={link.target}>\n                        {link.name}\n                      </Linker>\n                      {link.subname && (\n                        <div class={nh.be('link-subname')}>{`- ${link.subname}`}</div>\n                      )}\n                    </div>\n                  ))\n                  : null}\n              </div>\n            ))}\n          </div>\n        </div>\n      )\n    }\n\n    return () => {\n      const CustomTag = (props.tag || 'footer') as any\n\n      return (\n        <CustomTag class={className.value}>\n          {slots.links ? renderSlot(slots, 'links') : renderLinks()}\n          <div class={[nh.be('copyright'), layoutState.classes.copyright]}>\n            {slots.copyright ? slots.copyright() : props.copyright}\n          </div>\n        </CustomTag>\n      )\n    }\n  }\n})\n","import { Icon } from '@/components/icon'\nimport { Menu } from '@/components/menu'\nimport { NativeScroll } from '@/components/native-scroll'\n\nimport {\n  computed,\n  defineComponent,\n  reactive,\n  ref,\n  renderSlot,\n  shallowReadonly,\n  toRef,\n  watch\n} from 'vue'\n\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { layoutAsideProps } from './props'\nimport { useLayoutState, useMediaQuery, useUpdateCounter } from './helper'\n\nimport type { MenuExposed } from '@/components/menu'\n\nexport default defineComponent({\n  name: 'LayoutAside',\n  props: layoutAsideProps,\n  emits: ['update:reduced', 'update:expanded'],\n  setup(_props, { slots, emit, expose }) {\n    const props = useProps('layoutAside', _props, {\n      tag: 'aside',\n      expanded: false,\n      reduced: false,\n      menus: {\n        default: () => [],\n        static: true\n      },\n      menuProps: null,\n      logo: '',\n      signName: '',\n      fixed: 'lg',\n      signType: 'aside'\n    })\n\n    const nh = useNameHelper('layout')\n    const icons = useIcons()\n\n    const layoutState = useLayoutState()\n    const currentReduced = ref(props.reduced)\n    const currentExpanded = ref(props.expanded)\n    const scrollHeight = ref('100%')\n\n    const matched = useMediaQuery(toRef(props, 'fixed'))\n    const counter = useUpdateCounter()\n\n    const top = ref<HTMLElement>()\n    const bottom = ref<HTMLElement>()\n    const menu = ref<MenuExposed>()\n\n    const className = computed(() => {\n      return [\n        nh.be('aside'),\n        {\n          [nh.bs('vars')]: !layoutState.isLayout,\n          [nh.bem('aside', 'inherit')]: layoutState.isLayout || props.inherit,\n          [nh.bem('aside', 'fixed')]: matched.value,\n          [nh.bem('aside', 'expanded')]: currentExpanded.value,\n          [nh.bem('aside', 'reduced')]: currentReduced.value,\n          [nh.bem('aside', 'no-sign')]: props.signType !== 'aside'\n        },\n        layoutState.classes.aside\n      ]\n    })\n    const hasTop = computed(() => {\n      return !!(props.logo || props.signName || slots.top)\n    })\n    const hasMenu = computed(() => {\n      return !!(props.menus?.length || props.menuProps?.router)\n    })\n\n    const slotParams = shallowReadonly(\n      reactive({\n        expanded: currentExpanded,\n        reduced: currentReduced,\n        toggleExpanded,\n        toggleReduced\n      })\n    )\n\n    expose({ menu, toggleExpanded, toggleReduced, expandMenuByLabel })\n\n    watch(\n      () => props.reduced,\n      value => {\n        currentReduced.value = value\n      }\n    )\n    watch(\n      () => props.expanded,\n      value => {\n        currentExpanded.value = value\n      }\n    )\n    watch(\n      matched,\n      value => {\n        layoutState.useExpand = !value\n        value && toggleExpanded(false)\n      },\n      { immediate: true }\n    )\n    watch(counter, () => computeScrollHeight)\n\n    function computeScrollHeight() {\n      let topHeight = 0\n      let bottomHeight = 0\n\n      if (top.value) {\n        topHeight = top.value.offsetHeight\n      }\n\n      if (bottom.value) {\n        bottomHeight = bottom.value.offsetHeight\n      }\n\n      if (topHeight || bottomHeight) {\n        scrollHeight.value = `calc(100% - ${topHeight + bottomHeight}px)`\n      } else {\n        scrollHeight.value = '100%'\n      }\n    }\n\n    function toggleExpanded(expanded = !currentExpanded.value) {\n      currentExpanded.value = expanded\n\n      emit('update:expanded', expanded)\n      emitEvent(props.onExpandedChange, expanded)\n    }\n\n    function toggleReduced(reduced = !currentReduced.value) {\n      currentReduced.value = reduced\n\n      emit('update:reduced', reduced)\n      emitEvent(props.onReducedChange, reduced)\n    }\n\n    function handleSignClick(event: MouseEvent) {\n      emitEvent(props.onSignClick, event)\n    }\n\n    function handleMenuSelect(label: string, meta: Record<string, any>) {\n      emitEvent(props.onMenuSelect, label, meta)\n    }\n\n    function expandMenuByLabel(label: string) {\n      menu.value?.expandItemByLabel(label)\n    }\n\n    return () => {\n      const CustomTag = (props.tag || 'aside') as any\n\n      return (\n        <CustomTag class={className.value}>\n          {hasTop.value && (\n            <div ref={top} class={[nh.be('aside-top'), layoutState.classes.asideTop]}>\n              {slots.top ? (\n                renderSlot(slots, 'top', slotParams)\n              ) : (\n                <div class={nh.be('sign')} onClick={handleSignClick}>\n                  {props.logo && (\n                    <div class={nh.be('logo')}>\n                      <img src={props.logo} alt={'Logo'} />\n                    </div>\n                  )}\n                  {props.signName && <span class={nh.be('sign-name')}>{props.signName}</span>}\n                </div>\n              )}\n            </div>\n          )}\n          <NativeScroll\n            class={[nh.be('aside-main'), layoutState.classes.main]}\n            use-y-bar\n            observe-deep\n            height={scrollHeight.value}\n          >\n            {slots.default ? (\n              renderSlot(slots, 'default', slotParams)\n            ) : hasMenu.value ? (\n              <Menu\n                ref={menu}\n                {...(props.menuProps || {})}\n                transfer\n                options={props.menus}\n                reduced={currentReduced.value}\n                onSelect={handleMenuSelect}\n              ></Menu>\n            ) : null}\n          </NativeScroll>\n          <div ref={bottom} class={[nh.be('aside-bottom'), layoutState.classes.asideBottom]}>\n            {slots.bottom ? (\n              renderSlot(slots, 'bottom', slotParams)\n            ) : (\n              <div class={nh.be('reduce-handler')} onClick={() => toggleReduced()}>\n                {currentReduced.value ? (\n                  <Icon {...icons.value.indent}></Icon>\n                ) : (\n                  <Icon {...icons.value.outdent}></Icon>\n                )}\n              </div>\n            )}\n          </div>\n          <div\n            class={[nh.be('expand-handler'), layoutState.classes.expandHandler]}\n            onClick={() => toggleExpanded()}\n          >\n            {slots.expand ? (\n              renderSlot(slots, 'expand', slotParams)\n            ) : (\n              <Icon {...icons.value.angleRight}></Icon>\n            )}\n          </div>\n        </CustomTag>\n      )\n    }\n  }\n})\n","import { Masker } from '@/components/masker'\nimport { NativeScroll } from '@/components/native-scroll'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport {\n  computed,\n  defineComponent,\n  provide,\n  reactive,\n  ref,\n  renderSlot,\n  shallowReadonly,\n  toRef,\n  watch\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\nimport { createSlotRender, useMounted } from '@vexip-ui/hooks'\nimport { getYBorder, isClient, runQueueFrame } from '@vexip-ui/utils'\nimport LayoutMain from './layout-main'\nimport LayoutHeader from './layout-header'\nimport LayoutFooter from './layout-footer'\nimport LayoutAside from './layout-aside'\nimport { layoutProps } from './props'\nimport { useMediaQuery } from './helper'\nimport { LAYOUT_STATE } from './symbol'\n\nimport type { NativeScrollExposed } from '@/components/native-scroll'\nimport type {\n  LayoutAsideExposed,\n  LayoutConfig,\n  LayoutHeaderExposed,\n  LayoutSignType\n} from './symbol'\n\nexport default defineComponent({\n  name: 'Layout',\n  props: layoutProps,\n  emits: [\n    'update:expanded',\n    'update:reduced',\n    'update:sign-type',\n    'update:color',\n    'update:dark-mode'\n  ],\n  setup(_props, { slots, emit, expose }) {\n    const props = useProps('layout', _props, {\n      locale: null,\n      noAside: false,\n      footer: false,\n      tag: 'section',\n      menus: {\n        default: () => [],\n        static: true\n      },\n      menuProps: null,\n      logo: '',\n      signName: '',\n      config: () => ['nav', 'theme', 'color'] as LayoutConfig[],\n      user: null,\n      actions: () => [],\n      expanded: false,\n      reduced: false,\n      avatarCircle: false,\n      signType: 'aside',\n      headerFixed: 'lg',\n      asideFixed: 'lg',\n      copyright: '',\n      links: () => [],\n      colors: () => ['#339af0', '#f03e3e', '#be4bdb', '#7950f2', '#1b9e44', '#f76707'],\n      color: '',\n      miniHeaderSign: 'lg',\n      verticalLinks: 'md',\n      darkMode: null,\n      fixedMain: false,\n      fitWindow: false,\n      innerClasses: () => ({}),\n      noHeader: false,\n      noMasker: false\n    })\n\n    const nh = useNameHelper('layout')\n    const locked = ref(false)\n    // const asideActive = ref(!props.noAside)\n    const asideExpanded = ref(props.expanded)\n    const asideReduced = ref(props.reduced)\n    const currentSignType = ref<LayoutSignType>(props.signType)\n    const userDropped = ref(false)\n    const currentColor = ref(props.color)\n\n    const { isMounted } = useMounted('frame')\n\n    const section = ref<HTMLElement>()\n    const scroll = ref<NativeScrollExposed>()\n    const header = ref<LayoutHeaderExposed>()\n    const aside = ref<LayoutAsideExposed>()\n\n    const affixMatched = useMediaQuery(toRef(props, 'headerFixed'))\n    const expandMatched = useMediaQuery(toRef(props, 'asideFixed'))\n    const signNameMatched = useMediaQuery(toRef(props, 'miniHeaderSign'))\n\n    const state = reactive({\n      isLayout: true,\n      locked: computed(() => locked.value),\n      affixed: false,\n      scrollY: 0,\n      affixMatched,\n      expandMatched,\n      useExpand: false,\n      expanded: asideExpanded,\n      reduced: asideReduced,\n      navConfig: computed(() => !props.noAside),\n      classes: toRef(props, 'innerClasses'),\n      changeInLock\n    })\n\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        {\n          [nh.bm('inherit')]: props.inherit,\n          [nh.bm('no-aside')]: props.noAside,\n          [nh.bm('no-header')]: props.noHeader,\n          [nh.bm('header-main')]: currentSignType.value === 'header',\n          [nh.bm('locked')]: !isMounted.value || locked.value,\n          [nh.bm('fit-window')]: props.fitWindow\n        }\n      ]\n    })\n    const rootEl = computed(() => {\n      return isClient && isMounted.value ? document.documentElement : null\n    })\n    const signInHeader = computed(() => {\n      return props.noAside || currentSignType.value === 'header' || state.useExpand\n    })\n    const menu = computed(() => aside.value?.menu || header.value?.menu)\n    const isDark = ref(props.darkMode)\n    const viewHeight = ref('100%')\n\n    const style = computed(() => {\n      return {\n        [nh.cv('view-height')]: props.fitWindow ? '100vh' : viewHeight.value\n      }\n    })\n\n    const getIndex = useZIndex()\n    const zIndex = ref(asideExpanded.value ? getIndex() : 0)\n\n    const slotParams = shallowReadonly(\n      reactive({\n        expanded: asideExpanded,\n        reduced: asideReduced,\n        toggleExpanded,\n        toggleReduced\n      })\n    )\n\n    provide(LAYOUT_STATE, state)\n\n    expose({ scroll, menu, toggleExpanded, toggleReduced, expandMenuByLabel })\n\n    watch(affixMatched, value => {\n      state.affixed = !value && state.scrollY >= 50\n    })\n    watch(\n      () => props.expanded,\n      value => {\n        asideExpanded.value = value\n      }\n    )\n    watch(asideExpanded, value => {\n      if (state.useExpand && value) {\n        zIndex.value = getIndex()\n      }\n    })\n    watch(\n      () => props.reduced,\n      value => {\n        asideReduced.value = value\n      }\n    )\n    // watch(\n    //   () => props.noAside,\n    //   value => {\n    //     changeInLock(() => (asideActive.value = value))\n    //   }\n    // )\n    watch(currentSignType, value => {\n      emit('update:sign-type', value)\n      emitEvent(props.onNavChange, value)\n    })\n    watch(\n      () => props.color,\n      value => {\n        currentColor.value = value || props.colors?.[0] || getBaseColor()\n      }\n    )\n    watch(currentColor, value => {\n      emit('update:color', value)\n      emitEvent(props.onColorChange, value)\n    })\n    watch(\n      () => props.darkMode,\n      value => {\n        isDark.value = value\n      }\n    )\n\n    function getBaseColor() {\n      if (rootEl.value) {\n        return getComputedStyle(rootEl.value).getPropertyValue('--vxp-color-primary-base')\n      }\n\n      return '#339af0'\n    }\n\n    function toggleExpanded(expanded = !asideReduced.value) {\n      asideExpanded.value = expanded\n\n      emit('update:expanded', expanded)\n      emitEvent(props.onExpandedChange, expanded)\n    }\n\n    function toggleReduced(reduced = !asideReduced.value) {\n      asideReduced.value = reduced\n\n      emit('update:reduced', reduced)\n      emitEvent(props.onReducedChange, reduced)\n    }\n\n    function handleSignClick(event: MouseEvent) {\n      emitEvent(props.onSignClick, event)\n    }\n\n    function handleMenuSelect(label: string, meta: Record<string, any>) {\n      emitEvent(props.onMenuSelect, label, meta)\n    }\n\n    function handleToggleTheme(isDark: boolean) {\n      emit('update:dark-mode', isDark)\n      emitEvent(props.onToggleTheme, isDark)\n    }\n\n    function handleUserAction(label: string, meta: Record<string, any>) {\n      emitEvent(props.onUserAction, label, meta)\n    }\n\n    function expandMenuByLabel(label: string) {\n      menu.value?.expandItemByLabel(label)\n    }\n\n    function handleResize() {\n      if (scroll.value?.$el) {\n        viewHeight.value = `${scroll.value.$el.offsetHeight - getYBorder(scroll.value.$el)}px`\n      }\n\n      emitEvent(props.onContentResize)\n    }\n\n    let cancelChange: (() => void) | undefined\n\n    function changeInLock(doChange: () => void) {\n      cancelChange?.()\n      cancelChange = runQueueFrame([\n        () => (locked.value = true),\n        doChange,\n        () => (locked.value = false)\n      ])\n    }\n\n    function stopAndPrevent(event: Event) {\n      event.stopPropagation()\n      event.preventDefault()\n    }\n\n    function renderSign() {\n      if (!props.logo && !props.signName && !slots.sign) {\n        return null\n      }\n\n      if (slots.sign) {\n        return renderSlot(slots, 'sign', slotParams)\n      }\n\n      const showSignName = props.signName && !(signInHeader.value && !signNameMatched.value)\n\n      return (\n        <div\n          class={[nh.be('sign'), !showSignName && nh.bem('sign', 'logo-only')]}\n          onClick={handleSignClick}\n        >\n          {[\n            props.logo && (\n              <div class={nh.be('logo')}>\n                <img src={props.logo} alt={'Logo'} />\n              </div>\n            ),\n            showSignName && <span class={nh.be('sign-name')}>{props.signName}</span>\n          ]}\n        </div>\n      )\n    }\n\n    function renderHeader() {\n      if (props.noHeader) {\n        return <header role={'none'} aria-hidden style={'display: none'}></header>\n      }\n\n      if (slots.header) {\n        return renderSlot(slots, 'header', slotParams)\n      }\n\n      return (\n        <LayoutHeader\n          ref={header}\n          v-model:sign-type={currentSignType.value}\n          v-model:user-dropped={userDropped.value}\n          v-model:color={currentColor.value}\n          v-model:dark-mode={isDark.value}\n          inherit\n          locale={props.locale}\n          user={props.user}\n          actions={props.actions}\n          config={props.config}\n          avatar-circle={props.avatarCircle}\n          menus={props.noAside ? props.menus : []}\n          menu-props={props.noAside ? props.menuProps : null}\n          colors={props.colors}\n          onUserAction={handleUserAction}\n          onExpandedChange={toggleExpanded}\n          onReducedChange={toggleReduced}\n          onMenuSelect={handleMenuSelect}\n          onToggleTheme={handleToggleTheme}\n          {...{\n            onWheel: stopAndPrevent,\n            onMousemove: stopAndPrevent\n          }}\n        >\n          {{\n            left: createSlotRender(slots, ['header-left', 'headerLeft'], () =>\n              signInHeader.value ? renderSign() : null\n            ),\n            default: createSlotRender(slots, ['header-main', 'headerMain']),\n            right: createSlotRender(slots, ['header-right', 'headerRight']),\n            user: createSlotRender(slots, ['header-user', 'headerUser']),\n            avatar: createSlotRender(slots, ['header-avatar', 'headerAvatar'])\n          }}\n        </LayoutHeader>\n      )\n    }\n\n    function renderAside() {\n      if (props.noAside) {\n        return <div role={'none'} aria-hidden style={'display: none'}></div>\n      }\n\n      return (\n        <div\n          class={[\n            nh.be('sidebar'),\n            !expandMatched.value && nh.bem('sidebar', 'away'),\n            props.innerClasses.sidebar\n          ]}\n          style={{ zIndex: state.useExpand ? zIndex.value + 1 : undefined }}\n          onWheel={stopAndPrevent}\n          onMousemove={stopAndPrevent}\n        >\n          {slots.aside ? (\n            renderSlot(slots, 'aside', slotParams)\n          ) : (\n            <LayoutAside\n              ref={aside}\n              v-model:expanded={asideExpanded.value}\n              v-model:reduced={asideReduced.value}\n              inherit\n              sign-type={currentSignType.value}\n              menus={props.menus}\n              menu-props={props.menuProps}\n              fixed={props.asideFixed}\n              onExpandedChange={toggleExpanded}\n              onReducedChange={toggleReduced}\n              onMenuSelect={handleMenuSelect}\n            >\n              {{\n                top: createSlotRender(slots, ['aside-top', 'asideTop'], () =>\n                  !signInHeader.value ? renderSign() : null\n                ),\n                default: createSlotRender(slots, ['aside-main', 'asideMain']),\n                bottom: createSlotRender(slots, ['aside-bottom', 'asideBottom']),\n                expand: createSlotRender(slots, ['aside-expand', 'asideExpand'])\n              }}\n            </LayoutAside>\n          )}\n        </div>\n      )\n    }\n\n    function renderMain() {\n      if (slots.default) {\n        return renderSlot(slots, 'default', slotParams)\n      }\n\n      return (\n        <LayoutMain fixed={props.fixedMain}>\n          {{\n            default: createSlotRender(slots, ['main'])\n          }}\n        </LayoutMain>\n      )\n    }\n\n    function renderFooter() {\n      if (slots.footer) {\n        return renderSlot(slots, 'footer', slotParams)\n      }\n\n      return (\n        <LayoutFooter\n          inherit\n          copyright={props.copyright}\n          links={props.links}\n          vertical-links={props.verticalLinks}\n        >\n          {{\n            links: createSlotRender(slots, ['footer-links', 'footerLinks']),\n            copyright: createSlotRender(slots, ['footer-copyright', 'footerCopyright'])\n          }}\n        </LayoutFooter>\n      )\n    }\n\n    function renderMasker() {\n      if (props.noMasker || !state.useExpand) return null\n\n      if (slots.masker) {\n        return renderSlot(slots, 'masker', slotParams)\n      }\n\n      return (\n        <Masker\n          v-model:active={asideExpanded.value}\n          class={nh.be('masker')}\n          inner\n          closable\n          auto-remove\n          transfer={false}\n          style={{ zIndex: zIndex.value }}\n          onToggle={toggleExpanded}\n        ></Masker>\n      )\n    }\n\n    function renderWrapper() {\n      const CustomTag = (props.tag || 'section') as any\n\n      return (\n        <CustomTag\n          class={[\n            nh.be('wrapper'),\n            props.fixedMain && nh.bem('wrapper', 'fixed'),\n            props.innerClasses.wrapper\n          ]}\n        >\n          {currentSignType.value === 'header' && renderHeader()}\n          {renderAside()}\n          <section\n            ref={section}\n            class={[\n              nh.be('section'),\n              {\n                [nh.bem('section', 'away')]: expandMatched.value,\n                [nh.bem('section', 'reduced')]: asideReduced.value,\n                [nh.bem('section', 'locked')]: locked.value,\n                [nh.bem('section', 'fixed')]: props.fixedMain\n              },\n              props.innerClasses.section\n            ]}\n          >\n            {currentSignType.value === 'aside' && renderHeader()}\n            {renderMain()}\n            {props.footer && renderFooter()}\n          </section>\n          {renderMasker()}\n        </CustomTag>\n      )\n    }\n\n    return () => {\n      if (props.fitWindow) {\n        return (\n          <section class={className.value} style={style.value}>\n            <ResizeObserver throttle onResize={handleResize}>\n              {renderWrapper()}\n            </ResizeObserver>\n          </section>\n        )\n      }\n\n      return (\n        <NativeScroll\n          ref={scroll}\n          class={className.value}\n          inherit={props.inherit}\n          use-y-bar\n          observe-deep\n          bar-class={[nh.be('scrollbar'), props.innerClasses.scrollbar]}\n          style={style.value}\n          onResize={handleResize}\n        >\n          {renderWrapper()}\n        </NativeScroll>\n      )\n    }\n  }\n})\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useRtl } from '@vexip-ui/hooks'\nimport { boundRange } from '@vexip-ui/utils'\n\nimport type { LoadingOptions, LoadingPosition, LoadingState } from './symbol'\n\ndefineOptions({ name: 'Loading' })\n\nconst nh = useNameHelper('loading')\nconst { isRtl } = useRtl()\nconst visible = ref(false)\nconst strokeWidth = ref(2)\nconst state = ref<LoadingState>('default')\nconst position = ref<LoadingPosition>('top')\nconst percent = ref(0)\n\nlet maxPercent = 95\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm(state.value)]: state.value !== 'default'\n  }\n})\n\nconst style = computed(() => {\n  return {\n    [position.value]: '0',\n    height: `${strokeWidth.value}px`\n  }\n})\n\nconst fillerStyle = computed(() => {\n  return {\n    transform: `translateX(${((isRtl.value ? -1 : 1) * (percent.value - 100)) / 2}%) scaleX(${\n      percent.value / 100\n    })`\n  }\n})\n\nlet timer: ReturnType<typeof setTimeout>\nlet interval: ReturnType<typeof setInterval>\nlet rafId: ReturnType<typeof requestAnimationFrame>\n\ndefineExpose({ visible, percent, startLoading })\n\nonBeforeUnmount(() => {\n  clearTimeout(timer)\n  clearInterval(interval)\n  cancelAnimationFrame(rafId)\n})\n\nfunction startLoading(options: LoadingOptions) {\n  if (percent.value === 100) {\n    clearTimeout(timer)\n\n    visible.value = false\n    percent.value = 0\n    state.value = 'default'\n    strokeWidth.value = 2\n    position.value = 'top'\n  }\n\n  clearInterval(interval)\n\n  const setLoading = () => {\n    percent.value = boundRange(options.percent, 0, 100)\n    state.value = options.state ?? state.value\n    strokeWidth.value = boundRange(options.strokeWidth ?? 2, 1, 10)\n    position.value = options.position ?? position.value\n    maxPercent = boundRange(options.maxPercent ?? 95, percent.value, 95)\n\n    if (percent.value === 100) {\n      timer = setTimeout(() => {\n        visible.value = false\n      }, 500)\n    } else {\n      interval = setInterval(() => {\n        percent.value += Math.floor(Math.random() * 3 + 1)\n\n        if (percent.value >= maxPercent) {\n          percent.value = maxPercent\n          clearInterval(interval)\n        }\n      }, 500)\n    }\n  }\n\n  maxPercent = 95\n\n  rafId = requestAnimationFrame(() => {\n    if (visible.value) {\n      setLoading()\n    } else {\n      visible.value = true\n      rafId = requestAnimationFrame(setLoading)\n    }\n  })\n}\n</script>\n\n<template>\n  <Transition :name=\"nh.ns('fade')\" appear>\n    <div\n      v-show=\"visible\"\n      :class=\"className\"\n      role=\"progressbar\"\n      :style=\"style\"\n      :aria-valuenow=\"percent\"\n      aria-valuemin=\"0\"\n      aria-valuemax=\"100\"\n    >\n      <div :class=\"nh.be('filler')\" :style=\"fillerStyle\"></div>\n    </div>\n  </Transition>\n</template>\n","import { createApp, createVNode, render } from 'vue'\n\nimport Component from './loading.vue'\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\nimport { destroyObject, isClient } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { MaybeInstance } from '@vexip-ui/hooks'\nimport type { LoadingInstance, LoadingOptions, LoadingState } from './symbol'\n\nexport type { LoadingState, LoadingOptions }\n\ntype InitLoadingOptions = Omit<LoadingOptions, 'percent'>\n\nexport class LoadingManager {\n  name: string\n  defaults: InitLoadingOptions\n\n  private _mountedApp: App<unknown> | null\n  private _instance: LoadingInstance | null\n  private _innerApp: App<unknown> | null\n  private _container: HTMLElement | null\n  private _wrapper: HTMLElement | SVGElement | null\n  private _mountedEl: HTMLElement | null\n\n  constructor(options: InitLoadingOptions = {}) {\n    this._mountedApp = null\n    this._instance = null\n    this._innerApp = null\n    this._container = null\n    this._wrapper = null\n    this._mountedEl = null\n    this.name = 'Loading'\n    this.defaults = {}\n\n    this.config(options)\n  }\n\n  open(percent: number): void\n  open(options: LoadingOptions): void\n  open(options: number | LoadingOptions) {\n    if (!isClient) return\n\n    if (typeof options === 'number') {\n      options = { percent: options }\n    }\n\n    this._getInstance()!.startLoading({ ...this.defaults, ...options })\n  }\n\n  close() {\n    this.open(100)\n  }\n\n  config(options: InitLoadingOptions) {\n    this.defaults = { ...this.defaults, ...options }\n  }\n\n  clone() {\n    const manager = new LoadingManager(this.defaults)\n\n    manager._mountedApp = this._mountedApp\n\n    return manager\n  }\n\n  destroy() {\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\n    this._innerApp?.unmount()\n    this._container && render(null, this._container)\n    destroyObject(this)\n  }\n\n  isDestroyed() {\n    return false\n  }\n\n  install(app: App, options: InitLoadingOptions & { property?: string } = {}) {\n    const { property, ...others } = options\n\n    this.config(others)\n    this._mountedApp = app\n\n    if (property || !app.config.globalProperties.$loading) {\n      app.config.globalProperties[property || '$loading'] = this\n    }\n  }\n\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\n    if (!isClient) return\n\n    const el = unrefElement(target)\n\n    if (el) {\n      this._wrapper = el\n\n      if (this._instance) {\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\n      } else {\n        this._getInstance()\n      }\n    }\n  }\n\n  private _getInstance() {\n    if (!this._instance && isClient) {\n      if (!this._mountedApp) {\n        console.warn('[vexip-ui:Loading]: App missing, the plugin maybe not installed.')\n\n        this._container = document.createElement('div')\n        this._innerApp = createApp(Component)\n        this._instance = this._innerApp.mount(this._container) as LoadingInstance\n      } else {\n        const vnode = createVNode(Component, null, null)\n\n        this._container = document.createElement('div')\n        vnode.appContext = this._mountedApp._context\n\n        render(vnode, this._container)\n\n        this._instance = proxyExposed<LoadingInstance>(vnode)\n      }\n\n      this._mountedEl = this._container.firstElementChild as HTMLElement\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\n    }\n\n    return this._instance\n  }\n}\n\nexport const Loading = new LoadingManager()\n","import type { InjectionKey } from 'vue'\n\nexport type Key = string | number\nexport type PopupPlacement =\n  | 'top-right'\n  | 'top-center'\n  | 'top-left'\n  | 'bottom-right'\n  | 'bottom-center'\n  | 'bottom-left'\n\nexport interface PopupItemState extends Record<string, unknown> {\n  key: Key,\n  content: string,\n  closable: boolean,\n  height: number,\n  visible: boolean,\n  verticalPosition: number,\n  type?: string,\n  className?: any,\n  style?: any,\n  icon?: Record<string, any> | (() => any),\n  iconColor?: string,\n  onOpen: (key: Key) => void,\n  onClose: (result: boolean) => void,\n  onEnter: () => void,\n  onLeave: () => void\n}\n\nexport const DELETE_HANDLER = '__VXP_POPUP_DELETE_HANDLER' as unknown as InjectionKey<\n  (key: Key) => void\n>\n\nexport const popupPlacements = Object.freeze<PopupPlacement[]>([\n  'top-right',\n  'top-center',\n  'top-left',\n  'bottom-right',\n  'bottom-center',\n  'bottom-left'\n])\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, inject, nextTick, onMounted, ref } from 'vue'\n\nimport { classProp, useNameHelper, useZIndex } from '@vexip-ui/config'\nimport { noop } from '@vexip-ui/utils'\nimport { DELETE_HANDLER } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { PopupItemState } from './symbol'\n\ndefineOptions({ name: 'PopupItem' })\n\nconst props = defineProps({\n  state: {\n    type: Object as PropType<PopupItemState>,\n    default: () => ({})\n  },\n  transitionName: {\n    type: String,\n    default: null\n  },\n  innerClass: {\n    type: classProp,\n    default: null\n  }\n})\n\nconst emit = defineEmits(['enter', 'leave'])\n\nconst handleDelete = inject(DELETE_HANDLER, noop)\nconst nh = useNameHelper('popup')\nconst getIndex = useZIndex()\n\nconst wrapper = ref<HTMLElement>()\n\nconst transition = computed(() => props.transitionName || nh.ns('popup-top'))\n\nonMounted(() => {\n  nextTick(() => {\n    const state = props.state\n\n    if (state && wrapper.value) {\n      state.height = wrapper.value.offsetHeight\n    }\n  })\n})\n</script>\n\n<template>\n  <Transition appear :name=\"transition\" @after-leave=\"handleDelete(state.key)\">\n    <div\n      v-show=\"state.visible\"\n      ref=\"wrapper\"\n      :class=\"nh.be('item')\"\n      :style=\"{ zIndex: getIndex() }\"\n      :vxp-index=\"state.key\"\n      @pointerenter=\"emit('enter')\"\n      @pointerleave=\"emit('leave')\"\n    >\n      <div :class=\"[nh.be('item-inner'), innerClass]\">\n        <slot :item=\"state\">\n          <Renderer\n            v-if=\"typeof state.renderer === 'function'\"\n            :renderer=\"state.renderer\"\n          ></Renderer>\n          <template v-else>\n            {{ state.content }}\n          </template>\n        </slot>\n      </div>\n    </div>\n  </Transition>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide, reactive, ref, watch } from 'vue'\n\nimport PopupItem from './popup-item.vue'\nimport { classProp, useNameHelper } from '@vexip-ui/config'\nimport { getGlobalCount, isFunction, noop } from '@vexip-ui/utils'\nimport { DELETE_HANDLER, popupPlacements } from './symbol'\n\nimport type { CSSProperties } from 'vue'\nimport type { Key, PopupItemState, PopupPlacement } from './symbol'\n\ntype QueueState =\n  | {\n    type: 'add',\n    param: Record<string, unknown>\n  }\n  | {\n    type: 'clear',\n    param: Key\n  }\n\ndefineOptions({ name: 'Popup' })\n\nconst props = defineProps({\n  transitionName: {\n    type: String,\n    default: null\n  },\n  innerClass: {\n    type: classProp,\n    default: null\n  },\n  startOffset: {\n    type: Number,\n    default: 30\n  },\n  placement: {\n    default: 'top-right' as PopupPlacement,\n    validator: (value: PopupPlacement) => popupPlacements.includes(value)\n  },\n  itemOffset: {\n    type: Number,\n    default: 16\n  },\n  itemType: {\n    type: Function\n  }\n})\n\ndefineSlots<{ item: (item: any) => any }>()\n\nconst nh = useNameHelper('popup')\nconst items = ref<PopupItemState[]>([])\nconst queue: QueueState[] = []\n\nconst wrapper = ref<HTMLElement>()\n\nlet pending = false\n\nconst placementArray = computed(() => {\n  return props.placement.split('-') as ['top' | 'bottom', 'right' | 'center' | 'left']\n})\nconst transition = computed(() => props.transitionName || nh.ns('popup-top'))\n\nwatch(\n  () => props.startOffset,\n  (value, prevValue) => {\n    items.value.forEach(item => {\n      item.verticalPosition += value - prevValue\n    })\n  }\n)\n\nprovide(DELETE_HANDLER, deleteItem)\n\ndefineExpose({\n  items,\n  wrapper,\n  add,\n  remove,\n  has,\n  find,\n  clear\n})\n\nfunction getItemStyle(item: PopupItemState) {\n  const [verticalStyle, horizontalStyle] = placementArray.value\n  const style: CSSProperties = { [verticalStyle]: `${item.verticalPosition}px` }\n\n  if (horizontalStyle === 'center') {\n    style.left = '50%'\n    style.transform = 'translateX(-50%)'\n  } else {\n    style[horizontalStyle] = '24px'\n  }\n\n  const zIndex = parseInt(item.zIndex as string)\n\n  if (!Number.isNaN(zIndex)) {\n    style.zIndex = zIndex\n  }\n\n  return style\n}\n\nfunction add(options: Record<string, any>) {\n  return new Promise<Key>(resolve => {\n    const onOpen = isFunction(options.onOpen) ? options.onOpen : noop\n\n    options.onOpen = (key: Key) => {\n      resolve(key)\n      onOpen()\n    }\n\n    queue.push({\n      type: 'add',\n      param: options\n    })\n\n    if (!pending) {\n      pending = true\n      queueOut()\n    }\n  })\n}\n\nfunction remove(key: Key) {\n  return new Promise<boolean>(resolve => {\n    const item = find(key)\n\n    if (!item) return resolve(false)\n\n    const onClose = isFunction(item.onClose) ? item.onClose : noop\n\n    item.onClose = (result: boolean) => {\n      resolve(result)\n      onClose(result)\n    }\n\n    queue.push({\n      type: 'clear',\n      param: key\n    })\n\n    if (!pending) {\n      pending = true\n      queueOut()\n    }\n  })\n}\n\nfunction queueOut() {\n  if (queue.length) {\n    const state = queue.shift()!\n\n    if (state.type === 'add') {\n      renderItem(state.param)\n    } else {\n      removeItem(state.param)\n    }\n\n    requestAnimationFrame(queueOut)\n  } else {\n    pending = false\n  }\n}\n\nfunction renderItem(options: Record<string, any>) {\n  let item = options.key ? find(options.key as Key) : null\n\n  if (!item?.visible) {\n    const index = getGlobalCount()\n    const key = (options.key as Key) ?? nh.bs(`${index}`)\n\n    let currentVertical = props.startOffset\n\n    items.value.forEach(existingItem => {\n      if (existingItem.visible) {\n        currentVertical += existingItem.height + props.itemOffset\n      }\n    })\n\n    item = reactive(\n      Object.assign(\n        {\n          key,\n          content: '',\n          closable: false,\n          onOpen: noop,\n          onClose: noop,\n          onEnter: noop,\n          onLeave: noop\n        },\n        options,\n        {\n          height: 0,\n          visible: true,\n          verticalPosition: currentVertical\n        }\n      )\n    )\n\n    items.value.push(item)\n  }\n\n  // 使用 options 上的回调以防止重复 key 时指向不正确\n  isFunction(options.onOpen) && options.onOpen(item.key)\n}\n\nfunction removeItem(key: Key) {\n  const index = items.value.findIndex(item => item.key === key)\n\n  if (~index) {\n    const item = items.value[index]\n    const removeHeight = item.height\n\n    item.visible = false\n\n    for (let i = index + 1, len = items.value.length; i < len; ++i) {\n      items.value[i].verticalPosition -= removeHeight + props.itemOffset\n    }\n\n    // 关闭回调\n    isFunction(item.onClose) && item.onClose(true)\n  }\n}\n\nfunction deleteItem(key: Key) {\n  const index = items.value.findIndex(item => item.key === key)\n\n  if (~index) {\n    items.value.splice(index, 1)\n  }\n}\n\nfunction has(key: Key) {\n  return !~items.value.findIndex(item => item.key === key)\n}\n\nfunction find(key: Key) {\n  return items.value.find(item => item.key === key)\n}\n\nfunction clear() {\n  queue.length = 0\n  items.value = []\n}\n\nfunction enterItem(item: PopupItemState) {\n  isFunction(item.onEnter) && item.onEnter()\n}\n\nfunction leaveItem(item: PopupItemState) {\n  isFunction(item.onLeave) && item.onLeave()\n}\n</script>\n\n<template>\n  <div :class=\"[nh.b(), nh.bm(placement)]\">\n    <PopupItem\n      v-for=\"item in items\"\n      :key=\"item.key\"\n      :state=\"item\"\n      :transition-name=\"transition\"\n      :inner-class=\"innerClass\"\n      :style=\"getItemStyle(item)\"\n      @enter=\"enterItem(item)\"\n      @leave=\"leaveItem(item)\"\n    >\n      <template #default=\"{ item: itemData }\">\n        <slot name=\"item\" :item=\"itemData\"></slot>\n      </template>\n    </PopupItem>\n  </div>\n</template>\n","import type { ComponentPublicInstance } from 'vue'\n\nexport type Key = string | number\nexport type MessageType = 'primary' | 'info' | 'success' | 'warning' | 'error'\nexport type MessagePlacement = 'top' | 'bottom'\n\nexport interface MessageOptions extends Record<string, any> {\n  content?: string,\n  key?: Key,\n  icon?: Record<string, any> | (() => any),\n  iconColor?: string,\n  type?: MessageType | null,\n  duration?: number,\n  className?: string | Record<string, any>,\n  style?: string | Record<string, any>,\n  zIndex?: number,\n  background?: boolean | string,\n  color?: boolean | string,\n  closable?: boolean,\n  parseHtml?: boolean,\n  liveOnEnter?: boolean,\n  renderer?: () => any\n}\n\nexport interface MessageConfig {\n  placement?: MessagePlacement\n}\n\nexport interface MessageInstance extends ComponentPublicInstance {\n  add: (options: MessageOptions) => void,\n  remove: (key: string | number) => void,\n  clear: () => void,\n  config: (config: MessageConfig) => void\n}\n\nexport const effectiveTypes = Object.freeze(['primary', 'info', 'success', 'warning', 'error'])\n// For a11n\nexport const assertiveTypes = Object.freeze(['success', 'warning', 'error'])\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { Popup } from '@/components/popup'\n\nimport { computed, reactive, ref } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport { assertiveTypes, effectiveTypes } from './symbol'\n\nimport type { Key, MessageConfig, MessagePlacement } from './symbol'\n\ndefineOptions({ name: 'Message' })\n\nconst nh = useNameHelper('message')\nconst icons = useIcons()\n\nconst predefinedIcons = computed(() => ({\n  primary: icons.value.info,\n  info: icons.value.info,\n  success: icons.value.success,\n  warning: icons.value.warning,\n  error: icons.value.error\n}))\n\nconst placement = ref<MessagePlacement>('top')\nconst popup = ref<InstanceType<typeof Popup>>()\n\nconst placementCenter = computed(() => `${placement.value}-center` as const)\n\nasync function add(options: Record<string, any>) {\n  if (popup.value) {\n    await popup.value.add(options)\n  }\n}\n\nasync function remove(key: Key) {\n  return !!popup.value && (await popup.value.remove(key))\n}\n\nfunction config(config: MessageConfig) {\n  placement.value = config.placement || placement.value\n}\n\nfunction clear() {\n  popup.value && popup.value.clear()\n}\n\ndefineExpose(\n  reactive({\n    popup,\n    add,\n    remove,\n    clear,\n    config\n  })\n)\n</script>\n\n<template>\n  <!-- eslint-disable vue/no-v-html -->\n  <Popup\n    ref=\"popup\"\n    :class=\"nh.b()\"\n    :transition-name=\"nh.ns(`popup-${placement}`)\"\n    :placement=\"placementCenter\"\n  >\n    <template #item=\"{ item }: { item: import('./symbol').MessageOptions }\">\n      <div\n        :class=\"[\n          {\n            [nh.be('item')]: true,\n            [nh.bs('vars')]: true,\n            [nh.bem('item', item.type!)]: item.type && effectiveTypes.includes(item.type),\n            [nh.bem('item', 'background')]: item.background,\n            [nh.bem('item', 'color')]: item.background && item.color,\n            [nh.bem('item', 'color-only')]: !item.background && item.color,\n            [nh.bem('item', 'has-icon')]: item.icon,\n            [nh.bem('item', 'closable')]: item.closable\n          },\n          item.className\n        ]\"\n        role=\"alert\"\n        :style=\"[\n          {\n            color: typeof item.color === 'string' ? item.color : undefined,\n            backgroundColor: typeof item.background === 'string' ? item.background : undefined\n          },\n          item.style || {}\n        ]\"\n        aria-atomic=\"true\"\n        :aria-live=\"item.type && assertiveTypes.includes(item.type) ? 'assertive' : 'polite'\"\n      >\n        <div :class=\"nh.be('wrapper')\">\n          <div\n            v-if=\"item.icon || (item.type && effectiveTypes.includes(item.type))\"\n            :class=\"nh.be('icon')\"\n            :style=\"{ color: item.iconColor }\"\n          >\n            <Icon\n              v-if=\"item.icon\"\n              :icon=\"item.icon\"\n              :style=\"[{ color: item.iconColor }, (item.icon as any).style]\"\n            ></Icon>\n            <Icon\n              v-else\n              v-bind=\"predefinedIcons[item.type!]\"\n              :style=\"{ color: item.iconColor }\"\n            ></Icon>\n          </div>\n          <Renderer\n            v-if=\"typeof item.renderer === 'function'\"\n            :renderer=\"item.renderer\"\n            :data=\"item\"\n          ></Renderer>\n          <template v-else>\n            <div v-if=\"item.parseHtml\" :class=\"nh.be('content')\" v-html=\"item.content\"></div>\n            <div v-else :class=\"nh.be('content')\">\n              {{ item.content || '' }}\n            </div>\n          </template>\n        </div>\n        <button\n          v-if=\"item.closable\"\n          type=\"button\"\n          :class=\"nh.be('close')\"\n          @click=\"remove(item.key!)\"\n        >\n          <Icon v-bind=\"icons.close\" label=\"close\"></Icon>\n        </button>\n      </div>\n    </template>\n  </Popup>\n</template>\n","import { createApp, createVNode, markRaw, render } from 'vue'\n\nimport Component from './message.vue'\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\nimport { destroyObject, isClient, isNull, noop, toNumber } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { MaybeInstance } from '@vexip-ui/hooks'\nimport type {\n  Key,\n  MessageConfig,\n  MessageInstance,\n  MessageOptions,\n  MessagePlacement,\n  MessageType\n} from './symbol'\n\nexport type { MessageConfig, MessageType, MessagePlacement, MessageOptions }\n\ntype FuzzyOptions = string | MessageOptions\ntype ManagerOptions = { duration?: number, placement?: MessagePlacement } & Record<string, unknown>\n\ninterface AipMethod {\n  (options: MessageOptions): () => void,\n  (content: string, duration?: number): () => void,\n  /** @internal */\n  (options: FuzzyOptions, duration?: number): () => void\n}\n\nconst placementWhiteList: MessagePlacement[] = ['top', 'bottom']\n\nlet count = 1\n\nfunction getKey() {\n  return `message-${count++}`\n}\n\nexport class MessageManager {\n  name: string\n  defaults: Record<string, unknown>\n\n  open: AipMethod\n  primary: AipMethod\n  info: AipMethod\n  success: AipMethod\n  warning: AipMethod\n  error: AipMethod\n\n  private _mountedApp: App<unknown> | null\n  private _instance: MessageInstance | null\n  private _innerApp: App<unknown> | null\n  private _container: HTMLElement | null\n  private _wrapper: HTMLElement | SVGElement | null\n  private _mountedEl: HTMLElement | null\n\n  constructor(options: ManagerOptions = {}) {\n    options = {\n      ...options,\n      duration: options.duration ? toNumber(options.duration) : 3000\n    }\n\n    this._mountedApp = null\n    this._instance = null\n    this._innerApp = null\n    this._container = null\n    this._wrapper = null\n    this._mountedEl = null\n    this.name = 'Message'\n    this.defaults = {}\n\n    this.config(options)\n\n    this.open = (content: FuzzyOptions, duration?: number) => {\n      return this._open(null, content, duration)\n    }\n\n    this.primary = (content: FuzzyOptions, duration?: number) => {\n      return this._open('primary', content, duration)\n    }\n\n    this.info = (content: FuzzyOptions, duration?: number) => {\n      return this._open('info', content, duration)\n    }\n\n    this.success = (content: FuzzyOptions, duration?: number) => {\n      return this._open('success', content, duration)\n    }\n\n    this.warning = (content: FuzzyOptions, duration?: number) => {\n      return this._open('warning', content, duration)\n    }\n\n    this.error = (content: FuzzyOptions, duration?: number) => {\n      return this._open('error', content, duration)\n    }\n  }\n\n  judge(state: boolean, success: string, error: string, duration?: number): void\n  judge(state: boolean, success: MessageOptions, error: string, duration?: number): void\n  judge(state: boolean, success: string, error: MessageOptions, duration?: number): void\n  judge(state: boolean, success: MessageOptions, error: MessageOptions): void\n  judge(\n    state: boolean,\n    success: string | MessageOptions,\n    error: string | MessageOptions,\n    duration?: number\n  ) {\n    if (state) {\n      this.success(success, duration)\n    } else {\n      this.error(error, duration)\n    }\n  }\n\n  close(key: Key) {\n    if (isNull(key)) {\n      this.clear()\n    } else {\n      this._getInstance()?.remove(key)\n    }\n  }\n\n  config({ placement, ...others }: MessageConfig & MessageOptions) {\n    if (placement) {\n      this._getInstance()?.config({\n        placement: placementWhiteList.includes(placement) ? placement : placementWhiteList[0]\n      })\n    }\n\n    this.defaults = { ...this.defaults, ...others }\n  }\n\n  clone() {\n    const manager = new MessageManager(this.defaults)\n\n    manager._mountedApp = this._mountedApp\n\n    return manager\n  }\n\n  clear() {\n    this._getInstance()?.clear()\n  }\n\n  destroy() {\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\n    this._innerApp?.unmount()\n    this._container && render(null, this._container)\n    destroyObject(this)\n  }\n\n  isDestroyed() {\n    return false\n  }\n\n  install(app: App, options: ManagerOptions & { property?: string } = {}) {\n    const { property, ...others } = options\n\n    this.config(others)\n    this._mountedApp = app\n\n    if (property || !app.config.globalProperties.$message) {\n      app.config.globalProperties[property || '$message'] = this\n    }\n  }\n\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\n    if (!isClient) return\n\n    const el = unrefElement(target)\n\n    if (el) {\n      this._wrapper = el\n\n      if (this._instance) {\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\n      } else {\n        this._getInstance()\n      }\n    }\n  }\n\n  private _getInstance() {\n    if (!this._instance && isClient) {\n      if (!this._mountedApp) {\n        console.warn('[vexip-ui:Message]: App missing, the plugin maybe not installed.')\n\n        this._container = document.createElement('div')\n        this._innerApp = createApp(Component)\n        this._instance = this._innerApp.mount(this._container) as MessageInstance\n      } else {\n        const vnode = createVNode(Component, null, null)\n\n        this._container = document.createElement('div')\n        vnode.appContext = this._mountedApp._context\n\n        render(vnode, this._container)\n\n        this._instance = proxyExposed<MessageInstance>(vnode)\n      }\n\n      this._mountedEl = this._container.firstElementChild as HTMLElement\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\n    }\n\n    return this._instance\n  }\n\n  private _open(type: null | MessageType, content: FuzzyOptions, _duration?: number) {\n    if (!isClient) {\n      return noop\n    }\n\n    const options = typeof content === 'string' ? { content, duration: _duration } : content\n\n    const key = options.key ?? getKey()\n    const message = this._getInstance()!\n\n    let timer: ReturnType<typeof setTimeout>\n\n    const userCloseFn = options.onClose\n    const onClose = () => {\n      clearTimeout(timer)\n\n      if (typeof userCloseFn === 'function') {\n        return userCloseFn()\n      }\n    }\n\n    const userEnterFn = options.onEnter\n    const onEnter = () => {\n      if (options.liveOnEnter) {\n        clearTimeout(timer)\n      }\n\n      if (typeof userEnterFn === 'function') {\n        return userEnterFn()\n      }\n    }\n\n    const userLeaveFn = options.onLeave\n    const onLeave = () => {\n      if (options.liveOnEnter) {\n        clearTimeout(timer)\n        setDelayClose()\n      }\n\n      if (typeof userLeaveFn === 'function') {\n        return userLeaveFn()\n      }\n    }\n\n    const item: MessageOptions = {\n      ...this.defaults,\n      ...options,\n      key,\n      type: type ?? options.type,\n      onClose,\n      onEnter,\n      onLeave\n    }\n\n    if (item.icon && typeof item.icon !== 'function') {\n      item.icon = markRaw(item.icon)\n    }\n\n    message.add(item)\n    setDelayClose()\n\n    function setDelayClose() {\n      const duration = typeof item.duration === 'number' ? item.duration : 3000\n\n      if (duration >= 500) {\n        timer = setTimeout(() => {\n          message.remove(key)\n        }, duration)\n      }\n    }\n\n    return () => {\n      clearTimeout(timer)\n      message.remove(key)\n    }\n  }\n}\n\nexport const Message = new MessageManager()\n","import type { ComponentPublicInstance } from 'vue'\n\nexport type Key = string | number\nexport type NoticeType = 'primary' | 'info' | 'success' | 'warning' | 'error'\nexport type NoticePlacement = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'\n\nexport interface NoticeOptions extends Record<string, any> {\n  title?: string,\n  content?: string,\n  key?: Key,\n  icon?: Record<string, any> | (() => any),\n  iconColor?: string,\n  type?: NoticeType | null,\n  duration?: number,\n  className?: string | Record<string, any>,\n  style?: string | Record<string, any>,\n  zIndex?: number,\n  background?: boolean | string,\n  color?: boolean | string,\n  closable?: boolean,\n  parseHtml?: boolean,\n  liveOnEnter?: boolean,\n  renderer?: () => any\n}\n\nexport interface NoticeConfig {\n  placement?: NoticePlacement\n}\n\nexport interface NoticeInstance extends ComponentPublicInstance {\n  add: (options: NoticeOptions) => void,\n  remove: (key: string | number) => void,\n  clear: () => void,\n  config: (config: NoticeConfig) => void\n}\n\nexport const effectiveTypes = Object.freeze(['primary', 'info', 'success', 'warning', 'error'])\n// For a11n\nexport const assertiveTypes = Object.freeze(['success', 'warning', 'error'])\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { Popup } from '@/components/popup'\n\nimport { computed, reactive, ref } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport { assertiveTypes, effectiveTypes } from './symbol'\n\nimport type { Key, NoticeConfig, NoticePlacement } from './symbol'\n\ndefineOptions({ name: 'Notice' })\n\nconst nh = useNameHelper('notice')\nconst icons = useIcons()\n\nconst predefinedIcons = computed(() => ({\n  primary: icons.value.info,\n  info: icons.value.info,\n  success: icons.value.success,\n  warning: icons.value.warning,\n  error: icons.value.error\n}))\n\nconst placement = ref<NoticePlacement>('top-right')\nconst popup = ref<InstanceType<typeof Popup>>()\n\nasync function add(options: Record<string, any>) {\n  if (popup.value) {\n    await popup.value.add(options)\n  }\n}\n\nasync function remove(key: Key) {\n  return !!popup.value && (await popup.value.remove(key))\n}\n\nfunction clear() {\n  popup.value && popup.value.clear()\n}\n\nfunction config(config: NoticeConfig) {\n  placement.value = config.placement || placement.value\n}\n\ndefineExpose(\n  reactive({\n    popup,\n    add,\n    remove,\n    clear,\n    config\n  })\n)\n</script>\n\n<template>\n  <!-- eslint-disable vue/no-v-html -->\n  <Popup\n    ref=\"popup\"\n    :class=\"nh.b()\"\n    :transition-name=\"nh.ns(`popup-${placement.split('-')[1]}`)\"\n    :placement=\"placement\"\n  >\n    <template #item=\"{ item }: { item: import('./symbol').NoticeOptions }\">\n      <div\n        :class=\"[\n          {\n            [nh.be('item')]: true,\n            [nh.bs('vars')]: true,\n            [nh.bem('item', 'title-only')]: !item.content && typeof item.renderer !== 'function',\n            [nh.bem('item', 'has-icon')]: item.icon,\n            [nh.bem('item', 'content-only')]: !item.title,\n            [nh.bem('item', item.type!)]: item.type && effectiveTypes.includes(item.type),\n            [nh.bem('item', 'background')]: item.background,\n            [nh.bem('item', 'color')]: item.background && item.color,\n            [nh.bem('item', 'color-only')]: !item.background && item.color,\n            [nh.bem('item', 'marker')]: item.marker\n          },\n          item.className\n        ]\"\n        role=\"alert\"\n        :style=\"[\n          {\n            color: typeof item.color === 'string' ? item.color : undefined,\n            backgroundColor: typeof item.background === 'string' ? item.background : undefined\n          },\n          item.style || {}\n        ]\"\n        aria-atomic=\"true\"\n        :aria-live=\"item.type && assertiveTypes.includes(item.type) ? 'assertive' : 'polite'\"\n      >\n        <div\n          v-if=\"item.icon || (item.type && effectiveTypes.includes(item.type))\"\n          :class=\"nh.be('icon')\"\n          :style=\"{ color: item.iconColor }\"\n        >\n          <Icon\n            v-if=\"item.icon\"\n            :icon=\"item.icon\"\n            :scale=\"!item.content && typeof item.renderer !== 'function' ? 1 : 2\"\n            :style=\"[{ color: item.iconColor }, (item.icon as any).style]\"\n          ></Icon>\n          <Icon\n            v-else\n            v-bind=\"predefinedIcons[item.type!]\"\n            :scale=\"!item.content && typeof item.renderer !== 'function' ? 1 : 2\"\n            :style=\"{ color: item.iconColor }\"\n          ></Icon>\n        </div>\n        <div :class=\"nh.be('wrapper')\">\n          <Renderer\n            v-if=\"typeof item.renderer === 'function'\"\n            :renderer=\"item.renderer\"\n            :data=\"item\"\n          ></Renderer>\n          <template v-else>\n            <template v-if=\"item.title\">\n              <div\n                v-if=\"item.parseHtml\"\n                :class=\"nh.be('title')\"\n                :style=\"{\n                  color: typeof item.titleColor === 'string' ? item.titleColor : undefined\n                }\"\n                v-html=\"item.title\"\n              ></div>\n              <div\n                v-else\n                :class=\"nh.be('title')\"\n                :style=\"{\n                  color: typeof item.titleColor === 'string' ? item.titleColor : undefined\n                }\"\n              >\n                {{ item.title || '' }}\n              </div>\n            </template>\n            <template v-if=\"item.content\">\n              <div v-if=\"item.parseHtml\" :class=\"nh.be('content')\" v-html=\"item.content\"></div>\n              <div v-else :class=\"nh.be('content')\">\n                {{ item.content || '' }}\n              </div>\n            </template>\n          </template>\n        </div>\n        <button\n          v-if=\"item.closable\"\n          type=\"button\"\n          :class=\"nh.be('close')\"\n          @click=\"remove(item.key!)\"\n        >\n          <Icon v-bind=\"icons.close\" label=\"close\"></Icon>\n        </button>\n      </div>\n    </template>\n  </Popup>\n</template>\n","import { createApp, createVNode, markRaw, render } from 'vue'\n\nimport Component from './notice.vue'\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\nimport { destroyObject, isClient, isNull, isObject, noop, toNumber } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { MaybeInstance } from '@vexip-ui/hooks'\nimport type {\n  Key,\n  NoticeConfig,\n  NoticeInstance,\n  NoticeOptions,\n  NoticePlacement,\n  NoticeType\n} from './symbol'\n\nexport type { NoticeType, NoticePlacement, NoticeOptions }\n\ntype FuzzyOptions = string | NoticeOptions\ntype ManagerOptions = { marker?: boolean, duration?: number, placement?: NoticePlacement } & Record<\n  string,\n  unknown\n>\n\ninterface AipMethod {\n  (options: NoticeOptions): () => void,\n  (title: string, duration?: number): () => void,\n  (title: string, content: string, duration?: number): () => void,\n  /** @internal */\n  (options: FuzzyOptions, duration?: number): () => void\n}\n\nconst placementWhiteList: NoticePlacement[] = [\n  'top-right',\n  'top-left',\n  'bottom-right',\n  'bottom-left'\n]\n\nlet count = 1\n\nfunction getKey() {\n  return `notice-${count++}`\n}\n\nexport class NoticeManager {\n  name: string\n  defaults: Record<string, unknown>\n\n  open: AipMethod\n  primary: AipMethod\n  info: AipMethod\n  success: AipMethod\n  warning: AipMethod\n  error: AipMethod\n\n  private _mountedApp: App<unknown> | null\n  private _instance: NoticeInstance | null\n  private _innerApp: App<unknown> | null\n  private _container: HTMLElement | null\n  private _wrapper: HTMLElement | SVGElement | null\n  private _mountedEl: HTMLElement | null\n\n  constructor(options: ManagerOptions = {}) {\n    options = {\n      ...options,\n      marker: !!options.marker,\n      duration: options.duration ? toNumber(options.duration) : 4000\n    }\n\n    this._mountedApp = null\n    this._instance = null\n    this._innerApp = null\n    this._container = null\n    this._wrapper = null\n    this._mountedEl = null\n    this.name = 'Notice'\n    this.defaults = {}\n\n    this.config(options)\n\n    this.open = (title: FuzzyOptions, content?: string | number, duration?: number) => {\n      return this._open(null, title, content, duration)\n    }\n\n    this.primary = (title: FuzzyOptions, content?: string | number, duration?: number) => {\n      return this._open('primary', title, content, duration)\n    }\n\n    this.info = (title: FuzzyOptions, content?: string | number, duration?: number) => {\n      return this._open('info', title, content, duration)\n    }\n\n    this.success = (title: FuzzyOptions, content?: string | number, duration?: number) => {\n      return this._open('success', title, content, duration)\n    }\n\n    this.warning = (title: FuzzyOptions, content?: string | number, duration?: number) => {\n      return this._open('warning', title, content, duration)\n    }\n\n    this.error = (title: FuzzyOptions, content?: string | number, duration?: number) => {\n      return this._open('error', title, content, duration)\n    }\n  }\n\n  judge(state: boolean, success: string, error: string, duration?: number): void\n  judge(state: boolean, success: NoticeOptions, error: string, duration?: number): void\n  judge(state: boolean, success: string, error: NoticeOptions, duration?: number): void\n  judge(state: boolean, success: NoticeOptions, error: NoticeOptions): void\n  judge(\n    state: boolean,\n    success: string | NoticeOptions,\n    error: string | NoticeOptions,\n    duration?: number\n  ) {\n    if (state) {\n      this.success(success, duration)\n    } else {\n      this.error(error, duration)\n    }\n  }\n\n  close(key: Key) {\n    if (isNull(key)) {\n      this.clear()\n    } else {\n      this._getInstance()?.remove(key)\n    }\n  }\n\n  config({ placement, ...others }: NoticeConfig & NoticeOptions) {\n    if (placement) {\n      this._getInstance()?.config({\n        placement: placementWhiteList.includes(placement) ? placement : placementWhiteList[0]\n      })\n    }\n\n    this.defaults = { ...this.defaults, ...others }\n  }\n\n  clone() {\n    const manager = new NoticeManager(this.defaults)\n\n    manager._mountedApp = this._mountedApp\n\n    return manager\n  }\n\n  clear() {\n    this._getInstance()?.clear()\n  }\n\n  destroy() {\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\n    this._innerApp?.unmount()\n    this._container && render(null, this._container)\n    destroyObject(this)\n  }\n\n  isDestroyed() {\n    return false\n  }\n\n  install(app: App, options: ManagerOptions & { property?: string } = {}) {\n    const { property, ...others } = options\n\n    this.config(others)\n    this._mountedApp = app\n\n    if (property || !app.config.globalProperties.$notice) {\n      app.config.globalProperties[property || '$notice'] = this\n    }\n  }\n\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\n    if (!isClient) return\n\n    const el = unrefElement(target)\n\n    if (el) {\n      this._wrapper = el\n\n      if (this._instance) {\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\n      } else {\n        this._getInstance()\n      }\n    }\n  }\n\n  private _getInstance() {\n    if (!this._instance && isClient) {\n      if (!this._mountedApp) {\n        console.warn('[vexip-ui:Notice]: App missing, the plugin maybe not installed.')\n\n        this._container = document.createElement('div')\n        this._innerApp = createApp(Component)\n        this._instance = this._innerApp.mount(this._container) as NoticeInstance\n      } else {\n        const vnode = createVNode(Component, null, null)\n\n        this._container = document.createElement('div')\n        vnode.appContext = this._mountedApp._context\n\n        render(vnode, this._container)\n\n        this._instance = proxyExposed<NoticeInstance>(vnode)\n      }\n\n      this._mountedEl = this._container.firstElementChild as HTMLElement\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\n    }\n\n    return this._instance\n  }\n\n  private _open(\n    type: null | NoticeType,\n    title: FuzzyOptions,\n    content?: string | number,\n    _duration?: number\n  ) {\n    if (!isClient) {\n      return noop\n    }\n\n    let options: NoticeOptions\n\n    if (isObject(title)) {\n      options = title\n    } else {\n      if (typeof content === 'number') {\n        options = { title, duration: content }\n      } else if (!content) {\n        options = { title, duration: _duration }\n      } else {\n        options = { title, content, duration: _duration }\n      }\n    }\n\n    const key = options.key ?? getKey()\n    const notice = this._getInstance()!\n\n    let timer: ReturnType<typeof setTimeout>\n\n    const userCloseFn = options.onClose\n    const onClose = () => {\n      clearTimeout(timer)\n\n      if (typeof userCloseFn === 'function') {\n        return userCloseFn()\n      }\n    }\n\n    const userEnterFn = options.onEnter\n    const onEnter = () => {\n      if (options.liveOnEnter) {\n        clearTimeout(timer)\n      }\n\n      if (typeof userEnterFn === 'function') {\n        return userEnterFn()\n      }\n    }\n\n    const userLeaveFn = options.onLeave\n    const onLeave = () => {\n      if (options.liveOnEnter) {\n        clearTimeout(timer)\n        setDelayClose()\n      }\n\n      if (typeof userLeaveFn === 'function') {\n        return userLeaveFn()\n      }\n    }\n\n    const item: NoticeOptions = {\n      ...this.defaults,\n      ...options,\n      key,\n      type: type ?? options.type,\n      onClose,\n      onEnter,\n      onLeave\n    }\n\n    if (item.icon && typeof item.icon !== 'function') {\n      item.icon = markRaw(item.icon)\n    }\n\n    notice.add(item)\n    setDelayClose()\n\n    function setDelayClose() {\n      const duration = typeof item.duration === 'number' ? item.duration : 4000\n\n      if (duration >= 500) {\n        timer = setTimeout(() => {\n          notice.remove(key)\n        }, duration)\n      }\n    }\n\n    return () => {\n      clearTimeout(timer)\n      notice.remove(key)\n    }\n  }\n}\n\nexport const Notice = new NoticeManager()\n","<script setup lang=\"ts\">\nimport { useNameHelper } from '@vexip-ui/config'\nimport { optionGroupProps } from './props'\n\ndefineOptions({ name: 'OptionGroup' })\n\ndefineProps(optionGroupProps)\n\nconst nh = useNameHelper('option-group')\n</script>\n\n<template>\n  <li\n    :class=\"{\n      [nh.b()]: true,\n      [nh.ns('option-vars')]: true,\n      [nh.bm('divided')]: divided\n    }\"\n  >\n    <div :class=\"nh.be('label')\">\n      <slot name=\"label\">\n        {{ label }}\n      </slot>\n    </div>\n    <ul :class=\"nh.be('list')\">\n      <slot></slot>\n    </ul>\n  </li>\n</template>\n","import { booleanProp, buildProps, eventProp, localeProp, sizeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { PaginationPlugin, PaginationSlots } from './symbol'\n\nexport const paginationProps = buildProps({\n  size: sizeProp,\n  locale: localeProp('pagination'),\n  total: Number,\n  noBorder: booleanProp,\n  background: booleanProp,\n  pageSize: Number,\n  sizeOptions: Array as PropType<number[]>,\n  itemCount: Number,\n  active: Number,\n  disabled: booleanProp,\n  disableItem: Function as PropType<(page: number) => boolean>,\n  turnPageCount: Number,\n  itemUnit: String,\n  plugins: Array as PropType<(PaginationPlugin | undefined | null)[]>,\n  noTitle: booleanProp,\n  itemTag: String,\n  listTag: String,\n  slots: Object as PropType<PaginationSlots>,\n  onChange: eventProp<(page: number) => void>(),\n  onPageSizeChange: eventProp<(size: number) => void>()\n})\n\nexport type PaginationProps = ExtractPropTypes<typeof paginationProps>\nexport type PaginationCProps = ConfigurableProps<PaginationProps, 'total'>\n","import { Icon } from '@/components/icon'\nimport { NumberInput } from '@/components/number-input'\nimport { Renderer } from '@/components/renderer'\nimport { Select } from '@/components/select'\n\nimport {\n  Transition,\n  computed,\n  defineComponent,\n  nextTick,\n  onMounted,\n  onUpdated,\n  reactive,\n  ref,\n  renderSlot,\n  toRef,\n  watch\n} from 'vue'\n\nimport {\n  createSizeProp,\n  emitEvent,\n  getCountWord,\n  getCountWordOnly,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { createSlotRender, useModifier, useRtl } from '@vexip-ui/hooks'\nimport { boundRange, decide, isClient, isNull, range } from '@vexip-ui/utils'\nimport { paginationProps } from './props'\n\nconst enum PaginationMode {\n  LEFT = 'left',\n  CENTER = 'center',\n  RIGHT = 'right'\n}\n\nexport default defineComponent({\n  name: 'Pagination',\n  props: paginationProps,\n  emits: ['update:active', 'update:page-size'],\n  setup(_props, { slots, emit, expose }) {\n    const props = useProps('pagination', _props, {\n      size: createSizeProp(),\n      locale: null,\n      total: {\n        default: 0,\n        validator: value => value >= 0,\n        static: true\n      },\n      noBorder: false,\n      background: false,\n      pageSize: {\n        default: 10,\n        validator: value => value > 0\n      },\n      sizeOptions: () => [10, 20, 50, 100],\n      itemCount: {\n        default: 7,\n        validator: value => Number.isInteger(value) && value > 6\n      },\n      active: {\n        default: 1,\n        validator: value => value > 0,\n        static: true\n      },\n      disabled: false,\n      disableItem: {\n        default: () => false,\n        isFunc: true\n      },\n      turnPageCount: 5,\n      itemUnit: null,\n      plugins: {\n        default: () => [],\n        validator: value => Array.isArray(value)\n      },\n      noTitle: false,\n      itemTag: 'li',\n      listTag: null,\n      slots: () => ({})\n    })\n\n    const { isRtl } = useRtl()\n    const nh = useNameHelper('pagination')\n    const icons = useIcons()\n    const midPagers = ref<number[]>([])\n    const currentActive = ref(props.active)\n    const currentPageSize = ref(props.pageSize)\n    const mode = ref(PaginationMode.LEFT)\n    const inPrevEllipsis = ref(false)\n    const inNextEllipsis = ref(false)\n    const jumpValue = ref(props.active)\n    const itemElList = reactive<HTMLElement[]>([])\n\n    const locale = useLocale('pagination', toRef(props, 'locale'))\n\n    const { target: wrapper } = useModifier({\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        if (props.disabled) return\n\n        decide(\n          [\n            [\n              () => modifier.up || modifier.down || modifier.left || modifier.right,\n              () => {\n                const sign = modifier.up || modifier.left ? -1 : 1\n\n                if (isClient && document.activeElement) {\n                  const index = itemElList.findIndex(el => el === document.activeElement)\n\n                  if (!~index) return\n\n                  const target = itemElList[boundRange(index + sign, 0, itemElList.length - 1)]\n\n                  target.focus()\n                }\n              }\n            ],\n            [\n              () => modifier.enter || modifier.space,\n              () => {\n                if (document && document.activeElement) {\n                  const index = itemElList.findIndex(el => el === document.activeElement)\n\n                  if (!~index) {\n                    const activeClass = nh.bem('item', 'active')\n                    const activeEl = itemElList.find(el => el.classList.contains(activeClass))\n\n                    activeEl?.focus()\n                  }\n                }\n              }\n            ]\n          ],\n          {\n            beforeMatchAny: () => event.preventDefault(),\n            afterMatchAny: modifier.resetAll\n          }\n        )\n      }\n    })\n\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.size)]: props.size !== 'default',\n        [nh.bm('background')]: props.background,\n        [nh.bm('no-border')]: props.noBorder,\n        [nh.bm('disabled')]: props.disabled\n      }\n    })\n    const pagerCount = computed(() => {\n      return Math.ceil(props.total / (currentPageSize.value || 1)) || 1\n    })\n    const useEllipsis = computed(() => pagerCount.value > props.itemCount)\n    const disabledPrev = computed(() => {\n      const count = queryEnabledActive(1, 1)\n\n      return count >= pagerCount.value || currentActive.value === count\n    })\n    const disabledNext = computed(() => {\n      const count = queryEnabledActive(pagerCount.value, -1)\n\n      return count <= 1 || currentActive.value === count\n    })\n    const prevTurnPageTitle = computed(() => {\n      return `${locale.value.prev} ${getCountWord(locale.value.page, props.turnPageCount)}`\n    })\n    const nextTurnPageTitle = computed(() => {\n      return `${locale.value.next} ${getCountWord(locale.value.page, props.turnPageCount)}`\n    })\n    const prevEllipsisTarget = computed(() => {\n      if (!useEllipsis.value) return 0\n\n      let active = queryEnabledActive(currentActive.value - props.turnPageCount, -1)\n\n      if (active < 1) {\n        active = queryEnabledActive(1, 1)\n\n        if (active >= currentActive.value) return 0\n      }\n\n      return active\n    })\n    const nextEllipsisTarget = computed(() => {\n      if (!useEllipsis.value) return 0\n\n      let active = queryEnabledActive(currentActive.value + props.turnPageCount, 1)\n\n      if (active > pagerCount.value) {\n        active = queryEnabledActive(pagerCount.value, -1)\n\n        if (active <= currentActive.value) return 0\n      }\n\n      return active\n    })\n    const sizeObjectOptions = computed(() => {\n      return props.sizeOptions.map(size => {\n        return {\n          value: size,\n          label: `${size} ${locale.value.perPage}`\n        }\n      })\n    })\n    const pluginOrders = computed(() => {\n      const plugins = props.plugins\n      const pagerPosition = plugins.findIndex(isNull)\n\n      return {\n        total: plugins.findIndex(p => p === 'total') - pagerPosition,\n        size: plugins.findIndex(p => p === 'size') - pagerPosition,\n        jump: plugins.findIndex(p => p === 'jump') - pagerPosition\n      }\n    })\n    const jumpInputWidth = computed(() => {\n      if (!props.plugins.includes('jump')) return 0\n\n      let pageCount = 0\n\n      if (props.plugins.includes('size')) {\n        pageCount = Math.ceil(props.total / (Math.min(...props.sizeOptions) || 10))\n      } else {\n        pageCount = Math.ceil(props.total / (props.pageSize || 10))\n      }\n\n      return pageCount.toString().length * 10 + 30\n    })\n\n    watch(\n      () => props.active,\n      value => {\n        changeActive(value, false)\n      }\n    )\n    watch(() => props.itemCount, computePagers)\n    watch(pagerCount, computePagers)\n    watch(\n      () => props.pageSize,\n      value => {\n        currentPageSize.value = value\n      }\n    )\n    watch(currentPageSize, (value, prevValue) => {\n      emit('update:page-size', value)\n      emitEvent(props.onPageSizeChange, value)\n\n      // 按当前页的第一条数据计算新的页码\n      const anchor = Math.ceil((prevValue * (currentActive.value - 1) + 1) / value)\n\n      let active = queryEnabledActive(anchor, 1)\n\n      if (active > pagerCount.value) {\n        active = queryEnabledActive(anchor - 1, -1)\n\n        if (active < 1) active = 0\n      }\n\n      currentActive.value = active\n      computePagers()\n    })\n\n    expose({ changeActive, handlePrev, handleNext })\n\n    onMounted(() => {\n      nextTick(computePagers)\n    })\n\n    onUpdated(() => {\n      if (!wrapper.value) return\n\n      itemElList.length = 0\n      itemElList.push(\n        ...Array.from(\n          wrapper.value.querySelectorAll<HTMLElement>(\n            `${nh.cbe('item')}:not(${nh.cbem('item', 'disabled')})`\n          )\n        )\n      )\n    })\n\n    function queryEnabledActive(active: number, step: number) {\n      step = step / Math.abs(step)\n\n      while (props.disableItem(active)) {\n        active += step\n\n        if (active < 1 || active > pagerCount.value) break\n      }\n\n      return active\n    }\n\n    function handleChange(value: number) {\n      if (currentActive.value === value) return\n\n      currentActive.value = value\n      jumpValue.value = value\n\n      computePagers()\n      emit('update:active', value)\n      emitEvent(props.onChange, value)\n    }\n\n    function changeActive(active: number, focus = true) {\n      active = parseInt(active.toString())\n\n      if (props.disabled || active < 1 || active > pagerCount.value || props.disableItem(active)) {\n        return\n      }\n\n      handleChange(active)\n\n      if (isClient && focus) {\n        const activeEl = itemElList.find(el => el === document.activeElement)\n\n        activeEl?.blur()\n        nextTick(() => {\n          itemElList.find(el => el.tabIndex >= 0)?.focus()\n        })\n      }\n    }\n\n    function handlePrev() {\n      if (!disabledPrev.value && !props.disabled) {\n        const active = queryEnabledActive(currentActive.value - 1, -1)\n\n        if (active >= 1) changeActive(active)\n      }\n    }\n\n    function handleNext() {\n      if (!disabledNext.value && !props.disabled) {\n        const active = queryEnabledActive(currentActive.value + 1, 1)\n\n        if (active <= pagerCount.value) changeActive(active)\n      }\n    }\n\n    function computePagers() {\n      let pagers: number[]\n\n      if (pagerCount.value <= props.itemCount) {\n        // 未超过最大值，显示所有页号\n        pagers = range(pagerCount.value)\n      } else {\n        const numberCount = props.itemCount - 2 // 显示为数字的页号\n        const criticalCount = Math.ceil(props.itemCount / 2) // 切换模式的关键计数\n\n        if (currentActive.value < criticalCount) {\n          // 出现后侧一个省略号，前侧连续\n          pagers = range(numberCount)\n          pagers.push(pagerCount.value)\n\n          mode.value = PaginationMode.LEFT\n        } else if (currentActive.value <= pagerCount.value - criticalCount) {\n          // 出现两个省略号，中间连续\n          let count = numberCount - 2\n\n          // 保持中间数字的页号数目为单数\n          if (count % 2 === 0) {\n            count -= 1\n          }\n\n          pagers = range(count, currentActive.value - (count - 1) / 2) // 同 Math.floor(count / 2)\n          pagers.unshift(1)\n          pagers.push(pagerCount.value)\n\n          mode.value = PaginationMode.CENTER\n        } else {\n          // 出现前侧一个省略号，后侧连续\n          pagers = range(numberCount, pagerCount.value - numberCount + 1)\n          pagers.unshift(1)\n\n          mode.value = PaginationMode.RIGHT\n        }\n      }\n\n      if (pagers.length === 1) {\n        midPagers.value = []\n      }\n\n      midPagers.value = pagers.slice(1, -1)\n    }\n\n    function enterPrevEllipsis() {\n      inPrevEllipsis.value = true\n    }\n\n    function leavePrevEllipsis() {\n      inPrevEllipsis.value = false\n    }\n\n    function clickPrevEllipsis() {\n      if (!props.disabled && prevEllipsisTarget.value) {\n        changeActive(prevEllipsisTarget.value)\n      }\n    }\n\n    function enterNextEllipsis() {\n      inNextEllipsis.value = true\n    }\n\n    function leaveNextEllipsis() {\n      inNextEllipsis.value = false\n    }\n\n    function clickNextEllipsis() {\n      if (!props.disabled && nextEllipsisTarget.value) {\n        changeActive(nextEllipsisTarget.value)\n      }\n    }\n\n    function handleJumpPage(active: number) {\n      active = Math.max(Math.min(parseInt(active.toString()), pagerCount.value), 1)\n\n      const originActive = active\n\n      if (active !== currentActive.value) {\n        const step = active > currentActive.value ? 1 : -1\n\n        active = queryEnabledActive(originActive, step)\n\n        if (step > 0 ? active > pagerCount.value : active < 1) {\n          active = queryEnabledActive(originActive, -step)\n\n          if (step > 0 ? active < 1 : active > pagerCount.value) {\n            active = 0\n          }\n        }\n\n        handleChange(active)\n      }\n\n      nextTick(() => {\n        jumpValue.value = currentActive.value\n      })\n    }\n\n    function renderPrev(Tag: any) {\n      const disabled = props.disabled || disabledPrev.value\n      const arrow = isRtl.value ? icons.value.angleRight : icons.value.angleLeft\n\n      return (\n        <Tag\n          ref={el => el && !disabledPrev.value && itemElList.push(el as any)}\n          class={[\n            nh.be('item'),\n            nh.bem('item', 'prev'),\n            disabled ? nh.bem('item', 'disabled') : ''\n          ]}\n          title={props.noTitle ? undefined : locale.value.prevPage}\n          role={'menuitem'}\n          tabindex={'-1'}\n          aria-label={locale.value.prevPage}\n          aria-hidden={disabled ? 'true' : undefined}\n          onClick={handlePrev}\n          onKeydownEnter={handlePrev}\n          onKeydownSpace={handlePrev}\n        >\n          {renderSlot(slots, 'prev', { disabled }, () => [\n            <Renderer renderer={props.slots.prev} data={{ disabled }}>\n              <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\n            </Renderer>\n          ])}\n        </Tag>\n      )\n    }\n\n    function renderNext(Tag: any) {\n      const disabled = props.disabled || disabledNext.value\n      const arrow = isRtl.value ? icons.value.angleLeft : icons.value.angleRight\n\n      return (\n        <Tag\n          ref={el => el && !disabledNext.value && itemElList.push(el as any)}\n          class={[\n            nh.be('item'),\n            nh.bem('item', 'next'),\n            disabled ? nh.bem('item', 'disabled') : ''\n          ]}\n          title={props.noTitle ? undefined : locale.value.nextPage}\n          role={'menuitem'}\n          tabindex={'-1'}\n          aria-label={locale.value.nextPage}\n          aria-hidden={disabled ? 'true' : undefined}\n          onClick={handleNext}\n          onKeydownEnter={handleNext}\n          onKeydownSpace={handleNext}\n        >\n          {renderSlot(slots, 'next', { disabled }, () => [\n            <Renderer renderer={props.slots.next} data={{ disabled }}>\n              <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\n            </Renderer>\n          ])}\n        </Tag>\n      )\n    }\n\n    function renderPrevEllipsis(Tag: any) {\n      if (!useEllipsis.value || mode.value === PaginationMode.LEFT) return null\n\n      const disabled = props.disabled || !prevEllipsisTarget.value\n\n      return (\n        <Tag\n          ref={el => el && prevEllipsisTarget.value && itemElList.push(el as any)}\n          class={{\n            [nh.be('item')]: true,\n            [nh.bem('item', 'more')]: true,\n            [nh.bem('item', 'disabled')]: disabled\n          }}\n          title={props.noTitle ? undefined : prevTurnPageTitle.value}\n          role={'menuitem'}\n          tabindex={'-1'}\n          aria-label={prevTurnPageTitle.value}\n          onClick={clickPrevEllipsis}\n          onKeydownEnter={clickPrevEllipsis}\n          onKeydownSpace={clickPrevEllipsis}\n          onMouseenter={enterPrevEllipsis}\n          onMouseleave={leavePrevEllipsis}\n        >\n          {createSlotRender(slots, ['prev-jump', 'prevJump'], () => {\n            const arrow = isRtl.value ? icons.value.anglesRight : icons.value.anglesLeft\n\n            return (\n              <Transition name={nh.ns('fade')}>\n                {!disabled && inPrevEllipsis.value ? (\n                  <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\n                ) : (\n                  <Icon\n                    {...icons.value.ellipsis}\n                    scale={+(icons.value.ellipsis.scale || 1)}\n                    style={'position: absolute'}\n                  ></Icon>\n                )}\n              </Transition>\n            )\n          })({ disabled, entered: inPrevEllipsis.value })}\n        </Tag>\n      )\n    }\n\n    function renderNextEllipsis(Tag: any) {\n      if (!useEllipsis.value || mode.value === PaginationMode.RIGHT) return null\n\n      const disabled = props.disabled || !nextEllipsisTarget.value\n\n      return (\n        <Tag\n          ref={el => el && nextEllipsisTarget.value && itemElList.push(el as any)}\n          class={{\n            [nh.be('item')]: true,\n            [nh.bem('item', 'more')]: true,\n            [nh.bem('item', 'disabled')]: disabled\n          }}\n          title={props.noTitle ? undefined : nextTurnPageTitle.value}\n          role={'menuitem'}\n          tabindex={'-1'}\n          aria-label={nextTurnPageTitle.value}\n          onClick={clickNextEllipsis}\n          onKeydownEnter={clickNextEllipsis}\n          onKeydownSpace={clickNextEllipsis}\n          onMouseenter={enterNextEllipsis}\n          onMouseleave={leaveNextEllipsis}\n        >\n          {createSlotRender(slots, ['next-jump', 'nextJump'], () => {\n            const arrow = isRtl.value ? icons.value.anglesLeft : icons.value.anglesRight\n\n            return (\n              <Transition name={nh.ns('fade')}>\n                {!disabled && inNextEllipsis.value ? (\n                  <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\n                ) : (\n                  <Icon\n                    {...icons.value.ellipsis}\n                    scale={+(icons.value.ellipsis.scale || 1)}\n                    style={'position: absolute'}\n                  ></Icon>\n                )}\n              </Transition>\n            )\n          })({ disabled: !nextEllipsisTarget.value, entered: inNextEllipsis.value })}\n        </Tag>\n      )\n    }\n\n    function renderItem(Tag: any, page: number) {\n      const disabled = props.disabled || props.disableItem(page)\n      const active = currentActive.value === page\n\n      return (\n        <Tag\n          ref={el => el && itemElList.push(el as any)}\n          class={{\n            [nh.be('item')]: true,\n            [nh.bem('item', 'disabled')]: disabled,\n            [nh.bem('item', 'active')]: active\n          }}\n          title={props.noTitle ? undefined : page}\n          role={'menuitemradio'}\n          tabindex={active ? '0' : '-1'}\n          aria-posinset={page}\n          aria-setsize={pagerCount.value}\n          aria-disabled={disabled ? 'true' : undefined}\n          onClick={() => changeActive(page)}\n          onKeydownEnter={() => changeActive(page)}\n          onKeydownSpace={() => changeActive(page)}\n        >\n          {renderSlot(slots, 'item', { page, disabled, active }, () => [\n            <Renderer renderer={props.slots.item} data={{ page, disabled, active }}>\n              {page}\n            </Renderer>\n          ])}\n        </Tag>\n      )\n    }\n\n    function renderTotalPlugin() {\n      if (!props.plugins.includes('total')) return null\n\n      return (\n        <div\n          class={[nh.be('total'), pluginOrders.value.total < 0 && nh.bem('total', 'prefix')]}\n          style={{ order: pluginOrders.value.total }}\n        >\n          {`${locale.value.total} ${getCountWord(\n            props.itemUnit ?? locale.value.itemUnit,\n            props.total\n          )}`}\n        </div>\n      )\n    }\n\n    function renderSizePlugin() {\n      if (!props.plugins.includes('size')) return null\n\n      return (\n        <div\n          class={[nh.be('size'), pluginOrders.value.size < 0 && nh.bem('size', 'prefix')]}\n          style={{ order: pluginOrders.value.size }}\n        >\n          <Select\n            v-model:value={currentPageSize.value}\n            inherit\n            class={nh.be('size-select')}\n            options={sizeObjectOptions.value}\n            filter={false}\n            multiple={false}\n            clearable={false}\n          ></Select>\n        </div>\n      )\n    }\n\n    function renderJumpPlugin() {\n      if (!props.plugins.includes('jump')) return null\n\n      return (\n        <div\n          class={[nh.be('jump'), pluginOrders.value.jump < 0 && nh.bem('jump', 'prefix')]}\n          style={{ order: pluginOrders.value.jump }}\n        >\n          {locale.value.jumpTo}\n          <NumberInput\n            v-model:value={jumpValue.value}\n            inherit\n            class={nh.be('jump-input')}\n            clearable={false}\n            sync={false}\n            style={{ width: `${jumpInputWidth.value}px` }}\n            onChange={handleJumpPage}\n          ></NumberInput>\n          {getCountWordOnly(locale.value.page, 1)}\n        </div>\n      )\n    }\n\n    return () => {\n      const ItemTag = props.itemTag || 'li'\n      const ListTag = (props.listTag as any) || (ItemTag === 'li' ? 'ul' : 'div')\n\n      return (\n        <div class={className.value}>\n          <ListTag\n            ref={wrapper}\n            class={nh.be('list')}\n            role={'menubar'}\n            aria-label={'Pagination'}\n            aria-disabled={props.disabled ? 'true' : undefined}\n          >\n            {renderPrev(ItemTag)}\n            {renderItem(ItemTag, 1)}\n            {renderPrevEllipsis(ItemTag)}\n            {midPagers.value.map(page => renderItem(ItemTag, page))}\n            {renderNextEllipsis(ItemTag)}\n            {pagerCount.value > 1 && renderItem(ItemTag, pagerCount.value)}\n            {renderNext(ItemTag)}\n          </ListTag>\n          {renderTotalPlugin()}\n          {renderSizePlugin()}\n          {renderJumpPlugin()}\n        </div>\n      )\n    }\n  }\n})\n","import { booleanProp, buildProps, stateProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ProgressInfoType, ProgressSlots, ProgressStrokeColor } from './symbol'\n\nexport const progressProps = buildProps({\n  percentage: Number,\n  state: stateProp,\n  strokeWidth: Number,\n  infoType: String as PropType<ProgressInfoType>,\n  precision: Number,\n  activated: booleanProp,\n  strokeColor: [String, Array, Function] as PropType<ProgressStrokeColor>,\n  slots: Object as PropType<ProgressSlots>\n})\n\nexport type ProgressProps = ExtractPropTypes<typeof progressProps>\nexport type ProgressCProps = ConfigurableProps<ProgressProps, 'percentage'>\n","export type ProgressInfoType =\n  | 'outside'\n  | 'inside'\n  | 'bubble'\n  | 'bubble-top'\n  | 'bubble-bottom'\n  | 'none'\n\nexport type ProgressStrokeColor =\n  | string\n  | [string, string]\n  | ((percentage: number) => string | [string, string])\n\nexport interface ProgressSlots {\n  default?: () => any\n}\n\nexport const infoTypes = Object.freeze<ProgressInfoType[]>([\n  'outside',\n  'inside',\n  'bubble',\n  'bubble-top',\n  'bubble-bottom',\n  'none'\n])\n","<script setup lang=\"ts\">\nimport { Bubble } from '@/components/bubble'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed } from 'vue'\n\nimport { createStateProp, useNameHelper, useProps } from '@vexip-ui/config'\nimport { callIfFunc, toFixed } from '@vexip-ui/utils'\nimport { progressProps } from './props'\nimport { infoTypes } from './symbol'\n\nimport type { CSSProperties } from 'vue'\n\ndefineOptions({ name: 'Progress' })\n\nconst _props = defineProps(progressProps)\nconst props = useProps('progress', _props, {\n  percentage: {\n    default: 0,\n    validator: value => value >= 0 && value <= 100,\n    static: true\n  },\n  state: createStateProp(),\n  strokeWidth: 8,\n  infoType: {\n    default: 'outside',\n    validator: value => infoTypes.includes(value)\n  },\n  precision: 2,\n  activated: false,\n  strokeColor: {\n    default: null,\n    validator: value => !(Array.isArray(value) && (!value[0] || !value[1]))\n  },\n  slots: () => ({})\n})\n\nconst nh = useNameHelper('progress')\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(`info-${props.infoType}`),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm('activated')]: props.activated\n    }\n  ]\n})\nconst style = computed(() => {\n  return { [nh.cv('percentage')]: props.percentage }\n})\nconst trackStyle = computed(() => {\n  return {\n    height: `${props.strokeWidth}px`,\n    borderRadius: `${props.strokeWidth}px`\n  }\n})\nconst fillerStyle = computed(() => {\n  const style: CSSProperties = {\n    borderRadius: `${props.strokeWidth}px`\n  }\n\n  const strokeColor = callIfFunc(props.strokeColor, props.percentage)\n\n  if (typeof strokeColor === 'string') {\n    style.backgroundColor = strokeColor\n  } else if (Array.isArray(strokeColor)) {\n    style.backgroundImage = `linear-gradient(to right, ${strokeColor[0]} 0%, ${strokeColor[1]} 100%)`\n  }\n\n  return style\n})\nconst useBubble = computed(() => {\n  return props.infoType.includes('bubble')\n})\nconst bubbleType = computed(() => {\n  if (useBubble.value) {\n    return props.infoType.split('-').pop() === 'bottom' ? 'bottom' : 'top'\n  }\n\n  return 'top'\n})\nconst bubbleStyle = computed(() => {\n  if (!useBubble.value) return {}\n\n  const type = bubbleType.value === 'top' ? 'bottom' : 'top'\n\n  return {\n    [type]: `${props.strokeWidth}px`\n  }\n})\nconst percentValue = computed(() => toFixed(props.percentage, props.precision))\n\ndefineExpose({ percentValue })\n</script>\n\n<template>\n  <div\n    :class=\"className\"\n    :style=\"style\"\n    role=\"progressbar\"\n    :aria-valuenow=\"percentValue\"\n    :aria-valuetext=\"`${percentValue}%`\"\n    aria-valuemin=\"0\"\n    aria-valuemax=\"100\"\n  >\n    <div :class=\"nh.be('track')\" :style=\"trackStyle\">\n      <div :class=\"nh.be('filler')\" :style=\"fillerStyle\"></div>\n      <div v-if=\"props.infoType === 'inside'\" :class=\"nh.be('info')\">\n        <slot>\n          <Renderer :renderer=\"props.slots.default\">\n            <span :class=\"nh.be('percentage')\">\n              {{ `${percentValue}%` }}\n            </span>\n          </Renderer>\n        </slot>\n      </div>\n    </div>\n    <div v-if=\"useBubble\" :class=\"nh.be('reference')\">\n      <Bubble\n        inherit\n        :class=\"nh.be('bubble')\"\n        :style=\"bubbleStyle\"\n        :placement=\"bubbleType\"\n        :content-class=\"nh.be('info')\"\n      >\n        <slot>\n          <Renderer :renderer=\"props.slots.default\">\n            <span :class=\"nh.be('percentage')\">\n              {{ `${percentValue}%` }}\n            </span>\n          </Renderer>\n        </slot>\n      </Bubble>\n    </div>\n    <div v-else-if=\"props.infoType === 'outside'\" :class=\"nh.be('info')\">\n      <slot>\n        <Renderer :renderer=\"props.slots.default\">\n          <span :class=\"nh.be('percentage')\">\n            {{ `${percentValue}%` }}\n          </span>\n        </Renderer>\n      </slot>\n    </div>\n  </div>\n</template>\n","import {\n  booleanProp,\n  buildProps,\n  classProp,\n  eventProp,\n  iconProp,\n  sizeProp,\n  stateProp,\n  valueProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\nimport type { ChangeEvent, RadioGroupShape, RadioRawOption, RadioShape } from './symbol'\n\nexport const radioProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  value: valueProp,\n  label: valueProp,\n  labelClass: classProp,\n  disabled: booleanProp,\n  tabIndex: [String, Number],\n  loading: booleanProp,\n  loadingLock: booleanProp,\n  name: String,\n  shape: String as PropType<RadioShape>,\n  onChange: eventProp<EventListener<ChangeEvent>>()\n})\n\nexport type RadioProps = ExtractPropTypes<typeof radioProps>\nexport type RadioCProps = ConfigurableProps<RadioProps>\n\nexport const radioGroupProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  value: valueProp,\n  vertical: booleanProp,\n  disabled: booleanProp,\n  options: Array as PropType<RadioRawOption[]>,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  shape: String as PropType<RadioGroupShape>,\n  onChange: eventProp<EventListener<ChangeEvent>>()\n})\n\nexport type RadioGroupProps = ExtractPropTypes<typeof radioGroupProps>\nexport type RadioGroupCProps = ConfigurableProps<RadioGroupProps>\n","import type { InjectionKey, Ref } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ComponentSize, ComponentState } from '@vexip-ui/config'\n\nexport type RadioShape = 'default' | 'border' | 'button'\nexport type RadioGroupShape = RadioShape | 'button-group'\n\nexport type RadioRawOption =\n  | string\n  | {\n    label: string | number | boolean,\n    content?: string,\n    disabled?: boolean\n  }\n\nexport interface GroupState {\n  currentValue: string | number | boolean,\n  size: ComponentSize,\n  state: ComponentState,\n  disabled: boolean,\n  loading: boolean,\n  loadingIcon: Record<string, any>,\n  loadingLock: boolean,\n  loadingEffect: IconEffect,\n  shape: RadioGroupShape,\n  updateValue(value: string | number | boolean): void,\n  registerInput(input: Ref<HTMLElement | null | undefined>): void,\n  unregisterInput(input: Ref<HTMLElement | null | undefined>): void\n}\n\nexport type ChangeEvent = (value: string | number | boolean) => void\n\nexport const GROUP_STATE = '__VXP_RADIO_GROUP_STATE' as unknown as InjectionKey<GroupState>\n\nexport const radioShapes = Object.freeze<RadioShape[]>(['default', 'border', 'button'])\nexport const radioGroupShapes = Object.freeze<RadioGroupShape[]>([...radioShapes, 'button-group'])\n","<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\n\nimport { computed, inject, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nimport {\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { radioProps } from './props'\nimport { GROUP_STATE, radioShapes } from './symbol'\n\nimport type { ChangeEvent } from './symbol'\n\ndefineOptions({ name: 'Radio' })\n\nconst _props = defineProps(radioProps)\nconst props = useProps('radio', _props, {\n  size: createSizeProp(),\n  state: createStateProp(),\n  value: {\n    default: null,\n    static: true\n  },\n  label: {\n    default: null,\n    static: true,\n    required: true\n  },\n  labelClass: null,\n  disabled: false,\n  tabIndex: 0,\n  loading: false,\n  loadingLock: false,\n  name: {\n    default: '',\n    static: true\n  },\n  shape: {\n    default: 'default',\n    validator: value => radioShapes.includes(value)\n  }\n})\n\nconst emit = defineEmits(['update:value'])\n\ndefineSlots<{ default: () => any, extra: () => any }>()\n\nconst groupState = inject(GROUP_STATE, null)\n\nconst nh = useNameHelper('radio')\nconst icons = useIcons()\nconst currentValue = ref(props.value)\n\nconst input = ref<HTMLInputElement>()\n\nconst size = computed(() => groupState?.size || props.size)\nconst state = computed(() => groupState?.state || props.state)\nconst isDisabled = computed(() => groupState?.disabled || props.disabled)\nconst isLoading = computed(() => groupState?.loading || props.loading)\nconst loadingIcon = computed(() => groupState?.loadingIcon)\nconst isLoadingLock = computed(() => groupState?.loadingLock || false)\nconst loadingEffect = computed(() => groupState?.loadingEffect || '')\nconst shape = computed(() => groupState?.shape || props.shape)\nconst readonly = computed(() => isLoading.value && isLoadingLock.value)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('checked')]: currentValue.value === props.label,\n      [nh.bm('disabled')]: isDisabled.value,\n      [nh.bm('readonly')]: readonly.value,\n      [nh.bm('loading')]: isLoading.value,\n      [nh.bm(size.value)]: size.value !== 'default',\n      [nh.bm(state.value)]: state.value !== 'default',\n      [nh.bm(shape.value)]: shape.value !== 'default' && shape.value !== 'button-group'\n    }\n  ]\n})\nconst isButton = computed(() => shape.value === 'button' || shape.value === 'button-group')\n\nwatch(\n  () => props.value,\n  value => {\n    currentValue.value = value\n  }\n)\n\nif (groupState) {\n  currentValue.value = groupState.currentValue\n\n  watch(() => groupState.currentValue, emitChange)\n\n  onMounted(() => {\n    groupState.registerInput(input)\n  })\n\n  onBeforeUnmount(() => {\n    groupState.unregisterInput(input)\n  })\n}\n\ndefineExpose({ currentValue, input })\n\nfunction emitChange(value: string | number | boolean) {\n  if (currentValue.value === value) return\n\n  currentValue.value = value\n\n  emit('update:value', value)\n  emitEvent(props.onChange as ChangeEvent, value)\n}\n\nfunction handleChange() {\n  if (isDisabled.value || readonly.value) {\n    return\n  }\n\n  emitChange(props.label)\n\n  if (groupState && currentValue.value === props.label) {\n    groupState.updateValue(currentValue.value)\n  }\n}\n</script>\n\n<template>\n  <label :class=\"className\">\n    <input\n      ref=\"input\"\n      type=\"radio\"\n      :class=\"nh.be('input')\"\n      :checked=\"currentValue === props.label\"\n      :disabled=\"isDisabled || readonly\"\n      :tabindex=\"props.tabIndex\"\n      :name=\"props.name\"\n      @submit.prevent\n      @change=\"handleChange\"\n      @click.stop\n    />\n    <span :class=\"[nh.be('signal'), isLoading && nh.bem('signal', 'active')]\"></span>\n    <span :class=\"[nh.be('label'), props.labelClass]\">\n      <CollapseTransition\n        v-if=\"isButton\"\n        appear\n        horizontal\n        fade-effect\n      >\n        <div v-if=\"isLoading\" :class=\"nh.be('loading')\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"loadingEffect || icons.loading.effect\"\n            :icon=\"loadingIcon || icons.loading.icon\"\n            label=\"loading\"\n          ></Icon>\n        </div>\n      </CollapseTransition>\n      <slot>{{ props.label }}</slot>\n      <span :class=\"nh.be('extra')\" @click.capture.prevent>\n        <slot name=\"extra\"></slot>\n      </span>\n    </span>\n  </label>\n</template>\n","<script setup lang=\"ts\">\nimport { Radio } from '@/components/radio'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { debounceMinor, isClient, isObject } from '@vexip-ui/utils'\nimport { radioGroupProps } from './props'\nimport { GROUP_STATE, radioGroupShapes } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type { ChangeEvent } from './symbol'\n\ndefineOptions({ name: 'RadioGroup' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  getFieldValue,\n  setFieldValue\n} = useFieldStore<string | number | boolean>(focus)\n\nconst _props = defineProps(radioGroupProps)\nconst props = useProps('radioGroup', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  value: {\n    default: () => getFieldValue(),\n    static: true\n  },\n  vertical: false,\n  disabled: () => disabled.value,\n  options: {\n    default: () => [],\n    static: true\n  },\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  shape: {\n    default: 'default',\n    validator: value => radioGroupShapes.includes(value)\n  }\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst nh = useNameHelper('radio-group')\nconst currentValue = ref(props.value)\nconst inputSet = new Set<Ref<HTMLElement | null | undefined>>()\n\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.ns('radio-vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('vertical')]: props.vertical,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('readonly')]: readonly.value,\n      [nh.bm('loading')]: props.loading,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm(props.shape)]: props.shape !== 'default'\n    }\n  ]\n})\n\nconst groupState = reactive({\n  currentValue,\n  size: toRef(props, 'size'),\n  state: toRef(props, 'state'),\n  disabled: toRef(props, 'disabled'),\n  loading: toRef(props, 'loading'),\n  loadingIcon: toRef(props, 'loadingIcon'),\n  loadingLock: toRef(props, 'loadingLock'),\n  loadingEffect: toRef(props, 'loadingEffect'),\n  shape: toRef(props, 'shape'),\n  updateValue: debounceMinor(updateValue),\n  registerInput,\n  unregisterInput\n})\n\n// 此处直接定义 reactive 会出现类型推断错误，存疑？\nprovide(GROUP_STATE, groupState)\n\nwatch(\n  () => props.value,\n  value => {\n    currentValue.value = value\n  }\n)\n\ndefineExpose({\n  idFor,\n  focus,\n  blur: () => {\n    for (const input of inputSet) {\n      input.value?.blur()\n    }\n  }\n})\n\nfunction updateValue(value: string | number | boolean) {\n  if (currentValue.value !== value) {\n    currentValue.value = value\n\n    emit('update:value', value)\n    setFieldValue(value)\n    emitEvent(props.onChange as ChangeEvent, value)\n    validateField()\n  }\n}\n\nfunction registerInput(input: Ref<HTMLElement | null | undefined>) {\n  inputSet.add(input)\n}\n\nfunction unregisterInput(input: Ref<HTMLElement | null | undefined>) {\n  inputSet.delete(input)\n}\n\nfunction focus(options?: FocusOptions) {\n  const input = Array.from(inputSet)[0]?.value\n\n  if (isClient && input && document.activeElement !== input) {\n    input.focus(options)\n  }\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    :class=\"className\"\n    role=\"radiogroup\"\n    :aria-orientation=\"vertical ? 'vertical' : 'horizontal'\"\n    :aria-labelledby=\"labelId\"\n  >\n    <slot>\n      <template v-for=\"item in props.options\" :key=\"item\">\n        <Radio\n          v-if=\"isObject(item)\"\n          inherit\n          :label=\"item.label\"\n          :disabled=\"item.disabled\"\n        >\n          {{ item.content || item.label }}\n        </Radio>\n        <Radio v-else inherit :label=\"item\">\n          {{ item }}\n        </Radio>\n      </template>\n    </slot>\n  </div>\n</template>\n","import { buildProps, iconProp, sizeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ResultSlots, ResultType } from './symbol'\n\nexport const resultProps = buildProps({\n  title: String,\n  size: sizeProp,\n  type: String as PropType<ResultType>,\n  icon: iconProp,\n  iconColor: String,\n  description: String,\n  slots: Object as PropType<ResultSlots>\n})\n\nexport type ResultProps = ExtractPropTypes<typeof resultProps>\nexport type ResultCProps = ConfigurableProps<ExtractPropTypes<typeof resultProps>>\n","export type ResultType = 'primary' | 'info' | 'success' | 'warning' | 'error'\n\nexport interface ResultSlots {\n  icon?: () => any,\n  title?: () => any,\n  description?: () => any,\n  extra?: () => any\n}\n\nexport const resultTypes = Object.freeze<ResultType[]>([\n  'primary',\n  'info',\n  'success',\n  'warning',\n  'error'\n])\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed } from 'vue'\n\nimport { createIconProp, createSizeProp, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { resultProps } from './props'\nimport { resultTypes } from './symbol'\n\nimport type { ResultSlots } from './symbol'\n\ndefineOptions({ name: 'Result' })\n\nconst _props = defineProps(resultProps)\nconst props = useProps('result', _props, {\n  title: '',\n  size: createSizeProp(),\n  type: {\n    default: 'primary',\n    validator: value => resultTypes.includes(value)\n  },\n  icon: createIconProp(),\n  iconColor: '',\n  description: '',\n  slots: () => ({})\n})\n\nconst slots = defineSlots<ResultSlots>()\n\nconst nh = useNameHelper('result')\nconst icons = useIcons()\n\nconst predefinedIcons = computed(() => ({\n  primary: icons.value.info,\n  info: icons.value.info,\n  success: icons.value.success,\n  warning: icons.value.warning,\n  error: icons.value.error\n}))\n\nconst iconComp = computed(() => {\n  return props.icon ? { icon: props.icon } : predefinedIcons.value[props.type]\n})\nconst hasTitle = computed(() => !!(slots.title || props.title || props.slots.title))\nconst hasIcon = computed(() => !!(slots.icon || props.type || props.icon || props.slots.icon))\nconst hasDescription = computed(\n  () => !!(slots.description || props.description || props.slots.description)\n)\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm(props.type)]: props.type,\n    [nh.bm(props.size)]: props.size !== 'default'\n  }\n})\nconst style = computed(() => {\n  if (props.iconColor) {\n    return nh.cvm({\n      'icon-color': props.iconColor\n    })\n  }\n\n  return {}\n})\n</script>\n\n<template>\n  <div :class=\"className\" :style=\"style\">\n    <div v-if=\"hasIcon\" :class=\"nh.be('icon')\">\n      <slot name=\"icon\">\n        <Renderer :renderer=\"props.slots.icon\">\n          <Icon v-bind=\"iconComp\" :class=\"nh.be('icon')\" :style=\"{ color: props.iconColor }\"></Icon>\n        </Renderer>\n      </slot>\n    </div>\n    <div v-if=\"hasTitle\" :class=\"nh.be('title')\">\n      <slot name=\"title\">\n        <Renderer :renderer=\"props.slots.title\">\n          {{ props.title }}\n        </Renderer>\n      </slot>\n    </div>\n    <div v-if=\"hasDescription\" :class=\"nh.be('description')\">\n      <slot name=\"description\">\n        <Renderer :renderer=\"props.slots.description\">\n          {{ props.description }}\n        </Renderer>\n      </slot>\n    </div>\n    <div v-if=\"slots.extra || props.slots.extra\" :class=\"nh.be('extra')\">\n      <slot name=\"extra\">\n        <Renderer :renderer=\"props.slots.extra\"></Renderer>\n      </slot>\n    </div>\n  </div>\n</template>\n","import { defineComponent, h, provide, renderSlot } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { skeletonGroupProps } from './props'\nimport { GROUP_STATE } from './symbol'\n\nexport default defineComponent({\n  name: 'SkeletonGroup',\n  props: skeletonGroupProps,\n  setup(_props, { slots }) {\n    const props = useProps('skeletonGroup', _props, {\n      size: null,\n      tag: false,\n      itemTag: null,\n      activated: false,\n      round: false,\n      circle: false,\n      block: false,\n      loading: true\n    })\n\n    const nh = useNameHelper('skeletonGroup')\n\n    provide(GROUP_STATE, props)\n\n    return () => {\n      if (props.tag) {\n        return h(\n          typeof props.tag === 'string' ? props.tag : 'div',\n          {\n            class: [nh.b(), props.inherit && nh.bm('inherit')],\n            role: 'group'\n          },\n          {\n            default: () => slots.default?.()\n          }\n        )\n      }\n\n      return renderSlot(slots, 'default')\n    }\n  }\n})\n","<script setup lang=\"ts\">\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, ref } from 'vue'\n\nimport { useHoverDelay, useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useSetTimeout } from '@vexip-ui/hooks'\n\nimport type { PropType } from 'vue'\nimport type { TooltipExposed } from '@/components/tooltip'\nimport type { SliderTipProps } from './symbol'\n\ndefineOptions({ name: 'SliderTrigger' })\n\nconst props = defineProps({\n  value: {\n    type: Number,\n    default: 0\n  },\n  tipTransfer: {\n    type: [Boolean, String],\n    default: false\n  },\n  hideTip: {\n    type: Boolean,\n    default: false\n  },\n  vertical: {\n    type: Boolean,\n    default: false\n  },\n  min: {\n    type: Number,\n    default: 0\n  },\n  max: {\n    type: Number,\n    default: 100\n  },\n  disabled: {\n    type: Boolean,\n    default: false\n  },\n  loading: {\n    type: Boolean,\n    default: false\n  },\n  reverse: {\n    type: Boolean,\n    default: false\n  },\n  sliding: {\n    type: Boolean,\n    default: false\n  },\n  tipHover: {\n    type: Boolean,\n    default: false\n  },\n  tipProps: {\n    type: Object as PropType<SliderTipProps>,\n    default: () => ({})\n  }\n})\n\nconst emit = defineEmits(['key-minus', 'key-plus'])\n\ndefineSlots<{ default: () => any, tip: () => any }>()\n\nconst nh = useNameHelper('slider')\nconst hoverDelay = useHoverDelay()\n\nconst isTipShow = ref(false)\n\nconst tooltip = ref<(InstanceType<typeof Tooltip> & TooltipExposed) | null>(null)\nconst handler = ref<HTMLElement>()\n\nconst { timer } = useSetTimeout()\nconst { target: wrapper } = useModifier({\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (modifier.up || modifier.down || modifier.left || modifier.right) {\n      disableEvent(event)\n\n      const extraType = event.ctrlKey\n        ? 'ctrl'\n        : event.shiftKey\n          ? 'shift'\n          : event.altKey\n            ? 'alt'\n            : undefined\n\n      if (modifier.up || modifier.left) {\n        emit('key-minus', extraType)\n      } else {\n        emit('key-plus', extraType)\n      }\n    }\n  }\n})\n\nconst tipClass = computed(() => [nh.be('tip'), props.tipProps?.tipClass])\n\ndefineExpose({ updateTooltip, focus, blur })\n\nfunction showTooltip() {\n  clearTimeout(timer.hover)\n\n  if (!props.disabled) {\n    timer.hover = setTimeout(() => {\n      isTipShow.value = true\n    }, hoverDelay.value)\n  }\n}\n\nfunction hideTooltip() {\n  clearTimeout(timer.hover)\n\n  timer.hover = setTimeout(() => {\n    isTipShow.value = false\n  }, hoverDelay.value)\n}\n\nfunction disableEvent<E extends Event>(event: E) {\n  if (event.cancelable) {\n    event.stopPropagation()\n    event.preventDefault()\n  }\n}\n\nfunction updateTooltip() {\n  if (tooltip.value) {\n    tooltip.value.updatePopper()\n  }\n}\n\nfunction focus(options?: FocusOptions) {\n  handler.value?.focus(options)\n}\n\nfunction blur() {\n  handler.value?.blur()\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"nh.be('trigger')\"\n    tabindex=\"-1\"\n    @touchstart=\"disableEvent\"\n  >\n    <Tooltip\n      ref=\"tooltip\"\n      :placement=\"vertical ? 'right' : 'top'\"\n      v-bind=\"tipProps\"\n      trigger=\"custom\"\n      :transfer=\"tipTransfer\"\n      :visible=\"isTipShow || sliding\"\n      :tip-class=\"tipClass\"\n      :disabled=\"hideTip\"\n      :no-hover=\"!tipHover\"\n      @tip-enter=\"showTooltip\"\n      @tip-leave=\"hideTooltip\"\n    >\n      <template #trigger>\n        <div\n          ref=\"handler\"\n          :class=\"{\n            [nh.be('button')]: true,\n            [nh.bem('button', 'loading')]: loading,\n            [nh.bem('button', 'sliding')]: sliding\n          }\"\n          role=\"slider\"\n          tabindex=\"0\"\n          :aria-valuenow=\"value\"\n          :aria-valuemin=\"min\"\n          :aria-valuemax=\"max\"\n          :aria-disabled=\"disabled\"\n          @mouseenter=\"showTooltip\"\n          @mouseleave=\"hideTooltip\"\n        >\n          <slot>\n            <div :class=\"nh.be('handler')\"></div>\n          </slot>\n        </div>\n      </template>\n      <slot name=\"tip\">\n        {{ value }}\n      </slot>\n    </Tooltip>\n  </div>\n</template>\n","import { booleanProp, booleanStringProp, buildProps, eventProp, stateProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { SliderRawMarkers, SliderSlots, SliderTipProps } from './symbol'\n\nexport const sliderProps = buildProps({\n  state: stateProp,\n  value: [Number, Array] as PropType<number | number[]>,\n  min: Number,\n  max: Number,\n  step: Number,\n  vertical: booleanProp,\n  hideTip: booleanProp,\n  tipTransfer: booleanStringProp,\n  disabled: booleanProp,\n  loading: booleanProp,\n  loadingLock: booleanProp,\n  reverse: booleanProp,\n  range: booleanProp,\n  markers: [Object, Array] as PropType<SliderRawMarkers>,\n  markerOnly: booleanProp,\n  tipHover: booleanProp,\n  flipMarker: booleanProp,\n  triggerFade: booleanProp,\n  tipProps: Object as PropType<SliderTipProps>,\n  sync: booleanProp,\n  rangeDraggable: booleanProp,\n  slots: Object as PropType<SliderSlots>,\n  onChange: eventProp<(value: number | number[]) => void>(),\n  onInput: eventProp<(value: number | number[]) => void>()\n})\n\nexport type SliderProps = ExtractPropTypes<typeof sliderProps>\nexport type SliderCProps = ConfigurableProps<SliderProps>\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\n\nimport SliderTrigger from './slider-trigger.vue'\nimport {\n  createStateProp,\n  emitEvent,\n  useHoverDelay,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { useMoving, useSetTimeout } from '@vexip-ui/hooks'\nimport { decimalLength, throttle, toFixed } from '@vexip-ui/utils'\nimport { sliderProps } from './props'\n\nimport type { SliderMarker, SliderSlots } from './symbol'\n\nconst enum TriggerType {\n  START = 0,\n  END = 1\n}\n\ndefineOptions({ name: 'Slider' })\n\nconst { idFor, state, labelId, disabled, loading, validateField, getFieldValue, setFieldValue } =\n  useFieldStore<number | number[]>(focus)\n\nconst _props = defineProps(sliderProps)\nconst props = useProps('slider', _props, {\n  state: createStateProp(state),\n  value: {\n    default: () => getFieldValue() ?? 0,\n    static: true\n  },\n  min: 0,\n  max: 100,\n  step: {\n    default: 1,\n    validator: value => value > 0\n  },\n  vertical: false,\n  hideTip: false,\n  tipTransfer: null,\n  disabled: () => disabled.value,\n  loading: () => loading.value,\n  loadingLock: false,\n  reverse: false,\n  range: false,\n  markers: null,\n  markerOnly: false,\n  tipHover: false,\n  flipMarker: false,\n  triggerFade: false,\n  tipProps: () => ({}),\n  sync: false,\n  rangeDraggable: false,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst slots = defineSlots<SliderSlots>()\n\nconst nh = useNameHelper('slider')\nconst hoverDelay = useHoverDelay()\n\nconst { timer } = useSetTimeout()\n\nconst stepOneValue = ref([0, 0]) // 按每 step 为 1 的 value\nconst sliding = ref([false, false])\nconst triggerType = ref(TriggerType.END)\nconst hovered = ref(false)\nconst triggerShow = ref(false)\n\nconst track = ref<HTMLElement>()\nconst startTrigger = ref<InstanceType<typeof SliderTrigger>>()\nconst endTrigger = ref<InstanceType<typeof SliderTrigger>>()\n\nconst markerList = computed(() => {\n  const markers = props.markers\n  const list: { value: number, marker: SliderMarker }[] = []\n\n  if (!markers) return list\n\n  if (Array.isArray(markers)) {\n    for (const raw of markers) {\n      const { value, ...marker } = typeof raw === 'number' ? { value: raw } : raw\n\n      if (!Number.isNaN(value)) {\n        list.push({ value, marker })\n      }\n    }\n  } else {\n    for (const value of Object.keys(markers)) {\n      const number = parseFloat(value)\n      const marker = markers[value]\n\n      if (!Number.isNaN(number)) {\n        list.push({\n          value: number,\n          marker: typeof marker === 'string' ? { label: marker } : marker\n        })\n      }\n    }\n  }\n\n  return list.sort((prev, next) => prev.value - next.value)\n})\nconst hasMarkerLabel = computed(() => !!markerList.value.find(({ marker }) => marker.label))\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst canDragRange = computed(() => props.range && props.rangeDraggable)\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm(props.state)]: props.state !== 'default',\n    [nh.bm('vertical')]: props.vertical,\n    [nh.bm('sliding')]: sliding.value[1] || sliding.value[0],\n    [nh.bm('disabled')]: props.disabled,\n    [nh.bm('readonly')]: readonly.value,\n    [nh.bm('loading')]: props.loading,\n    [nh.bm('reverse')]: props.reverse,\n    [nh.bm('with-marker')]: hasMarkerLabel.value,\n    [nh.bm('flip-marker')]: props.flipMarker,\n    [nh.bm('hide-trigger')]: props.triggerFade && !triggerShow.value,\n    [nh.bm('range-draggable')]: canDragRange.value\n  }\n})\nconst stepDigit = computed(() => decimalLength(props.step))\n// 按每 step 为 1 算的最小值\nconst stepOneMin = computed(() => Math.ceil(Math.min(props.min, props.max) / props.step))\n// 按每 step 为 1 算的最大值\nconst stepOneMax = computed(() => Math.floor(Math.max(props.min, props.max) / props.step))\nconst truthValue = computed(() => {\n  return [\n    toFixed(stepOneValue.value[0] * props.step, stepDigit.value),\n    toFixed(stepOneValue.value[1] * props.step, stepDigit.value)\n  ]\n})\nconst stepOneTotal = computed(() => stepOneMax.value - stepOneMin.value || 1)\nconst triggerPercent = computed(() => {\n  return [toPercent(stepOneValue.value[0]), toPercent(stepOneValue.value[1])]\n})\nconst fillerStyle = computed(() => {\n  const { vertical, reverse } = props\n\n  return {\n    [vertical ? (reverse ? 'bottom' : 'top') : reverse ? 'right' : 'left']:\n      `${Math.min(triggerPercent.value[0], triggerPercent.value[1])}%`,\n    [vertical ? 'height' : 'width']:\n      `${Math.abs(triggerPercent.value[0] - triggerPercent.value[1])}%`\n  }\n})\nconst startTriggerStyle = computed(() => {\n  const { vertical, reverse } = props\n\n  return {\n    [reverse ? 'bottom' : 'top']: vertical ? `${triggerPercent.value[0]}%` : '50%',\n    [reverse ? 'right' : 'left']: vertical ? '50%' : `${triggerPercent.value[0]}%`,\n    zIndex: triggerType.value === TriggerType.START ? 1 : undefined,\n    transform: `translate(${reverse ? '' : '-'}50%, ${reverse ? '' : '-'}50%)`\n  }\n})\nconst endTriggerStyle = computed(() => {\n  const { vertical, reverse } = props\n\n  return {\n    [reverse ? 'bottom' : 'top']: vertical ? `${triggerPercent.value[1]}%` : '50%',\n    [reverse ? 'right' : 'left']: vertical ? '50%' : `${triggerPercent.value[1]}%`,\n    zIndex: triggerType.value === TriggerType.END ? 1 : undefined,\n    transform: `translate(${reverse ? '' : '-'}50%, ${reverse ? '' : '-'}50%)`\n  }\n})\nconst isDisabled = computed(() => props.disabled || readonly.value)\n\nconst commonSlotParams = shallowReadonly(\n  reactive({\n    values: truthValue,\n    sliding: sliding,\n    percent: triggerPercent,\n    disabled: toRef(props, 'disabled'),\n    loading: toRef(props, 'loading')\n  })\n)\n\nconst { target: filler } = useMoving({\n  disabled: computed(() => !canDragRange.value || isDisabled.value),\n  onStart: (state, event) => {\n    if (!track.value || event.button > 0) {\n      return false\n    }\n\n    clearTimeout(timer.sliding)\n    event.stopPropagation()\n    event.preventDefault()\n\n    trackRect = track.value.getBoundingClientRect()\n    state.startValue = stepOneValue.value[TriggerType.START]\n    state.endValue = stepOneValue.value[TriggerType.END]\n    state.valueDiff = (state.endValue as number) - (state.startValue as number)\n  },\n  onMove: (state, event) => {\n    if (!trackRect) {\n      return\n    }\n\n    event.preventDefault()\n\n    const vertical = props.vertical\n    const reverse = props.reverse\n    const delta = vertical ? state.deltaY : state.deltaX\n\n    for (let i = 0; i < 2; ++i) {\n      const type = i ? TriggerType.END : TriggerType.START\n      stepOneValue.value[type] =\n        (reverse ? -1 : 1) *\n          (delta / trackRect[vertical ? 'height' : 'width']) *\n          stepOneTotal.value +\n        Number(state[i ? 'endValue' : 'startValue'])\n    }\n\n    verifyValue()\n\n    if (stepOneValue.value[TriggerType.START] === stepOneMin.value) {\n      stepOneValue.value[TriggerType.END] =\n        stepOneValue.value[TriggerType.START] + (state.valueDiff as number)\n    } else if (stepOneValue.value[TriggerType.END] === stepOneMax.value) {\n      stepOneValue.value[TriggerType.START] =\n        stepOneValue.value[TriggerType.END] - (state.valueDiff as number)\n    }\n\n    emitChange('input')\n  },\n  onEnd: () => emitChange()\n})\n\nparseValue(props.value)\nverifyValue()\n\nlet lastValue: number | number[] = props.range\n  ? truthValue.value[0] > truthValue.value[1]\n    ? [truthValue.value[1], truthValue.value[0]]\n    : [truthValue.value[0], truthValue.value[1]]\n  : truthValue.value[1]\nlet lastInputValue: number | number[] = Array.isArray(lastValue) ? [...lastValue] : lastValue\n\nwatch(\n  () => props.value,\n  value => {\n    if (isEqualValue(lastValue, value)) {\n      return\n    }\n\n    parseValue(value)\n    verifyValue()\n  }\n)\nwatch(\n  () => props.step,\n  () => {\n    parseValue(props.value)\n    verifyValue()\n  }\n)\n\ndefineExpose({\n  idFor,\n  sliding,\n  track,\n  startTrigger,\n  endTrigger,\n  isValueInRange,\n  focus,\n  blur\n})\n\nfunction toPercent(value: string | number) {\n  return ((parseFloat(value as string) - stepOneMin.value) / stepOneTotal.value) * 100\n}\n\nfunction parseValue(value: number | number[]) {\n  if (props.range) {\n    const values = Array.isArray(value) ? value : [value, 100]\n\n    stepOneValue.value = [values[0] / props.step, values[1] / props.step]\n  } else {\n    stepOneValue.value = [stepOneMin.value, (Array.isArray(value) ? value[0] : value) / props.step]\n  }\n}\n\nfunction verifyValue() {\n  stepOneValue.value = stepOneValue.value.map(value => {\n    let computedValue = Math.max(stepOneMin.value, Math.min(stepOneMax.value, Math.round(value)))\n\n    if (props.markerOnly && markerList.value.length) {\n      let nearest = Infinity\n      let nearestMarker = 0\n\n      for (const { value } of markerList.value) {\n        const delta = Math.abs(computedValue * props.step - value)\n\n        if (nearest > delta) {\n          nearest = delta\n          nearestMarker = value\n        }\n      }\n\n      computedValue = nearestMarker / props.step\n    }\n\n    return computedValue\n  })\n}\n\nfunction setTriggerFade() {\n  if (hovered.value || sliding.value[0] || sliding.value[1]) return\n\n  triggerShow.value = false\n}\n\nfunction handlePointerEnter() {\n  clearTimeout(timer.hover)\n\n  timer.hover = setTimeout(() => {\n    hovered.value = true\n    triggerShow.value = true\n  }, hoverDelay.value)\n}\n\nfunction handlePointerLeave() {\n  clearTimeout(timer.hover)\n\n  timer.hover = setTimeout(() => {\n    hovered.value = false\n    setTriggerFade()\n  }, hoverDelay.value)\n}\n\nfunction emitChange(type: 'change' | 'input' = 'change', sync = props.sync) {\n  const [start, end] = truthValue.value\n  const value = props.range ? (start > end ? [end, start] : [start, end]) : end\n\n  if (type === 'change') {\n    if (isEqualValue(lastValue, value)) return\n\n    lastValue = value\n\n    if (!sync) {\n      lastInputValue = value\n\n      emit('update:value', value)\n      setFieldValue(value)\n    }\n\n    emitEvent(props.onChange, value)\n\n    if (!sync) {\n      validateField()\n    }\n  } else {\n    if (isEqualValue(lastInputValue, value)) return\n\n    lastInputValue = value\n\n    if (sync) {\n      emit('update:value', value)\n      setFieldValue(value)\n    }\n\n    emitEvent(props.onInput, value)\n\n    if (sync) {\n      validateField()\n    }\n  }\n}\n\nlet trackRect: DOMRect | null = null\n\nfunction computePointedValue(event: PointerEvent) {\n  if (!trackRect) return\n\n  const vertical = props.vertical\n  const reverse = props.reverse\n  const client = vertical ? event.clientY : event.clientX\n\n  stepOneValue.value[triggerType.value] =\n    (reverse ? -1 : 1) *\n      ((client - trackRect[vertical ? (reverse ? 'bottom' : 'top') : reverse ? 'right' : 'left']) /\n        trackRect[vertical ? 'height' : 'width']) *\n      stepOneTotal.value +\n    stepOneMin.value\n}\n\nfunction isEqualValue(prev: number | number[], current: number | number[]) {\n  if (Array.isArray(prev) && Array.isArray(current)) {\n    return prev[0] === current[0] && prev[1] === current[1]\n  }\n\n  return prev === current\n}\n\nconst throttleMove = throttle((event: PointerEvent) => {\n  if (!trackRect || props.disabled) return\n\n  event.preventDefault()\n\n  computePointedValue(event)\n  verifyValue()\n\n  if (startTrigger.value) {\n    startTrigger.value.updateTooltip()\n  }\n\n  if (endTrigger.value) {\n    endTrigger.value.updateTooltip()\n  }\n\n  // const [start, end] = truthValue.value\n  // const value = props.range ? (start > end ? [end, start] : [start, end]) : end\n\n  // if (!isEqualValue(lastValue, value)) {\n  //   lastValue = value\n  //   emitEvent(props.onInput, value)\n  // }\n  emitChange('input')\n})\n\nfunction handleTrackDown(event: PointerEvent) {\n  if (!track.value || isDisabled.value) return\n\n  clearTimeout(timer.sliding)\n  event.stopPropagation()\n  event.preventDefault()\n\n  trackRect = track.value.getBoundingClientRect()\n\n  if (props.range) {\n    const { vertical, reverse } = props\n    const client = vertical ? event.clientY : event.clientX\n    const downPercent =\n      ((reverse\n        ? trackRect[vertical ? 'bottom' : 'right'] - client\n        : client - trackRect[vertical ? 'top' : 'left']) /\n        trackRect[vertical ? 'height' : 'width']) *\n      100\n\n    triggerType.value =\n      Math.abs(downPercent - triggerPercent.value[0]) <\n      Math.abs(downPercent - triggerPercent.value[1])\n        ? TriggerType.START\n        : TriggerType.END\n  } else {\n    triggerType.value = TriggerType.END\n  }\n\n  sliding.value[triggerType.value] = true\n  triggerShow.value = true\n\n  computePointedValue(event)\n  verifyValue()\n  emitChange('input')\n\n  document.addEventListener('pointermove', handleMove)\n  document.addEventListener('pointerup', handleMoveEnd)\n}\n\nfunction handleMove(event: PointerEvent) {\n  throttleMove(event)\n}\n\nfunction handleMoveEnd() {\n  trackRect = null\n\n  document.removeEventListener('pointermove', handleMove)\n  document.removeEventListener('pointerup', handleMoveEnd)\n\n  emitChange()\n\n  timer.sliding = setTimeout(() => {\n    sliding.value[triggerType.value] = false\n    setTriggerFade()\n  }, 250)\n}\n\nfunction disableEvent<E extends Event>(event: E) {\n  if (event.cancelable) {\n    event.stopPropagation()\n    event.preventDefault()\n  }\n}\n\nfunction getPointStyle(value: number | string) {\n  const { vertical, reverse } = props\n  value = toPercent(value)\n\n  return {\n    [reverse ? 'bottom' : 'top']: vertical ? `${value}%` : '50%',\n    [reverse ? 'right' : 'left']: vertical ? '50%' : `${value}%`,\n    transform: `translate(${reverse ? '' : '-'}50%, ${reverse ? '' : '-'}50%)`\n  }\n}\n\nfunction getMarkerStyle(value: number | string) {\n  const { vertical, reverse } = props\n  value = toPercent(value)\n\n  return {\n    [reverse ? 'bottom' : 'top']: vertical ? `${value}%` : undefined,\n    [reverse ? 'right' : 'left']: vertical ? undefined : `${value}%`,\n    transform: `translate${vertical ? 'Y' : 'X'}(${reverse ? '' : '-'}50%)`\n  }\n}\n\nfunction isValueInRange(value: number | string) {\n  const number = parseFloat(value as string)\n\n  if (Number.isNaN(number)) return false\n\n  if (props.range) {\n    const min = Math.min(truthValue.value[0], truthValue.value[1])\n    const max = Math.max(truthValue.value[0], truthValue.value[1])\n\n    return number >= min && number <= max\n  } else {\n    return number <= truthValue.value[1]\n  }\n}\n\nfunction adjustValue(type: TriggerType, delta: number, emitEvent = false) {\n  stepOneValue.value[type] += delta\n\n  verifyValue()\n  emitEvent && emitChange()\n}\n\nfunction handlePlus(type: TriggerType, extra: 'ctrl' | 'shift' | 'alt') {\n  if (isDisabled.value) return\n\n  if (props.markerOnly || extra === 'alt') {\n    if (!markerList.value.length) return\n\n    const value = truthValue.value[type]\n\n    for (const { value: markerValue } of markerList.value) {\n      if (markerValue > value) {\n        stepOneValue.value[type] = markerValue\n        break\n      }\n    }\n\n    emitChange()\n  } else {\n    adjustValue(type, extra === 'shift' ? 5 : extra === 'ctrl' ? 20 : 1, true)\n  }\n}\n\nfunction handleMinus(type: TriggerType, extra: 'ctrl' | 'shift' | 'alt') {\n  if (isDisabled.value) return\n\n  if (props.markerOnly || extra === 'alt') {\n    if (!markerList.value.length) return\n\n    const value = truthValue.value[type]\n\n    for (let i = markerList.value.length - 1; i >= 0; --i) {\n      const { value: markerValue } = markerList.value[i]\n\n      if (markerValue < value) {\n        stepOneValue.value[type] = markerValue\n        break\n      }\n    }\n\n    emitChange()\n  } else {\n    adjustValue(type, extra === 'shift' ? -5 : extra === 'ctrl' ? -20 : -1)\n  }\n}\n\nfunction focus(options?: FocusOptions) {\n  ;(startTrigger.value || endTrigger.value)?.focus(options)\n}\n\nfunction blur() {\n  ;(startTrigger.value || endTrigger.value)?.blur()\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    :class=\"className\"\n    tabindex=\"-1\"\n    role=\"group\"\n    :aria-labelledby=\"labelId\"\n    @pointerdown=\"handleTrackDown\"\n    @pointerenter=\"handlePointerEnter\"\n    @pointerleave=\"handlePointerLeave\"\n    @touchstart=\"disableEvent\"\n  >\n    <div :class=\"nh.be('container')\">\n      <div ref=\"track\" :class=\"nh.be('track')\"></div>\n      <slot name=\"filler\" v-bind=\"commonSlotParams\">\n        <Renderer :renderer=\"props.slots.filler\" :data=\"commonSlotParams\">\n          <div ref=\"filler\" :class=\"nh.be('filler')\" :style=\"fillerStyle\">\n            <div :class=\"nh.be('filler-inner')\"></div>\n          </div>\n        </Renderer>\n      </slot>\n      <template v-if=\"markerList.length\">\n        <div :class=\"nh.be('points')\">\n          <div\n            v-for=\"{ value, marker } in markerList\"\n            :key=\"value\"\n            :class=\"[nh.be('point'), isValueInRange(value) && nh.bem('point', 'in-range')]\"\n            :style=\"getPointStyle(value)\"\n          >\n            <slot\n              name=\"point\"\n              v-bind=\"commonSlotParams\"\n              :marker=\"marker\"\n              :marker-value=\"value\"\n              :in-range=\"isValueInRange(value)\"\n            >\n              <Renderer\n                :renderer=\"props.slots.point\"\n                :data=\"{\n                  ...commonSlotParams,\n                  marker,\n                  markerValue: value,\n                  inRange: isValueInRange(value)\n                }\"\n              >\n                <span :class=\"nh.be('dot')\"></span>\n              </Renderer>\n            </slot>\n          </div>\n        </div>\n        <div :class=\"nh.be('markers')\">\n          <template v-for=\"{ value, marker } in markerList\" :key=\"value\">\n            <div\n              v-bind=\"marker.attrs\"\n              :class=\"[nh.be('marker'), marker.class]\"\n              :style=\"[getMarkerStyle(value), marker.style as any]\"\n            >\n              <slot\n                name=\"marker\"\n                v-bind=\"commonSlotParams\"\n                :marker=\"marker\"\n                :marker-value=\"value\"\n                :in-range=\"isValueInRange(value)\"\n              >\n                <Renderer\n                  :renderer=\"props.slots.marker\"\n                  :data=\"{\n                    ...commonSlotParams,\n                    marker,\n                    markerValue: value,\n                    inRange: isValueInRange(value)\n                  }\"\n                >\n                  {{ marker.label }}\n                </Renderer>\n              </slot>\n            </div>\n          </template>\n        </div>\n      </template>\n      <SliderTrigger\n        v-if=\"props.range\"\n        ref=\"startTrigger\"\n        :value=\"truthValue[0]\"\n        :tip-transfer=\"props.tipTransfer\"\n        :hide-tip=\"props.hideTip\"\n        :vertical=\"props.vertical\"\n        :min=\"props.min\"\n        :max=\"props.max\"\n        :disabled=\"props.disabled\"\n        :loading=\"props.loading\"\n        :reverse=\"props.reverse\"\n        :sliding=\"sliding[0]\"\n        :tip-hover=\"props.tipHover\"\n        :style=\"startTriggerStyle\"\n        :tip-props=\"props.tipProps\"\n        @key-plus=\"handlePlus(0, $event)\"\n        @key-minus=\"handleMinus(0, $event)\"\n      >\n        <slot\n          v-if=\"slots.trigger || props.slots.trigger\"\n          name=\"trigger\"\n          type=\"start\"\n          :value=\"truthValue[0]\"\n          :sliding=\"sliding[0]\"\n          :percent=\"triggerPercent[0]\"\n          :disabled=\"props.disabled\"\n          :loading=\"props.loading\"\n        >\n          <Renderer\n            :renderer=\"props.slots.trigger\"\n            :data=\"{\n              type: 'start',\n              value: truthValue[0],\n              sliding: sliding[0],\n              percent: triggerPercent[0],\n              disabled: props.disabled,\n              loading: props.loading\n            }\"\n          ></Renderer>\n        </slot>\n        <template v-if=\"slots.tip || props.slots.tip\" #tip>\n          <slot\n            name=\"tip\"\n            type=\"start\"\n            :value=\"truthValue[0]\"\n            :sliding=\"sliding[0]\"\n            :percent=\"triggerPercent[0]\"\n            :disabled=\"props.disabled\"\n            :loading=\"props.loading\"\n          >\n            <Renderer\n              :renderer=\"props.slots.tip\"\n              :data=\"{\n                type: 'start',\n                value: truthValue[0],\n                sliding: sliding[0],\n                percent: triggerPercent[0],\n                disabled: props.disabled,\n                loading: props.loading\n              }\"\n            >\n              {{ truthValue[0] }}\n            </Renderer>\n          </slot>\n        </template>\n      </SliderTrigger>\n      <SliderTrigger\n        ref=\"endTrigger\"\n        :value=\"truthValue[1]\"\n        :tip-transfer=\"props.tipTransfer\"\n        :hide-tip=\"props.hideTip\"\n        :vertical=\"props.vertical\"\n        :min=\"props.min\"\n        :max=\"props.max\"\n        :disabled=\"props.disabled\"\n        :loading=\"props.loading\"\n        :reverse=\"props.reverse\"\n        :sliding=\"sliding[1]\"\n        :tip-hover=\"props.tipHover\"\n        :style=\"endTriggerStyle\"\n        :tip-props=\"props.tipProps\"\n        @key-plus=\"handlePlus(1, $event)\"\n        @key-minus=\"handleMinus(1, $event)\"\n      >\n        <slot\n          v-if=\"slots.trigger || props.slots.trigger\"\n          name=\"trigger\"\n          type=\"end\"\n          :value=\"truthValue[1]\"\n          :sliding=\"sliding[1]\"\n          :percent=\"triggerPercent[1]\"\n          :disabled=\"props.disabled\"\n          :loading=\"props.loading\"\n        >\n          <Renderer\n            :renderer=\"props.slots.trigger\"\n            :data=\"{\n              type: 'end',\n              value: truthValue[1],\n              sliding: sliding[1],\n              percent: triggerPercent[1],\n              disabled: props.disabled,\n              loading: props.loading\n            }\"\n          ></Renderer>\n        </slot>\n        <template v-if=\"slots.tip || props.slots.tip\" #tip>\n          <slot\n            name=\"tip\"\n            type=\"end\"\n            :value=\"truthValue[1]\"\n            :sliding=\"sliding[1]\"\n            :percent=\"triggerPercent[1]\"\n            :disabled=\"props.disabled\"\n            :loading=\"props.loading\"\n          >\n            <Renderer\n              :renderer=\"props.slots.tip\"\n              :data=\"{\n                type: 'end',\n                value: truthValue[1],\n                sliding: sliding[1],\n                percent: triggerPercent[1],\n                disabled: props.disabled,\n                loading: props.loading\n              }\"\n            >\n              {{ truthValue[1] }}\n            </Renderer>\n          </slot>\n        </template>\n      </SliderTrigger>\n    </div>\n  </div>\n</template>\n","import { booleanProp, buildProps, styleProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ComponentSize, ConfigurableProps } from '@vexip-ui/config'\nimport type { SpaceAlign, SpaceJustify } from './symbol'\n\nexport const spaceProps = buildProps({\n  vertical: booleanProp,\n  inline: booleanProp,\n  tag: String,\n  align: String as PropType<SpaceAlign>,\n  justify: String as PropType<SpaceJustify>,\n  noWrap: booleanProp,\n  size: [String, Number, Array] as PropType<ComponentSize | number | [number, number]>,\n  itemStyle: styleProp,\n  gapDisabled: booleanProp\n})\n\nexport type SpaceProps = ExtractPropTypes<typeof spaceProps>\nexport type SpaceCProps = ConfigurableProps<SpaceProps>\n","import { computed, defineComponent, renderSlot } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { flatVNodes } from '@vexip-ui/hooks'\nimport { supportFlexGap } from '@vexip-ui/utils'\nimport { spaceProps } from './props'\n\nimport type { ClassType } from '@vexip-ui/config'\nimport type { SpaceAlign, SpaceJustify } from './symbol'\n\nconst justifyList = Object.freeze<SpaceJustify[]>([\n  'start',\n  'end',\n  'center',\n  'space-around',\n  'space-between',\n  'space-evenly'\n])\nconst alignList = Object.freeze<SpaceAlign[]>(['start', 'end', 'center', 'baseline', 'stretch'])\n\nconst useFlexGap = supportFlexGap()\n\nfunction parseFlexStyle(value: string) {\n  return value === 'start' || value === 'end' ? `flex-${value}` : value\n}\n\nexport default defineComponent({\n  name: 'Space',\n  props: spaceProps,\n  setup(_props, { slots }) {\n    const props = useProps('space', _props, {\n      vertical: false,\n      inline: false,\n      tag: 'div',\n      align: {\n        default: 'stretch',\n        validator: value => alignList.includes(value)\n      },\n      justify: {\n        default: 'start',\n        validator: value => justifyList.includes(value)\n      },\n      noWrap: false,\n      size: 'default',\n      itemStyle: null,\n      gapDisabled: !useFlexGap\n    })\n\n    const nh = useNameHelper('space')\n    const varMap: Record<string, any> = {\n      h: `var(${nh.cv('h-gap')})`,\n      hh: `calc(var(${nh.cv('h-gap')}) * 0.5)`,\n      mhh: `calc(var(${nh.cv('h-gap')}) * -0.5)`,\n      v: `var(${nh.cv('v-gap')})`,\n      hv: `calc(var(${nh.cv('v-gap')}) * 0.5)`,\n      mhv: `calc(var(${nh.cv('v-gap')}) * -0.5)`\n    }\n\n    const className = computed(() => {\n      const className: ClassType = {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm('inline')]: props.inline,\n        [nh.bm('vertical')]: props.vertical,\n        [nh.bm('no-wrap')]: props.vertical || props.noWrap,\n        [nh.bm('no-gap')]: props.gapDisabled\n      }\n\n      if (typeof props.size === 'string' && props.size !== 'default') {\n        className[nh.bm(props.size)] = true\n      }\n\n      return className\n    })\n    const style = computed(() => {\n      const { justify, align, size } = props\n\n      const style: Record<string, string> = {\n        alignItems: parseFlexStyle(align),\n        justifyContent: parseFlexStyle(justify)\n      }\n\n      if (typeof size !== 'string') {\n        const normalizedSize = Array.isArray(size) ? size : [size, size]\n\n        style[nh.cv('h-gap')] = `${normalizedSize[0]}px`\n        style[nh.cv('v-gap')] = `${normalizedSize[1]}px`\n      }\n\n      if (props.gapDisabled && !props.vertical) {\n        style.marginTop = varMap.mhv\n        style.marginBottom = varMap.mhv\n      }\n\n      return style\n    })\n\n    return () => {\n      const CustomTag = props.tag || ('div' as any)\n      const children = renderSlot(slots, 'default').children\n\n      if (!children?.length) {\n        return <CustomTag class={className.value} style={style.value}></CustomTag>\n      }\n\n      const vnodes = flatVNodes(children)\n      const lastIndex = vnodes.length - 1\n      const justify = props.justify\n      const justifySpace = justify.startsWith('space')\n      const notBetween = justify !== 'space-between'\n\n      return (\n        <CustomTag class={className.value} style={style.value}>\n          {vnodes.map((vnode, index) => (\n            <div\n              key={index}\n              class={nh.be('item')}\n              role={'none'}\n              style={[\n                props.itemStyle,\n                !props.gapDisabled\n                  ? ''\n                  : props.vertical\n                    ? {\n                        marginBottom: index !== lastIndex ? varMap.v : undefined\n                      }\n                    : {\n                        paddingTop: varMap.hv,\n                        paddingBottom: varMap.hv,\n                        marginRight: justifySpace\n                          ? notBetween || index !== lastIndex\n                            ? varMap.hh\n                            : undefined\n                          : index !== lastIndex\n                            ? varMap.h\n                            : undefined,\n                        marginLeft: justifySpace\n                          ? notBetween || index !== 0\n                            ? varMap.hh\n                            : undefined\n                          : undefined\n                      }\n              ]}\n            >\n              {vnode}\n            </div>\n          ))}\n        </CustomTag>\n      )\n    }\n  }\n})\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const splitProps = buildProps({\n  value: Number,\n  min: Number,\n  max: Number,\n  vertical: booleanProp,\n  noTransition: booleanProp,\n  lazy: booleanProp,\n  canFull: booleanProp,\n  onChange: eventProp<(value: number) => void>(),\n  onFull: eventProp<(type: 'top' | 'right' | 'bottom' | 'left') => void>(),\n  onReset: eventProp(),\n  onMoveStart: eventProp<(value: number) => void>(),\n  onMove: eventProp<(value: number) => void>(),\n  onMoveEnd: eventProp<(value: number) => void>()\n})\n\nexport type SplitProps = ExtractPropTypes<typeof splitProps>\nexport type SplitCProps = ConfigurableProps<SplitProps>\n","<template>\n  <div ref=\"wrapper\" :class=\"className\" @transitionend=\"removeTransition\">\n    <div\n      :class=\"[nh.be('panel'), nh.bem('panel', props.vertical ? 'top' : 'left')]\"\n      :style=\"leftPaneStyle\"\n    >\n      <slot name=\"left\"></slot>\n    </div>\n    <div\n      :class=\"[nh.be('panel'), nh.bem('panel', props.vertical ? 'bottom' : 'right')]\"\n      :style=\"rightPaneStyle\"\n    >\n      <slot name=\"right\"></slot>\n    </div>\n    <div :class=\"nh.be('trigger')\" :style=\"triggerStyle\">\n      <div ref=\"handler\" :class=\"nh.be('handler')\">\n        <template v-if=\"props.canFull\">\n          <button\n            type=\"button\"\n            :class=\"[nh.be('button'), nh.bem('button', `${props.vertical ? 'top' : 'left'}-full`)]\"\n            @pointerdown.stop\n            @click.left=\"handleFull(-1)\"\n          >\n            <Icon v-bind=\"fullIcons[0]\" :scale=\"+(fullIcons[0].scale || 1) * 0.6\"></Icon>\n          </button>\n          <button\n            type=\"button\"\n            :class=\"[\n              nh.be('button'),\n              nh.bem('button', `${props.vertical ? 'bottom' : 'right'}-full`)\n            ]\"\n            @pointerdown.stop\n            @click.left=\"handleFull(1)\"\n          >\n            <Icon v-bind=\"fullIcons[1]\" :scale=\"+(fullIcons[1].scale || 1) * 0.6\"></Icon>\n          </button>\n        </template>\n        <template v-else>\n          <slot name=\"handler\">\n            <span v-for=\"n in 6\" :key=\"n\" :class=\"nh.be('pointer')\"></span>\n          </slot>\n        </template>\n      </div>\n    </div>\n    <div ref=\"guide\" :class=\"nh.be('guide')\"></div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { Icon } from '@/components/icon'\n\nimport { computed, defineComponent, ref, watch } from 'vue'\n\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useMoving } from '@vexip-ui/hooks'\nimport { splitProps } from './props'\n\nexport default defineComponent({\n  name: 'Split',\n  components: {\n    Icon\n  },\n  props: splitProps,\n  emits: ['update:value'],\n  setup(_props, { emit }) {\n    const props = useProps('split', _props, {\n      value: {\n        default: 0.5,\n        validator: (value: number) => value > 0 && value < 1,\n        static: true\n      },\n      min: 0.1,\n      max: 0.9,\n      vertical: false,\n      noTransition: false,\n      lazy: false,\n      canFull: false\n    })\n\n    const nh = useNameHelper('split')\n    const icons = useIcons()\n    const currentValue = ref(props.value)\n    const currentFull = ref<0 | 1 | -1>(0)\n    const transition = ref(false)\n\n    const wrapper = ref<HTMLElement>()\n    const guide = ref<HTMLElement>()\n\n    const offset = computed(() => {\n      return props.vertical ? 'offsetHeight' : 'offsetWidth'\n    })\n    const position = computed<['top', 'bottom'] | ['left', 'right']>(() => {\n      return props.vertical ? ['top', 'bottom'] : ['left', 'right']\n    })\n\n    const { target: handler, moving } = useMoving({\n      lazy: true,\n      capture: false,\n      onStart: (state, event) => {\n        if (currentFull.value || !wrapper.value || event.button > 0) {\n          return false\n        }\n\n        const { min, max, vertical, lazy } = props\n        const outer = wrapper.value[offset.value]\n        const computedMin = min <= 1 ? min : min / outer\n        const computedMax = max <= 1 ? max : max / outer\n\n        state.outer = outer\n        state.min = computedMin\n        state.max = computedMax\n        state.vertical = vertical\n        state.splitLazy = lazy\n        state.start = currentValue.value * outer\n        state.target = currentValue.value\n\n        if (lazy && guide.value) {\n          guide.value.style[position.value[0]] = `${currentValue.value * 100}`\n          guide.value.style.display = 'block'\n        }\n\n        emitEvent(props.onMoveStart, currentValue.value)\n      },\n      onMove: state => {\n        const outer = state.outer as number\n        const min = state.min as number\n        const max = state.max as number\n        const delta = state.vertical ? state.deltaY : state.deltaX\n        const start = state.start as number\n        const value = Math.min(Math.max(min, (start + delta) / outer), max)\n\n        if (state.splitLazy) {\n          if (guide.value) {\n            guide.value.style[position.value[0]] = `${value * 100}%`\n          }\n\n          state.target = value\n        } else {\n          handleChange(value)\n        }\n\n        emitEvent(props.onMove, value)\n      },\n      onEnd: state => {\n        if (guide.value) {\n          guide.value.style.display = ''\n        }\n\n        if (state.splitLazy) {\n          const target = state.target as number\n\n          if (Math.abs(target - currentValue.value) > 0.01) {\n            setTransition()\n          }\n\n          handleChange(target)\n        }\n\n        emitEvent(props.onMoveEnd, currentValue.value)\n      }\n    })\n\n    const className = computed(() => {\n      let fullType = ''\n\n      if (currentFull.value) {\n        if (props.vertical) {\n          fullType = currentFull.value < 0 ? 'top' : 'bottom'\n        } else {\n          fullType = currentFull.value < 0 ? 'left' : 'right'\n        }\n      }\n\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.vertical ? 'vertical' : 'horizontal')]: true,\n        [nh.bm('moving')]: moving.value,\n        [nh.bm(`${fullType}-full`)]: !!fullType,\n        [nh.bm('transition')]: transition.value\n      }\n    })\n    const leftPaneStyle = computed(() => {\n      return {\n        [position.value[1]]:\n          currentFull.value < 0\n            ? '0'\n            : currentFull.value > 0\n              ? '100%'\n              : `${(1 - currentValue.value) * 100}%`\n      }\n    })\n    const rightPaneStyle = computed(() => {\n      return {\n        [position.value[0]]:\n          currentFull.value < 0\n            ? '100%'\n            : currentFull.value > 0\n              ? '0'\n              : `${currentValue.value * 100}%`\n      }\n    })\n    const triggerStyle = computed(() => {\n      return {\n        [position.value[0]]:\n          currentFull.value < 0\n            ? '100%'\n            : currentFull.value > 0\n              ? '0'\n              : `calc(${currentValue.value * 100}% - var(${nh.cv('handler-size')}) * 0.5)`\n      }\n    })\n    const fullIcons = computed(() => {\n      return props.vertical\n        ? [icons.value.angleDown, icons.value.angleUp]\n        : [icons.value.angleRight, icons.value.angleLeft]\n    })\n\n    watch(\n      () => props.value,\n      value => {\n        if (value.toFixed(5) !== currentValue.value.toFixed(5)) {\n          currentValue.value = value\n          setTransition()\n        }\n      }\n    )\n    watch(currentValue, value => {\n      if (guide.value) {\n        guide.value.style[position.value[0]] = `${value * 100}%`\n      }\n    })\n    watch(currentFull, value => {\n      setTransition()\n\n      if (value) {\n        let type: 'top' | 'right' | 'bottom' | 'left'\n\n        if (props.vertical) {\n          type = value < 0 ? 'top' : 'bottom'\n        } else {\n          type = value < 0 ? 'left' : 'right'\n        }\n\n        emitEvent(props.onFull, type)\n      } else {\n        emitEvent(props.onReset)\n      }\n    })\n\n    function setTransition() {\n      transition.value = !props.noTransition && !moving.value\n    }\n\n    function removeTransition() {\n      transition.value = false\n    }\n\n    function handleFull(type: 1 | -1) {\n      if (!props.canFull) {\n        return\n      }\n\n      if (currentFull.value) {\n        currentFull.value = 0\n      } else {\n        currentFull.value = type\n      }\n    }\n\n    function handleChange(value: number) {\n      if (value.toFixed(5) !== currentValue.value.toFixed(5)) {\n        currentValue.value = value\n\n        emitEvent(props.onChange, value)\n        emit('update:value', value)\n      }\n    }\n\n    return {\n      props,\n      nh,\n\n      className,\n      position,\n      leftPaneStyle,\n      rightPaneStyle,\n      triggerStyle,\n      fullIcons,\n\n      wrapper,\n      guide,\n      handler,\n\n      removeTransition,\n      handleFull\n    }\n  }\n})\n</script>\n","<template>\n  <div ref=\"wrapper\" :class=\"className\" @transitionend=\"removeTransition\">\n    <div\n      :class=\"[nh.be('panel'), nh.bem('panel', props.vertical ? 'top' : 'left')]\"\n      :style=\"leftPaneStyle\"\n    >\n      <slot name=\"left\"></slot>\n    </div>\n    <div\n      :class=\"[nh.be('panel'), nh.bem('panel', props.vertical ? 'bottom' : 'right')]\"\n      :style=\"rightPaneStyle\"\n    >\n      <slot name=\"right\"></slot>\n    </div>\n    <div :class=\"nh.be('trigger')\" :style=\"triggerStyle\">\n      <div ref=\"handler\" :class=\"nh.be('handler')\">\n        <template v-if=\"props.canFull\">\n          <button\n            type=\"button\"\n            :class=\"[nh.be('button'), nh.bem('button', `${props.vertical ? 'top' : 'left'}-full`)]\"\n            @pointerdown.stop\n            @click.left=\"handleFull(-1)\"\n          >\n            <Icon v-bind=\"fullIcons[0]\" :scale=\"+(fullIcons[0].scale || 1) * 0.6\"></Icon>\n          </button>\n          <button\n            type=\"button\"\n            :class=\"[\n              nh.be('button'),\n              nh.bem('button', `${props.vertical ? 'bottom' : 'right'}-full`)\n            ]\"\n            @pointerdown.stop\n            @click.left=\"handleFull(1)\"\n          >\n            <Icon v-bind=\"fullIcons[1]\" :scale=\"+(fullIcons[1].scale || 1) * 0.6\"></Icon>\n          </button>\n        </template>\n        <template v-else>\n          <slot name=\"handler\">\n            <span v-for=\"n in 6\" :key=\"n\" :class=\"nh.be('pointer')\"></span>\n          </slot>\n        </template>\n      </div>\n    </div>\n    <div ref=\"guide\" :class=\"nh.be('guide')\"></div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { Icon } from '@/components/icon'\n\nimport { computed, defineComponent, ref, watch } from 'vue'\n\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useMoving } from '@vexip-ui/hooks'\nimport { splitProps } from './props'\n\nexport default defineComponent({\n  name: 'Split',\n  components: {\n    Icon\n  },\n  props: splitProps,\n  emits: ['update:value'],\n  setup(_props, { emit }) {\n    const props = useProps('split', _props, {\n      value: {\n        default: 0.5,\n        validator: (value: number) => value > 0 && value < 1,\n        static: true\n      },\n      min: 0.1,\n      max: 0.9,\n      vertical: false,\n      noTransition: false,\n      lazy: false,\n      canFull: false\n    })\n\n    const nh = useNameHelper('split')\n    const icons = useIcons()\n    const currentValue = ref(props.value)\n    const currentFull = ref<0 | 1 | -1>(0)\n    const transition = ref(false)\n\n    const wrapper = ref<HTMLElement>()\n    const guide = ref<HTMLElement>()\n\n    const offset = computed(() => {\n      return props.vertical ? 'offsetHeight' : 'offsetWidth'\n    })\n    const position = computed<['top', 'bottom'] | ['left', 'right']>(() => {\n      return props.vertical ? ['top', 'bottom'] : ['left', 'right']\n    })\n\n    const { target: handler, moving } = useMoving({\n      lazy: true,\n      capture: false,\n      onStart: (state, event) => {\n        if (currentFull.value || !wrapper.value || event.button > 0) {\n          return false\n        }\n\n        const { min, max, vertical, lazy } = props\n        const outer = wrapper.value[offset.value]\n        const computedMin = min <= 1 ? min : min / outer\n        const computedMax = max <= 1 ? max : max / outer\n\n        state.outer = outer\n        state.min = computedMin\n        state.max = computedMax\n        state.vertical = vertical\n        state.splitLazy = lazy\n        state.start = currentValue.value * outer\n        state.target = currentValue.value\n\n        if (lazy && guide.value) {\n          guide.value.style[position.value[0]] = `${currentValue.value * 100}`\n          guide.value.style.display = 'block'\n        }\n\n        emitEvent(props.onMoveStart, currentValue.value)\n      },\n      onMove: state => {\n        const outer = state.outer as number\n        const min = state.min as number\n        const max = state.max as number\n        const delta = state.vertical ? state.deltaY : state.deltaX\n        const start = state.start as number\n        const value = Math.min(Math.max(min, (start + delta) / outer), max)\n\n        if (state.splitLazy) {\n          if (guide.value) {\n            guide.value.style[position.value[0]] = `${value * 100}%`\n          }\n\n          state.target = value\n        } else {\n          handleChange(value)\n        }\n\n        emitEvent(props.onMove, value)\n      },\n      onEnd: state => {\n        if (guide.value) {\n          guide.value.style.display = ''\n        }\n\n        if (state.splitLazy) {\n          const target = state.target as number\n\n          if (Math.abs(target - currentValue.value) > 0.01) {\n            setTransition()\n          }\n\n          handleChange(target)\n        }\n\n        emitEvent(props.onMoveEnd, currentValue.value)\n      }\n    })\n\n    const className = computed(() => {\n      let fullType = ''\n\n      if (currentFull.value) {\n        if (props.vertical) {\n          fullType = currentFull.value < 0 ? 'top' : 'bottom'\n        } else {\n          fullType = currentFull.value < 0 ? 'left' : 'right'\n        }\n      }\n\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.vertical ? 'vertical' : 'horizontal')]: true,\n        [nh.bm('moving')]: moving.value,\n        [nh.bm(`${fullType}-full`)]: !!fullType,\n        [nh.bm('transition')]: transition.value\n      }\n    })\n    const leftPaneStyle = computed(() => {\n      return {\n        [position.value[1]]:\n          currentFull.value < 0\n            ? '0'\n            : currentFull.value > 0\n              ? '100%'\n              : `${(1 - currentValue.value) * 100}%`\n      }\n    })\n    const rightPaneStyle = computed(() => {\n      return {\n        [position.value[0]]:\n          currentFull.value < 0\n            ? '100%'\n            : currentFull.value > 0\n              ? '0'\n              : `${currentValue.value * 100}%`\n      }\n    })\n    const triggerStyle = computed(() => {\n      return {\n        [position.value[0]]:\n          currentFull.value < 0\n            ? '100%'\n            : currentFull.value > 0\n              ? '0'\n              : `calc(${currentValue.value * 100}% - var(${nh.cv('handler-size')}) * 0.5)`\n      }\n    })\n    const fullIcons = computed(() => {\n      return props.vertical\n        ? [icons.value.angleDown, icons.value.angleUp]\n        : [icons.value.angleRight, icons.value.angleLeft]\n    })\n\n    watch(\n      () => props.value,\n      value => {\n        if (value.toFixed(5) !== currentValue.value.toFixed(5)) {\n          currentValue.value = value\n          setTransition()\n        }\n      }\n    )\n    watch(currentValue, value => {\n      if (guide.value) {\n        guide.value.style[position.value[0]] = `${value * 100}%`\n      }\n    })\n    watch(currentFull, value => {\n      setTransition()\n\n      if (value) {\n        let type: 'top' | 'right' | 'bottom' | 'left'\n\n        if (props.vertical) {\n          type = value < 0 ? 'top' : 'bottom'\n        } else {\n          type = value < 0 ? 'left' : 'right'\n        }\n\n        emitEvent(props.onFull, type)\n      } else {\n        emitEvent(props.onReset)\n      }\n    })\n\n    function setTransition() {\n      transition.value = !props.noTransition && !moving.value\n    }\n\n    function removeTransition() {\n      transition.value = false\n    }\n\n    function handleFull(type: 1 | -1) {\n      if (!props.canFull) {\n        return\n      }\n\n      if (currentFull.value) {\n        currentFull.value = 0\n      } else {\n        currentFull.value = type\n      }\n    }\n\n    function handleChange(value: number) {\n      if (value.toFixed(5) !== currentValue.value.toFixed(5)) {\n        currentValue.value = value\n\n        emitEvent(props.onChange, value)\n        emit('update:value', value)\n      }\n    }\n\n    return {\n      props,\n      nh,\n\n      className,\n      position,\n      leftPaneStyle,\n      rightPaneStyle,\n      triggerStyle,\n      fullIcons,\n\n      wrapper,\n      guide,\n      handler,\n\n      removeTransition,\n      handleFull\n    }\n  }\n})\n</script>\n","import { booleanProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\nimport type {\n  ChangeEvent,\n  TabNavAlign,\n  TabNavOptions,\n  TabNavPlacement,\n  TabNavSlots\n} from './symbol'\n\nexport const tabNavProps = buildProps({\n  active: [String, Number],\n  card: booleanProp,\n  options: Array as PropType<TabNavOptions[]>,\n  align: String as PropType<TabNavAlign>,\n  placement: String as PropType<TabNavPlacement>,\n  closable: booleanProp,\n  showAdd: booleanProp,\n  slots: Object as PropType<TabNavSlots>,\n  onChange: eventProp<EventListener<ChangeEvent>>(),\n  onAdd: eventProp(),\n  onClose: eventProp<EventListener<ChangeEvent>>()\n})\n\nexport type TabNavProps = ExtractPropTypes<typeof tabNavProps>\nexport type TabNavCProps = ConfigurableProps<TabNavProps>\n\nexport const tabNavItemProps = buildProps({\n  label: [String, Number],\n  disabled: booleanProp,\n  icon: iconProp,\n  closable: booleanProp,\n  onToggle: eventProp<(active: boolean) => void>()\n})\n\nexport type TabNavItemProps = ExtractPropTypes<typeof tabNavItemProps>\n","import type { InjectionKey } from 'vue'\n\nexport type TabNavAlign = 'left' | 'center' | 'right'\nexport type TabNavPlacement = 'top' | 'right' | 'bottom' | 'left'\n\nexport interface TabNavItemOptions {\n  label: string | number,\n  content?: string,\n  icon?: Record<string, any>,\n  disabled?: boolean,\n  closable?: boolean,\n  onToggle?: (active: boolean) => void\n}\n\nexport type TabNavOptions = TabNavItemOptions | string | number\n\nexport interface ItemState {\n  el?: HTMLElement | null,\n  label: string | number,\n  index: number,\n  total: number\n}\n\nexport interface TabNavState {\n  currentActive: string | number,\n  closable: boolean,\n  increaseItem: (item: ItemState) => void,\n  decreaseItem: (item: ItemState) => void,\n  handleActive: (label: string | number) => void,\n  handleClose: (label: string | number) => void,\n  refreshLabels: () => void\n}\n\nexport type ChangeEvent = (label: string | number) => void\n\nexport interface TabNavSlots {\n  prefix?: () => any,\n  suffix?: () => any,\n  add?: () => any,\n  marker?: () => any,\n  /**\n   * @internal\n   */\n  default?: () => any\n}\n\nexport const TAB_NAV_STATE = '__VXP_TAB_NAV_STATE' as unknown as InjectionKey<TabNavState>\n\nexport const trackStyleMap = Object.freeze({\n  top: ['left', 'width'],\n  right: ['top', 'height'],\n  bottom: ['left', 'width'],\n  left: ['top', 'height']\n} as const)\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\n\nimport { computed, inject, onBeforeUnmount, reactive, ref, watch } from 'vue'\n\nimport { createIconProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { isDefined } from '@vexip-ui/utils'\nimport { tabNavItemProps } from './props'\nimport { TAB_NAV_STATE } from './symbol'\n\nimport type { ItemState } from './symbol'\n\ndefineOptions({ name: 'TabNavItem' })\n\nconst _props = defineProps(tabNavItemProps)\nconst props = useProps('tabNavItem', _props, {\n  label: {\n    static: true,\n    default: null\n  },\n  disabled: false,\n  icon: createIconProp(),\n  closable: null\n})\n\nconst tabNavState = inject(TAB_NAV_STATE, null)\n\nconst nh = useNameHelper('tab-nav')\nconst icons = useIcons()\nconst active = ref(false)\nconst currentLabel = ref(props.label)\nconst index = ref(0)\nconst total = ref(0)\n\nconst wrapper = ref<HTMLElement>()\n\nconst contentClass = computed(() => {\n  const baseClass = nh.be('content')\n\n  return {\n    [baseClass]: true,\n    [`${baseClass}--disabled`]: props.disabled,\n    [`${baseClass}--active`]: !props.disabled && active.value\n  }\n})\nconst isClosable = computed(() => {\n  if (isDefined(props.closable)) {\n    return props.closable\n  }\n\n  return tabNavState?.closable ?? false\n})\n\nwatch(\n  () => props.label,\n  value => {\n    currentLabel.value = value\n    tabNavState?.refreshLabels()\n  }\n)\nwatch(active, value => {\n  emitEvent(props.onToggle!, value)\n})\n\nif (tabNavState) {\n  const state: ItemState = reactive({\n    el: wrapper,\n    label: currentLabel,\n    index,\n    total\n  })\n\n  watch(currentLabel, () => {\n    active.value = currentLabel.value === tabNavState.currentActive\n  })\n  watch(\n    () => tabNavState.currentActive,\n    value => {\n      active.value = currentLabel.value === value\n    },\n    { immediate: true }\n  )\n\n  tabNavState.increaseItem(state)\n\n  onBeforeUnmount(() => {\n    tabNavState.decreaseItem(state)\n  })\n}\n\nfunction handleSelect() {\n  if (props.disabled) {\n    return\n  }\n\n  tabNavState?.handleActive(currentLabel.value)\n}\n\nfunction handleClose() {\n  if (props.disabled) {\n    return\n  }\n\n  tabNavState?.handleClose(currentLabel.value)\n}\n</script>\n\n<template>\n  <li ref=\"wrapper\" :class=\"nh.be('item')\" role=\"none\">\n    <div :class=\"nh.be('pad')\"></div>\n    <div\n      :class=\"contentClass\"\n      role=\"tab\"\n      tabindex=\"0\"\n      :aria-disabled=\"props.disabled\"\n      :aria-setsize=\"total || undefined\"\n      :aria-posinset=\"index || undefined\"\n      @click=\"handleSelect\"\n      @keydown.enter.stop=\"handleSelect\"\n    >\n      <Icon v-if=\"props.icon\" :class=\"nh.be('icon')\" :icon=\"props.icon\"></Icon>\n      <slot>\n        {{ props.label }}\n      </slot>\n      <button\n        v-if=\"isClosable\"\n        type=\"button\"\n        :class=\"nh.be('close')\"\n        @click.stop=\"handleClose\"\n      >\n        <Icon v-bind=\"icons.close\" label=\"close\"></Icon>\n      </button>\n    </div>\n  </li>\n</template>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\nimport { Scroll } from '@/components/scroll'\nimport { TabNavItem } from '@/components/tab-nav-item'\n\nimport { computed, onMounted, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useDisplay } from '@vexip-ui/hooks'\nimport { debounceMinor, isNull } from '@vexip-ui/utils'\nimport { tabNavProps } from './props'\nimport { TAB_NAV_STATE, trackStyleMap } from './symbol'\n\nimport type { ChangeEvent, ItemState, TabNavSlots } from './symbol'\n\ndefineOptions({ name: 'TabNav' })\n\nconst _props = defineProps(tabNavProps)\nconst props = useProps('tabNav', _props, {\n  active: {\n    default: null,\n    static: true\n  },\n  card: false,\n  options: {\n    default: () => [],\n    static: true\n  },\n  align: 'left',\n  placement: 'top',\n  closable: false,\n  showAdd: false,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:active'])\n\nconst slots = defineSlots<TabNavSlots>()\n\nconst nh = useNameHelper('tab-nav')\nconst icons = useIcons()\nconst currentActive = ref(props.active)\nconst markerPosition = ref(0)\nconst markerSize = ref(0)\nconst itemStates = new Set<ItemState>()\n\nconst wrapper = useDisplay(updateMarkerPosition)\nconst scroll = ref<InstanceType<typeof Scroll>>()\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm(`align-${props.align}`)]: true,\n    [nh.bm(props.placement)]: true,\n    [nh.bm('card')]: props.card\n  }\n})\nconst markerStyle = computed(() => {\n  const [position, length] = trackStyleMap[props.placement]\n\n  return {\n    [position]: `${markerPosition.value}px`,\n    [length]: `${markerSize.value}px`\n  }\n})\nconst items = computed(() => {\n  return props.options.map(item => {\n    if (typeof item === 'string' || typeof item === 'number') {\n      return { label: item }\n    }\n\n    return item\n  })\n})\nconst scrollMode = computed(() => {\n  return props.placement === 'top' || props.placement === 'bottom' ? 'horizontal-exact' : 'vertical'\n})\n\nconst refreshLabels = debounceMinor(() => {\n  const total = itemStates.size\n\n  Array.from(itemStates).forEach((item, index) => {\n    item.index = index + 1\n    item.total = total\n\n    if (isNull(item.label)) {\n      item.label = index + 1\n    }\n  })\n\n  if (itemStates.size >= 1 && isActiveEmpty()) {\n    currentActive.value = Array.from(itemStates)[0].label\n  }\n})\n\nprovide(\n  TAB_NAV_STATE,\n  reactive({\n    currentActive,\n    closable: toRef(props, 'closable'),\n    increaseItem,\n    decreaseItem,\n    handleActive,\n    handleClose,\n    refreshLabels\n  })\n)\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n    updateMarkerPosition()\n  }\n)\nwatch(\n  () => props.placement,\n  () => {\n    requestAnimationFrame(updateMarkerPosition)\n  }\n)\n\nonMounted(updateMarkerPosition)\n\ndefineExpose({\n  items,\n  wrapper,\n  scroll,\n  updateMarkerPosition,\n  handleAdd\n})\n\nfunction isActiveEmpty() {\n  return isNull(currentActive.value) || currentActive.value === ''\n}\n\nfunction increaseItem(item: ItemState) {\n  itemStates.add(item)\n  refreshLabels()\n}\n\nfunction decreaseItem(item: ItemState) {\n  itemStates.delete(item)\n  refreshLabels()\n}\n\nfunction handleActive(label: string | number) {\n  currentActive.value = label\n\n  updateMarkerPosition()\n  emit('update:active', label)\n  emitEvent(props.onChange as ChangeEvent, label)\n}\n\nfunction handleAdd() {\n  emitEvent(props.onAdd)\n}\n\nfunction handleClose(label: string | number) {\n  emitEvent(props.onClose as ChangeEvent, label)\n\n  requestAnimationFrame(updateMarkerPosition)\n}\n\nfunction updateMarkerPosition() {\n  const activeItem = Array.from(itemStates).find(item => item.label === currentActive.value)\n\n  if (activeItem?.el) {\n    if (props.placement === 'top' || props.placement === 'bottom') {\n      markerPosition.value = activeItem.el.offsetLeft\n      markerSize.value = activeItem.el.offsetWidth\n    } else {\n      markerPosition.value = activeItem.el.offsetTop\n      markerSize.value = activeItem.el.offsetHeight\n    }\n  } else {\n    markerPosition.value = 0\n    markerSize.value = 0\n  }\n}\n</script>\n\n<template>\n  <div ref=\"wrapper\" :class=\"className\" tabindex=\"-1\">\n    <ResizeObserver :on-resize=\"updateMarkerPosition\">\n      <div :class=\"[nh.be('extra'), nh.bem('extra', 'prefix')]\">\n        <div v-if=\"slots.prefix || props.slots.prefix\" :class=\"nh.be('prefix')\">\n          <slot name=\"prefix\">\n            <Renderer :renderer=\"props.slots.prefix\"></Renderer>\n          </slot>\n        </div>\n      </div>\n    </ResizeObserver>\n    <Scroll\n      ref=\"scroll\"\n      :class=\"nh.be('scroll')\"\n      :mode=\"scrollMode\"\n      :delta-x=\"40\"\n      :delta-y=\"40\"\n      scroll-tag=\"ul\"\n      :scroll-class=\"nh.be('list')\"\n      :scroll-attrs=\"{ role: 'tablist' }\"\n    >\n      <slot>\n        <TabNavItem\n          v-for=\"item in items\"\n          :key=\"item.label\"\n          :label=\"item.label\"\n          :icon=\"item.icon\"\n          :disabled=\"item.disabled\"\n          :closable=\"item.closable\"\n          @toggle=\"item.onToggle\"\n        >\n          {{ item.content || item.label }}\n        </TabNavItem>\n      </slot>\n      <li v-if=\"props.showAdd || slots.add || props.slots.add\" :class=\"nh.be('item')\" role=\"none\">\n        <div :class=\"nh.be('pad')\"></div>\n        <button type=\"button\" :class=\"nh.be('add')\" @click=\"handleAdd\">\n          <slot name=\"add\">\n            <Renderer :renderer=\"props.slots.add\">\n              <Icon v-bind=\"icons.plus\" :scale=\"+(icons.plus.scale || 1) * 1.2\"></Icon>\n            </Renderer>\n          </slot>\n        </button>\n      </li>\n      <div\n        v-if=\"!props.card\"\n        :class=\"nh.be('track')\"\n        role=\"none\"\n        :style=\"markerStyle\"\n      >\n        <slot name=\"marker\">\n          <Renderer :renderer=\"props.slots.marker\">\n            <div :class=\"nh.be('marker')\"></div>\n          </Renderer>\n        </slot>\n      </div>\n    </Scroll>\n    <ResizeObserver :on-resize=\"updateMarkerPosition\">\n      <div :class=\"[nh.be('extra'), nh.bem('extra', 'suffix')]\">\n        <div v-if=\"slots.suffix || props.slots.suffix\" :class=\"nh.be('suffix')\">\n          <slot name=\"suffix\">\n            <Renderer :renderer=\"props.slots.suffix\"></Renderer>\n          </slot>\n        </div>\n      </div>\n    </ResizeObserver>\n  </div>\n</template>\n","import { tabNavItemProps, tabNavProps } from '@/components/tab-nav/props'\n\nimport { omitProps, wrapProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { TabsSlots } from './symbol'\n\nexport const tabsProps = wrapProps({\n  ...omitProps(tabNavProps, ['options']),\n  slots: Object as PropType<TabsSlots>\n})\n\nexport type TabsProps = ExtractPropTypes<typeof tabsProps>\nexport type TabsCProps = ConfigurableProps<TabsProps>\n\nexport const tabPanelProps = wrapProps({\n  ...tabNavItemProps,\n  name: {\n    type: String,\n    default: ''\n  }\n})\n\nexport type TabPanelProps = ExtractPropTypes<typeof tabPanelProps>\n","import type { InjectionKey } from 'vue'\nimport type { TabNavSlots } from '@/components/tab-nav'\n\nexport interface ItemState {\n  label: string | number,\n  name: string,\n  icon: Record<string, any>,\n  disabled: boolean,\n  closable?: boolean,\n  labelRenderer: null | ((data: { label: string | number }) => any)\n}\n\nexport interface TabsState {\n  currentActive: string | number,\n  increaseItem: (item: ItemState) => void,\n  decreaseItem: (item: ItemState) => void,\n  handleActive: (label: string | number) => void,\n  refreshLabels: () => void\n}\n\nexport interface TabsSlots extends TabNavSlots {}\n\nexport const TABS_STATE = '__VXP_TABS_STATE' as unknown as InjectionKey<TabsState>\n","<template>\n  <div :class=\"className\" role=\"tabpanel\" :aria-hidden=\"!active\">\n    <slot></slot>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, reactive, ref, toRef, watch } from 'vue'\n\nimport { emitEvent, useNameHelper } from '@vexip-ui/config'\nimport { tabPanelProps } from './props'\nimport { TABS_STATE } from './symbol'\n\nimport type { ItemState } from './symbol'\n\ndefineOptions({ name: 'TabPanel' })\n\nconst props = defineProps(tabPanelProps)\n\nconst slots = defineSlots<{\n  default?: () => any,\n  label?: (params: { label: string | number }) => any\n}>()\n\nconst tabsState = inject(TABS_STATE, null)\n\nconst nh = useNameHelper('tabs')\nconst active = ref(false)\nconst currentLabel = ref(props.label)\n\nconst className = computed(() => {\n  const baseClass = nh.be('panel')\n\n  return {\n    [baseClass]: true,\n    [`${baseClass}--disabled`]: props.disabled,\n    [`${baseClass}--active`]: !props.disabled && active.value\n  }\n})\n\nwatch(\n  () => props.label,\n  value => {\n    currentLabel.value = value\n    tabsState?.refreshLabels()\n  }\n)\nwatch(active, value => {\n  emitEvent(props.onToggle!, value)\n})\n\nif (tabsState) {\n  const state = reactive({\n    label: currentLabel,\n    name: toRef(props, 'name'),\n    icon: toRef(props, 'icon'),\n    disabled: toRef(props, 'disabled'),\n    closable: toRef(props, 'closable'),\n    labelRenderer: null\n  }) as ItemState\n\n  watch(\n    () => slots.label,\n    value => {\n      state.labelRenderer = value ? data => value(data) : null\n    },\n    { immediate: true }\n  )\n  watch(currentLabel, () => {\n    active.value = currentLabel.value === tabsState.currentActive\n  })\n  watch(\n    () => tabsState.currentActive,\n    value => {\n      active.value = currentLabel.value === value\n    },\n    { immediate: true }\n  )\n\n  tabsState.increaseItem(state)\n\n  onBeforeUnmount(() => {\n    tabsState.decreaseItem(state)\n  })\n}\n</script>\n","import {\n  booleanProp,\n  buildProps,\n  classProp,\n  eventProp,\n  localeProp,\n  sizeProp,\n  styleProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ClassType, ConfigurableProps, StyleType } from '@vexip-ui/config'\nimport type { TooltipTheme } from '@/components/tooltip'\nimport type {\n  Accessor,\n  ColumnCellSpanFn,\n  ColumnRenderFn,\n  ColumnSummaryRenderFn,\n  Data,\n  DropType,\n  ExpandRenderFn,\n  FilterRenderFn,\n  HeadRenderFn,\n  SummaryCellSpanFn,\n  SummaryRenderFn,\n  TableCellPayload,\n  TableCellPropFn,\n  TableCellSpanFn,\n  TableColResizeType,\n  TableColumnRawOptions,\n  TableColumnType,\n  TableFilterOptions,\n  TableFilterProfile,\n  TableFootPayload,\n  TableFootPropFn,\n  TableHeadPayload,\n  TableHeadPropFn,\n  TableIcons,\n  TableKeyConfig,\n  TableRowPayload,\n  TableRowPropFn,\n  TableSlots,\n  TableSorterOptions,\n  TableSorterProfile,\n  TableSummaryOptions,\n  TableTextAlign\n} from './symbol'\n\nexport const tableProps = buildProps({\n  locale: localeProp('table'),\n  columns: Array as PropType<TableColumnRawOptions[]>,\n  summaries: Array as PropType<TableSummaryOptions<any, any>[]>,\n  data: Array as PropType<Data[]>,\n  width: [Number, String],\n  height: Number,\n  minHeight: Number,\n  rowClass: [String, Object, Array, Function] as PropType<ClassType | TableRowPropFn<ClassType>>,\n  rowStyle: [String, Object, Array, Function] as PropType<StyleType | TableRowPropFn<StyleType>>,\n  rowAttrs: [Object, Function] as PropType<\n    Record<string, any> | TableRowPropFn<Record<string, any>>\n  >,\n  stripe: booleanProp,\n  border: booleanProp,\n  highlight: booleanProp,\n  useXBar: booleanProp,\n  useYBar: booleanProp,\n  barFade: Number,\n  rowDraggable: booleanProp,\n  rowHeight: Number,\n  rowMinHeight: Number,\n  virtual: booleanProp,\n  bufferCount: Number,\n  scrollClass: Object as PropType<{\n    horizontal?: ClassType,\n    major?: ClassType,\n    left?: ClassType,\n    right?: ClassType\n  }>,\n  expandRenderer: Function as PropType<ExpandRenderFn>,\n  currentPage: Number,\n  pageSize: Number,\n  transparent: booleanProp,\n  tooltipTheme: String as PropType<TooltipTheme>,\n  tooltipWidth: [Number, String],\n  singleSorter: booleanProp,\n  singleFilter: booleanProp,\n  cellClass: [String, Object, Array, Function] as PropType<\n    ClassType | TableCellPropFn<any, ClassType>\n  >,\n  cellStyle: [String, Object, Array, Function] as PropType<\n    StyleType | TableCellPropFn<any, StyleType>\n  >,\n  cellAttrs: [Object, Function] as PropType<\n    Record<string, any> | TableCellPropFn<any, Record<string, any>>\n  >,\n  headClass: [String, Object, Array, Function] as PropType<ClassType | TableHeadPropFn<ClassType>>,\n  headStyle: [String, Object, Array, Function] as PropType<StyleType | TableHeadPropFn<StyleType>>,\n  headAttrs: [Object, Function] as PropType<\n    Record<string, any> | TableHeadPropFn<Record<string, any>>\n  >,\n  footClass: [String, Object, Array, Function] as PropType<ClassType | TableFootPropFn<ClassType>>,\n  footStyle: [String, Object, Array, Function] as PropType<StyleType | TableFootPropFn<StyleType>>,\n  footAttrs: [Object, Function] as PropType<\n    Record<string, any> | TableFootPropFn<Record<string, any>>\n  >,\n  customSorter: booleanProp,\n  customFilter: booleanProp,\n  keyConfig: Object as PropType<TableKeyConfig>,\n  disabledTree: booleanProp,\n  rowIndent: [String, Number],\n  noCascaded: booleanProp,\n  colResizable: {\n    type: [Boolean, String] as PropType<boolean | TableColResizeType>,\n    default: null\n  },\n  cellSpan: Function as PropType<TableCellSpanFn>,\n  sidePadding: [Number, Array] as PropType<number | number[]>,\n  icons: Object as PropType<TableIcons>,\n  borderWidth: Number,\n  dataFilter: Function as PropType<(data: Data) => boolean>,\n  noTransition: booleanProp,\n  ellipsis: booleanProp,\n  slots: Object as PropType<TableSlots>,\n  onScroll:\n    eventProp<\n      (payload: { type: 'horizontal' | 'vertical', client: number, percent: number }) => void\n    >(),\n  onRowEnter: eventProp<(payload: TableRowPayload) => void>(),\n  onRowLeave: eventProp<(payload: TableRowPayload) => void>(),\n  onRowClick: eventProp<(payload: TableRowPayload) => void>(),\n  onRowDblclick: eventProp<(payload: TableRowPayload) => void>(),\n  onRowContextmenu: eventProp<(payload: TableRowPayload) => void>(),\n  onRowCheck: eventProp<(payload: TableRowPayload) => void>(),\n  onRowCheckAll: eventProp<(checked: boolean, partial: boolean) => void>(),\n  onRowExpand: eventProp<(payload: TableRowPayload) => void>(),\n  onRowTreeExpand: eventProp<(payload: TableRowPayload) => void>(),\n  onRowDragStart: eventProp<(row: Data, event: DragEvent) => void>(),\n  onRowDragOver: eventProp<(row: Data, event: DragEvent) => void>(),\n  onRowDrop: eventProp<(row: Data, type: DropType, event: DragEvent) => void>(),\n  onRowDragEnd: eventProp<(row: Data, allRows: Data[], event: DragEvent) => void>(),\n  onRowFilter: eventProp<(profiles: TableFilterProfile[], filteredRow: Data[]) => void>(),\n  onRowSort: eventProp<(profiles: TableSorterProfile[], sortedRow: Data[]) => void>(),\n  onCellEnter: eventProp<(payload: TableCellPayload) => void>(),\n  onCellLeave: eventProp<(payload: TableCellPayload) => void>(),\n  onCellClick: eventProp<(payload: TableCellPayload) => void>(),\n  onCellDblclick: eventProp<(payload: TableCellPayload) => void>(),\n  onCellContextmenu: eventProp<(payload: TableCellPayload) => void>(),\n  onHeadEnter: eventProp<(payload: TableHeadPayload) => void>(),\n  onHeadLeave: eventProp<(payload: TableHeadPayload) => void>(),\n  onHeadClick: eventProp<(payload: TableHeadPayload) => void>(),\n  onHeadDblclick: eventProp<(payload: TableHeadPayload) => void>(),\n  onHeadContextmenu: eventProp<(payload: TableHeadPayload) => void>(),\n  onColResizeStart: eventProp<(payload: TableHeadPayload) => void>(),\n  onColResizeMove: eventProp<(payload: TableHeadPayload) => void>(),\n  onColResizeEnd: eventProp<(payload: TableHeadPayload) => void>(),\n  onFootEnter: eventProp<(payload: TableFootPayload) => void>(),\n  onFootLeave: eventProp<(payload: TableFootPayload) => void>(),\n  onFootClick: eventProp<(payload: TableFootPayload) => void>(),\n  onFootDblclick: eventProp<(payload: TableFootPayload) => void>(),\n  onFootContextmenu: eventProp<(payload: TableFootPayload) => void>()\n})\n\nexport type TableProps = ExtractPropTypes<typeof tableProps>\nexport type TableCProps = ConfigurableProps<\n  TableProps,\n  'columns' | 'data' | 'currentPage' | 'summaries'\n>\n\nexport const tableColumnProps = buildProps({\n  idKey: [Number, String],\n  name: String,\n  accessor: Function as PropType<Accessor>,\n  fixed: {\n    type: [Boolean, String] as PropType<boolean | 'left' | 'right'>,\n    default: null\n  },\n  class: classProp,\n  style: styleProp,\n  attrs: Object,\n  type: String as PropType<TableColumnType>,\n  width: Number,\n  filter: Object as PropType<TableFilterOptions<any, any>>,\n  sorter: {\n    type: [Boolean, Object] as PropType<boolean | TableSorterOptions<any>>,\n    default: null\n  },\n  renderer: Function as PropType<ColumnRenderFn>,\n  headRenderer: Function as PropType<HeadRenderFn>,\n  filterRenderer: Function as PropType<FilterRenderFn>,\n  order: Number,\n  ellipsis: booleanProp,\n  checkboxSize: sizeProp,\n  selectionSize: sizeProp,\n  disableRow: Function as PropType<(data: Data) => boolean>,\n  truthIndex: booleanProp,\n  orderLabel: Function as PropType<(index: number) => string | number>,\n  meta: Object as PropType<any>,\n  textAlign: String as PropType<TableTextAlign>,\n  headSpan: Number,\n  cellSpan: Function as PropType<ColumnCellSpanFn>,\n  noSummary: booleanProp,\n  summaryRenderer: Function as PropType<ColumnSummaryRenderFn>,\n  indented: booleanProp,\n  formatter: Function as PropType<(value: any) => unknown>,\n  singleSelect: booleanProp\n})\n\nexport type TableColumnProps = ExtractPropTypes<typeof tableColumnProps>\nexport type TableColumnCProps = ConfigurableProps<\n  TableColumnProps,\n  | 'idKey'\n  | 'name'\n  | 'accessor'\n  | 'fixed'\n  | 'type'\n  | 'renderer'\n  | 'headRenderer'\n  | 'order'\n  | 'headSpan'\n  | 'summaryRenderer'\n>\n\nexport const tableColumnGroupProps = buildProps({\n  name: String,\n  fixed: {\n    type: [Boolean, String] as PropType<boolean | 'left' | 'right'>,\n    default: null\n  },\n  order: Number,\n  ellipsis: booleanProp,\n  textAlign: String as PropType<TableTextAlign>,\n  renderer: Function as PropType<() => any>,\n  children: Array as PropType<TableColumnRawOptions[]>\n})\n\nexport type TableColumnGroupProps = ExtractPropTypes<typeof tableColumnGroupProps>\nexport type TableColumnGroupCProps = ConfigurableProps<TableColumnProps, 'name' | 'fixed' | 'order'>\n\nexport const tableSummaryProps = buildProps({\n  idKey: [Number, String],\n  name: String,\n  class: classProp,\n  style: styleProp,\n  attrs: Object,\n  cellSpan: Function as PropType<SummaryCellSpanFn>,\n  order: Number,\n  above: booleanProp,\n  meta: Object as PropType<any>,\n  renderer: Function as PropType<SummaryRenderFn>\n})\n\nexport type TableSummaryProps = ExtractPropTypes<typeof tableSummaryProps>\nexport type TableSummaryCProps = ConfigurableProps<\n  TableSummaryProps,\n  'idKey' | 'name' | 'renderer' | 'colSpan' | 'order' | 'above'\n>\n","import type { InjectionKey, Slots } from 'vue'\nimport type { ClassType, ComponentSize, LocaleConfig, StyleType } from '@vexip-ui/config'\nimport type { BITree } from '@vexip-ui/utils'\nimport type { TooltipTheme } from '@/components/tooltip'\nimport type { TableStore } from './store'\n\nexport type Key = string | number | symbol\nexport type Data = any\n\nexport type MouseEventType = 'Enter' | 'Leave' | 'Click' | 'Dblclick' | 'Contextmenu'\nexport type MoveEventType = 'Start' | 'Move' | 'End'\n\nexport type TableIconName = 'filter' | 'asc' | 'desc' | 'dragger' | 'expand' | 'plus' | 'minus'\nexport type TableRowPropFn<P = any> = (data: Data, index: number) => P\nexport type TableRowDropType = 'before' | 'after' | 'inner'\nexport type TableTextAlign = 'left' | 'center' | 'right'\nexport type TableColumnType = 'order' | 'selection' | 'expand' | 'drag'\nexport type TableColResizeType = 'lazy' | 'responsive'\n\nexport type TableIcons = Partial<Record<TableIconName, Record<string, any> | (() => any)>>\n\nexport const enum DropType {\n  BEFORE = 'before',\n  INNER = 'inner',\n  AFTER = 'after'\n}\n\nexport interface CellSpanResult {\n  colSpan?: number,\n  rowSpan?: number\n}\n\nexport interface TableKeyConfig {\n  id?: string,\n  children?: string,\n  checked?: string,\n  height?: string,\n  expanded?: string,\n  treeExpanded?: string\n}\n\nexport interface TableSlots {\n  /**\n   * @internal\n   */\n  default?: () => any,\n  empty?: (params: { isFixed: boolean }) => any\n}\n\nexport type Accessor<D = Data, Val extends string | number = string | number> = (\n  data: D,\n  index: number\n) => Val\nexport type ExpandRenderFn<D = Data> = (data: {\n  /** @deprecated */\n  leftFixed: number,\n  /** @deprecated */\n  rightFixed: number,\n  row: D,\n  rowIndex: number\n}) => any\nexport type ColumnCellSpanFn<D = Data> = (data: {\n  row: D,\n  index: number,\n  fixed?: 'left' | 'right'\n}) => CellSpanResult | void\nexport type SummaryCellSpanFn<D = Data, Val extends string | number = string | number> = (data: {\n  column: TableColumnOptions<D, Val>,\n  index: number,\n  fixed?: 'left' | 'right'\n}) => CellSpanResult | void\n\nexport type TableFilterOptions<D = Data, Val extends string | number = string | number> =\n  | {\n    able?: boolean,\n    custom?: false,\n    options?: (string | { value: Val, label?: string, active?: boolean })[],\n    multiple?: false,\n    active?: null | Val,\n    method?: null | ((active: Val, data: D) => boolean),\n    meta?: any\n  }\n  | {\n    able?: boolean,\n    custom?: false,\n    options?: (string | { value: Val, label?: string, active?: boolean })[],\n    multiple: true,\n    active?: null | Val[],\n    method?: null | ((active: Val[], data: D) => boolean),\n    meta?: any\n  }\n  | {\n    able?: boolean,\n    custom: true,\n    options?: never,\n    multiple?: false,\n    active?: null | Val | Val[],\n    method?: null | ((active: any, data: D) => boolean),\n    meta?: any\n  }\n\nexport interface ParsedFilterOptions extends Omit<Required<TableFilterOptions>, 'options'> {\n  options: { value: string | number, label: string, active: boolean }[]\n}\n\nexport interface TableSorterOptions<D = Data> {\n  able?: boolean,\n  type?: null | 'asc' | 'desc',\n  order?: number, // 优先级\n  method?: null | ((prev: D, next: D) => number)\n}\n\nexport type ParsedTableSorterOptions = Required<TableSorterOptions>\n\nexport interface TableSummaryData {\n  sum: number,\n  min: number,\n  max: number\n}\n\nexport type SummaryRenderFn<D = Data, Val extends string | number = string | number> = (data: {\n  column: TableColumnOptions<D, Val>,\n  index: number,\n  rows: D[],\n  meta: TableSummaryData\n}) => any\n\nexport type ColumnSummaryRenderFn<\n  D = Data,\n  Val extends string | number = string | number\n> = (data: {\n  column: TableColumnOptions<D, Val>,\n  index: number,\n  rows: D[],\n  meta: TableSummaryData,\n  summary: TableSummaryOptions<D, Val>\n}) => any\n\nexport interface TableBaseColumn<D = Data, Val extends string | number = string | number> {\n  key: keyof D,\n  name?: string,\n  type?: never,\n  meta?: any,\n  fixed?: boolean | 'left' | 'right',\n  class?: ClassType,\n  style?: StyleType,\n  attrs?: Record<string, any>,\n  width?: number,\n  filter?: TableFilterOptions<D, Val>,\n  sorter?: boolean | TableSorterOptions<D>,\n  order?: number,\n  ellipsis?: boolean | null,\n  textAlign?: TableTextAlign,\n  headSpan?: number,\n  noSummary?: boolean,\n  indented?: boolean,\n  accessor?: Accessor<D, Val>,\n  formatter?: (value: Val) => unknown,\n  cellSpan?: ColumnCellSpanFn<D>,\n  renderer?: ColumnRenderFn<D, Val>,\n  headRenderer?: HeadRenderFn,\n  filterRenderer?: FilterRenderFn,\n  summaryRenderer?: ColumnSummaryRenderFn<D, Val>\n}\n\nexport interface TableOrderColumn<D = Data, Val extends string | number = string | number>\n  extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer'> {\n  key?: keyof D,\n  type: 'order',\n  truthIndex?: boolean,\n  orderLabel?: (index: number) => string | number\n}\n\nexport interface TableSelectionColumn<D = Data, Val extends string | number = string | number>\n  extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer' | 'headRenderer'> {\n  key?: keyof D,\n  type: 'selection',\n  /**\n   * @deprecated Use `selectionSize` instead.\n   */\n  checkboxSize?: ComponentSize,\n  selectionSize?: ComponentSize,\n  singleSelect?: boolean,\n  disableRow?: (data: Data) => boolean\n}\n\nexport interface TableExpandColumn<D = Data, Val extends string | number = string | number>\n  extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer'> {\n  key?: keyof D,\n  type: 'expand',\n  disableRow?: (data: Data) => boolean,\n  renderer?: ExpandRenderFn<D>\n}\n\nexport interface TableDragColumn<D = Data, Val extends string | number = string | number>\n  extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer'> {\n  key?: keyof D,\n  type: 'drag',\n  disableRow?: (data: Data) => boolean\n}\n\nexport type TableTypeColumn<D = Data, Val extends string | number = string | number> =\n  | TableOrderColumn<D, Val>\n  | TableSelectionColumn<D, Val>\n  | TableExpandColumn<D, Val>\n  | TableDragColumn<D, Val>\nexport type TableColumnOptions<D = Data, Val extends string | number = string | number> =\n  | TableBaseColumn<D, Val>\n  | TableTypeColumn<D, Val>\n\nexport type ColumnWithKey<\n  D = Data,\n  Val extends string | number = string | number\n> = TableColumnOptions<D, Val> & {\n  key: Key,\n  rowSpan: number,\n  /** @internal */\n  index: number,\n  /** @internal */\n  colIndex: number,\n  /** @internal */\n  first?: boolean,\n  /** @internal */\n  last?: boolean\n}\n\nexport interface TableColumnGroupOptions {\n  name?: string,\n  fixed?: boolean | 'left' | 'right',\n  order?: number,\n  ellipsis?: boolean,\n  textAlign?: TableTextAlign,\n  renderer?: () => any,\n  children: TableColumnOptions<any, any>[]\n}\nexport interface ColumnGroupWithKey extends TableColumnGroupOptions {\n  key: Key,\n  headSpan: number,\n  rowSpan: number,\n  /** @internal */\n  colIndex: number,\n  /** @internal */\n  last?: boolean\n}\n\nexport type ColumnRenderFn<D = Data, Val extends string | number = string | number> = (data: {\n  row: D,\n  rowIndex: number,\n  column: TableBaseColumn<D, Val>,\n  columnIndex: number\n}) => any\nexport type HeadRenderFn<D = Data, Val extends string | number = string | number> = (data: {\n  column: TableColumnOptions<D, Val>,\n  index: number\n}) => any\nexport type FilterRenderFn<D = Data, Val extends string | number = string | number> = (data: {\n  column: TableColumnOptions<D, Val>,\n  index: number,\n  filter: Required<TableFilterOptions<D, Val>>,\n  handleFilter: (active: any) => void\n}) => any\n\nexport type TableCellSpanFn<D = Data, Val extends string | number = string | number> = (data: {\n  row: D,\n  rowIndex: number,\n  column: TableColumnOptions<D, Val>,\n  columnIndex: number,\n  fixed?: 'left' | 'right'\n}) => CellSpanResult | undefined\n\nexport type TableCellPropFn<D = Data, P = any> = (data: {\n  row: D,\n  rowIndex: number,\n  column: ColumnWithKey,\n  columnIndex: number\n}) => P\nexport type TableHeadPropFn<P = any> = (data: {\n  column: ColumnWithKey,\n  index: number,\n  rowIndex: number\n}) => P\nexport type TableFootPropFn<P = any> = (data: {\n  column: ColumnWithKey,\n  columnIndex: number,\n  summary: SummaryWithKey,\n  summaryIndex: number\n}) => P\n\nexport type ColumnProfile<D = Data, Val extends string | number = string | number> = Pick<\n  ColumnWithKey<D, Val>,\n  'name' | 'key' | 'meta'\n>\nexport type TableFilterProfile<\n  D = Data,\n  Val extends string | number = string | number\n> = ColumnProfile<D, Val> & {\n  active: Val | Val[]\n}\nexport type TableSorterProfile<\n  D = Data,\n  Val extends string | number = string | number\n> = ColumnProfile<D, Val> & {\n  type: 'asc' | 'desc',\n  order: number\n}\n\nexport interface TableSummaryOptions<D = Data, Val extends string | number = string | number> {\n  name: string,\n  key: keyof D,\n  class?: ClassType,\n  style?: StyleType,\n  attrs?: Record<string, any>,\n  order?: number,\n  above?: boolean,\n  meta?: Record<any, any>,\n  cellSpan?: SummaryCellSpanFn<D, Val>,\n  renderer?: SummaryRenderFn<D, Val>\n}\n\nexport type SummaryWithKey<\n  D = Data,\n  Val extends string | number = string | number\n> = TableSummaryOptions<D, Val> & { key: Key }\n\n/** @internal */\nexport interface TableRowState {\n  key: Key,\n  index: number,\n  hidden: boolean,\n  hover: boolean,\n  checked: boolean,\n  height: number,\n  // borderHeight: number,\n  expanded: boolean,\n  expandHeight: number,\n  parent?: Key,\n  children: TableRowState[],\n  depth: number,\n  treeExpanded: boolean,\n  partial: boolean,\n  dragging: boolean,\n  listIndex: number,\n  cellHeights: Record<Key, number>,\n  last: boolean,\n  expandAnimate: boolean,\n  data: Data\n}\n\nexport interface StoreOptions {\n  columns: TableColumnRawOptions[],\n  summaries: TableSummaryOptions[],\n  data: Data[],\n  dataKey: string,\n  rowClass: ClassType | TableRowPropFn<ClassType>,\n  rowStyle: StyleType | TableRowPropFn<StyleType>,\n  rowAttrs: Record<string, any> | TableRowPropFn<Record<string, any>>,\n  cellClass: ClassType | TableCellPropFn<ClassType>,\n  cellStyle: StyleType | TableCellPropFn<StyleType>,\n  cellAttrs: Record<string, any> | TableCellPropFn<Record<string, any>>,\n  headClass: ClassType | TableHeadPropFn<ClassType>,\n  headStyle: StyleType | TableHeadPropFn<StyleType>,\n  headAttrs: Record<string, any> | TableHeadPropFn<Record<string, any>>,\n  footClass: ClassType | TableFootPropFn<ClassType>,\n  footStyle: StyleType | TableFootPropFn<StyleType>,\n  footAttrs: Record<string, any> | TableFootPropFn<Record<string, any>>,\n  border: boolean,\n  stripe: boolean,\n  highlight: boolean,\n  currentPage: number,\n  pageSize: number,\n  rowHeight: number,\n  rowMinHeight: number,\n  virtual: boolean,\n  rowDraggable: boolean,\n  locale: LocaleConfig['table'],\n  tooltipTheme: TooltipTheme,\n  tooltipWidth: number | string,\n  singleSorter: boolean,\n  singleFilter: boolean,\n  customSorter: boolean,\n  customFilter: boolean,\n  keyConfig: Required<TableKeyConfig>,\n  disabledTree: boolean,\n  noCascaded: boolean,\n  colResizable: false | TableColResizeType,\n  expandRenderer: ExpandRenderFn | null,\n  cellSpan: TableCellSpanFn | null,\n  sidePadding: number[],\n  borderWidth: number,\n  dataFilter: (data: Data) => boolean,\n  ellipsis: boolean\n}\n\nexport type TableColumnRawOptions = TableColumnOptions<any, any> | TableColumnGroupOptions\nexport type ColumnRawWithKey = ColumnGroupWithKey | ColumnWithKey\n\nexport interface StoreState extends StoreOptions {\n  columns: ColumnWithKey[],\n  normalColumns: ColumnWithKey[],\n  allColumns: ColumnRawWithKey[][],\n  summaries: SummaryWithKey[],\n  rowData: TableRowState[],\n  treeRowData: TableRowState[],\n  width: number,\n  rightFixedColumns: ColumnWithKey[],\n  leftFixedColumns: ColumnWithKey[],\n  aboveSummaries: SummaryWithKey[],\n  belowSummaries: SummaryWithKey[],\n  columnMap: Map<Key, ColumnRawWithKey>,\n  rowMap: Map<Key, TableRowState>,\n  summaryMap: Map<Key, SummaryWithKey>,\n  idMaps: WeakMap<Data, Key>,\n  checkedAll: boolean,\n  partial: boolean,\n  widths: Map<Key, number>,\n  sorters: Map<Key, ParsedTableSorterOptions>,\n  filters: Map<Key, ParsedFilterOptions>,\n  resized: Set<Key>,\n  bodyYScroll: number,\n  bodyXScroll: number,\n  padTop: number,\n  startRow: number,\n  endRow: number,\n  dragging: boolean,\n  heightBITree: BITree,\n  virtualData: TableRowState[],\n  totalHeight: number,\n  colResizing: boolean,\n  resizeLeft: number,\n  cellSpanMap: Map<'left' | 'default' | 'right', Map<string, Required<CellSpanResult>>>,\n  collapseMap: Map<'left' | 'default' | 'right', Map<string, Set<string>>>,\n  locked: boolean,\n  barScrolling: boolean,\n  heightTrigger: number\n}\n\nexport interface TableRowInstance {\n  el?: HTMLElement | null,\n  row: TableRowState\n}\n\nexport interface TableRowPayload {\n  row: Data,\n  key: Key,\n  index: number,\n  event: Event,\n  checked?: boolean,\n  expanded?: boolean\n}\n\nexport interface TableCellPayload {\n  row: Data,\n  key: Key,\n  rowIndex: number,\n  column: TableColumnOptions,\n  columnIndex: number,\n  event: Event\n}\n\nexport interface TableHeadPayload {\n  column: TableColumnOptions,\n  index: number,\n  event: Event\n}\n\nexport interface TableColResizePayload extends TableHeadPayload {\n  width: number\n}\n\nexport interface TableFootPayload {\n  column: TableColumnOptions,\n  columnIndex: number,\n  summary: TableSummaryOptions,\n  summaryIndex: number,\n  event: Event\n}\n\nexport interface TableActions {\n  increaseColumn(column: TableColumnRawOptions): void,\n  decreaseColumn(column: TableColumnRawOptions): void,\n  increaseSummary(column: TableSummaryOptions): void,\n  decreaseSummary(column: TableSummaryOptions): void,\n  getTableElement(): HTMLElement | undefined,\n  refreshXScroll(): void,\n  emitRowCheck(payload: TableRowPayload & { checked: boolean }): void,\n  emitAllRowCheck(checked: boolean, partial: boolean): void,\n  emitRowExpand(payload: TableRowPayload & { expanded: boolean }): void,\n  emitRowTreeExpand(payload: TableRowPayload & { expanded: boolean }): void,\n  emitRowFilter(): void,\n  emitRowSort(): void,\n  handleRowDragStart(rowInstance: TableRowInstance, event: DragEvent): void,\n  handleRowDragOver(rowInstance: TableRowInstance, event: DragEvent): void,\n  handleRowDrop(rowInstance: TableRowInstance, event: DragEvent): void,\n  handleRowDragEnd(event: DragEvent): void,\n  emitRowEvent(type: MouseEventType, payload: TableRowPayload): void,\n  emitCellEvent(type: MouseEventType, payload: TableCellPayload): void,\n  emitHeadEvent(type: MouseEventType, payload: TableHeadPayload): void,\n  emitFootEvent(type: MouseEventType, payload: TableFootPayload): void,\n  emitColResize(type: MoveEventType, payload: TableColResizePayload): void,\n  hasIcon(name: TableIconName): boolean,\n  getIcon(name: TableIconName): TableIcons[TableIconName],\n  renderTableSlot(payload: { name: string }): any,\n  runInLocked(handler?: (...args: any[]) => any, delay?: number): Promise<void>,\n  updateColumns(): void,\n  setColumnProp(key: Key, prop: string, value: any): void,\n  updateSummaries(): void,\n  setSummaryProp(key: Key, prop: string, value: any): void\n}\n\nexport interface ColumnGroupActions {\n  increaseColumn(column: TableColumnRawOptions): void,\n  decreaseColumn(column: TableColumnRawOptions): void\n}\n\nexport const DEFAULT_KEY_FIELD = 'id'\n/**\n * 表格状态管理\n */\nexport const TABLE_STORE = '__VXP_TABLE_STORE' as unknown as InjectionKey<TableStore>\n/**\n * 表格组件的顶层 Api\n */\nexport const TABLE_ACTIONS = '__VXP_TABLE_ACTIONS' as unknown as InjectionKey<TableActions>\nexport const TABLE_SLOTS = '__VXP_TABLE_SLOTS' as unknown as InjectionKey<Slots>\nexport const TABLE_HEAD_PREFIX = '__vxp-table-head-'\nexport const TABLE_FOOT_PREFIX = '__vxp-table-foot-'\n\nexport const COLUMN_GROUP_ACTIONS =\n  '__VXP_TABLE_COLUMN_GROUP_ACTIONS' as unknown as InjectionKey<ColumnGroupActions>\n\nexport const columnTypes: TableColumnType[] = ['order', 'selection', 'expand', 'drag']\n\nexport const noopFormatter = (v: any) => v\n","import {\n  computed,\n  defineComponent,\n  inject,\n  onBeforeUnmount,\n  reactive,\n  renderSlot,\n  watch\n} from 'vue'\n\nimport { createSizeProp, useProps } from '@vexip-ui/config'\nimport { isNull, warnOnce } from '@vexip-ui/utils'\nimport { tableColumnProps } from './props'\nimport { COLUMN_GROUP_ACTIONS, TABLE_ACTIONS, columnTypes, noopFormatter } from './symbol'\n\nimport type { ColumnWithKey, Data, TableRowState, TableTextAlign } from './symbol'\n\ntype ColumnPropKey = keyof typeof tableColumnProps\n\nconst propKeys = Object.keys(tableColumnProps) as ColumnPropKey[]\nconst aliases: Partial<Record<ColumnPropKey, string>> = {\n  idKey: 'key'\n}\nconst ignoredProps: ColumnPropKey[] = [\n  'renderer',\n  'headRenderer',\n  'filterRenderer',\n  'summaryRenderer'\n]\nconst triggerProps: ColumnPropKey[] = [\n  'idKey',\n  'fixed',\n  'type',\n  'width',\n  'sorter',\n  'order',\n  'orderLabel',\n  'disableRow',\n  'headSpan',\n  'cellSpan'\n]\nconst aligns: TableTextAlign[] = ['left', 'center', 'right']\n\nconst funcProp = {\n  default: null,\n  isFunc: true,\n  static: true\n}\n\nexport default defineComponent({\n  name: 'TableColumn',\n  inheritAttrs: false,\n  props: tableColumnProps,\n  setup(_props, { slots }) {\n    const props = useProps('tableColumn', _props, {\n      idKey: {\n        default: null,\n        validator: value => !isNull(value),\n        static: true\n      },\n      name: {\n        default: '',\n        static: true\n      },\n      accessor: {\n        default: null,\n        isFunc: true,\n        static: true\n      },\n      fixed: {\n        default: false,\n        static: true\n      },\n      class: null,\n      style: null,\n      attrs: null,\n      type: {\n        default: null,\n        validator: value => columnTypes.includes(value),\n        static: true\n      },\n      width: null,\n      filter: null,\n      sorter: false,\n      renderer: funcProp,\n      headRenderer: funcProp,\n      filterRenderer: funcProp,\n      order: {\n        default: 0,\n        static: true\n      },\n      ellipsis: null,\n      checkboxSize: {\n        ...createSizeProp(),\n        default: null\n      },\n      selectionSize: {\n        ...createSizeProp(),\n        default: null\n      },\n      disableRow: {\n        default: null,\n        isFunc: true\n      },\n      truthIndex: false,\n      orderLabel: {\n        default: null,\n        isFunc: true\n      },\n      meta: null,\n      textAlign: {\n        default: 'left',\n        validator: value => aligns.includes(value)\n      },\n      headSpan: {\n        default: 1,\n        static: true\n      },\n      cellSpan: funcProp,\n      noSummary: false,\n      summaryRenderer: funcProp,\n      indented: false,\n      formatter: {\n        default: null,\n        isFunc: true\n      },\n      singleSelect: false\n    })\n\n    const selectionSize = computed(() => {\n      if (props.checkboxSize) {\n        warnOnce(\"'checkboxSize' has been deprecated, please use 'selectionSize' instead.\")\n      }\n\n      return props.selectionSize ?? props.checkboxSize ?? 'default'\n    })\n\n    const tableAction = inject(TABLE_ACTIONS, null)\n    const parentActions = inject(COLUMN_GROUP_ACTIONS, null)\n    const options = reactive({}) as ColumnWithKey\n\n    for (const key of propKeys) {\n      if (ignoredProps.includes(key)) continue\n\n      if (key === 'selectionSize' || key === 'checkboxSize') {\n        ;(options as any).selectionSize = selectionSize.value\n\n        watch(selectionSize, value => {\n          ;(options as any).selectionSize = value\n          tableAction?.setColumnProp(options.key, 'selectionSize', value)\n        })\n\n        continue\n      }\n\n      const aliasKey = (aliases[key] || key) as keyof ColumnWithKey\n\n      ;(options[aliasKey] as any) = props[key]\n\n      if (key === 'idKey') {\n        const update = (value: string | number) => {\n          if (isNull(value) && props.type) {\n            ;(options[aliasKey] as any) = value = `__vxp_${props.type}`\n          } else {\n            ;(options[aliasKey] as any) = value\n          }\n        }\n\n        update(props.idKey)\n        watch(\n          () => props.idKey,\n          value => {\n            update(value)\n            tableAction?.updateColumns()\n          }\n        )\n      } else if (key === 'filter') {\n        const filterWithoutMeta = computed(() => {\n          if (props.filter) {\n            const { meta, ...filter } = props.filter\n            return filter\n          }\n\n          return props.filter\n        })\n\n        watch(\n          filterWithoutMeta,\n          () => {\n            options.filter = props.filter\n            tableAction?.updateColumns()\n          },\n          { deep: true }\n        )\n      } else {\n        const trigger = triggerProps.includes(key)\n\n        watch(\n          () => props[key],\n          value => {\n            ;(options[aliasKey] as any) = value\n            trigger\n              ? tableAction?.updateColumns()\n              : tableAction?.setColumnProp(options.key, key, value)\n          }\n        )\n      }\n    }\n\n    watch(() => props.renderer, setRenderer)\n    watch(() => props.headRenderer, setHeadRenderer)\n    watch(() => props.filterRenderer, setFilterRenderer)\n    watch(() => props.summaryRenderer, setSummaryRenderer)\n\n    setRenderer()\n    setHeadRenderer()\n    setFilterRenderer()\n    setSummaryRenderer()\n\n    if (parentActions) {\n      parentActions.increaseColumn(options)\n\n      onBeforeUnmount(() => {\n        parentActions.decreaseColumn(options)\n      })\n    } else {\n      tableAction?.increaseColumn(options)\n\n      onBeforeUnmount(() => {\n        tableAction?.decreaseColumn(options)\n      })\n    }\n\n    // TODO: 在动态列时会触发无限 watch，初步估计是重置单元格合并状态导致的\n    // onBeforeUpdate(() => {\n    //   setRenderer()\n    //   setHeadRenderer()\n    //   setFilterRenderer()\n    // }\n\n    function setRenderer() {\n      if (options.type && options.type !== 'expand') {\n        ;(options as any).renderer = undefined\n        return\n      }\n\n      options.renderer = (data: any) => {\n        if (typeof slots.default === 'function') {\n          return renderSlot(slots, 'default', data)\n        }\n\n        if (typeof props.renderer === 'function') {\n          return props.renderer(data)\n        }\n\n        if (options.type === 'expand') {\n          return ''\n        }\n\n        const row = data.row\n        const rowIndex = data.rowIndex as number\n        const formatter =\n          typeof options.formatter === 'function' ? options.formatter : noopFormatter\n\n        const result = formatter(\n          typeof props.accessor === 'function'\n            ? props.accessor(row as Data, rowIndex)\n            : (row as TableRowState)[options.key as unknown as keyof TableRowState]\n        )\n\n        return isNull(result) ? '' : String(result)\n      }\n    }\n\n    function setHeadRenderer() {\n      if (options.type === 'selection') {\n        ;(options as any).renderer = undefined\n        return\n      }\n\n      options.headRenderer = data => {\n        if (typeof slots.head === 'function') {\n          return renderSlot(slots, 'head', data)\n        }\n\n        if (typeof props.headRenderer === 'function') {\n          return props.headRenderer(data)\n        }\n\n        return props.name\n      }\n    }\n\n    function setFilterRenderer() {\n      if (typeof slots.filter === 'function' || typeof props.filterRenderer === 'function') {\n        options.filterRenderer = data => {\n          if (typeof slots.filter === 'function') {\n            return renderSlot(slots, 'filter', data)\n          }\n\n          return props.filterRenderer(data)\n        }\n      } else {\n        options.filterRenderer = undefined\n      }\n    }\n\n    function setSummaryRenderer() {\n      if (typeof slots.summary === 'function' || typeof props.summaryRenderer === 'function') {\n        options.summaryRenderer = data => {\n          if (typeof slots.summary === 'function') {\n            return renderSlot(slots, 'summary', data)\n          }\n\n          if (typeof props.summaryRenderer === 'function') {\n            return props.summaryRenderer(data)\n          }\n\n          return ''\n        }\n      } else {\n        options.summaryRenderer = undefined\n      }\n    }\n\n    return () => null\n  }\n})\n","import {\n  computed,\n  defineComponent,\n  inject,\n  onBeforeUnmount,\n  provide,\n  reactive,\n  renderSlot,\n  watch\n} from 'vue'\n\nimport TableColumn from './table-column'\nimport { useProps } from '@vexip-ui/config'\nimport { tableColumnGroupProps } from './props'\nimport { COLUMN_GROUP_ACTIONS, TABLE_ACTIONS } from './symbol'\n\nimport type { ColumnGroupWithKey, TableColumnOptions } from './symbol'\n\ntype GroupPropKey = keyof typeof tableColumnGroupProps\n\nconst propKeys = Object.keys(tableColumnGroupProps) as GroupPropKey[]\nconst ignoredProps: GroupPropKey[] = ['renderer', 'children']\nconst triggerProps: GroupPropKey[] = ['fixed', 'order']\n\nconst TableColumnGroup = defineComponent({\n  name: 'TableColumnGroup',\n  inheritAttrs: false,\n  props: tableColumnGroupProps,\n  setup(_props, { slots }) {\n    const props = useProps('tableColumn', _props, {\n      name: {\n        default: '',\n        static: true\n      },\n      fixed: {\n        default: false,\n        static: true\n      },\n      order: {\n        default: 0,\n        static: true\n      },\n      ellipsis: null,\n      textAlign: 'center',\n      renderer: {\n        default: null,\n        isFunc: true,\n        static: true\n      },\n      children: {\n        default: () => [],\n        static: true\n      }\n    })\n    const tableAction = inject(TABLE_ACTIONS, null)\n    const parentActions = inject(COLUMN_GROUP_ACTIONS, null)\n\n    const columns = reactive(new Set<TableColumnOptions>())\n    const children = computed(() => [...columns])\n    const options = reactive({ children }) as ColumnGroupWithKey\n\n    options.key = Symbol('TableColumnGroup')\n\n    for (const key of propKeys) {\n      if (ignoredProps.includes(key)) continue\n      ;(options[key as keyof ColumnGroupWithKey] as any) = props[key]\n\n      const trigger = triggerProps.includes(key)\n\n      watch(\n        () => props[key],\n        value => {\n          ;(options[key as keyof ColumnGroupWithKey] as any) = value\n          trigger\n            ? tableAction?.updateColumns()\n            : tableAction?.setColumnProp(options.key, key, value)\n        }\n      )\n    }\n\n    watch(() => props.renderer, setRenderer, { immediate: true })\n\n    provide(COLUMN_GROUP_ACTIONS, {\n      increaseColumn,\n      decreaseColumn\n    })\n\n    if (parentActions) {\n      parentActions.increaseColumn(options)\n\n      onBeforeUnmount(() => {\n        parentActions.decreaseColumn(options)\n      })\n    } else {\n      tableAction?.increaseColumn(options)\n\n      onBeforeUnmount(() => {\n        tableAction?.decreaseColumn(options)\n      })\n    }\n\n    function increaseColumn(column: TableColumnOptions) {\n      columns.add(column)\n    }\n\n    function decreaseColumn(column: TableColumnOptions) {\n      columns.delete(column)\n    }\n\n    function setRenderer() {\n      options.renderer = () => {\n        if (typeof slots.head === 'function') {\n          return renderSlot(slots, 'head')\n        }\n\n        if (typeof props.renderer === 'function') {\n          return props.renderer()\n        }\n\n        return props.name\n      }\n    }\n\n    function renderChildren() {\n      return props.children.map(child => {\n        if ('children' in child) {\n          return <TableColumnGroup {...child}></TableColumnGroup>\n        }\n\n        const { key, ...others } = child\n\n        return <TableColumn {...others} id-key={key}></TableColumn>\n      })\n    }\n\n    return () => [renderSlot(slots, 'default'), ...renderChildren()]\n  }\n})\n\n// eslint-disable-next-line vue/require-direct-export\nexport default TableColumnGroup\n","import { defineComponent, inject, onBeforeUnmount, reactive, renderSlot, watch } from 'vue'\n\nimport { useProps } from '@vexip-ui/config'\nimport { isNull } from '@vexip-ui/utils'\nimport { tableSummaryProps } from './props'\nimport { TABLE_ACTIONS } from './symbol'\n\nimport type { SummaryWithKey } from './symbol'\n\ntype SummaryPropKey = keyof typeof tableSummaryProps\n\nconst propKeys = Object.keys(tableSummaryProps) as SummaryPropKey[]\nconst aliases: Partial<Record<SummaryPropKey, string>> = {\n  idKey: 'key'\n}\nconst ignoredProps: SummaryPropKey[] = ['renderer']\nconst triggerProps: SummaryPropKey[] = ['idKey', 'cellSpan', 'order', 'above']\n\nconst funcProp = {\n  default: null,\n  isFunc: true,\n  static: true\n}\n\nexport default defineComponent({\n  name: 'TableSummary',\n  props: tableSummaryProps,\n  setup(_props, { slots }) {\n    const props = useProps('tableSummary', _props, {\n      idKey: {\n        default: null,\n        validator: value => !isNull(value),\n        static: true\n      },\n      class: null,\n      style: null,\n      attrs: null,\n      cellSpan: funcProp,\n      order: {\n        default: 0,\n        static: true\n      },\n      above: {\n        default: false,\n        static: true\n      },\n      meta: null,\n      renderer: funcProp\n    })\n\n    const tableAction = inject(TABLE_ACTIONS, null)\n    const options = reactive({}) as SummaryWithKey\n\n    for (const key of propKeys) {\n      if (ignoredProps.includes(key)) continue\n\n      const aliasKey = (aliases[key] || key) as keyof SummaryWithKey\n      const trigger = triggerProps.includes(key)\n\n      ;(options[aliasKey] as any) = props[key]\n\n      watch(\n        () => props[key],\n        value => {\n          ;(options[aliasKey] as any) = value\n          trigger\n            ? tableAction?.updateSummaries()\n            : tableAction?.setSummaryProp(options.key, key, value)\n        }\n      )\n    }\n\n    watch(() => props.renderer, setRenderer)\n\n    setRenderer()\n    tableAction?.increaseSummary(options)\n\n    onBeforeUnmount(() => {\n      tableAction?.decreaseSummary(options)\n    })\n\n    function setRenderer() {\n      options.renderer = data => {\n        if (typeof data.column.summaryRenderer === 'function') {\n          return data.column.summaryRenderer({\n            ...data,\n            summary: options\n          })\n        }\n\n        if (typeof slots.default === 'function') {\n          return renderSlot(slots, 'default', data)\n        }\n\n        if (typeof props.renderer === 'function') {\n          return props.renderer(data)\n        }\n\n        return ''\n      }\n    }\n\n    return () => null\n  }\n})\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, inject } from 'vue'\n\nimport { isFunction } from '@vexip-ui/utils'\nimport { TABLE_ACTIONS, TABLE_SLOTS } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { TableIconName } from './symbol'\n\ndefineOptions({ name: 'TableIcon' })\n\nconst props = defineProps({\n  name: {\n    type: String as PropType<TableIconName>,\n    required: true\n  },\n  origin: {\n    type: Object,\n    default: null\n  }\n})\n\nconst tableActions = inject(TABLE_ACTIONS)!\nconst tableSlots = inject(TABLE_SLOTS)!\n\nconst customIcon = computed(() => tableActions.getIcon(props.name))\n</script>\n\n<template>\n  <Renderer\n    v-if=\"isFunction(tableSlots[`icon-${name}`])\"\n    :renderer=\"tableActions.renderTableSlot\"\n    :data=\"{ name: `icon-${name}` }\"\n  ></Renderer>\n  <Icon v-else-if=\"tableActions.hasIcon(name)\" :icon=\"customIcon\"></Icon>\n  <Icon v-else v-bind=\"origin\"></Icon>\n</template>\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Checkbox } from '@/components/checkbox'\nimport { Ellipsis } from '@/components/ellipsis'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, inject, ref, toRef } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport TableIcon from './table-icon.vue'\nimport { useMoving, useRtl } from '@vexip-ui/hooks'\nimport { getLast, isFunction, nextFrameOnce } from '@vexip-ui/utils'\nimport { TABLE_ACTIONS, TABLE_HEAD_PREFIX, TABLE_STORE, columnTypes } from './symbol'\n\nimport type { PropType, StyleValue } from 'vue'\nimport type { MovingState } from '@vexip-ui/hooks'\nimport type {\n  ColumnWithKey,\n  ParsedFilterOptions,\n  ParsedTableSorterOptions,\n  TableRowState,\n  TableSelectionColumn,\n  TableTypeColumn\n} from './symbol'\n\ndefineOptions({ name: 'TableHeadCell' })\n\nconst props = defineProps({\n  column: {\n    type: Object as PropType<ColumnWithKey>,\n    default: () => ({})\n  },\n  index: {\n    type: Number,\n    default: -1\n  },\n  row: {\n    type: Object as PropType<TableRowState>,\n    default: () => ({})\n  },\n  rowIndex: {\n    type: Number,\n    default: 0\n  },\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null\n  }\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\nconst tableActions = inject(TABLE_ACTIONS)!\n\nconst nh = useNameHelper('table')\nconst locale = toRef(state, 'locale')\nconst icons = useIcons()\nconst { isRtl } = useRtl()\n\nconst filterVisible = ref(false)\nconst resizable = toRef(state, 'colResizable')\nconst resizing = computed(() => state.colResizing)\n\nconst wrapper = ref<HTMLElement>()\n\nconst isGroup = computed(() => mutations.isGroupColumn(props.column))\nconst columns = computed(() => {\n  return props.fixed === 'left'\n    ? state.leftFixedColumns\n    : props.fixed === 'right'\n      ? state.rightFixedColumns\n      : state.normalColumns\n})\nconst cellSpan = computed(() => {\n  return (\n    state.cellSpanMap.get(props.fixed || 'default')!.get(`h${props.rowIndex},${props.index}`) || {\n      colSpan: 1,\n      rowSpan: 1\n    }\n  )\n})\nconst inLast = computed(() => {\n  return isGroup.value\n    ? props.column.last\n    : props.column.index + cellSpan.value.colSpan >= state.columns.length\n})\n\nconst minWidth = 10\n\nlet currentWidth = 0\n\nfunction processColResize(payload: MovingState, lazy = false) {\n  const width = Math.max(currentWidth + (payload.isRtl ? -1 : 1) * payload.deltaX, minWidth)\n\n  !lazy &&\n    mutations.handleColumnResize(\n      state.columns\n        .slice(props.column.index, props.column.index + cellSpan.value.colSpan)\n        .map(column => column.key),\n      width\n    )\n\n  return width\n}\n\nconst { target: resizer } = useMoving({\n  capture: false,\n  onStart: (payload, event) => {\n    if (!resizable.value || resizing.value || isGroup.value) return false\n\n    const table = tableActions.getTableElement()\n\n    if (!table || !wrapper.value) return false\n\n    payload.xStart = payload.clientX - table.getBoundingClientRect().left\n    payload.isRtl = isRtl.value\n    currentWidth = wrapper.value.getBoundingClientRect().width\n\n    mutations.setColumnResizing(true)\n    mutations.setResizeLeft(payload.xStart)\n    tableActions.emitColResize('Start', {\n      ...buildEventPayload(event),\n      width: currentWidth\n    })\n  },\n  onMove: (payload, event) => {\n    payload.xEnd = Math.max(payload.xStart - currentWidth + minWidth, payload.xEnd)\n\n    mutations.setResizeLeft(payload.xEnd)\n    tableActions.emitColResize('Move', {\n      ...buildEventPayload(event),\n      width: processColResize(payload, state.colResizable !== 'responsive')\n    })\n  },\n  onEnd: (payload, event) => {\n    mutations.setColumnResizing(false)\n    tableActions.emitColResize('End', {\n      ...buildEventPayload(event),\n      width: processColResize(payload)\n    })\n  }\n})\n\nconst typed = computed(() => columnTypes.includes((props.column as TableTypeColumn).type))\nconst className = computed(() => {\n  let customClass = null\n\n  if (typeof state.headClass === 'function') {\n    customClass = state.headClass({\n      column: props.column,\n      index: props.column.colIndex,\n      rowIndex: props.rowIndex\n    })\n  } else {\n    customClass = state.headClass\n  }\n\n  return [\n    nh.be('head-cell'),\n    {\n      [nh.bem('head-cell', 'group')]: isGroup.value,\n      [nh.bem('head-cell', 'typed')]: typed.value,\n      [nh.bem('head-cell', 'center')]: typed.value || props.column.textAlign === 'center',\n      [nh.bem('head-cell', 'right')]: props.column.textAlign === 'right',\n      [nh.bem('head-cell', 'last')]: inLast.value\n    },\n    props.column.class,\n    customClass\n  ]\n})\nconst customStyle = computed(() => {\n  if (typeof state.headStyle === 'function') {\n    return state.headStyle({\n      column: props.column,\n      index: props.column.colIndex,\n      rowIndex: props.rowIndex\n    })\n  }\n\n  return state.headStyle\n})\nconst style = computed(() => {\n  const totalWidths =\n    props.fixed === 'left'\n      ? getters.leftFixedWidths\n      : props.fixed === 'right'\n        ? getters.rightFixedWidths\n        : getters.normalWidths\n  const { colSpan, rowSpan } = cellSpan.value\n  const noFixed = !getters.hasFixedColumn\n  const padLeft = noFixed || columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n  const padRight =\n    noFixed || getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\n  const width = totalWidths[props.index + colSpan] - totalWidths[props.index]\n\n  let height: number | undefined\n\n  if (rowSpan > 1) {\n    height = 0\n\n    for (let i = 0; i < rowSpan; ++i) {\n      height += state.rowMap.get(`${TABLE_HEAD_PREFIX}${props.rowIndex + i}`)?.height ?? 0\n    }\n  }\n\n  return [\n    props.column.style || '',\n    customStyle.value,\n    {\n      display: !colSpan ? 'none' : undefined,\n      width: `${(props.column.index ? 0 : padLeft) + (inLast.value ? padRight : 0) + width}px`,\n      height: height ? `${height}px` : undefined,\n      visibility: props.column.fixed && !props.fixed ? 'hidden' : undefined,\n      borderRightWidth:\n        !state.border && colSpan > 1 && props.index + colSpan >= totalWidths.length - 1\n          ? 0\n          : undefined,\n      transform: `translate3d(${isRtl.value ? '-' : ''}${\n        (props.column.index ? padLeft : 0) + totalWidths[props.index]\n      }px, 0, 0)`\n    }\n  ] as StyleValue\n})\nconst attrs = computed(() => {\n  let customAttrs: Record<string, any>\n\n  if (typeof state.headAttrs === 'function') {\n    customAttrs = state.headAttrs({\n      column: props.column,\n      index: props.column.colIndex,\n      rowIndex: props.rowIndex\n    })\n  } else {\n    customAttrs = state.headAttrs\n  }\n\n  return { ...(props.column.attrs || {}), ...(customAttrs || {}) }\n})\nconst sorter = computed(() => {\n  return state.sorters.get(props.column.key) || ({} as ParsedTableSorterOptions)\n})\nconst filter = computed(() => {\n  return state.filters.get(props.column.key) || ({} as ParsedFilterOptions)\n})\nconst hasFilterActive = computed(() => {\n  const options = filter.value.options ?? []\n\n  for (let i = 0, len = options.length; i < len; ++i) {\n    if (options[i].active) {\n      return true\n    }\n  }\n\n  return false\n})\nconst checkboxDisabled = computed(() => {\n  if (!isSelection(props.column)) {\n    return false\n  }\n\n  const records = Object.values(getters.disableCheckRows)\n\n  return (\n    getters.processedData.length === records.length &&\n    !Object.values(getters.disableCheckRows).includes(false)\n  )\n})\n\nconst refreshXScroll = () => nextFrameOnce(tableActions.refreshXScroll)\n\nfunction isSelection(column: unknown): column is TableSelectionColumn {\n  return !isGroup.value && (column as TableTypeColumn).type === 'selection'\n}\n\nfunction buildEventPayload(event: Event) {\n  return {\n    column: props.column,\n    index: props.column.colIndex,\n    event\n  }\n}\n\nfunction handleMouseEnter(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Enter', buildEventPayload(event))\n}\n\nfunction handleMouseLeave(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Leave', buildEventPayload(event))\n}\n\nfunction handleClick(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Click', buildEventPayload(event))\n}\n\nfunction handleDblclick(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Dblclick', buildEventPayload(event))\n}\n\nfunction handleContextmenu(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Contextmenu', buildEventPayload(event))\n}\n\nfunction handleSortAsc() {\n  const key = props.column.key\n  const type = sorter.value.type === 'asc' ? null : 'asc'\n\n  mutations.handleSort(key, type)\n  tableActions.emitRowSort()\n}\n\nfunction handleSortDesc() {\n  const key = props.column.key\n  const type = sorter.value.type === 'desc' ? null : 'desc'\n\n  mutations.handleSort(key, type)\n  tableActions.emitRowSort()\n}\n\nfunction handleFilter(value: ParsedFilterOptions['active']) {\n  mutations.handleFilter(props.column.key, value)\n}\n\nfunction handleFilterItemSelect(value: string | number, active: boolean) {\n  mutations.toggleFilterItemActive({\n    key: props.column.key,\n    value,\n    active,\n    disableOthers: true\n  })\n  handleFilter(value)\n  filterVisible.value = false\n  tableActions.emitRowFilter()\n}\n\nfunction handleFilterCheck(value: string | number, checked: boolean) {\n  mutations.toggleFilterItemActive({\n    key: props.column.key,\n    value,\n    active: checked\n  })\n}\n\nfunction handleFilterMultiple() {\n  const options = filter.value.options ?? []\n  const activeValues = []\n\n  for (let i = 0, len = options.length; i < len; ++i) {\n    const option = options[i]\n\n    if (option.active) {\n      activeValues.push(option.value)\n    }\n  }\n\n  handleFilter(activeValues)\n  filterVisible.value = false\n  tableActions.emitRowFilter()\n}\n\nfunction handleResetFilter() {\n  filterVisible.value = false\n  handleFilter(null)\n  mutations.toggleFilterItemActive({\n    key: props.column.key,\n    value: null,\n    disableOthers: true\n  })\n  tableActions.emitRowFilter()\n}\n\nfunction handleCheckAllRow() {\n  mutations.handleCheckAll()\n  tableActions.emitAllRowCheck(state.checkedAll, state.partial)\n}\n\nfunction handleCellResize(entry: ResizeObserverEntry) {\n  mutations.setCellHeight(\n    props.row.key,\n    props.column.key,\n    (entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height) + state.borderWidth\n  )\n}\n</script>\n\n<template>\n  <div\n    v-bind=\"attrs\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"columnheader\"\n    scope=\"col\"\n    :colspan=\"cellSpan.colSpan !== 1 ? cellSpan.colSpan : undefined\"\n    :rowspan=\"cellSpan.rowSpan !== 1 ? cellSpan.rowSpan : undefined\"\n    :style=\"style\"\n    :aria-sort=\"\n      !isGroup && sorter.able\n        ? sorter.type\n          ? sorter.type === 'asc'\n            ? 'ascending'\n            : 'descending'\n          : 'none'\n        : undefined\n    \"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n    @click=\"handleClick\"\n    @dblclick=\"handleDblclick\"\n    @contextmenu=\"handleContextmenu\"\n    @transitionend=\"refreshXScroll\"\n  >\n    <div\n      v-if=\"column.index === 0\"\n      :class=\"nh.be('side-pad')\"\n      role=\"none\"\n      aria-hidden\n    ></div>\n    <template v-if=\"isSelection(column)\">\n      <div v-if=\"!column.singleSelect\" :class=\"nh.be('content')\">\n        <Checkbox\n          inherit\n          control\n          :class=\"nh.be('selection')\"\n          :checked=\"state.checkedAll\"\n          :partial=\"state.partial\"\n          :disabled=\"checkboxDisabled\"\n          :size=\"column.selectionSize || 'default'\"\n          @click.prevent=\"handleCheckAllRow\"\n        ></Checkbox>\n      </div>\n    </template>\n    <ResizeObserver\n      v-else\n      :disabled=\"column.ellipsis ?? state.ellipsis\"\n      :on-resize=\"handleCellResize\"\n    >\n      <span :class=\"nh.be('content')\">\n        <Ellipsis\n          v-if=\"column.ellipsis ?? state.ellipsis\"\n          inherit\n          :class=\"nh.be('ellipsis')\"\n          :tooltip-theme=\"state.tooltipTheme\"\n          :tip-max-width=\"state.tooltipWidth\"\n        >\n          <Renderer\n            v-if=\"isGroup && isFunction((column as any).renderer)\"\n            :renderer=\"(column as any).renderer\"\n          ></Renderer>\n          <Renderer\n            v-else-if=\"isFunction(column.headRenderer)\"\n            :renderer=\"column.headRenderer\"\n            :data=\"{ column, index }\"\n          ></Renderer>\n          <template v-else>\n            {{ column.name }}\n          </template>\n        </Ellipsis>\n        <template v-else>\n          <Renderer\n            v-if=\"isGroup && isFunction((column as any).renderer)\"\n            :renderer=\"(column as any).renderer\"\n          ></Renderer>\n          <Renderer\n            v-else-if=\"isFunction(column.headRenderer)\"\n            :renderer=\"column.headRenderer\"\n            :data=\"{ column, index }\"\n          ></Renderer>\n          <template v-else>\n            {{ column.name }}\n          </template>\n        </template>\n        <template v-if=\"!isGroup\">\n          <div v-if=\"sorter.able\" :class=\"nh.be('sorter')\">\n            <span\n              :class=\"{\n                [nh.bem('sorter', 'asc')]: true,\n                [nh.bem('sorter', 'active')]: sorter.type === 'asc'\n              }\"\n              @click=\"handleSortAsc()\"\n            >\n              <TableIcon name=\"asc\" :origin=\"icons.angleUp\"></TableIcon>\n            </span>\n            <span\n              :class=\"{\n                [nh.bem('sorter', 'desc')]: true,\n                [nh.bem('sorter', 'active')]: sorter.type === 'desc'\n              }\"\n              @click=\"handleSortDesc()\"\n            >\n              <TableIcon name=\"desc\" :origin=\"icons.angleDown\"></TableIcon>\n            </span>\n          </div>\n          <template v-if=\"filter.able\">\n            <Renderer\n              v-if=\"isFunction(column.filterRenderer)\"\n              :renderer=\"column.filterRenderer\"\n              :data=\"{ column, index, filter, handleFilter }\"\n            ></Renderer>\n            <Tooltip\n              v-else\n              v-model:visible=\"filterVisible\"\n              transfer\n              placement=\"bottom\"\n              trigger=\"click\"\n              :class=\"{\n                [nh.be('filter')]: true,\n                [nh.bem('filter', 'visible')]: filterVisible,\n                [nh.bem('filter', 'active')]: filter.active\n              }\"\n              :tip-class=\"{\n                [nh.be('filter-wrapper')]: true,\n                [nh.bs('vars')]: true,\n                [nh.bem('filter-wrapper', 'multiple')]: filter.multiple\n              }\"\n            >\n              <template #trigger>\n                <div :class=\"nh.be('filter-trigger')\">\n                  <TableIcon name=\"filter\" :origin=\"icons.filter\"></TableIcon>\n                </div>\n              </template>\n              <template v-if=\"filter.multiple\" #default>\n                <div vertical :class=\"nh.be('filter-group')\">\n                  <Checkbox\n                    v-for=\"item in filter.options\"\n                    :key=\"item.value\"\n                    inherit\n                    :checked=\"item.active\"\n                    :label=\"item.label\"\n                    :value=\"item.value\"\n                    @change=\"handleFilterCheck(item.value, $event)\"\n                  ></Checkbox>\n                </div>\n                <div :class=\"nh.be('filter-actions')\">\n                  <Button\n                    inherit\n                    text\n                    size=\"small\"\n                    :disabled=\"!hasFilterActive\"\n                    @click=\"handleFilterMultiple()\"\n                  >\n                    {{ locale.filterConfirm }}\n                  </Button>\n                  <Button\n                    inherit\n                    text\n                    size=\"small\"\n                    @click=\"handleResetFilter\"\n                  >\n                    {{ locale.filterReset }}\n                  </Button>\n                </div>\n              </template>\n              <template v-else #default>\n                <div\n                  :class=\"{\n                    [nh.be('filter-item')]: true,\n                    [nh.bem('filter-item', 'active')]: !filter.active\n                  }\"\n                  @click=\"handleResetFilter\"\n                >\n                  {{ locale.filterAll }}\n                </div>\n                <div\n                  v-for=\"item in filter.options\"\n                  :key=\"item.value\"\n                  :class=\"{\n                    [nh.be('filter-item')]: true,\n                    [nh.bem('filter-item', 'active')]: item.active\n                  }\"\n                  @click=\"handleFilterItemSelect(item.value, !item.active)\"\n                >\n                  {{ item.label }}\n                </div>\n              </template>\n            </Tooltip>\n          </template>\n        </template>\n      </span>\n    </ResizeObserver>\n    <div\n      v-if=\"!isGroup && resizable && !typed && !column.last\"\n      ref=\"resizer\"\n      :class=\"nh.be('resizer')\"\n    ></div>\n    <div\n      v-if=\"inLast\"\n      :class=\"[nh.be('side-pad'), nh.bem('side-pad', 'right')]\"\n      role=\"none\"\n      aria-hidden\n    ></div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, inject, nextTick, onMounted, reactive, ref, toRef, watchEffect } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useSetTimeout } from '@vexip-ui/hooks'\nimport { isFunction } from '@vexip-ui/utils'\nimport { TABLE_ACTIONS, TABLE_STORE } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { TableRowState } from './symbol'\n\ndefineOptions({ name: 'TableRow' })\n\nconst props = defineProps({\n  row: {\n    type: Object as PropType<TableRowState>,\n    default: () => ({})\n  },\n  index: {\n    type: Number,\n    default: null\n  },\n  isHead: {\n    type: Boolean,\n    default: false\n  },\n  isFoot: {\n    type: Boolean,\n    default: false\n  },\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null\n  }\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\nconst tableAction = inject(TABLE_ACTIONS)!\n\nconst nh = useNameHelper('table')\n\nconst { timer } = useSetTimeout()\nconst dragging = ref(false)\nconst isDragOver = ref(false)\n\nconst wrapper = ref<HTMLElement>()\nconst rowEl = ref<HTMLElement>()\nconst expandEl = ref<HTMLElement>()\n\nconst instance = reactive({\n  el: wrapper,\n  row: toRef(props, 'row')\n})\n\nconst rowKey = computed(() => props.row.key)\nconst rowType = computed(() => (props.isHead ? 'head' : props.isFoot ? 'foot' : undefined))\nconst className = computed(() => {\n  let customClass = null\n\n  if (!rowType.value) {\n    if (typeof state.rowClass === 'function') {\n      customClass = state.rowClass(props.row.data, props.index)\n    } else {\n      customClass = state.rowClass\n    }\n  }\n\n  return [\n    nh.be('row'),\n    {\n      [nh.bem('row', 'fixed')]: state.rowHeight && state.rowHeight > 0,\n      [nh.bem('row', 'hover')]: !rowType.value && state.highlight && props.row.hover,\n      [nh.bem('row', 'stripe')]: state.stripe && props.index % 2 === 1,\n      [nh.bem('row', 'checked')]: props.row.checked,\n      [nh.bem('row', 'dragging')]: dragging.value,\n      [nh.bem('row', 'drag-over')]: isDragOver.value\n    },\n    customClass\n  ]\n})\nconst maxHeight = computed(() =>\n  Math.max(...Object.values(props.row.cellHeights || {}), state.rowMinHeight)\n)\nconst style = computed(() => {\n  let customStyle: any = ''\n\n  if (!rowType.value) {\n    if (typeof state.rowStyle === 'function') {\n      customStyle = state.rowStyle(props.row.data, props.index)\n    } else {\n      customStyle = state.rowStyle\n    }\n  }\n\n  return [\n    customStyle,\n    {\n      height: !state.rowHeight ? `${maxHeight.value}px` : `${state.rowHeight}px`,\n      minHeight: state.rowHeight ? undefined : `${state.rowMinHeight}px`,\n      border: '0'\n    }\n  ]\n})\nconst attrs = computed(() => {\n  if (!rowType.value) {\n    if (typeof state.rowAttrs === 'function') {\n      return state.rowAttrs(props.row.data, props.index)\n    } else {\n      return state.rowAttrs\n    }\n  }\n\n  return null\n})\nconst groupStyle = computed(() => {\n  if (props.isHead || props.isFoot) return undefined\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n  state.heightTrigger\n\n  const offset =\n    state.heightBITree && !rowType.value && props.index ? state.heightBITree.sum(props.index) : 0\n\n  return {\n    transform: offset ? `translate3d(0, ${offset}px, 0)` : undefined\n  }\n})\nconst cellDraggable = computed(() => {\n  return getters.hasDragColumn && !getters.disableDragRows.has(rowKey.value)\n})\nconst rowDraggable = computed(() => !rowType.value && state.rowDraggable)\nconst draggable = computed(() => !rowType.value && (state.rowDraggable || cellDraggable.value))\nconst expandRenderer = computed(() => state.expandRenderer)\nconst hasExpand = computed(() => {\n  if (props.isHead || props.isFoot || !getters.expandColumn) return false\n  if (state.rightFixedColumns.length) return props.fixed === 'right'\n  if (state.leftFixedColumns.length) return props.fixed === 'left'\n\n  return !!state.normalColumns.length && !props.fixed\n})\n\nfunction setExpandHeight() {\n  let targetHeight: number\n\n  if (props.row.expanded && expandEl.value) {\n    targetHeight = expandEl.value.scrollHeight\n  } else {\n    targetHeight = 0\n  }\n\n  if (targetHeight !== props.row.expandHeight) {\n    mutations.setRowProp(rowKey.value, 'expandHeight', targetHeight)\n    updateTotalHeight(true)\n  }\n}\n\nfunction updateTotalHeight(force = false) {\n  if (state.heightBITree && getters.visibleKeys.has(rowKey.value) && (force || !props.fixed)) {\n    const height = props.row.height + props.row.expandHeight\n    const tree = state.heightBITree\n    const prev = tree.get(props.index)\n\n    if (height !== prev) {\n      tree.add(props.index, height - prev)\n      mutations.updateTotalHeight()\n      mutations.triggerHeightChange()\n    }\n  }\n}\n\nfunction handleResize(entry: ResizeObserverEntry) {\n  const height = entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height\n  mutations.setRowProp(rowKey.value, 'height', height)\n  !rowType.value && updateTotalHeight()\n}\n\nwatchEffect(() => {\n  if (props.isHead || props.isFoot) return\n\n  mutations.setRowProp(rowKey.value, 'height', state.rowHeight || maxHeight.value)\n  !rowType.value && updateTotalHeight()\n  nextTick(() => {\n    hasExpand.value && setExpandHeight()\n  })\n})\n\nonMounted(() => {\n  nextTick(() => {\n    mutations.setRowProp(rowKey.value, 'height', state.rowHeight || maxHeight.value)\n    nextTick(() => {\n      hasExpand.value && setExpandHeight()\n    })\n  })\n})\n\nfunction buildEventPayload(event: Event) {\n  return {\n    row: props.row.data,\n    key: props.row.key,\n    index: props.index,\n    event\n  }\n}\n\nfunction handleMouseEnter(event: MouseEvent) {\n  mutations.setRowProp(rowKey.value, 'hover', true)\n\n  if (!rowType.value && tableAction) {\n    tableAction.emitRowEvent('Enter', buildEventPayload(event))\n  }\n}\n\nfunction handleMouseLeave(event: MouseEvent) {\n  mutations.setRowProp(rowKey.value, 'hover', false)\n\n  if (!rowType.value && tableAction) {\n    tableAction.emitRowEvent('Leave', buildEventPayload(event))\n  }\n}\n\nfunction handleClick(event: MouseEvent) {\n  if (!rowType.value && tableAction) {\n    tableAction.emitRowEvent('Click', buildEventPayload(event))\n  }\n}\n\nfunction handleDblclick(event: MouseEvent) {\n  if (!rowType.value && tableAction) {\n    tableAction.emitRowEvent('Dblclick', buildEventPayload(event))\n  }\n}\n\nfunction handleContextmenu(event: MouseEvent) {\n  if (!rowType.value && tableAction) {\n    tableAction.emitRowEvent('Contextmenu', buildEventPayload(event))\n  }\n}\n\nfunction shouldProcessDrag() {\n  return draggable.value && state.dragging\n}\n\nfunction handleDragStart(event: DragEvent) {\n  if (!draggable.value && !cellDraggable.value) return\n\n  dragging.value = true\n  tableAction.handleRowDragStart(instance, event)\n}\n\nfunction handleDragOver(event: DragEvent) {\n  if (!shouldProcessDrag() || (cellDraggable.value && !getters.rowDragging)) return\n\n  clearTimeout(timer.drag)\n  event.stopPropagation()\n  event.preventDefault()\n\n  isDragOver.value = true\n\n  tableAction.handleRowDragOver(instance, event)\n}\n\nfunction handleDrop(event: DragEvent) {\n  if (!shouldProcessDrag()) return\n\n  clearTimeout(timer.drag)\n  event.stopPropagation()\n  event.preventDefault()\n\n  isDragOver.value = false\n\n  tableAction.handleRowDrop(instance, event)\n  nextTick(() => mutations.handleDrag(rowKey.value, false))\n}\n\nfunction handleDragEnd(event: DragEvent) {\n  if (!shouldProcessDrag()) return\n\n  event.stopPropagation()\n  dragging.value = true\n\n  tableAction.handleRowDragEnd(event)\n  nextTick(() => mutations.handleDrag(rowKey.value, false))\n}\n\nfunction handleDragLeave(event: DragEvent) {\n  if (!shouldProcessDrag()) return\n\n  clearTimeout(timer.drag)\n  event.preventDefault()\n\n  timer.drag = setTimeout(() => {\n    isDragOver.value = false\n  }, 100)\n}\n\nfunction afterExpand() {\n  mutations.setRowProp(rowKey.value, 'expandAnimate', false)\n}\n</script>\n\n<template>\n  <div\n    v-if=\"!row.hidden\"\n    ref=\"wrapper\"\n    :class=\"{\n      [nh.be('group')]: true,\n      [nh.bem('group', 'checked')]: row.checked,\n      [nh.bem('group', 'last')]: row.last\n    }\"\n    role=\"row\"\n    :draggable=\"rowDraggable || row.dragging\"\n    :style=\"groupStyle\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n    @click=\"handleClick\"\n    @dblclick=\"handleDblclick\"\n    @contextmenu=\"handleContextmenu\"\n    @dragstart.stop=\"handleDragStart\"\n    @dragover=\"handleDragOver\"\n    @drop=\"handleDrop\"\n    @dragend=\"handleDragEnd\"\n    @dragleave=\"handleDragLeave\"\n  >\n    <ResizeObserver :on-resize=\"handleResize\">\n      <div\n        v-bind=\"attrs\"\n        ref=\"rowEl\"\n        :class=\"className\"\n        :style=\"style\"\n      >\n        <slot></slot>\n      </div>\n    </ResizeObserver>\n    <CollapseTransition\n      v-if=\"hasExpand\"\n      :disabled=\"!row.expandAnimate\"\n      @enter=\"setExpandHeight\"\n      @leave=\"setExpandHeight\"\n      @after-enter=\"afterExpand\"\n      @after-leave=\"afterExpand\"\n    >\n      <div\n        v-if=\"row.expanded\"\n        ref=\"expandEl\"\n        :class=\"[nh.be('expanded'), fixed === 'right' && nh.bem('expanded', 'fixed')]\"\n      >\n        <ResizeObserver :disabled=\"row.expandAnimate\" :on-resize=\"setExpandHeight\">\n          <div :class=\"nh.be('expanded-wrapper')\">\n            <Renderer\n              v-if=\"isFunction(getters.expandColumn!.renderer)\"\n              :renderer=\"getters.expandColumn!.renderer\"\n              :data=\"{ leftFixed: 0, rightFixed: 0, row: row.data, rowIndex: index }\"\n            ></Renderer>\n            <Renderer\n              v-else-if=\"isFunction(expandRenderer)\"\n              :renderer=\"expandRenderer\"\n              :data=\"{ leftFixed: 0, rightFixed: 0, row: row.data, rowIndex: index }\"\n            ></Renderer>\n          </div>\n        </ResizeObserver>\n      </div>\n    </CollapseTransition>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\n\nimport TableHeadCell from './table-head-cell.vue'\nimport TableRow from './table-row.vue'\nimport { useNameHelper } from '@vexip-ui/config'\nimport { getLast } from '@vexip-ui/utils'\nimport { TABLE_HEAD_PREFIX, TABLE_STORE } from './symbol'\n\nimport type { PropType } from 'vue'\n\ndefineOptions({ name: 'TableHead' })\n\nconst props = defineProps({\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null\n  }\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\n\nconst nh = useNameHelper('table')\nconst allColumns = computed(() => {\n  const left = state.leftFixedColumns.length\n  const right = state.allColumns[0].length - state.rightFixedColumns.length\n\n  if (props.fixed === 'left') {\n    return state.allColumns.map(columns => columns.slice(0, left))\n  } else if (props.fixed === 'right') {\n    return state.allColumns.map(columns => columns.slice(right, state.allColumns[0].length))\n  }\n\n  return state.allColumns.map(columns => columns.slice(left, right))\n})\nconst columns = computed(() => {\n  return props.fixed === 'left'\n    ? state.leftFixedColumns\n    : props.fixed === 'right'\n      ? state.rightFixedColumns\n      : state.normalColumns\n})\nconst style = computed(() => {\n  const width =\n    props.fixed === 'left'\n      ? getLast(getters.leftFixedWidths)\n      : props.fixed === 'right'\n        ? getLast(getters.rightFixedWidths)\n        : getLast(getters.normalWidths)\n  const padLeft = columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n  const padRight = getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\n\n  return {\n    minWidth: width && `${width + padLeft + padRight}px`\n  }\n})\n\nfunction getRow(index: number) {\n  const key = `${TABLE_HEAD_PREFIX}${index}`\n\n  return state.rowMap.get(key) || mutations.createMinRowState(key)\n}\n</script>\n\n<template>\n  <div :class=\"nh.be('head')\" role=\"rowgroup\" :style=\"style\">\n    <TableRow\n      v-for=\"(rowColumns, rowIndex) in allColumns\"\n      :key=\"rowIndex\"\n      :index=\"rowIndex\"\n      is-head\n      :fixed=\"fixed\"\n      :row=\"getRow(rowIndex)\"\n      :aria-rowindex=\"rowIndex\"\n    >\n      <template v-for=\"(column, index) in rowColumns as any\" :key=\"index\">\n        <TableHeadCell\n          v-if=\"column\"\n          :column=\"column\"\n          :index=\"index\"\n          :row=\"getRow(rowIndex)\"\n          :row-index=\"rowIndex\"\n          :fixed=\"fixed\"\n          :aria-colindex=\"index\"\n        ></TableHeadCell>\n      </template>\n    </TableRow>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Checkbox } from '@/components/checkbox'\nimport { Ellipsis } from '@/components/ellipsis'\nimport { Radio } from '@/components/radio'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, inject, nextTick, ref, watchEffect } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport TableIcon from './table-icon.vue'\nimport { useRtl } from '@vexip-ui/hooks'\nimport { getLast, isFunction } from '@vexip-ui/utils'\nimport { TABLE_ACTIONS, TABLE_STORE, columnTypes, noopFormatter } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type {\n  ColumnWithKey,\n  TableDragColumn,\n  TableExpandColumn,\n  TableOrderColumn,\n  TableRowState,\n  TableSelectionColumn,\n  TableTypeColumn\n} from './symbol'\n\ndefineOptions({ name: 'TableCell' })\n\nconst props = defineProps({\n  row: {\n    type: Object as PropType<TableRowState>,\n    default: () => ({})\n  },\n  rowIndex: {\n    type: Number,\n    default: -1\n  },\n  column: {\n    type: Object as PropType<ColumnWithKey>,\n    default: () => ({})\n  },\n  colIndex: {\n    type: Number,\n    default: -1\n  },\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null\n  }\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\nconst tableActions = inject(TABLE_ACTIONS)!\n\nconst nh = useNameHelper('table')\nconst icons = useIcons()\nconst { isRtl } = useRtl()\n\nconst contentHeight = ref(0)\n\nconst wrapper = ref<HTMLElement>()\n\nconst inLast = computed(() => {\n  return props.column.index + cellSpan.value.colSpan >= state.columns.length\n})\nconst className = computed(() => {\n  let customClass = null\n\n  if (typeof state.cellClass === 'function') {\n    customClass = state.cellClass({\n      row: props.row.data,\n      rowIndex: props.rowIndex,\n      column: props.column,\n      columnIndex: props.column.index\n    })\n  } else {\n    customClass = state.cellClass\n  }\n\n  const typed = columnTypes.includes((props.column as TableTypeColumn).type)\n\n  return [\n    nh.be('cell'),\n    {\n      [nh.bem('cell', 'typed')]: typed,\n      [nh.bem('cell', 'center')]: typed || props.column.textAlign === 'center',\n      [nh.bem('cell', 'right')]: props.column.textAlign === 'right',\n      [nh.bem('cell', 'last')]: inLast.value\n    },\n    props.column.class,\n    customClass\n  ]\n})\nconst columns = computed(() => {\n  return props.fixed === 'left'\n    ? state.leftFixedColumns\n    : props.fixed === 'right'\n      ? state.rightFixedColumns\n      : state.normalColumns\n})\nconst cellSpan = computed(() => {\n  return (\n    state.cellSpanMap\n      .get(props.fixed || 'default')!\n      .get(`${props.row.index},${props.column.index}`) || { colSpan: 1, rowSpan: 1 }\n  )\n})\nconst customStyle = computed(() => {\n  if (typeof state.cellStyle === 'function') {\n    return state.cellStyle({\n      row: props.row.data,\n      rowIndex: props.rowIndex,\n      column: props.column,\n      columnIndex: props.column.index\n    })\n  }\n\n  return state.cellStyle\n})\nconst style = computed(() => {\n  const totalWidths =\n    props.fixed === 'left'\n      ? getters.leftFixedWidths\n      : props.fixed === 'right'\n        ? getters.rightFixedWidths\n        : getters.normalWidths\n  const { colSpan, rowSpan } = cellSpan.value\n  const noFixed = !getters.hasFixedColumn\n  const padLeft = noFixed || columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n  const padRight =\n    noFixed || getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\n  const width = totalWidths[props.colIndex + colSpan] - totalWidths[props.colIndex]\n\n  let height: number | undefined\n\n  if (rowSpan > 1 && state.heightBITree) {\n    height =\n      state.heightBITree.sum(props.row.listIndex + rowSpan) -\n      state.heightBITree.sum(props.row.listIndex)\n  }\n\n  return [\n    props.column.style || '',\n    customStyle.value,\n    {\n      display: !colSpan || !rowSpan ? 'none' : undefined,\n      width: `${(props.column.index ? 0 : padLeft) + (inLast.value ? padRight : 0) + width}px`,\n      height: height ? `${height}px` : undefined,\n      visibility: props.column.fixed && !props.fixed ? 'hidden' : undefined,\n      borderRightWidth:\n        !state.border && colSpan > 1 && props.colIndex + colSpan >= totalWidths.length - 1\n          ? 0\n          : undefined,\n      borderBottomWidth:\n        rowSpan > 1 && props.rowIndex + rowSpan >= getters.processedData.length ? 0 : undefined,\n      transform: `translate3d(${isRtl.value ? '-' : ''}${\n        (props.column.index ? padLeft : 0) + totalWidths[props.colIndex]\n      }px, 0, 0)`\n    }\n  ]\n})\nconst attrs = computed(() => {\n  let customAttrs: Record<string, any>\n\n  if (typeof state.cellAttrs === 'function') {\n    customAttrs = state.cellAttrs({\n      row: props.row.data,\n      rowIndex: props.rowIndex,\n      column: props.column,\n      columnIndex: props.colIndex\n    })\n  } else {\n    customAttrs = state.cellAttrs\n  }\n\n  return { ...(props.column.attrs || {}), ...(customAttrs || {}) }\n})\nconst formatter = computed(() => {\n  return isFunction(props.column.formatter) ? props.column.formatter : noopFormatter\n})\n\nwatchEffect(() => {\n  if (isTypeColumn(props.column)) return\n\n  mutations.setCellHeight(props.row.key, props.column.key, contentHeight.value)\n})\n\nfunction isSelectionColumn(column: unknown): column is TableSelectionColumn {\n  return (column as TableTypeColumn).type === 'selection'\n}\n\nfunction isOrderColumn(column: unknown): column is TableOrderColumn {\n  return (column as TableTypeColumn).type === 'order'\n}\n\nfunction isExpandColumn(column: unknown): column is TableExpandColumn {\n  return (column as TableTypeColumn).type === 'expand'\n}\n\nfunction isDragColumn(column: unknown): column is TableDragColumn {\n  return (column as TableTypeColumn).type === 'drag'\n}\n\nfunction isTypeColumn(column: unknown): column is TableTypeColumn {\n  return (\n    isSelectionColumn(column) ||\n    isOrderColumn(column) ||\n    isExpandColumn(column) ||\n    isDragColumn(column)\n  )\n}\n\nfunction buildEventPayload(event: Event) {\n  return {\n    row: props.row.data,\n    key: props.row.key,\n    rowIndex: props.rowIndex,\n    column: props.column,\n    columnIndex: props.colIndex,\n    event\n  }\n}\n\nfunction handleMouseEnter(event: MouseEvent) {\n  tableActions?.emitCellEvent('Enter', buildEventPayload(event))\n}\n\nfunction handleMouseLeave(event: MouseEvent) {\n  tableActions?.emitCellEvent('Leave', buildEventPayload(event))\n}\n\nfunction handleClick(event: MouseEvent) {\n  tableActions?.emitCellEvent('Click', buildEventPayload(event))\n}\n\nfunction handleDblclick(event: MouseEvent) {\n  tableActions?.emitCellEvent('Dblclick', buildEventPayload(event))\n}\n\nfunction handleContextmenu(event: MouseEvent) {\n  tableActions?.emitCellEvent('Contextmenu', buildEventPayload(event))\n}\n\nfunction handleCheckRow(row: TableRowState, event: MouseEvent, single = false) {\n  if (!getters.disableCheckRows.has(row.key)) {\n    const checked = !row.checked\n    const { data, key, index } = row\n\n    mutations.handleCheck(key, checked, single)\n    tableActions.emitRowCheck({ row: data, key, index, event, checked })\n  }\n}\n\nfunction handleExpandRow(row: TableRowState, event: MouseEvent) {\n  if (!getters.disableExpandRows.has(row.key)) {\n    const expanded = !row.expanded\n    const { data, key, index } = row\n\n    mutations.setRowProp(key, 'expandAnimate', true)\n    nextTick(() => {\n      mutations.handleExpand(key, expanded)\n      tableActions.emitRowExpand({ row: data, key, index, event, expanded })\n    })\n  }\n}\n\nfunction handleDragRow(row: TableRowState) {\n  if (!getters.disableDragRows.has(row.key)) {\n    mutations.handleDrag(row.key, true)\n  }\n}\n\nfunction handleExpandTree(row: TableRowState, event: MouseEvent) {\n  if (!row.children?.length) return\n\n  const expanded = !row.treeExpanded\n  const { data, key, index } = row\n\n  tableActions.runInLocked()\n  mutations.setTreeExpanded(row.key, expanded)\n  tableActions.emitRowExpand({ row: data, key, index, event, expanded })\n}\n\nfunction handleCellResize(entry: ResizeObserverEntry) {\n  contentHeight.value =\n    (entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height) + state.borderWidth\n}\n</script>\n\n<template>\n  <div\n    v-bind=\"attrs\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"cell\"\n    :scope=\"column.first ? 'row' : undefined\"\n    :colspan=\"cellSpan.colSpan !== 1 ? cellSpan.colSpan : undefined\"\n    :rowspan=\"cellSpan.rowSpan !== 1 ? cellSpan.rowSpan : undefined\"\n    :style=\"style\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n    @click=\"handleClick\"\n    @dblclick=\"handleDblclick\"\n    @contextmenu=\"handleContextmenu\"\n  >\n    <div\n      v-if=\"column.index === 0\"\n      :class=\"nh.be('side-pad')\"\n      role=\"none\"\n      aria-hidden\n    ></div>\n    <div v-if=\"isTypeColumn(column)\" :class=\"nh.be('content')\">\n      <template v-if=\"isSelectionColumn(column)\">\n        <Radio\n          v-if=\"column.singleSelect\"\n          inherit\n          :label=\"row.key\"\n          :value=\"row.checked ? row.key : null\"\n          :class=\"nh.be('selection')\"\n          :size=\"column.selectionSize || 'default'\"\n          :disabled=\"getters.disableCheckRows.has(row.key)\"\n          @click.prevent.stop=\"handleCheckRow(row, $event, true)\"\n        ></Radio>\n        <Checkbox\n          v-else\n          inherit\n          :class=\"nh.be('selection')\"\n          :checked=\"row.checked\"\n          :size=\"column.selectionSize || 'default'\"\n          :disabled=\"getters.disableCheckRows.has(row.key)\"\n          :partial=\"row.partial\"\n          :control=\"!!row.children?.length\"\n          @click.prevent.stop=\"handleCheckRow(row, $event)\"\n        ></Checkbox>\n      </template>\n      <span v-else-if=\"isOrderColumn(column)\" :class=\"nh.be('order')\">\n        {{ column.orderLabel && column.orderLabel(column.truthIndex ? row.index : rowIndex) }}\n      </span>\n      <template v-else-if=\"isExpandColumn(column)\">\n        <button\n          v-if=\"!getters.disableExpandRows.has(row.key)\"\n          type=\"button\"\n          :class=\"{\n            [nh.be('expand')]: true,\n            [nh.bem('expand', 'active')]: row.expanded\n          }\"\n          @click.stop=\"handleExpandRow(row, $event)\"\n        >\n          <TableIcon name=\"expand\" :origin=\"icons.angleRight\"></TableIcon>\n        </button>\n      </template>\n      <template v-else-if=\"isDragColumn(column)\">\n        <button\n          v-if=\"!getters.disableDragRows.has(row.key)\"\n          type=\"button\"\n          :class=\"nh.be('dragger')\"\n          @mousedown=\"handleDragRow(row)\"\n        >\n          <TableIcon name=\"dragger\" :origin=\"icons.dragger\"></TableIcon>\n        </button>\n      </template>\n    </div>\n    <ResizeObserver v-else :on-resize=\"handleCellResize\">\n      <span :class=\"nh.be('content')\">\n        <template\n          v-if=\"\n            getters.usingTree &&\n              (getters.indentedColumn ? column.key === getters.indentedColumn.key : column.first)\n          \"\n        >\n          <span\n            :class=\"nh.be('pad')\"\n            :style=\"{\n              [nh.cv('row-depth')]: row.depth\n            }\"\n          ></span>\n          <button\n            type=\"button\"\n            :class=\"[\n              nh.be('tree-expand'),\n              !row.children?.length && nh.bem('tree-expand', 'hidden')\n            ]\"\n            @click=\"handleExpandTree(row, $event)\"\n          >\n            <TableIcon v-if=\"row.treeExpanded\" name=\"minus\" :origin=\"icons.minusSquare\"></TableIcon>\n            <TableIcon v-else name=\"plus\" :origin=\"icons.plusSquare\"></TableIcon>\n          </button>\n        </template>\n        <Ellipsis\n          v-if=\"column.ellipsis ?? state.ellipsis\"\n          inherit\n          :class=\"nh.be('ellipsis')\"\n          :tip-disabled=\"state.barScrolling\"\n          :tooltip-theme=\"state.tooltipTheme\"\n          :tip-max-width=\"state.tooltipWidth\"\n        >\n          <Renderer\n            v-if=\"isFunction(column.renderer)\"\n            :renderer=\"column.renderer\"\n            :data=\"{ row: row.data, rowIndex, column, columnIndex: column.index }\"\n          ></Renderer>\n          <template v-else-if=\"isFunction(column.accessor)\">\n            {{ formatter(column.accessor(row.data, rowIndex)) }}\n          </template>\n          <template v-else>\n            {{ formatter(row.data[column.key]) }}\n          </template>\n        </Ellipsis>\n        <template v-else>\n          <Renderer\n            v-if=\"isFunction(column.renderer)\"\n            :renderer=\"column.renderer\"\n            :data=\"{ row: row.data, rowIndex, column, columnIndex: column.index }\"\n          ></Renderer>\n          <template v-else-if=\"isFunction(column.accessor)\">\n            {{ formatter(column.accessor(row.data, rowIndex)) }}\n          </template>\n          <template v-else>\n            {{ formatter(row.data[column.key]) }}\n          </template>\n        </template>\n      </span>\n    </ResizeObserver>\n    <div\n      v-if=\"inLast\"\n      :class=\"[nh.be('side-pad'), nh.bem('side-pad', 'right')]\"\n      role=\"none\"\n      aria-hidden\n    ></div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, toRef } from 'vue'\n\nimport TableCell from './table-cell.vue'\nimport TableRow from './table-row.vue'\nimport { useNameHelper } from '@vexip-ui/config'\nimport { getLast } from '@vexip-ui/utils'\nimport { TABLE_STORE } from './symbol'\n\nimport type { PropType } from 'vue'\n\ndefineOptions({ name: 'TableBody' })\n\nconst props = defineProps({\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null\n  }\n})\n\nconst { state, getters } = inject(TABLE_STORE)!\n\nconst nh = useNameHelper('table')\nconst locale = toRef(state, 'locale')\n\nconst columns = computed(() => {\n  return props.fixed === 'left'\n    ? state.leftFixedColumns\n    : props.fixed === 'right'\n      ? state.rightFixedColumns\n      : state.normalColumns\n})\nconst data = computed(() => (state.virtual ? state.virtualData : getters.processedData))\nconst style = computed(() => {\n  const width =\n    props.fixed === 'left'\n      ? getLast(getters.leftFixedWidths)\n      : props.fixed === 'right'\n        ? getLast(getters.rightFixedWidths)\n        : getLast(getters.normalWidths)\n  const padLeft = columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n  const padRight = getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\n\n  return {\n    [nh.cv('expanded-fix-width')]:\n      props.fixed === 'right' && width ? `${width + padLeft + padRight}px` : '0px',\n    minWidth: width && `${width + padLeft + padRight}px`,\n    minHeight: `${state.totalHeight}px`\n  }\n})\nconst emptyStyle = computed(() => {\n  const { rowHeight, rowMinHeight } = state\n\n  return {\n    minHeight: `${rowHeight || rowMinHeight}px`\n  }\n})\n</script>\n\n<template>\n  <div :class=\"nh.be('body')\" role=\"rowgroup\" :style=\"style\">\n    <template v-if=\"data.length\">\n      <TableRow\n        v-for=\"(row, index) in data\"\n        :key=\"index\"\n        :row=\"row\"\n        :index=\"row.listIndex\"\n        :fixed=\"fixed\"\n        :aria-rowindex=\"row.index\"\n      >\n        <TableCell\n          v-for=\"(column, colIndex) in columns\"\n          :key=\"colIndex\"\n          :row=\"row\"\n          :row-index=\"row.listIndex\"\n          :column=\"column\"\n          :col-index=\"colIndex\"\n          :fixed=\"fixed\"\n          :aria-colindex=\"colIndex\"\n        ></TableCell>\n      </TableRow>\n    </template>\n    <div v-else :class=\"nh.be('empty')\" :style=\"emptyStyle\">\n      <slot name=\"empty\" :is-fixed=\"!!fixed\">\n        <template v-if=\"!fixed\">\n          {{ locale.empty }}\n        </template>\n      </slot>\n    </div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Ellipsis } from '@/components/ellipsis'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, inject, ref } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useRtl } from '@vexip-ui/hooks'\nimport { getLast, isFunction } from '@vexip-ui/utils'\nimport { TABLE_ACTIONS, TABLE_STORE, columnTypes } from './symbol'\n\nimport type { PropType, StyleValue } from 'vue'\nimport type {\n  ColumnWithKey,\n  SummaryWithKey,\n  TableRowState,\n  TableTypeColumn\n} from './symbol'\n\ndefineOptions({ name: 'TableFootCell' })\n\nconst props = defineProps({\n  row: {\n    type: Object as PropType<TableRowState>,\n    default: () => ({})\n  },\n  column: {\n    type: Object as PropType<ColumnWithKey>,\n    default: () => ({})\n  },\n  colIndex: {\n    type: Number,\n    default: -1\n  },\n  summary: {\n    type: Object as PropType<SummaryWithKey>,\n    default: () => ({})\n  },\n  summaryIndex: {\n    type: Number,\n    default: -1\n  },\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null\n  },\n  above: {\n    type: Boolean,\n    default: false\n  }\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\nconst tableActions = inject(TABLE_ACTIONS)!\n\nconst nh = useNameHelper('table')\nconst { isRtl } = useRtl()\n\nconst wrapper = ref<HTMLElement>()\n\nconst inLast = computed(() => {\n  return props.column.index + cellSpan.value.colSpan >= state.columns.length\n})\nconst columns = computed(() => {\n  return props.fixed === 'left'\n    ? state.leftFixedColumns\n    : props.fixed === 'right'\n      ? state.rightFixedColumns\n      : state.normalColumns\n})\n// We use 'a' and 'b' to distinguish above and below\nconst prefix = computed(() => (props.above ? 'af' : 'bf'))\nconst summaries = computed(() =>\n  props.above ? state.aboveSummaries : state.belowSummaries\n)\nconst heights = computed(() =>\n  props.above ? getters.topFixedHeights : getters.bottomFixedHeights\n)\nconst className = computed(() => {\n  let customClass = null\n\n  if (typeof state.footClass === 'function') {\n    customClass = state.footClass({\n      column: props.column,\n      columnIndex: props.column.index,\n      summary: props.summary,\n      summaryIndex: props.summaryIndex\n    })\n  } else {\n    customClass = state.footClass\n  }\n\n  const typed = columnTypes.includes((props.column as TableTypeColumn).type)\n\n  return [\n    nh.be('foot-cell'),\n    {\n      [nh.bem('foot-cell', 'typed')]: typed,\n      [nh.bem('foot-cell', 'center')]:\n        typed || props.column.textAlign === 'center',\n      [nh.bem('foot-cell', 'right')]: props.column.textAlign === 'right',\n      [nh.bem('foot-cell', 'last')]: inLast.value\n    },\n    props.column.class,\n    customClass\n  ]\n})\nconst cellSpan = computed(() => {\n  return (\n    state.cellSpanMap\n      .get(props.fixed || 'default')!\n      .get(`${prefix.value}${props.summaryIndex},${props.column.index}`) || {\n      colSpan: 1,\n      rowSpan: 1\n    }\n  )\n})\nconst customStyle = computed(() => {\n  if (typeof state.footStyle === 'function') {\n    return state.footStyle({\n      column: props.column,\n      columnIndex: props.column.index,\n      summary: props.summary,\n      summaryIndex: props.summaryIndex\n    })\n  }\n\n  return state.cellStyle\n})\nconst style = computed(() => {\n  const totalWidths =\n    props.fixed === 'left'\n      ? getters.leftFixedWidths\n      : props.fixed === 'right'\n        ? getters.rightFixedWidths\n        : getters.normalWidths\n  const { colSpan, rowSpan } = cellSpan.value\n  const padLeft =\n    columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n  const padRight =\n    getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\n  const width =\n    totalWidths[props.colIndex + colSpan] - totalWidths[props.colIndex]\n\n  let height: number | undefined\n\n  if (rowSpan > 1) {\n    height =\n      heights.value[props.summaryIndex + rowSpan] -\n      heights.value[props.summaryIndex]\n  }\n\n  return [\n    props.column.style || '',\n    customStyle.value,\n    {\n      display: !colSpan || !rowSpan ? 'none' : undefined,\n      width: `${(props.column.index ? 0 : padLeft) + (inLast.value ? padRight : 0) + width}px`,\n      height: height ? `${height}px` : undefined,\n      visibility: props.column.fixed && !props.fixed ? 'hidden' : undefined,\n      borderRightWidth:\n        !state.border &&\n        colSpan > 1 &&\n        props.colIndex + colSpan >= totalWidths.length - 1\n          ? 0\n          : undefined,\n      borderBottomWidth:\n        rowSpan > 1 && props.summaryIndex + rowSpan >= summaries.value.length\n          ? 0\n          : undefined,\n      transform: `translate3d(${isRtl.value ? '-' : ''}${\n        (props.column.index ? padLeft : 0) + totalWidths[props.colIndex]\n      }px, 0, 0)`\n    }\n  ] as StyleValue\n})\nconst attrs = computed(() => {\n  let customAttrs: Record<string, any>\n\n  if (typeof state.footAttrs === 'function') {\n    customAttrs = state.footAttrs({\n      column: props.column,\n      columnIndex: props.column.index,\n      summary: props.summary,\n      summaryIndex: props.summaryIndex\n    })\n  } else {\n    customAttrs = state.footAttrs\n  }\n\n  return { ...(props.column.attrs || {}), ...(customAttrs || {}) }\n})\nconst summaryData = computed(() => getters.summaryData.get(props.column.key))\n\nfunction buildEventPayload(event: Event) {\n  return {\n    column: props.column,\n    columnIndex: props.column.index,\n    summary: props.summary,\n    summaryIndex: props.summaryIndex,\n    event\n  }\n}\n\nfunction handleMouseEnter(event: MouseEvent) {\n  tableActions?.emitFootEvent('Enter', buildEventPayload(event))\n}\n\nfunction handleMouseLeave(event: MouseEvent) {\n  tableActions?.emitFootEvent('Leave', buildEventPayload(event))\n}\n\nfunction handleClick(event: MouseEvent) {\n  tableActions?.emitFootEvent('Click', buildEventPayload(event))\n}\n\nfunction handleDblclick(event: MouseEvent) {\n  tableActions?.emitFootEvent('Dblclick', buildEventPayload(event))\n}\n\nfunction handleContextmenu(event: MouseEvent) {\n  tableActions?.emitFootEvent('Contextmenu', buildEventPayload(event))\n}\n\nfunction handleCellResize(entry: ResizeObserverEntry) {\n  mutations.setCellHeight(\n    props.row.key,\n    props.column.key,\n    (entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height) +\n      state.borderWidth\n  )\n}\n</script>\n\n<template>\n  <div\n    v-bind=\"attrs\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"cell\"\n    :scope=\"column.first ? 'row' : undefined\"\n    :colspan=\"cellSpan.colSpan !== 1 ? cellSpan.colSpan : undefined\"\n    :rowspan=\"cellSpan.rowSpan !== 1 ? cellSpan.rowSpan : undefined\"\n    :style=\"style\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n    @click=\"handleClick\"\n    @dblclick=\"handleDblclick\"\n    @contextmenu=\"handleContextmenu\"\n  >\n    <div\n      v-if=\"column.index === 0\"\n      :class=\"nh.be('side-pad')\"\n      role=\"none\"\n      aria-hidden\n    ></div>\n    <ResizeObserver\n      v-if=\"isFunction(summary.renderer)\"\n      :disabled=\"column.ellipsis ?? state.ellipsis\"\n      :on-resize=\"handleCellResize\"\n    >\n      <span :class=\"nh.be('content')\">\n        <Ellipsis\n          v-if=\"column.ellipsis ?? state.ellipsis\"\n          inherit\n          :class=\"nh.be('ellipsis')\"\n          :tooltip-theme=\"state.tooltipTheme\"\n          :tip-max-width=\"state.tooltipWidth\"\n        >\n          <Renderer\n            :renderer=\"summary.renderer\"\n            :data=\"{\n              column,\n              index: column.index,\n              rows: state.data,\n              meta: summaryData,\n            }\"\n          ></Renderer>\n        </Ellipsis>\n        <Renderer\n          v-else\n          :renderer=\"summary.renderer\"\n          :data=\"{\n            column,\n            index: column.index,\n            rows: state.data,\n            meta: summaryData,\n          }\"\n        ></Renderer>\n      </span>\n    </ResizeObserver>\n    <div\n      v-if=\"inLast\"\n      :class=\"[nh.be('side-pad'), nh.bem('side-pad', 'right')]\"\n      role=\"none\"\n      aria-hidden\n    ></div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\n\nimport TableFootCell from './table-foot-cell.vue'\nimport TableRow from './table-row.vue'\nimport { useNameHelper } from '@vexip-ui/config'\nimport { getLast } from '@vexip-ui/utils'\nimport { TABLE_STORE } from './symbol'\n\nimport type { PropType } from 'vue'\n\ndefineOptions({ name: 'TableFoot' })\n\nconst props = defineProps({\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null\n  },\n  above: {\n    type: Boolean,\n    default: false\n  }\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\n\nconst nh = useNameHelper('table')\n\nconst columns = computed(() => {\n  return props.fixed === 'left'\n    ? state.leftFixedColumns\n    : props.fixed === 'right'\n      ? state.rightFixedColumns\n      : state.normalColumns\n})\nconst summaries = computed(() => (props.above ? state.aboveSummaries : state.belowSummaries))\nconst summaryData = computed(() => {\n  return summaries.value.map(summary => {\n    const key = mutations.buildSummaryKey(summary.key)\n    const row = state.rowMap.get(key) || mutations.createMinRowState(key)\n\n    return { summary, row }\n  })\n})\nconst className = computed(() => {\n  return [nh.be('foot'), nh.bem('foot', props.above ? 'above' : 'below')]\n})\nconst style = computed(() => {\n  const width =\n    props.fixed === 'left'\n      ? getLast(getters.leftFixedWidths)\n      : props.fixed === 'right'\n        ? getLast(getters.rightFixedWidths)\n        : getLast(getters.normalWidths)\n  const padLeft = columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n  const padRight = getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\n\n  return {\n    minWidth: width && `${width + padLeft + padRight}px`\n  }\n})\n</script>\n\n<template>\n  <div :class=\"className\" role=\"rowgroup\" :style=\"style\">\n    <TableRow\n      v-for=\"({ row, summary }, index) in summaryData\"\n      :key=\"row.key\"\n      is-foot\n      :fixed=\"fixed\"\n      :row=\"row\"\n      :aria-rowindex=\"index\"\n    >\n      <TableFootCell\n        v-for=\"(column, colIndex) in columns\"\n        :key=\"colIndex\"\n        :row=\"row\"\n        :column=\"column\"\n        :col-index=\"colIndex\"\n        :summary=\"summary\"\n        :summary-index=\"index\"\n        :fixed=\"fixed\"\n        :above=\"above\"\n        :aria-colindex=\"colIndex\"\n      ></TableFootCell>\n    </TableRow>\n  </div>\n</template>\n","import { isNull, toFalse } from '@vexip-ui/utils'\n\nexport interface CascadedNode {\n  checked: boolean,\n  partial: boolean,\n  parent?: string | number | symbol,\n  children: CascadedNode[]\n}\n\nexport function useCascadedChecked<T extends CascadedNode>(options: {\n  getNode: (key: string | number | symbol) => T | null | undefined | void,\n  disableNode?: (node: T) => boolean\n}) {\n  function updateCheckedUpward(key: string | number | symbol) {\n    let node = options.getNode(key)\n\n    if (!node) return\n\n    while (!isNull(node.parent)) {\n      const parentId = node.parent\n      const parent = options.getNode(parentId)\n\n      if (!parent) break\n\n      if (node.checked === parent.checked && node.partial === parent.partial) {\n        break\n      }\n\n      if (node.checked) {\n        parent.checked = parent.children.every(item => item.checked)\n        parent.partial = !parent.checked\n      } else {\n        parent.checked = false\n        parent.partial = parent.children.some(item => item.checked || item.partial)\n      }\n\n      node = parent\n    }\n  }\n\n  function updateCheckedDown(key: string | number | symbol) {\n    const originNode = options.getNode(key)\n\n    if (!originNode) return\n\n    const disable = typeof options.disableNode === 'function' ? options.disableNode : toFalse\n    const checked = originNode.checked\n    const partial = originNode.partial\n\n    const loop = [...(originNode.children as T[])]\n\n    let node: T\n\n    while (loop.length) {\n      node = loop.shift()!\n\n      if (disable(node)) continue\n\n      node.checked = checked\n      node.partial = partial\n\n      if (node.children.length) {\n        loop.push(...(node.children as T[]))\n      }\n    }\n  }\n\n  return {\n    updateCheckedUpward,\n    updateCheckedDown\n  }\n}\n","import { useCascadedChecked } from '@/components/tree/hooks'\n\nimport { computed, reactive, watchEffect } from 'vue'\n\nimport {\n  boundRange,\n  createBITree,\n  debounceMinor,\n  deepClone,\n  getLast,\n  isNull,\n  mapTree,\n  sortByProps,\n  toFalse,\n  toFixed,\n  toNumber,\n  walkTree\n} from '@vexip-ui/utils'\nimport { DEFAULT_KEY_FIELD, TABLE_FOOT_PREFIX, TABLE_HEAD_PREFIX, columnTypes } from './symbol'\n\nimport type { ClassType, LocaleConfig, StyleType } from '@vexip-ui/config'\nimport type { TooltipTheme } from '@/components/tooltip'\nimport type {\n  CellSpanResult,\n  ColumnCellSpanFn,\n  ColumnGroupWithKey,\n  ColumnRawWithKey,\n  ColumnWithKey,\n  Data,\n  ExpandRenderFn,\n  Key,\n  ParsedFilterOptions,\n  ParsedTableSorterOptions,\n  StoreOptions,\n  StoreState,\n  SummaryCellSpanFn,\n  SummaryWithKey,\n  TableCellPropFn,\n  TableCellSpanFn,\n  TableColResizeType,\n  TableColumnOptions,\n  TableColumnRawOptions,\n  TableColumnType,\n  TableDragColumn,\n  TableExpandColumn,\n  TableFilterOptions,\n  TableFootPropFn,\n  TableHeadPropFn,\n  TableKeyConfig,\n  TableRowPropFn,\n  TableRowState,\n  TableSelectionColumn,\n  TableSorterOptions,\n  TableSummaryData,\n  TableSummaryOptions\n} from './symbol'\n\nconst defaultSummaryData = Object.freeze<TableSummaryData>({\n  sum: NaN,\n  min: NaN,\n  max: NaN\n})\n\nlet indexId = 1\n\nfunction getIndexId() {\n  return `__vxp-table-key-${indexId++}`\n}\n\nfunction defaultIndexLabel(index: number) {\n  return index + 1\n}\n\nexport function useStore(options: StoreOptions) {\n  const state = reactive({\n    ...options,\n    columns: [],\n    normalColumns: [],\n    allColumns: [],\n    summaries: [],\n    data: [],\n    dataKey: options.dataKey ?? DEFAULT_KEY_FIELD,\n    rowData: [],\n    treeRowData: [],\n    width: 0,\n    rightFixedColumns: [],\n    leftFixedColumns: [],\n    aboveSummaries: [],\n    belowSummaries: [],\n    rowMinHeight: options.rowMinHeight || 36,\n    rowDraggable: !!options.rowDraggable,\n    columnMap: new Map(),\n    rowMap: new Map(),\n    summaryMap: new Map(),\n    idMaps: new WeakMap(),\n    checkedAll: false,\n    partial: false,\n    widths: new Map(),\n    sorters: new Map(),\n    filters: new Map(),\n    resized: new Set(),\n    bodyYScroll: 0,\n    bodyXScroll: 0,\n    padTop: 0,\n    startRow: 0,\n    endRow: 0,\n    dragging: false,\n    heightBITree: null!,\n    virtualData: [],\n    totalHeight: options.rowMinHeight * options.data.length,\n    colResizing: false,\n    resizeLeft: 0,\n    cellSpanMap: new Map(),\n    collapseMap: new Map(),\n    sidePadding: options.sidePadding || [0, 0],\n    locked: false,\n    barScrolling: false,\n    heightTrigger: 0\n  }) as StoreState\n\n  setColumns(options.columns)\n  setSummaries(options.summaries)\n  setData(options.data)\n\n  const userData = computed(() => {\n    return typeof state.dataFilter === 'function'\n      ? state.rowData.filter(row => state.dataFilter(row.data))\n      : state.rowData\n  })\n  const filteredData = computed(() => {\n    return state.customFilter\n      ? userData.value\n      : filterData(state.filters, userData.value, state.singleFilter)\n  })\n  const sortedData = computed(() => {\n    const data = state.customSorter\n      ? filteredData.value\n      : sortData(state.sorters, filteredData.value, state.columns, state.singleSorter)\n\n    return data\n  })\n  const processedData = computed(() => {\n    const data = pageData(state.currentPage, state.pageSize, sortedData.value)\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      data[i].listIndex = i\n      data[i].last = i === len - 1\n    }\n\n    return data\n  })\n  const visibleKeys = computed(() => new Set(processedData.value.map(row => row.key)))\n  const disableCheckRows = computed(() => {\n    const rowData = processedData.value\n    const selectionColumn = state.columns.find(\n      item => (item as TableSelectionColumn).type === 'selection'\n    ) as TableSelectionColumn | undefined\n    const disableCheckRows = new Set<Key>()\n\n    if (selectionColumn && typeof selectionColumn.disableRow === 'function') {\n      const isDisabled = selectionColumn.disableRow\n\n      for (let i = 0, len = rowData.length; i < len; ++i) {\n        const row = rowData[i]\n\n        if (isDisabled(row.data)) {\n          disableCheckRows.add(row.key)\n        }\n      }\n    }\n\n    return disableCheckRows\n  })\n  const disableExpandRows = computed(() => {\n    const rowData = processedData.value\n    const expandColumn = state.columns.find(\n      item => (item as TableExpandColumn).type === 'expand'\n    ) as TableExpandColumn | undefined\n    const disableExpandRows = new Set<Key>()\n\n    if (expandColumn && typeof expandColumn.disableRow === 'function') {\n      const isDisabled = expandColumn.disableRow\n\n      for (let i = 0, len = rowData.length; i < len; ++i) {\n        const row = rowData[i]\n\n        if (isDisabled(row.data)) {\n          disableExpandRows.add(row.key)\n        }\n      }\n    }\n\n    return disableExpandRows\n  })\n  const disableDragRows = computed(() => {\n    const rowData = processedData.value\n    const dragColumn = state.columns.find(item => (item as TableDragColumn).type === 'drag') as\n      | TableDragColumn\n      | undefined\n    const disableDragRows = new Set<Key>()\n\n    if (dragColumn && typeof dragColumn.disableRow === 'function') {\n      const isDisabled = dragColumn.disableRow\n\n      for (let i = 0, len = rowData.length; i < len; ++i) {\n        const row = rowData[i]\n\n        if (isDisabled(row.data)) {\n          disableDragRows.add(row.key)\n        }\n      }\n    }\n\n    return disableDragRows\n  })\n  const usingTree = computed(() => {\n    return !state.disabledTree && state.rowData.some(row => row.children?.length)\n  })\n  const hasDragColumn = computed(() => {\n    return !!state.columns.find(column => 'type' in column && column.type === 'drag')\n  })\n  const rowDragging = computed(() => !!processedData.value.find(row => row.dragging))\n  const totalWidths = computed(() => getColumnsWidths())\n  const normalWidths = computed(() => getColumnsWidths(state.normalColumns))\n  const leftFixedWidths = computed(() => getColumnsWidths(state.leftFixedColumns))\n  const rightFixedWidths = computed(() => getColumnsWidths(state.rightFixedColumns))\n  const expandColumn = computed(() => {\n    return state.columns.find(column => (column as TableExpandColumn).type === 'expand') as\n      | TableExpandColumn\n      | undefined\n  })\n  const summaryData = computed(() => {\n    const { columns, summaries, data } = state\n    const map = new Map<Key, TableSummaryData>()\n\n    if (!summaries.length) return map\n\n    for (const column of columns) {\n      const key = column.key\n\n      if (column.type || column.noSummary) {\n        map.set(key, defaultSummaryData)\n        continue\n      }\n\n      const accessor =\n        typeof column.accessor === 'function' ? column.accessor : (data: Data) => data[key]\n\n      let sum = 0\n      let min = Infinity\n      let max = -Infinity\n      let valid = false\n\n      for (let i = 0, len = data.length; i < len; ++i) {\n        const value = accessor(data[i], i)\n        const number = parseFloat(value as string)\n\n        if (Number.isNaN(number)) continue\n\n        sum += number\n        min = Math.min(min, number)\n        max = Math.max(max, number)\n        valid = true\n      }\n\n      valid ? map.set(key, { sum, min, max }) : map.set(key, defaultSummaryData)\n    }\n\n    return map\n  })\n  const topFixedHeights = computed(() => getSummariesHeights(state.aboveSummaries))\n  const bottomFixedHeights = computed(() => getSummariesHeights())\n  const indentedColumn = computed(() => {\n    return state.columns.find(column => !column.type && column.indented)\n  })\n  const hasFixedColumn = computed(() => {\n    return !!(state.leftFixedColumns.length || state.rightFixedColumns.length)\n  })\n\n  const getters = reactive({\n    filteredData,\n    sortedData,\n    processedData,\n    visibleKeys,\n    disableCheckRows,\n    disableExpandRows,\n    disableDragRows,\n    usingTree,\n    hasDragColumn,\n    rowDragging,\n    totalWidths,\n    normalWidths,\n    leftFixedWidths,\n    rightFixedWidths,\n    expandColumn,\n    summaryData,\n    topFixedHeights,\n    bottomFixedHeights,\n    indentedColumn,\n    hasFixedColumn\n  })\n\n  const mutations = {\n    // 这几个个方法被 deep watch 回调\n    // 需要防止在一个微任务内被多次调用\n    setColumns: debounceMinor(setColumns),\n    // setColumns,\n    setSummaries: debounceMinor(setSummaries),\n    setData: debounceMinor(setData),\n\n    // 这个方法被大量的 watch 回调，需要防抖\n    updateTotalHeight: debounceMinor(updateTotalHeight),\n\n    isGroupColumn,\n    buildSummaryKey,\n    setColumnProp,\n    setSummaryProp,\n    setDataKey,\n    setCurrentPage,\n    setPageSize,\n    setRowClass,\n    setRowStyle,\n    setRowAttrs,\n    setCellClass,\n    setCellStyle,\n    setCellAttrs,\n    setHeadClass,\n    setHeadStyle,\n    setHeadAttrs,\n    setFootClass,\n    setFootStyle,\n    setFootAttrs,\n    setTableWidth,\n    setRowHeight,\n    setRowMinHeight,\n    setCellHeight,\n    setVirtual,\n    setRowDraggable,\n    setBodyYScroll,\n    setBodyXScroll,\n    setBorder,\n    setStripe,\n    setHighlight,\n    setRowProp,\n    setLocale,\n    setTooltipTheme,\n    setTooltipWidth,\n    setSingleSorter,\n    setSingleFilter,\n    setDragging,\n    setKeyConfig,\n    setDisabledTree,\n    setNoCascaded,\n    setColResizable,\n    setCustomSorter,\n    setCustomFilter,\n    setColumnResizing,\n    setResizeLeft,\n    setExpandRenderer,\n    setCellSpan,\n    setSidePadding,\n    setBorderWidth,\n    setDataFilter,\n    setEllipsis,\n    setLocked,\n    setBarScrolling,\n\n    handleSort,\n    clearSort,\n    handleFilter,\n    clearFilter,\n    toggleFilterItemActive,\n    refreshRowIndex,\n    handleCheck,\n    handleCheckAll,\n    clearCheckAll,\n    setRenderRows,\n    handleExpand,\n    handleDrag,\n    collectUnderRows,\n    setTreeExpanded,\n    getParentRow,\n    handleColumnResize,\n    getCurrentData,\n    createMinRowState,\n    flatTreeRows,\n    refreshRowDepth,\n    triggerHeightChange,\n    queryRow\n  }\n\n  watchEffect(() => {\n    state.heightBITree = createBITree(\n      processedData.value.length,\n      state.rowHeight || state.rowMinHeight\n    )\n\n    state.totalHeight = -1\n    updateTotalHeight()\n  })\n  watchEffect(computeCellSpan)\n\n  function triggerHeightChange() {\n    ++state.heightTrigger\n\n    if (state.heightTrigger >= Number.MAX_SAFE_INTEGER) {\n      state.heightTrigger = 0\n    }\n  }\n\n  function getColumnsWidths(columns = state.columns) {\n    const widths = state.widths\n    const combinedWidths: number[] = [0]\n\n    let width = 0\n\n    for (let i = 0, len = columns.length; i < len; ++i) {\n      const column = columns[i]\n      const key = column.key\n      const columnWidth = widths.get(key) || 0\n\n      width += columnWidth\n      combinedWidths.push(width)\n    }\n\n    return combinedWidths\n  }\n\n  function getSummariesHeights(summaries = state.belowSummaries) {\n    const rowMap = state.rowMap\n    const heights: number[] = [0]\n\n    let height = 0\n\n    for (let i = 0, len = summaries.length; i < len; ++i) {\n      const summary = summaries[i]\n      const key = buildSummaryKey(summary.key)\n      const row = rowMap.get(key)\n\n      if (row) {\n        height += row.height || 0\n      }\n\n      heights.push(height)\n    }\n\n    return heights\n  }\n\n  function createMinRowState(key: Key) {\n    return { key, cellHeights: {}, height: state.rowHeight ?? state.rowMinHeight } as TableRowState\n  }\n\n  function isGroupColumn(column: any): column is ColumnGroupWithKey {\n    return !!column.children?.length\n  }\n\n  function buildColumns(columns: TableColumnRawOptions[]) {\n    const allColumns: ColumnRawWithKey[][] = []\n    const baseColumns: ColumnWithKey[] = []\n    const columnMap = new Map<Key, ColumnRawWithKey>()\n    const existedTypes = new Set<TableColumnType>()\n\n    const getFixedOrder = (fixed?: boolean | 'left' | 'right') => {\n      return fixed === true || fixed === 'left' ? -1 : fixed === 'right' ? 1 : 0\n    }\n    const build = (\n      _columns: TableColumnRawOptions[],\n      fixed?: boolean | 'left' | 'right',\n      row = 0,\n      result: ColumnRawWithKey[][] = []\n    ) => {\n      _columns = _columns\n        .filter(column => !('children' in column) || isGroupColumn(column))\n        .sort((prev, next) => (prev.order || 0) - (next.order || 0))\n        .sort((prev, next) => getFixedOrder(prev.fixed) - getFixedOrder(next.fixed))\n      fixed = fixed === true ? 'left' : fixed\n\n      const columns = _columns as ColumnRawWithKey[]\n      const rowColumns = result[row] ?? (result[row] = [])\n\n      let index = row > 0 ? result[row - 1].length - 1 : 0\n\n      for (const { ...column } of columns) {\n        if (!isNull(fixed)) {\n          column.fixed = fixed\n        }\n\n        rowColumns[index] = column\n\n        if (isGroupColumn(column)) {\n          const endIndex = build(column.children, column.fixed, row + 1, result)\n\n          column.key = Symbol('TableColumnGroup')\n          column.headSpan = endIndex - index\n          index = endIndex\n        } else {\n          const validType = column.type && columnTypes.includes(column.type)\n\n          if (validType) {\n            if (existedTypes.has(column.type)) {\n              console.warn(`[vexip-ui:Table] Table has duplicate column with type '${column.type}'`)\n            }\n\n            existedTypes.add(column.type)\n          }\n\n          let key = column.key\n\n          if (isNull(key)) {\n            if (validType) {\n              key = `__vxp_${column.type}`\n            } else {\n              console.warn('[vexip-ui:Table] Table column requires key prop, but missing')\n\n              key = getIndexId()\n            }\n          }\n\n          column.key = key\n          baseColumns.push(column)\n          index += 1\n        }\n\n        columnMap.set(column.key, column)\n      }\n\n      return index\n    }\n\n    build(columns, undefined, 0, allColumns)\n\n    let length = 0\n\n    for (const rowColumns of allColumns) {\n      length = Math.max(rowColumns.length, length)\n    }\n\n    for (const rowColumns of allColumns) {\n      if (rowColumns.length) {\n        getLast(rowColumns)!.last = true\n      }\n\n      rowColumns.length = length\n    }\n\n    for (let i = 0, rowCount = allColumns.length; i < length; ++i) {\n      let span = 1\n\n      for (let j = rowCount - 1; j >= 0; --j) {\n        const column = allColumns[j][i]\n\n        if (column) {\n          column.colIndex = i\n          column.rowSpan = span\n          span = 1\n        } else {\n          ++span\n        }\n      }\n    }\n\n    return { allColumns, baseColumns, columnMap }\n  }\n\n  function setColumns(columns: TableColumnRawOptions[]) {\n    const { widths, sorters, filters } = state\n    const { allColumns, baseColumns, columnMap } = buildColumns(columns)\n\n    const normalColumns: ColumnWithKey[] = []\n    const rightFixedColumns: ColumnWithKey[] = []\n    const leftFixedColumns: ColumnWithKey[] = []\n\n    for (let i = 0, len = baseColumns.length; i < len; ++i) {\n      const column = baseColumns[i]\n\n      column.first = false\n      column.last = false\n      column.index = i\n\n      if (column.type && columnTypes.includes(column.type)) {\n        switch (column.type) {\n          case 'order': {\n            column.truthIndex = !!column.truthIndex\n\n            if (typeof column.orderLabel !== 'function') {\n              column.orderLabel = defaultIndexLabel\n            }\n\n            if (isNull(column.width)) column.width = 60\n\n            break\n          }\n          case 'selection': {\n            column.selectionSize = column.selectionSize || 'default'\n\n            if (typeof column.disableRow !== 'function') {\n              column.disableRow = toFalse\n            }\n\n            if (isNull(column.width)) column.width = 40\n\n            break\n          }\n          case 'expand': {\n            if (typeof column.disableRow !== 'function') {\n              column.disableRow = toFalse\n            }\n\n            if (isNull(column.width)) column.width = 40\n\n            break\n          }\n          case 'drag': {\n            if (typeof column.disableRow !== 'function') {\n              column.disableRow = toFalse\n            }\n\n            if (isNull(column.width)) column.width = 40\n\n            break\n          }\n        }\n\n        if (!column.key) {\n          column.key = `__vxp_${column.type}-${i}`\n        }\n      } else {\n        column.type = undefined\n      }\n\n      // 独立属性解析时注意隔断同对象引用\n      widths.set(column.key, column.width || 100)\n      sorters.set(column.key, parseSorter(column.sorter))\n      filters.set(column.key, parseFilter(column.filter))\n\n      const fixed = column.fixed\n\n      if (fixed === true || fixed === 'left') {\n        leftFixedColumns.push(column)\n      } else if (fixed === 'right') {\n        rightFixedColumns.push(column)\n      } else {\n        normalColumns.push(column)\n      }\n    }\n\n    if (state.allColumns.length > allColumns.length) {\n      for (let i = allColumns.length - 1, len = state.allColumns.length; i < len; ++i) {\n        state.rowMap.delete(`${TABLE_HEAD_PREFIX}${i}`)\n      }\n    }\n\n    for (let i = 0, len = allColumns.length; i < len; ++i) {\n      const rowKey = `${TABLE_HEAD_PREFIX}${i}`\n\n      state.rowMap.set(rowKey, createMinRowState(rowKey))\n    }\n\n    state.columnMap = columnMap\n    state.columns = Array.from(leftFixedColumns).concat(normalColumns, rightFixedColumns)\n    state.normalColumns = normalColumns\n    state.allColumns = allColumns\n\n    if (state.columns.length) {\n      for (const column of state.columns) {\n        if (!column.type) {\n          column.first = true\n          break\n        }\n      }\n\n      getLast(state.columns)!.last = true\n    }\n\n    if (leftFixedColumns.length) {\n      state.leftFixedColumns = leftFixedColumns\n    }\n\n    if (rightFixedColumns.length) {\n      state.rightFixedColumns = rightFixedColumns\n    }\n  }\n\n  function setColumnProp(key: Key, prop: string, value: any) {\n    if (state.columnMap.has(key)) {\n      ;(state.columnMap.get(key) as any)[prop] = value\n    }\n  }\n\n  function buildSummaryKey(key: Key) {\n    return typeof key === 'symbol' ? key : `${TABLE_FOOT_PREFIX}${key}`\n  }\n\n  function setSummaries(summaries: TableSummaryOptions[]) {\n    summaries = Array.from(summaries).sort((prev, next) => {\n      return (prev.order || 0) - (next.order || 0)\n    })\n\n    const prevKeys = new Set(state.summaries.map(summary => summary.key))\n    const aboveSummaries: SummaryWithKey[] = []\n    const belowSummaries: SummaryWithKey[] = []\n    const summaryMap = new Map<Key, SummaryWithKey>()\n\n    for (let i = 0, len = summaries.length; i < len; ++i) {\n      const summary = { ...summaries[i] } as SummaryWithKey\n\n      let key = summary.key\n\n      if (isNull(key)) {\n        console.error('[vexip-ui:Table] Table summary requires key prop, but missing')\n\n        key = getIndexId()\n      }\n\n      summary.key = key\n      ;(summary.above ? aboveSummaries : belowSummaries).push(summary)\n\n      if (!prevKeys.has(summary.key)) {\n        const rowKey = buildSummaryKey(summary.key)\n\n        state.rowMap.set(rowKey, createMinRowState(rowKey))\n      }\n\n      prevKeys.delete(summary.key)\n      summaryMap.set(summary.key, summary)\n    }\n\n    state.summaries = Array.from(aboveSummaries).concat(belowSummaries)\n    state.summaryMap = summaryMap\n\n    if (aboveSummaries.length) {\n      state.aboveSummaries = aboveSummaries\n    }\n\n    if (belowSummaries.length) {\n      state.belowSummaries = belowSummaries\n    }\n\n    if (prevKeys.size) {\n      for (const key of prevKeys) {\n        state.rowMap.delete(buildSummaryKey(key))\n      }\n    }\n  }\n\n  function setSummaryProp(key: Key, prop: string, value: any) {\n    if (state.summaryMap.has(key)) {\n      ;(state.summaryMap.get(key) as any)[prop] = value\n    }\n  }\n\n  function setDataKey(field: string) {\n    const oldDataKey = state.dataKey\n\n    if (!isNull(field) && oldDataKey !== field) {\n      const { rowData, idMaps } = state\n\n      state.dataKey = field\n\n      rowData.forEach(row => {\n        let key = row.data[field] as Key\n\n        if (isNull(key)) {\n          key = getIndexId()\n        }\n\n        row.key = key\n        idMaps.set(row.data, key)\n      })\n    }\n  }\n\n  function collectUnderRows(row: TableRowState, result: TableRowState[] = []) {\n    if (row.treeExpanded && row.children?.length) {\n      for (const childRow of row.children) {\n        result.push(childRow)\n        collectUnderRows(childRow, result)\n      }\n    }\n\n    return result\n  }\n\n  function setData(data: Data[]) {\n    const clonedData: TableRowState[] = []\n    const rowMap = new Map<Key, TableRowState>()\n    const { allColumns, dataKey, keyConfig, idMaps, disabledTree } = state\n    const oldDataMap = state.rowMap\n    const hidden = !!state.virtual\n\n    const {\n      children: childrenKey,\n      checked: checkedKey,\n      height: heightKey,\n      expanded: expandedKey,\n      treeExpanded: treeExpandedKey\n    } = keyConfig\n\n    for (let i = 0, len = allColumns.length; i < len; ++i) {\n      const key = `${TABLE_HEAD_PREFIX}${i}`\n\n      rowMap.set(key, oldDataMap.get(key) || createMinRowState(key))\n    }\n\n    for (const summary of state.summaries) {\n      const key = buildSummaryKey(summary.key)\n\n      rowMap.set(key, oldDataMap.get(key) || createMinRowState(key))\n    }\n\n    const parseRow = (origin: Data[], result: TableRowState[], parent?: TableRowState) => {\n      for (let i = 0, len = origin.length; i < len; ++i) {\n        const item = origin[i]\n\n        let key = item[dataKey] as Key\n\n        if (isNull(key)) {\n          key = idMaps.get(item)!\n\n          if (isNull(key)) {\n            key = getIndexId()\n          }\n        }\n\n        let row: TableRowState\n\n        if (oldDataMap.has(key)) {\n          row = oldDataMap.get(key)!\n\n          const {\n            [checkedKey]: checked,\n            [heightKey]: height,\n            [expandedKey]: expanded,\n            [treeExpandedKey]: treeExpanded\n          } = row.data !== item ? Object.assign(row.data, item) : row.data\n\n          row.checked = !isNull(checked) ? !!checked : row.checked\n          row.height = !isNull(height) ? toNumber(height) : row.height\n          row.expanded = !isNull(expanded) ? !!expanded : row.expanded\n          row.treeExpanded = !isNull(treeExpanded) ? !!treeExpanded : row.treeExpanded\n        } else {\n          const {\n            [checkedKey]: checked,\n            [heightKey]: height,\n            [expandedKey]: expanded,\n            [treeExpandedKey]: treeExpanded\n          } = item\n\n          row = {\n            key,\n            hidden,\n            checked: !!checked,\n            height: toNumber(height),\n            expanded: !!expanded,\n            hover: false,\n            expandHeight: 0,\n            index: -1,\n            children: [],\n            depth: 0,\n            treeExpanded: !!treeExpanded,\n            partial: false,\n            dragging: false,\n            listIndex: 0,\n            cellHeights: reactive({}),\n            last: false,\n            expandAnimate: false,\n            data: item\n          }\n\n          idMaps.set(item, key)\n        }\n\n        if (parent) {\n          row.parent = parent.key\n          row.depth = parent.depth + 1\n        }\n\n        row.children = []\n\n        const children = row.data[childrenKey]\n        children?.length && parseRow(children, row.children, row)\n\n        result.push(row)\n        rowMap.set(key, row)\n      }\n    }\n\n    parseRow(data, clonedData)\n\n    state.rowMap = rowMap\n    state.treeRowData = clonedData\n\n    if (!disabledTree) {\n      flatTreeRows()\n    } else {\n      state.rowData = clonedData\n    }\n\n    state.data = data\n\n    refreshRowIndex()\n    computePartial()\n  }\n\n  function flatTreeRows() {\n    if (state.disabledTree) return\n\n    const rowData: TableRowState[] = []\n\n    for (const row of state.treeRowData) {\n      rowData.push(row)\n      collectUnderRows(row, rowData)\n    }\n\n    state.rowData = rowData\n  }\n\n  function refreshRowDepth() {\n    walkTree(state.treeRowData, (row, depth) => {\n      row.depth = depth\n    })\n  }\n\n  function setCurrentPage(currentPage: number) {\n    state.currentPage = currentPage ?? 1\n  }\n\n  function setPageSize(pageSize: number) {\n    state.pageSize = pageSize || 0\n  }\n\n  function setRowClass(rowClass: ClassType | TableRowPropFn<ClassType>) {\n    state.rowClass = rowClass ?? ''\n  }\n\n  function setRowStyle(rowStyle: StyleType | TableRowPropFn<StyleType>) {\n    state.rowStyle = rowStyle ?? ''\n  }\n\n  function setRowAttrs(rowAttrs: Record<string, any> | TableRowPropFn<Record<string, any>>) {\n    state.rowAttrs = rowAttrs ?? null!\n  }\n\n  function setCellClass(cellClass: ClassType | TableCellPropFn<ClassType>) {\n    state.cellClass = cellClass ?? ''\n  }\n\n  function setCellStyle(cellStyle: StyleType | TableCellPropFn<StyleType>) {\n    state.cellStyle = cellStyle ?? ''\n  }\n\n  function setCellAttrs(cellAttrs: Record<string, any> | TableCellPropFn<Record<string, any>>) {\n    state.cellAttrs = cellAttrs ?? null!\n  }\n\n  function setHeadClass(headClass: ClassType | TableHeadPropFn<ClassType>) {\n    state.headClass = headClass ?? ''\n  }\n\n  function setHeadStyle(headStyle: StyleType | TableHeadPropFn<StyleType>) {\n    state.headStyle = headStyle ?? ''\n  }\n\n  function setHeadAttrs(headAttrs: Record<string, any> | TableHeadPropFn<Record<string, any>>) {\n    state.headAttrs = headAttrs ?? null!\n  }\n\n  function setFootClass(footClass: ClassType | TableFootPropFn<ClassType>) {\n    state.footClass = footClass ?? ''\n  }\n\n  function setFootStyle(footStyle: StyleType | TableFootPropFn<StyleType>) {\n    state.footStyle = footStyle ?? ''\n  }\n\n  function setFootAttrs(footAttrs: Record<string, any> | TableFootPropFn<Record<string, any>>) {\n    state.footAttrs = footAttrs ?? null!\n  }\n\n  function setTableWidth(width: number) {\n    if (state.resized.size) return\n\n    width = toNumber(width)\n\n    const { columns, widths, resized, sidePadding } = state\n\n    const hasWidthColumns = []\n    const flexColumns = []\n\n    let flexWidth = width - (sidePadding[0] || 0) - (sidePadding[1] || 0)\n\n    for (let i = 0, len = columns.length; i < len; ++i) {\n      const column = columns[i]\n\n      if (column.width || resized.has(column.key)) {\n        flexWidth -= column.width ?? widths.get(column.key)!\n        hasWidthColumns.push(column)\n      } else {\n        flexColumns.push(column)\n      }\n    }\n\n    const flexColumnCount = flexColumns.length\n\n    let flexUnitWidth = 100\n\n    // 剩余空间有多时, 均分到弹性列\n    // if (flexColumnCount && flexWidth > flexColumnCount * flexUnitWidth) {\n    if (flexColumnCount) {\n      flexUnitWidth = Math.max(flexWidth / flexColumnCount, 100)\n    }\n\n    let usedWidth = 0\n\n    for (let i = 0; i < flexColumnCount; ++i) {\n      const column = flexColumns[i]\n      const width = Math[i % 2 ? 'ceil' : 'floor'](flexUnitWidth)\n\n      if (i < flexColumnCount - 1) {\n        usedWidth += width\n      }\n\n      widths.set(column.key, width)\n    }\n\n    if (flexColumnCount && flexWidth >= flexColumnCount * flexUnitWidth) {\n      widths.set(getLast(flexColumns)!.key, flexWidth - usedWidth)\n    }\n\n    state.width = width\n  }\n\n  function setRowHeight(height: number) {\n    state.rowHeight = height\n  }\n\n  function setRowMinHeight(height: number) {\n    state.rowMinHeight = height\n  }\n\n  function setCellHeight(rowKey: Key, columnKey: Key, height: number) {\n    if (!isNull(height) && state.rowMap.has(rowKey)) {\n      state.rowMap.get(rowKey)!.cellHeights[columnKey] = height\n    }\n  }\n\n  function setRowDraggable(draggable: boolean) {\n    state.rowDraggable = !!draggable\n  }\n\n  function setBodyYScroll(scroll: number) {\n    state.bodyYScroll = scroll\n  }\n\n  function setBodyXScroll(scroll: number) {\n    state.bodyXScroll = scroll\n  }\n\n  function setBorder(able: boolean) {\n    state.border = !!able\n  }\n\n  function setStripe(able: boolean) {\n    state.stripe = !!able\n  }\n\n  function setHighlight(able: boolean) {\n    state.highlight = !!able\n  }\n\n  function setVirtual(virtual: boolean) {\n    state.virtual = !!virtual\n  }\n\n  function setRowProp(key: Key, prop: Exclude<keyof TableRowState, 'key'>, value: any) {\n    const row = state.rowMap.get(key)\n\n    if (row && row[prop] !== value) {\n      ;(row as any)[prop] = value\n    }\n  }\n\n  function setLocale(locale: LocaleConfig['table']) {\n    state.locale = locale\n  }\n\n  function setTooltipTheme(theme: TooltipTheme) {\n    state.tooltipTheme = theme\n  }\n\n  function setTooltipWidth(theme: number | string) {\n    state.tooltipWidth = theme\n  }\n\n  function setSingleSorter(able: boolean) {\n    state.singleSorter = !!able\n  }\n\n  function setSingleFilter(able: boolean) {\n    state.singleFilter = !!able\n  }\n\n  function setDragging(dragging: boolean) {\n    state.dragging = !!dragging\n  }\n\n  function setKeyConfig(keyConfig: Required<TableKeyConfig>) {\n    state.keyConfig = keyConfig\n  }\n\n  function setDisabledTree(disabled: boolean) {\n    state.disabledTree = !!disabled\n  }\n\n  function setNoCascaded(noCascaded: boolean) {\n    state.noCascaded = !!noCascaded\n  }\n\n  function setColResizable(resizable: boolean | TableColResizeType) {\n    state.colResizable = resizable === true ? 'lazy' : resizable\n  }\n\n  function setCustomSorter(able: boolean) {\n    state.customSorter = !!able\n  }\n\n  function setCustomFilter(able: boolean) {\n    state.customFilter = !!able\n  }\n\n  function setColumnResizing(resizing: boolean) {\n    state.colResizing = !!resizing\n  }\n\n  function setResizeLeft(left: number) {\n    state.resizeLeft = left\n  }\n\n  function setExpandRenderer(renderer: ExpandRenderFn | null) {\n    state.expandRenderer = renderer\n  }\n\n  function setCellSpan(spanFn: TableCellSpanFn | null) {\n    state.cellSpan = spanFn\n  }\n\n  function setSidePadding(padding: number | number[]) {\n    state.sidePadding = Array.isArray(padding) ? padding : [padding, padding]\n  }\n\n  function setBorderWidth(width: number) {\n    state.borderWidth = Math.max(width, 0)\n  }\n\n  function setDataFilter(filter: (data: Data) => boolean) {\n    state.dataFilter = filter\n  }\n\n  function setEllipsis(ellipsis: boolean) {\n    state.ellipsis = ellipsis\n  }\n\n  function setLocked(locked: boolean) {\n    state.locked = locked\n  }\n\n  function setBarScrolling(scrolling: boolean) {\n    state.barScrolling = scrolling\n  }\n\n  function handleSort(key: Key, type: ParsedTableSorterOptions['type']) {\n    if (state.sorters.has(key)) {\n      if (state.singleSorter && type) {\n        clearSort()\n      }\n\n      state.sorters.get(key)!.type = type\n    }\n  }\n\n  function clearSort() {\n    const sorters = state.sorters\n\n    for (const sorter of sorters.values()) {\n      sorter.type = null\n    }\n  }\n\n  function handleFilter(key: Key, active: ParsedFilterOptions['active']) {\n    if (state.filters.has(key)) {\n      if (state.singleFilter && (Array.isArray(active) ? active.length : active)) {\n        clearFilter()\n      }\n\n      state.filters.get(key)!.active = Array.isArray(active) ? Array.from(active) : active\n    }\n  }\n\n  function clearFilter() {\n    const filters = state.filters\n\n    for (const filter of filters.values()) {\n      filter.active = null\n\n      for (const option of filter.options) {\n        option.active = false\n      }\n    }\n  }\n\n  const { updateCheckedUpward, updateCheckedDown } = useCascadedChecked({\n    getNode: key => state.rowMap.get(key),\n    disableNode: row => disableCheckRows.value.has(row.key)\n  })\n\n  function computeChecked(key: Key) {\n    const { rowMap, rowData } = state\n    const { disableCheckRows } = getters\n\n    if (!rowMap.has(key)) return\n\n    const rowList = [rowMap.get(key)!].concat(\n      // 需要包含被禁用且被勾选的节点\n      rowData.filter(row => disableCheckRows.has(row.key) && row.checked)\n    )\n\n    for (let i = 0, len = rowList.length; i < len; ++i) {\n      updateCheckedUpward(rowList[i].key)\n      updateCheckedDown(rowList[i].key)\n    }\n  }\n\n  function handleCheck(key: Key, checked: boolean, single = false) {\n    const { rowMap, noCascaded } = state\n    const { disableCheckRows } = getters\n    const row = rowMap.get(key)\n\n    if (!row) return\n\n    if (single) {\n      clearCheckAll(true)\n      row.checked = !!checked\n    }\n\n    if (!disableCheckRows.has(key)) {\n      row.checked = !!checked\n      row.partial = false\n    }\n\n    !noCascaded && computeChecked(key)\n    computePartial()\n  }\n\n  function handleCheckAll() {\n    const { rowData, checkedAll } = state\n    const { disableCheckRows } = getters\n\n    let checked = !checkedAll\n\n    // 阻断 disabled 元素对全选的影响\n    if (disableCheckRows.size) {\n      // 由于被禁用的元素不可被操作，如果存在被禁用的元素且该状态为未被选中，则全选时仍然是 partial 状态\n      // 假设除了禁用的元素，其余元素均为选中状态（此时对于用户来说属于已经全选，点击的期望是取消全选）\n      let partialCheckedAll = true\n\n      for (const row of rowData) {\n        // 检查是否存在非禁用的且未被选中的元素（如有则证明现在不是全选，用户点击的期望是进行全选）\n        if (!disableCheckRows.has(row.key) && !row.checked) {\n          partialCheckedAll = false\n\n          break\n        }\n      }\n\n      checked = !partialCheckedAll\n    }\n\n    for (const row of rowData) {\n      if (!disableCheckRows.has(row.key)) {\n        row.checked = checked\n      }\n    }\n\n    state.checkedAll = checked\n    state.partial = false\n\n    computePartial()\n  }\n\n  function clearCheckAll(includeDisabled = false) {\n    const { rowData } = state\n    const { disableCheckRows } = getters\n\n    for (const row of rowData) {\n      if (includeDisabled || !disableCheckRows.has(row.key)) {\n        row.checked = false\n      }\n\n      if (includeDisabled) {\n        row.partial = false\n      }\n    }\n\n    state.checkedAll = false\n    state.partial = false\n\n    !includeDisabled && computePartial()\n  }\n\n  function computePartial() {\n    const data = state.rowData\n\n    let hasChecked = false\n    let hasNotChecked = false\n    let partial = false\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      const row = data[i]\n\n      if (row.checked) {\n        hasChecked = true\n      } else {\n        hasNotChecked = true\n      }\n\n      if (hasChecked && hasNotChecked) {\n        partial = true\n\n        break\n      }\n    }\n\n    if (hasChecked && !partial) {\n      state.checkedAll = true\n    } else {\n      state.checkedAll = false\n    }\n\n    state.partial = partial\n  }\n\n  function setRenderRows(start: number, end: number, force = false) {\n    const { startRow, endRow, heightBITree, virtualData } = state\n\n    if (!force && start === startRow && end === endRow) return\n\n    const { processedData } = getters\n\n    if (!processedData.length) {\n      virtualData.length = 0\n      return\n    }\n\n    const prevData = new Set([...virtualData])\n    const added: TableRowState[] = []\n    const removed: TableRowState[] = []\n\n    for (let i = 0, len = processedData.length; i < len; ++i) {\n      const data = processedData[i]\n\n      data.hidden = !(i >= start && i < end)\n\n      if (data.hidden) {\n        data.hover = false\n\n        if (prevData.has(data)) {\n          removed.push(data)\n        }\n      } else if (!prevData.has(data)) {\n        added.push(data)\n      }\n\n      prevData.delete(data)\n    }\n\n    removed.push(...prevData)\n\n    const length = Math.min(added.length, removed.length)\n\n    for (let i = 0; i < length; ++i) {\n      virtualData[virtualData.indexOf(removed[i])] = added[i]\n    }\n\n    if (added.length > removed.length) {\n      virtualData.push(...added.slice(length))\n    } else if (added.length < removed.length) {\n      state.virtualData = virtualData.filter(data => !removed.includes(data))\n    }\n\n    state.padTop = heightBITree?.sum(start) ?? 0\n    state.startRow = start\n    state.endRow = end\n  }\n\n  function handleExpand(key: Key, expanded: boolean) {\n    const { rowMap } = state\n    const { disableExpandRows } = getters\n\n    if (rowMap.has(key) && !disableExpandRows.has(key)) {\n      rowMap.get(key)!.expanded = !!expanded\n    }\n  }\n\n  function handleDrag(key: Key, dragging: boolean) {\n    const { rowMap } = state\n    const { disableDragRows } = getters\n\n    if (rowMap.has(key) && !disableDragRows.has(key)) {\n      rowMap.get(key)!.dragging = !!dragging\n    }\n  }\n\n  function setTreeExpanded(key: Key, expanded: boolean) {\n    if (!usingTree.value) return\n\n    const { rowMap, rowData, virtual } = state\n    const row = rowMap.get(key)\n\n    if (!row?.children?.length) return\n\n    const underRows = collectUnderRows({ ...row, treeExpanded: true })\n\n    if (expanded) {\n      rowData.splice(row.index + 1, 0, ...underRows)\n    } else {\n      rowData.splice(row.index + 1, underRows.length)\n    }\n\n    row.treeExpanded = !!expanded\n\n    refreshRowIndex()\n    virtual && setRenderRows(state.startRow, state.endRow, true)\n  }\n\n  function toggleFilterItemActive(options: {\n    key: Key,\n    value: number | string | null,\n    active?: boolean,\n    disableOthers?: boolean\n  }) {\n    const { key, value, active = false, disableOthers = false } = options\n\n    if (state.filters.has(key)) {\n      const filterOptions = state.filters.get(key)!.options\n\n      if (disableOthers) {\n        for (let i = 0, len = filterOptions.length; i < len; ++i) {\n          filterOptions[i].active = false\n        }\n      }\n\n      const item = filterOptions.find(item => item.value === value)\n\n      if (item) {\n        item.active = active\n      }\n    }\n  }\n\n  function refreshRowIndex() {\n    const data = state.rowData\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      data[i].index = i\n    }\n  }\n\n  function updateTotalHeight() {\n    const { heightBITree } = state\n\n    if (heightBITree) {\n      state.totalHeight = heightBITree.sum() ?? 0\n    } else {\n      state.totalHeight = 0\n    }\n  }\n\n  function parseSorter(sorter: boolean | TableSorterOptions = false): ParsedTableSorterOptions {\n    const raw = typeof sorter === 'boolean' ? { able: sorter } : sorter\n    const { able = true, type = null, order = 0, method = null } = raw\n\n    return { able, type, order, method }\n  }\n\n  function parseFilter(filter?: TableFilterOptions | null): ParsedFilterOptions {\n    filter = filter || { able: false, options: [] }\n\n    const {\n      able = true,\n      custom = false,\n      multiple = false,\n      active = null,\n      method = null,\n      meta\n    } = filter\n    // 防止内部变化触发 deep watch\n    const options = deepClone(filter.options ?? [])\n    const formattedOptions = []\n\n    for (let i = 0, len = options.length; i < len; ++i) {\n      const item = options[i]\n      const option = typeof item === 'string' ? { value: item } : { ...item }\n\n      option.label = option.label ?? option.value.toString()\n\n      let isActive = false\n\n      if (multiple && Array.isArray(active)) {\n        isActive = active.includes(option.value)\n      } else if (!isNull(active)) {\n        isActive = Object.is(option.value, active)\n      }\n\n      option.active = isActive\n\n      formattedOptions.push(option as { value: string | number, label: string, active: boolean })\n    }\n\n    return { able, custom, meta, options: formattedOptions, multiple, active, method }\n  }\n\n  function filterData(\n    filters: Map<Key, ParsedFilterOptions>,\n    data: TableRowState[],\n    isSingle: boolean\n  ) {\n    const usedFilter: ParsedFilterOptions[] = []\n    const usedData: TableRowState[] = []\n\n    for (const filter of filters.values()) {\n      const { able, active, method } = filter\n\n      if (able && active && typeof method === 'function') {\n        usedFilter.push(filter)\n\n        if (isSingle) break\n      }\n    }\n\n    const usedFilterCount = usedFilter.length\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      const row = data[i]\n\n      let isFilter = true\n\n      for (let j = 0; j < usedFilterCount; j++) {\n        const { active, method } = usedFilter[j]\n\n        isFilter = method!(active! as any, row.data)\n\n        if (!isFilter) {\n          break\n        }\n      }\n\n      if (isFilter) {\n        usedData.push(row)\n      }\n    }\n\n    return usedData\n  }\n\n  function sortData(\n    sorters: Map<Key, ParsedTableSorterOptions>,\n    data: TableRowState[],\n    columns: TableColumnOptions[],\n    isSingle: boolean\n  ) {\n    const usedSorter = []\n\n    for (const [_key, sorter] of sorters) {\n      const key = _key as keyof TableRowState\n      const { able, type, order, method } = sorter\n\n      if (able && type) {\n        const column = columns.find(item => item.key === key)\n        const accessor = column?.accessor\n\n        usedSorter.push({\n          able,\n          key,\n          order,\n          type,\n          method: method ?? undefined,\n          accessor(row: TableRowState) {\n            if (typeof accessor === 'function') {\n              return accessor(row.data, row.index)\n            }\n\n            return row.data[key]\n          }\n        })\n\n        if (isSingle) break\n      }\n    }\n\n    // 多列排序优先级\n    usedSorter.sort((prev, next) => prev.order - next.order)\n\n    return sortByProps(data, usedSorter)\n  }\n\n  function pageData(currentPage: number, pageSize: number, data: TableRowState[]) {\n    return pageSize > 0 ? data.slice((currentPage - 1) * pageSize, currentPage * pageSize) : data\n  }\n\n  function getParentRow(key: Key) {\n    const { rowMap } = state\n    const row = rowMap.get(key)\n\n    if (!isNull(row?.parent)) {\n      return rowMap.get(row!.parent) ?? null\n    }\n\n    return null\n  }\n\n  let lastColumnWidth: number | undefined\n\n  function handleColumnResize(keys: Key[], newWidth: number) {\n    const { resized, widths, columns, width: tableWidth } = state\n    const length = keys.length\n\n    if (!columns.length || !length) return\n\n    const deltaWidth = newWidth / length\n    const lastKey = getLast(columns)!.key\n\n    for (let i = 0; i < length; ++i) {\n      const key = keys[i]\n\n      resized.add(key)\n      widths.set(\n        key,\n        length === 1 ? Math.round(deltaWidth) : Math[i % 2 ? 'ceil' : 'floor'](deltaWidth)\n      )\n    }\n\n    let totalWidth = 0\n\n    for (const width of widths.values()) {\n      totalWidth += width\n    }\n\n    totalWidth = toFixed(totalWidth, 1)\n\n    if (\n      totalWidth - widths.get(lastKey)! <\n      tableWidth - (lastColumnWidth ?? widths.get(lastKey)!)\n    ) {\n      if (!lastColumnWidth) {\n        lastColumnWidth = widths.get(lastKey)\n      }\n\n      widths.set(lastKey, widths.get(lastKey)! + tableWidth - totalWidth)\n    } else if (lastColumnWidth) {\n      widths.set(lastKey, lastColumnWidth!)\n      lastColumnWidth = undefined\n    }\n  }\n\n  function computeCellSpan() {\n    const {\n      normalColumns,\n      leftFixedColumns,\n      rightFixedColumns,\n      aboveSummaries,\n      belowSummaries,\n      rowData,\n      cellSpanMap,\n      collapseMap\n    } = state\n    const { processedData } = getters\n\n    for (const type of ['left', 'default', 'right'] as const) {\n      cellSpanMap.set(type, new Map())\n      collapseMap.set(type, new Map())\n    }\n\n    function setCellSpan(\n      rowIndex: number,\n      columnIndex: number,\n      fixed: 'left' | 'default' | 'right',\n      getSpan: () => Required<CellSpanResult>,\n      prefix = ''\n    ) {\n      const masterKey = `${prefix}${rowIndex},${columnIndex}`\n      const collapsed = collapseMap.get(fixed)!\n\n      if (collapsed.has(masterKey)) {\n        cellSpanMap.get(fixed)!.set(masterKey, { colSpan: 0, rowSpan: 0 })\n        return\n      }\n\n      const span = getSpan()\n      const { colSpan, rowSpan } = span\n\n      for (let i = 0; i < colSpan; ++i) {\n        for (let j = 0; j < rowSpan; ++j) {\n          if (!i && !j) continue\n\n          const key = `${prefix}${rowIndex + j},${columnIndex + i}`\n\n          let masterSet = collapsed.get(key)\n\n          if (!masterSet) {\n            masterSet = new Set()\n            collapsed.set(key, masterSet)\n          }\n\n          masterSet.add(masterKey)\n        }\n      }\n\n      cellSpanMap.get(fixed)!.set(masterKey, span)\n    }\n\n    for (const columns of [normalColumns, leftFixedColumns, rightFixedColumns]) {\n      if (!columns.length) continue\n\n      const fixed = columns[0].fixed === true ? 'left' : columns[0].fixed || 'default'\n      const columnFixed = columns[0].fixed === true ? 'left' : columns[0].fixed || undefined\n\n      const left = state.leftFixedColumns.length\n      const right = state.allColumns[0].length - state.rightFixedColumns.length\n\n      let allColumns: ColumnRawWithKey[][]\n\n      if (fixed === 'left') {\n        allColumns = state.allColumns.map(columns => columns.slice(0, left))\n      } else if (fixed === 'right') {\n        allColumns = state.allColumns.map(columns =>\n          columns.slice(right, state.allColumns[0].length)\n        )\n      } else {\n        allColumns = state.allColumns.map(columns => columns.slice(left, right))\n      }\n\n      for (let i = 0, len1 = allColumns.length; i < len1; ++i) {\n        const rowColumns = allColumns[i]\n\n        for (let j = 0, len2 = rowColumns.length; j < len2; ++j) {\n          const column = rowColumns[j]\n\n          if (!column) continue\n\n          const fixed = column.fixed === true ? 'left' : column.fixed || 'default'\n\n          setCellSpan(\n            i,\n            j,\n            fixed,\n            () => {\n              const columns =\n                fixed === 'left'\n                  ? leftFixedColumns\n                  : fixed === 'right'\n                    ? rightFixedColumns\n                    : normalColumns\n              const colSpan = boundRange(column.headSpan ?? 1, 0, columns.length - j)\n              const span = { colSpan, rowSpan: column.rowSpan }\n\n              return span\n            },\n            'h'\n          )\n        }\n      }\n\n      for (let colIndex = 0, len = columns.length; colIndex < len; ++colIndex) {\n        const column = columns[colIndex]\n\n        for (const row of rowData) {\n          setCellSpan(row.index, column.index, fixed, () => {\n            let result: ReturnType<ColumnCellSpanFn>\n\n            if (typeof column.cellSpan === 'function') {\n              result = column.cellSpan({\n                row: row.data,\n                index: row.index,\n                fixed: columnFixed\n              })\n            } else if (typeof state.cellSpan === 'function') {\n              result = state.cellSpan({\n                row: row.data,\n                rowIndex: row.index,\n                column,\n                columnIndex: column.index,\n                fixed: columnFixed\n              })\n            }\n\n            result = result! || { colSpan: 1, rowSpan: 1 }\n\n            const span = { colSpan: result.colSpan ?? 1, rowSpan: result.rowSpan ?? 1 }\n\n            span.colSpan = boundRange(span.colSpan, 0, columns.length - colIndex)\n            span.rowSpan = boundRange(span.rowSpan, 0, processedData.length - row.listIndex)\n\n            return span\n          })\n        }\n\n        for (const { prefix, summaries } of [\n          { prefix: 'af', summaries: aboveSummaries },\n          { prefix: 'bf', summaries: belowSummaries }\n        ]) {\n          for (let i = 0, len = summaries.length; i < len; ++i) {\n            const summary = summaries[i]\n\n            setCellSpan(\n              i,\n              column.index,\n              fixed,\n              () => {\n                let result: ReturnType<SummaryCellSpanFn>\n\n                if (typeof summary.cellSpan === 'function') {\n                  result = summary.cellSpan({\n                    column,\n                    index: column.index,\n                    fixed: columnFixed\n                  })\n                }\n\n                const { colSpan, rowSpan } = result! || { colSpan: 1, rowSpan: 1 }\n                const span = { colSpan: colSpan ?? 1, rowSpan: rowSpan ?? 1 }\n\n                span.colSpan = boundRange(span.colSpan, 0, columns.length - colIndex)\n                span.rowSpan = boundRange(span.rowSpan, 0, summaries.length - i)\n\n                return span\n              },\n              prefix\n            )\n          }\n        }\n      }\n    }\n  }\n\n  function getCurrentData() {\n    const { treeRowData, disabledTree, keyConfig } = state\n\n    if (disabledTree) {\n      return treeRowData.map(row => ({ ...row.data }))\n    }\n\n    return mapTree(treeRowData, row => ({ ...row.data }), {\n      childField: keyConfig.children as 'children'\n    })\n  }\n\n  function queryRow(keyOrData: Key | Record<any, any>) {\n    const { dataKey, rowMap, idMaps } = state\n\n    let key: Key\n\n    if (typeof keyOrData === 'object') {\n      key = idMaps.get(keyOrData) ?? keyOrData[dataKey]\n    } else {\n      key = keyOrData\n    }\n\n    return isNull(key) ? undefined : rowMap.get(key)\n  }\n\n  type Store = Readonly<{\n    state: Readonly<typeof state>,\n    getters: Readonly<typeof getters>,\n    mutations: Readonly<typeof mutations>\n  }>\n\n  return { state, getters, mutations } as Store\n}\n\nexport type TableStore = ReturnType<typeof useStore>\n","<script setup lang=\"ts\">\nimport { NativeScroll } from '@/components/native-scroll'\nimport { Renderer } from '@/components/renderer'\nimport { Scrollbar } from '@/components/scrollbar'\n\nimport {\n  computed,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  renderSlot,\n  toRef,\n  watch\n} from 'vue'\n\nimport TableColumn from './table-column'\nimport TableColumnGroup from './table-column-group'\nimport TableSummary from './table-summary'\nimport TableHead from './table-head.vue'\nimport TableBody from './table-body.vue'\nimport TableFoot from './table-foot.vue'\nimport { emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport {\n  debounce,\n  debounceMinor,\n  getLast,\n  isDefined,\n  isValidNumber,\n  listToMap,\n  nextFrameOnce,\n  noop,\n  removeArrayItem,\n  toNumber\n} from '@vexip-ui/utils'\nimport { useSetTimeout } from '@vexip-ui/hooks'\nimport { tableProps } from './props'\nimport { useStore } from './store'\nimport { DropType, TABLE_ACTIONS, TABLE_SLOTS, TABLE_STORE } from './symbol'\n\nimport type { Slots } from 'vue'\nimport type { StyleType } from '@vexip-ui/config'\nimport type { NativeScrollExposed, NativeScrollPayload } from '@/components/native-scroll'\nimport type { ScrollbarExposed } from '@/components/scrollbar'\nimport type {\n  Key,\n  MouseEventType,\n  MoveEventType,\n  StoreOptions,\n  TableCellPayload,\n  TableColResizePayload,\n  TableColumnGroupOptions,\n  TableColumnOptions,\n  TableFootPayload,\n  TableHeadPayload,\n  TableKeyConfig,\n  TableRowInstance,\n  TableRowPayload,\n  TableRowState,\n  TableSlots,\n  TableSummaryOptions\n} from './symbol'\n\nconst defaultKeyConfig: Required<TableKeyConfig> = {\n  id: 'id',\n  children: 'children',\n  checked: 'checked',\n  height: 'height',\n  expanded: 'expanded',\n  treeExpanded: 'treeExpanded'\n}\n\ndefineOptions({ name: 'Table' })\n\nconst _props = defineProps(tableProps)\nconst props = useProps('table', _props, {\n  locale: null,\n  columns: {\n    default: () => [],\n    static: true\n  },\n  summaries: {\n    default: () => [],\n    static: true\n  },\n  data: {\n    default: () => [],\n    static: true\n  },\n  width: null,\n  height: null,\n  minHeight: null,\n  rowClass: null,\n  rowStyle: null,\n  rowAttrs: null,\n  stripe: false,\n  border: false,\n  highlight: false,\n  useXBar: false,\n  useYBar: false,\n  barFade: 1500,\n  rowDraggable: false,\n  rowHeight: {\n    default: null,\n    validator: value => value > 0\n  },\n  rowMinHeight: {\n    default: 36,\n    validator: value => value > 0\n  },\n  virtual: false,\n  bufferCount: {\n    default: 5,\n    validator: value => value >= 0\n  },\n  scrollClass: () => ({}),\n  expandRenderer: {\n    default: null,\n    isFunc: true\n  },\n  currentPage: {\n    default: 1,\n    validator: value => value > 0,\n    static: true\n  },\n  pageSize: 0,\n  transparent: false,\n  tooltipTheme: {\n    default: 'dark',\n    validator: value => ['light', 'dark'].includes(value)\n  },\n  tooltipWidth: 500,\n  singleSorter: false,\n  singleFilter: false,\n  cellClass: null,\n  cellStyle: null,\n  cellAttrs: null,\n  headClass: null,\n  headStyle: null,\n  headAttrs: null,\n  footClass: null,\n  footStyle: null,\n  footAttrs: null,\n  customSorter: false,\n  customFilter: false,\n  keyConfig: () => ({}),\n  disabledTree: false,\n  rowIndent: '16px',\n  noCascaded: false,\n  colResizable: false,\n  cellSpan: {\n    default: null,\n    isFunc: true\n  },\n  sidePadding: 0,\n  icons: () => ({}),\n  borderWidth: 1,\n  dataFilter: {\n    default: null,\n    isFunc: true\n  },\n  noTransition: false,\n  ellipsis: false,\n  slots: () => ({})\n})\n\n// only for dnd end payload\nconst emit = defineEmits(['update:data'])\n\nconst slots = defineSlots<TableSlots>()\n\nconst nh = useNameHelper('table')\nconst { timer } = useSetTimeout()\n\nconst bodyHeight = ref<number | undefined>(props.height)\nconst bodyMinHeight = ref(props.height || 0)\nconst xScrollEnabled = ref(false)\nconst yScrollEnabled = ref(false)\nconst xScrollPercent = ref(0)\nconst yScrollPercent = ref(0)\nconst headHeight = ref(0)\nconst footHeight = ref(0)\nconst indicatorShow = ref(false)\nconst indicatorType = ref(DropType.BEFORE)\nconst tempColumns = reactive(new Set<TableColumnGroupOptions | TableColumnOptions>())\nconst tempSummaries = reactive(new Set<TableSummaryOptions>())\nconst tableWidth = ref<number | string>()\nconst hasDragColumn = ref(false)\nconst bodyWidth = ref(0)\n\nconst wrapper = ref<HTMLElement>()\nconst mainScroll = ref<NativeScrollExposed>()\nconst xHeadScroll = ref<NativeScrollExposed>()\nconst xAboveScroll = ref<NativeScrollExposed>()\nconst xBelowScroll = ref<NativeScrollExposed>()\nconst thead = ref<HTMLElement>()\nconst aboveTfoot = ref<HTMLElement>()\nconst belowTfoot = ref<HTMLElement>()\nconst indicator = ref<HTMLElement>()\nconst xScrollbar = ref<ScrollbarExposed>()\nconst yScrollbar = ref<ScrollbarExposed>()\n\nlet isMounted = false\n\nconst locale = useLocale('table', toRef(props, 'locale'))\nconst keyConfig = computed(() => ({ ...defaultKeyConfig, ...props.keyConfig }))\nconst allColumns = computed(() => Array.from(tempColumns))\nconst allSummaries = computed(() => Array.from(tempSummaries))\n\nconst syncToStoreProps = [\n  'rowClass',\n  'rowStyle',\n  'rowAttrs',\n  'cellClass',\n  'cellStyle',\n  'cellAttrs',\n  'headClass',\n  'headStyle',\n  'headAttrs',\n  'footClass',\n  'footStyle',\n  'footAttrs',\n  'border',\n  'stripe',\n  'highlight',\n  'currentPage',\n  'pageSize',\n  'rowHeight',\n  'rowMinHeight',\n  'rowDraggable',\n  'tooltipTheme',\n  'tooltipWidth',\n  'singleSorter',\n  'singleFilter',\n  'customSorter',\n  'customFilter',\n  'noCascaded',\n  'colResizable',\n  'expandRenderer',\n  'cellSpan',\n  'sidePadding',\n  'borderWidth',\n  'dataFilter',\n  'ellipsis'\n] as const\n\nconst store = useStore({\n  ...(syncToStoreProps.reduce(\n    (prev, current) => ((prev[current] = props[current]), prev),\n    {} as any\n  ) as StoreOptions),\n  columns: allColumns.value,\n  summaries: allSummaries.value,\n  data: props.data,\n  dataKey: keyConfig.value.id,\n  virtual: props.virtual,\n  locale: locale.value,\n  keyConfig: keyConfig.value,\n  disabledTree: props.disabledTree,\n  colResizable: props.colResizable === true ? 'lazy' : props.colResizable,\n  sidePadding: Array.isArray(props.sidePadding)\n    ? props.sidePadding\n    : [props.sidePadding, props.sidePadding]\n})\n\nprovide(TABLE_STORE, store)\nprovide(TABLE_ACTIONS, {\n  increaseColumn,\n  decreaseColumn,\n  increaseSummary,\n  decreaseSummary,\n  getTableElement,\n  refreshXScroll,\n  emitRowCheck,\n  emitAllRowCheck,\n  emitRowExpand,\n  emitRowTreeExpand,\n  emitRowFilter,\n  emitRowSort,\n  handleRowDragStart,\n  handleRowDragOver,\n  handleRowDrop,\n  handleRowDragEnd,\n  emitRowEvent,\n  emitCellEvent,\n  emitHeadEvent,\n  emitColResize,\n  emitFootEvent,\n  hasIcon: name => !!props.icons[name],\n  getIcon: name => props.icons[name],\n  renderTableSlot,\n  runInLocked,\n  updateColumns: () => debounceMinor(updateColumns),\n  setColumnProp,\n  updateSummaries: () => debounceMinor(updateSummaries),\n  setSummaryProp\n})\nprovide(TABLE_SLOTS, slots as Slots)\n\nconst { state, getters, mutations } = store\n\nconst mergedLocked = computed(() => props.noTransition || state.locked || state.barScrolling)\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('stripe')]: props.stripe,\n    [nh.bm('border')]: props.border,\n    [nh.bm('highlight')]: props.highlight,\n    [nh.bm('use-y-bar')]: props.useYBar,\n    [nh.bm('transparent')]: props.transparent,\n    [nh.bm('virtual')]: props.virtual,\n    [nh.bm('col-resizable')]: props.colResizable,\n    [nh.bm('col-resizing')]: state.colResizing,\n    [nh.bm('locked')]: mergedLocked.value,\n    [nh.bm('above-foot')]: state.aboveSummaries.length,\n    [nh.bm('below-foot')]: state.belowSummaries.length,\n    [nh.bm('using-bar')]: state.barScrolling\n  }\n})\nconst style = computed(() => {\n  const width = tableWidth.value ?? props.width\n  const [padLeft, padRight] = state.sidePadding\n\n  const style: StyleType = {\n    [nh.cv('row-indent-width')]:\n      typeof props.rowIndent === 'number' ? `${props.rowIndent}px` : props.rowIndent,\n    [nh.cv('b-width')]: `${props.borderWidth}px`,\n    [nh.cv('expanded-width')]: `${bodyWidth.value}px`\n  }\n\n  if (padLeft) {\n    style[nh.cv('side-pad-left')] = `${padLeft}px`\n  }\n\n  if (padRight) {\n    style[nh.cv('side-pad-right')] = `${padRight}px`\n  }\n\n  if (isDefined(width)) {\n    if (typeof width === 'number' || isValidNumber(width, true)) {\n      style.width = `${width}px`\n      style.minWidth = `${width}px`\n    } else {\n      style.width = width\n    }\n  }\n\n  return style\n})\nconst useXScroll = computed(() => {\n  return !!(\n    isDefined(props.width) ||\n    state.leftFixedColumns.length ||\n    state.rightFixedColumns.length\n  )\n})\nconst bodyScrollHeight = computed(() => {\n  const { totalHeight } = state\n\n  return bodyHeight.value ? Math.min(bodyHeight.value, totalHeight) : undefined\n})\nconst xBarLength = computed(() => mainScroll.value?.xBarLength || 35)\nconst yBarLength = computed(() => {\n  const { totalHeight } = state\n\n  if (bodyScrollHeight.value && totalHeight) {\n    return Math.max(Math.min((bodyScrollHeight.value / totalHeight) * 100, 99), 5) || 35\n  }\n\n  return 35\n})\nconst totalWidths = computed(() => {\n  return (\n    (getLast(getters.totalWidths) || 0) + (state.sidePadding[0] || 0) + (state.sidePadding[1] || 0)\n  )\n})\nconst leftFixedActive = computed(() => xScrollEnabled.value && xScrollPercent.value > 0)\nconst rightFixedActive = computed(() => xScrollEnabled.value && xScrollPercent.value < 100)\n\nconst {\n  setColumns,\n  setSummaries,\n  setData,\n  setDataKey,\n  setTableWidth,\n  setBodyYScroll,\n  setBodyXScroll,\n  setRenderRows,\n  setVirtual,\n  setLocale,\n  setDragging,\n  setKeyConfig,\n  setDisabledTree,\n  setLocked,\n  setBarScrolling,\n  clearSort,\n  clearFilter,\n  refreshRowIndex,\n  clearCheckAll,\n  getParentRow,\n  getCurrentData,\n  flatTreeRows,\n  refreshRowDepth,\n  queryRow,\n  handleCheck,\n  setTreeExpanded\n} = mutations\n\nwatch(allColumns, updateColumns)\nwatch(allSummaries, updateSummaries)\nwatch(() => keyConfig.value.id, setDataKey)\nwatch(() => props.data, forceRefreshData, { deep: true })\nwatch(() => props.width, computeTableWidth)\nwatch([() => props.height, () => props.borderWidth], () => {\n  nextTick(computeBodyHeight)\n})\nwatch(locale, setLocale, { deep: true })\nwatch(\n  () => props.virtual,\n  value => {\n    setVirtual(value)\n    setData(props.data)\n    refreshPercentScroll()\n  }\n)\nwatch(\n  keyConfig,\n  config => {\n    setKeyConfig(config)\n    setData(props.data)\n  },\n  { deep: true }\n)\nwatch(\n  () => props.disabledTree,\n  value => {\n    setDisabledTree(value)\n    setData(props.data)\n  }\n)\nwatch([() => props.rowHeight, () => props.rowMinHeight], () => {\n  refresh()\n})\n\nfor (const prop of syncToStoreProps) {\n  const watchCallback =\n    mutations[\n      `set${prop.charAt(0).toLocaleUpperCase()}${prop.slice(1)}` as `set${Capitalize<typeof prop>}`\n    ]\n\n  watch(() => props[prop], watchCallback as any)\n}\n\nfunction syncBarScroll() {\n  xScrollbar.value?.handleScroll(xScrollPercent.value)\n  yScrollbar.value?.handleScroll(yScrollPercent.value)\n}\n\nconst handlerResize = debounce(refresh)\n\nonMounted(() => {\n  isMounted = true\n\n  watch(bodyScrollHeight, refreshPercentScroll)\n  refresh()\n  window.addEventListener('resize', handlerResize)\n  nextTick(() => {\n    hasDragColumn.value = getters.hasDragColumn\n  })\n\n  if (mainScroll.value) {\n    xScrollEnabled.value = mainScroll.value.enableXScroll\n    yScrollEnabled.value = mainScroll.value.enableYScroll\n  }\n})\n\nonBeforeUnmount(() => {\n  isMounted = false\n\n  window.removeEventListener('resize', handlerResize)\n})\n\ndefineExpose({\n  bodyHeight,\n  xScrollEnabled,\n  yScrollEnabled,\n  xScrollPercent,\n  yScrollPercent,\n  headHeight,\n  footHeight,\n  indicatorShow,\n  bodyScrollHeight,\n  totalWidths,\n  totalHeight: computed(() => state.totalHeight),\n  locked: mergedLocked,\n\n  store,\n\n  wrapper,\n  mainScroll,\n  xHeadScroll,\n  xAboveScroll,\n  xBelowScroll,\n  thead,\n  aboveTfoot,\n  belowTfoot,\n  indicator,\n  xScrollbar,\n  yScrollbar,\n\n  clearSort,\n  clearFilter,\n  clearSelected: clearCheckAll,\n  refresh,\n  refreshData: forceRefreshData,\n  getSelected,\n  getData: getCurrentData,\n  selectRow: setRowChecked,\n  treeExpandRow: setRowTreeExpanded\n})\n\nfunction forceRefreshData(data = props.data) {\n  return runInLocked(() => {\n    setData(data)\n    nextTick(() => computeRenderRows(true))\n    refreshPercentScroll()\n  })\n}\n\nfunction computeTableWidth() {\n  const width = props.width\n\n  if (isDefined(width)) {\n    if (typeof width === 'string' && parseFloat(width).toString() !== width) {\n      tableWidth.value = width\n    } else {\n      tableWidth.value = `${toNumber(width)}px`\n    }\n  }\n\n  nextTick(() => {\n    mainScroll.value?.content && setTableWidth(mainScroll.value.content.offsetWidth)\n    refreshXScroll()\n  })\n}\n\nfunction computeBodyHeight() {\n  const height = props.height\n  const minHeight = props.minHeight\n  const borderWidth = props.borderWidth\n\n  let fixedHeight = 0\n\n  if (thead.value || aboveTfoot.value || belowTfoot.value) {\n    if (thead.value) {\n      fixedHeight = thead.value.offsetHeight\n    }\n\n    if (aboveTfoot.value) {\n      fixedHeight += aboveTfoot.value.offsetHeight\n    }\n\n    if (belowTfoot.value) {\n      fixedHeight = belowTfoot.value.offsetHeight\n    }\n  } else {\n    // one row as head placeholder\n    fixedHeight = props.rowHeight || props.rowMinHeight\n  }\n\n  fixedHeight += 2 * borderWidth\n\n  if (isDefined(height)) {\n    bodyHeight.value = height - fixedHeight\n  } else {\n    bodyHeight.value = undefined\n  }\n\n  if (isDefined(minHeight)) {\n    bodyMinHeight.value = Math.min(minHeight, height ?? Infinity) - fixedHeight\n  } else {\n    bodyMinHeight.value = 0\n  }\n}\n\nfunction handleMainScroll(payload: NativeScrollPayload) {\n  if (state.barScrolling) return\n\n  if (payload.type !== 'vertical') {\n    handleXScroll(payload)\n  }\n\n  if (payload.type !== 'horizontal') {\n    handleYScroll(payload)\n  }\n}\n\nfunction handleXScroll({ clientX, percentX }: { clientX: number, percentX: number }) {\n  if (state.barScrolling) return\n\n  xScrollPercent.value = percentX\n  setBodyXScroll(clientX)\n  syncBarScroll()\n  emitEvent(props.onScroll, {\n    type: 'horizontal',\n    client: clientX,\n    percent: percentX\n  })\n}\n\nfunction handleYScroll({ clientY, percentY }: { clientY: number, percentY: number }) {\n  if (state.barScrolling) return\n\n  yScrollPercent.value = percentY\n  setBodyYScroll(clientY)\n  syncBarScroll()\n  emitYScroll(clientY, percentY)\n}\n\nfunction handleXBarScroll(percent: number) {\n  if (!mainScroll.value) return\n\n  const client = (mainScroll.value.xScrollLimit * percent) / 100\n\n  xScrollPercent.value = percent\n  setBodyXScroll(client)\n  emitEvent(props.onScroll, { type: 'horizontal', client, percent })\n}\n\nfunction handleYBarScroll(percent: number) {\n  const { totalHeight } = state\n  const client = (percent * (totalHeight - (bodyScrollHeight.value ?? 0))) / 100\n\n  yScrollPercent.value = percent\n  setBodyYScroll(client)\n  emitYScroll(client, percent)\n}\n\nfunction emitYScroll(client: number, percent: number) {\n  runInLocked()\n  nextFrameOnce(computeRenderRows)\n  emitEvent(props.onScroll, { type: 'vertical', client, percent })\n}\n\nfunction handleResize() {\n  if (mainScroll.value?.content) {\n    bodyWidth.value = mainScroll.value.content.offsetWidth\n  }\n\n  isMounted && refresh()\n}\n\nfunction increaseColumn(column: TableColumnOptions) {\n  tempColumns.add(column)\n}\n\nfunction decreaseColumn(column: TableColumnOptions) {\n  tempColumns.delete(column)\n}\n\nfunction increaseSummary(summary: TableSummaryOptions) {\n  tempSummaries.add(summary)\n}\n\nfunction decreaseSummary(summary: TableSummaryOptions) {\n  tempSummaries.delete(summary)\n}\n\nfunction updateColumns() {\n  runInLocked(() => {\n    setColumns(allColumns.value)\n    isMounted && computeTableWidth()\n    nextTick(() => {\n      hasDragColumn.value = getters.hasDragColumn\n    })\n  })\n}\n\nfunction setColumnProp(key: Key, prop: string, value: any) {\n  mutations.setColumnProp(key, prop, value)\n}\n\nfunction updateSummaries() {\n  runInLocked(() => {\n    setSummaries(allSummaries.value)\n  })\n}\n\nfunction setSummaryProp(key: Key, prop: string, value: any) {\n  mutations.setSummaryProp(key, prop, value)\n}\n\nfunction getTableElement() {\n  return wrapper.value\n}\n\nfunction refreshXScroll() {\n  mainScroll.value?.refresh()\n  xHeadScroll.value?.refresh()\n  xAboveScroll.value?.refresh()\n  xBelowScroll.value?.refresh()\n}\n\nfunction emitRowCheck(payload: TableRowPayload & { checked: boolean }) {\n  emitEvent(props.onRowCheck, payload)\n}\n\nfunction emitAllRowCheck(checked: boolean, partial: boolean) {\n  emitEvent(props.onRowCheckAll, checked, partial)\n}\n\nfunction emitRowExpand(payload: TableRowPayload & { expanded: boolean }) {\n  emitEvent(props.onRowExpand, payload)\n}\n\nfunction emitRowTreeExpand(payload: TableRowPayload & { expanded: boolean }) {\n  emitEvent(props.onRowTreeExpand, payload)\n}\n\nfunction emitRowFilter() {\n  const { columns, filters } = state\n  const columnMap = listToMap(columns, 'key')\n  const profiles = Array.from(filters.keys())\n    .filter(key => filters.get(key)!.active)\n    .map(key => {\n      const column = columnMap[key as string]\n\n      return {\n        name: column.name,\n        key: column.key,\n        meta: column.meta!,\n        active: filters.get(key)!.active!\n      }\n    })\n\n  computeRenderRows(true)\n  emitEvent(\n    props.onRowFilter,\n    profiles,\n    getters.filteredData.map(row => row.data)\n  )\n}\n\nfunction emitRowSort() {\n  const { columns, sorters } = state\n  const columnMap = listToMap(columns, 'key')\n  const profiles = Array.from(sorters.keys())\n    .filter(key => sorters.get(key)!.type)\n    .map(key => {\n      const column = columnMap[key as string]\n      const sorter = sorters.get(key)!\n\n      return {\n        name: column.name,\n        key: column.key,\n        meta: column.meta!,\n        type: sorter.type!,\n        order: sorter.order\n      }\n    })\n\n  computeRenderRows(true)\n  emitEvent(\n    props.onRowSort,\n    profiles,\n    getters.sortedData.map(row => row.data)\n  )\n}\n\nlet dragState: {\n  draggingRow: TableRowState,\n  tableRect: DOMRect,\n  willDropRow: TableRowState | null,\n  dropType: DropType,\n  dropped: boolean\n} | null\n\nfunction handleRowDragStart(rowInstance: TableRowInstance, event: DragEvent) {\n  dragState = {\n    draggingRow: rowInstance.row,\n    tableRect: wrapper.value!.getBoundingClientRect(),\n    willDropRow: null,\n    dropType: DropType.BEFORE,\n    dropped: false\n  }\n\n  setDragging(true)\n  emitEvent(props.onRowDragStart, rowInstance.row.data, event)\n}\n\nfunction handleRowDragOver(rowInstance: TableRowInstance, event: DragEvent) {\n  if (!dragState || !rowInstance.el) return\n\n  const dropRowRect = rowInstance.el.getBoundingClientRect()\n  const tableRect = dragState.tableRect\n  const prevPercent = state.disabledTree ? 0.5 : 0.25\n  const nextPercent = state.disabledTree ? 0.5 : 0.75\n  const distance = event.clientY - dropRowRect.top\n  const dropRowHeight = dropRowRect.height\n\n  let dropType: DropType\n  let indicatorTop = -9999\n  let isIndicatorShow = true\n\n  if (distance < dropRowHeight * prevPercent) {\n    dropType = DropType.BEFORE\n    indicatorTop = dropRowRect.top - tableRect.top\n  } else if (distance >= dropRowHeight * nextPercent) {\n    dropType = DropType.AFTER\n    indicatorTop = dropRowRect.bottom - tableRect.top\n  } else {\n    dropType = DropType.INNER\n    isIndicatorShow = false\n  }\n\n  if (indicator.value) {\n    indicator.value.style.top = `${indicatorTop - 2}px`\n  }\n\n  dragState.willDropRow = rowInstance.row\n  dragState.dropType = dropType\n\n  indicatorShow.value = isIndicatorShow\n  indicatorType.value = dropType\n\n  emitEvent(props.onRowDragOver, rowInstance.row.data, event)\n}\n\nfunction isLeftInsideRight(left: TableRowState, right: TableRowState) {\n  if (!left || !right) return true\n\n  while (left) {\n    if (left === right || left.key === right.key) {\n      return true\n    }\n\n    left = getParentRow(left.key)!\n  }\n\n  return false\n}\n\nfunction handleRowDrop(rowInstance: TableRowInstance, event: DragEvent) {\n  if (!dragState) return\n\n  const { draggingRow, willDropRow, dropType } = dragState\n\n  if (!willDropRow || isLeftInsideRight(willDropRow, draggingRow)) return\n\n  let currentKey: Key\n  let parent: TableRowState | null\n\n  if (draggingRow) {\n    parent = getParentRow(draggingRow.key)\n\n    if (!parent) {\n      parent = {\n        children: state.treeRowData\n      } as TableRowState\n    }\n\n    currentKey = draggingRow.key\n    removeArrayItem(parent.children, item => item.key === currentKey)\n\n    if (!parent.children?.length) {\n      parent.treeExpanded = false\n    }\n  }\n\n  if (dropType === DropType.INNER) {\n    if (!Array.isArray(willDropRow.children)) {\n      willDropRow.children = []\n    }\n\n    const children = Array.from(willDropRow.children)\n\n    children.push(draggingRow)\n\n    willDropRow.children = children\n    willDropRow.treeExpanded = true\n    draggingRow.parent = willDropRow.key\n  } else {\n    currentKey = willDropRow.key\n    parent = getParentRow(willDropRow.key)\n\n    if (!parent) {\n      parent = {\n        children: state.treeRowData\n      } as TableRowState\n    }\n\n    const index = parent.children.findIndex(row => row.key === currentKey)\n\n    if (~index) {\n      parent.children.splice(+(dropType === DropType.AFTER) + index, 0, draggingRow)\n\n      draggingRow.parent = parent.key\n    }\n  }\n\n  dragState.dropped = true\n\n  refreshRowDepth()\n  flatTreeRows()\n  refreshRowIndex()\n  emitEvent(props.onRowDrop, rowInstance.row.data, dropType!, event)\n}\n\nfunction handleRowDragEnd(event: DragEvent) {\n  if (!dragState) return\n\n  const { draggingRow, dropped } = dragState\n\n  dragState = null\n  indicatorShow.value = false\n\n  nextTick(() => {\n    const allDataPayload = dropped ? getCurrentData() : state.data\n\n    setDragging(false)\n    dropped && emit('update:data', allDataPayload)\n    emitEvent(props.onRowDragEnd, draggingRow.data, allDataPayload, event)\n  })\n}\n\nfunction emitRowEvent(type: MouseEventType, payload: TableRowPayload) {\n  emitEvent(props[`onRow${type}`], payload)\n}\n\nfunction emitCellEvent(type: MouseEventType, payload: TableCellPayload) {\n  emitEvent(props[`onCell${type}`], payload)\n}\n\nfunction emitHeadEvent(type: MouseEventType, payload: TableHeadPayload) {\n  emitEvent(props[`onHead${type}`], payload)\n}\n\nfunction emitColResize(type: MoveEventType, payload: TableColResizePayload) {\n  emitEvent(props[`onColResize${type}`], payload)\n}\n\nfunction emitFootEvent(type: MouseEventType, payload: TableFootPayload) {\n  emitEvent(props[`onFoot${type}`], payload)\n}\n\nfunction computeRenderRows(force = false) {\n  const { totalHeight, bodyYScroll, heightBITree } = state\n  const { processedData } = getters\n  const rowCount = processedData.length\n\n  if (!props.virtual) {\n    setRenderRows(0, rowCount, force)\n\n    return\n  }\n\n  const viewHeight = Math.max(\n    Math.min(bodyHeight.value || 0, bodyScrollHeight.value || 0),\n    bodyMinHeight.value\n  )\n\n  if (!viewHeight) {\n    setRenderRows(0, 0, force)\n  }\n\n  let viewStart = bodyYScroll\n  let viewEnd = bodyYScroll + viewHeight\n\n  if (viewEnd > totalHeight) {\n    viewEnd = totalHeight\n    viewStart = viewEnd - viewHeight\n  }\n\n  const start = heightBITree.boundIndex(viewStart)\n  const end = heightBITree.boundIndex(viewEnd)\n  const renderStart = Math.max(start - props.bufferCount, 0)\n  const renderEnd = Math.min(end + props.bufferCount + 1, rowCount)\n\n  setRenderRows(renderStart, renderEnd, force)\n}\n\nfunction refresh() {\n  return runInLocked(() => {\n    nextTick(computeTableWidth)\n    setTimeout(() => {\n      computeBodyHeight()\n      refreshPercentScroll()\n      nextFrameOnce(computeRenderRows)\n    }, 0)\n  })\n}\n\nasync function runInLocked(handler = noop, delay = 250) {\n  clearTimeout(timer.locked)\n\n  setLocked(true)\n  await handler()\n\n  return new Promise<void>(resolve => {\n    timer.locked = setTimeout(() => {\n      setLocked(false)\n      resolve()\n    }, delay)\n  })\n}\n\nfunction refreshPercentScroll() {\n  clearTimeout(timer.scroll)\n\n  timer.scroll = setTimeout(() => {\n    const { totalHeight, bodyYScroll } = state\n\n    yScrollPercent.value = Math.max(\n      Math.min((bodyYScroll / (totalHeight - (bodyScrollHeight.value ?? 0) || 1)) * 100, 100),\n      0\n    )\n    syncBarScroll()\n    nextTick(() => {\n      computeBodyHeight()\n    })\n    runInLocked()\n    nextFrameOnce(computeRenderRows)\n  }, 10)\n}\n\nfunction getSelected() {\n  const data = state.rowData\n  const selectedData = []\n\n  for (let i = 0, len = data.length; i < len; ++i) {\n    const row = data[i]\n\n    if (row.checked) {\n      selectedData.push(row.data)\n    }\n  }\n\n  return selectedData\n}\n\nfunction setRowChecked(keyOrData: Key | Record<any, any>, checked?: boolean) {\n  const row = queryRow(keyOrData)\n\n  if (!row || getters.disableCheckRows.has(row.key)) return\n\n  handleCheck(row.key, checked ?? !row.checked)\n}\n\nfunction setRowTreeExpanded(keyOrData: Key | Record<any, any>, expanded?: boolean) {\n  const row = queryRow(keyOrData)\n\n  if (!row) return\n\n  runInLocked()\n  setTreeExpanded(row.key, expanded ?? !row.treeExpanded)\n}\n\nfunction renderTableSlot({ name }: { name: string }) {\n  return renderSlot(slots as Slots, name)\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"table\"\n    :style=\"style\"\n    :aria-rowcount=\"props.data.length\"\n  >\n    <div v-show=\"false\" role=\"none\" aria-hidden>\n      <slot></slot>\n      <template\n        v-for=\"(column, index) in props.columns\"\n        :key=\"(column as TableColumnOptions).key ?? `__inner-column-${index}`\"\n      >\n        <TableColumnGroup v-if=\"'children' in column\" v-bind=\"column\"></TableColumnGroup>\n        <TableColumn v-else v-bind=\"column\" :id-key=\"column.key\"></TableColumn>\n      </template>\n      <TableSummary\n        v-for=\"({ key, ...others }, index) in props.summaries\"\n        v-bind=\"others\"\n        :key=\"`__inner-summary-${index}`\"\n        :id-key=\"key\"\n      ></TableSummary>\n    </div>\n    <div ref=\"thead\" :class=\"nh.be('head-wrapper')\">\n      <NativeScroll\n        ref=\"xHeadScroll\"\n        inherit\n        mode=\"horizontal\"\n        scroll-only\n        :class=\"[nh.be('wrapper'), props.scrollClass.horizontal]\"\n        :scroll-x=\"state.bodyXScroll\"\n        @scroll=\"handleXScroll\"\n      >\n        <div\n          v-if=\"state.leftFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'left')]: true,\n            [nh.bem('fixed', 'active')]: leftFixedActive\n          }\"\n        >\n          <TableHead fixed=\"left\"></TableHead>\n        </div>\n        <TableHead></TableHead>\n        <div\n          v-if=\"state.rightFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'right')]: true,\n            [nh.bem('fixed', 'active')]: rightFixedActive\n          }\"\n        >\n          <TableHead fixed=\"right\"></TableHead>\n        </div>\n      </NativeScroll>\n    </div>\n    <div\n      v-if=\"state.aboveSummaries.length\"\n      ref=\"aboveTfoot\"\n      :class=\"[nh.be('foot-wrapper'), nh.bem('foot-wrapper', 'above')]\"\n    >\n      <NativeScroll\n        ref=\"xAboveScroll\"\n        inherit\n        mode=\"horizontal\"\n        scroll-only\n        :class=\"[nh.be('wrapper'), props.scrollClass.horizontal]\"\n        :scroll-x=\"state.bodyXScroll\"\n        @scroll=\"handleXScroll\"\n      >\n        <div\n          v-if=\"state.leftFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'left')]: true,\n            [nh.bem('fixed', 'active')]: leftFixedActive\n          }\"\n        >\n          <TableFoot fixed=\"left\" above></TableFoot>\n        </div>\n        <TableFoot above></TableFoot>\n        <div\n          v-if=\"state.rightFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'right')]: true,\n            [nh.bem('fixed', 'active')]: rightFixedActive\n          }\"\n        >\n          <TableFoot fixed=\"right\" above></TableFoot>\n        </div>\n      </NativeScroll>\n    </div>\n    <div\n      :class=\"[\n        nh.be('body-wrapper'),\n        state.totalHeight >= bodyMinHeight && nh.bem('body-wrapper', 'scrolled')\n      ]\"\n      :style=\"{\n        ...(!bodyScrollHeight && state.totalHeight\n          ? {\n            height: `${state.totalHeight}px`,\n            transition:\n              props.noTransition || state.locked\n                ? undefined\n                : `height ${nh.gnv('transition-base')}`\n          }\n          : undefined),\n        minHeight: `${bodyMinHeight}px`\n      }\"\n    >\n      <NativeScroll\n        ref=\"mainScroll\"\n        inherit\n        mode=\"both\"\n        scroll-only\n        observe-deep\n        :class=\"[nh.be('wrapper'), props.scrollClass.major]\"\n        :bar-class=\"nh.bem('bar', 'horizontal')\"\n        :height=\"bodyScrollHeight\"\n        :scroll-x=\"state.bodyXScroll\"\n        :scroll-y=\"state.bodyYScroll\"\n        @scroll=\"handleMainScroll\"\n        @x-enabled-change=\"xScrollEnabled = $event\"\n        @y-enabled-change=\"yScrollEnabled = $event\"\n        @resize=\"handleResize\"\n      >\n        <div\n          v-if=\"state.leftFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'left')]: true,\n            [nh.bem('fixed', 'active')]: leftFixedActive\n          }\"\n          :style=\"{ minHeight: `${state.totalHeight}px` }\"\n        >\n          <TableBody fixed=\"left\">\n            <template v-if=\"slots.empty || props.slots.empty\" #empty=\"{ isFixed }\">\n              <slot name=\"empty\" :is-fixed=\"isFixed\">\n                <Renderer :renderer=\"props.slots.empty\" :data=\"{ isFixed }\"></Renderer>\n              </slot>\n            </template>\n          </TableBody>\n        </div>\n        <TableBody>\n          <template v-if=\"slots.empty || props.slots.empty\" #empty=\"{ isFixed }\">\n            <slot name=\"empty\" :is-fixed=\"isFixed\">\n              <Renderer :renderer=\"props.slots.empty\" :data=\"{ isFixed }\"></Renderer>\n            </slot>\n          </template>\n        </TableBody>\n        <div\n          v-if=\"state.rightFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'right')]: true,\n            [nh.bem('fixed', 'active')]: rightFixedActive\n          }\"\n          :style=\"{ minHeight: `${state.totalHeight}px` }\"\n        >\n          <TableBody fixed=\"right\">\n            <template v-if=\"slots.empty || props.slots.empty\" #empty=\"{ isFixed }\">\n              <slot name=\"empty\" :is-fixed=\"isFixed\">\n                <Renderer :renderer=\"props.slots.empty\" :data=\"{ isFixed }\"></Renderer>\n              </slot>\n            </template>\n          </TableBody>\n        </div>\n      </NativeScroll>\n    </div>\n    <div\n      v-if=\"state.belowSummaries.length\"\n      ref=\"belowTfoot\"\n      :class=\"[nh.be('foot-wrapper'), nh.bem('foot-wrapper', 'below')]\"\n    >\n      <NativeScroll\n        ref=\"xBelowScroll\"\n        inherit\n        mode=\"horizontal\"\n        scroll-only\n        :class=\"[nh.be('wrapper'), props.scrollClass.horizontal]\"\n        :bar-class=\"nh.bem('bar', 'horizontal')\"\n        :bar-fade=\"props.barFade\"\n        :scroll-x=\"state.bodyXScroll\"\n        @scroll=\"handleXScroll\"\n      >\n        <div\n          v-if=\"state.leftFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'left')]: true,\n            [nh.bem('fixed', 'active')]: leftFixedActive\n          }\"\n        >\n          <TableFoot fixed=\"left\"></TableFoot>\n        </div>\n        <TableFoot></TableFoot>\n        <div\n          v-if=\"state.rightFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'right')]: true,\n            [nh.bem('fixed', 'active')]: rightFixedActive\n          }\"\n        >\n          <TableFoot fixed=\"right\"></TableFoot>\n        </div>\n      </NativeScroll>\n    </div>\n    <Scrollbar\n      v-if=\"props.useXBar && useXScroll\"\n      ref=\"xScrollbar\"\n      inherit\n      placement=\"bottom\"\n      :class=\"nh.bem('bar', 'horizontal')\"\n      :fade=\"props.barFade\"\n      :disabled=\"!xScrollEnabled\"\n      :bar-length=\"xBarLength\"\n      :style=\"{ bottom: `${footHeight}px` }\"\n      @scroll-start=\"setBarScrolling(true)\"\n      @scroll=\"handleXBarScroll\"\n      @scroll-end=\"setBarScrolling(false)\"\n    ></Scrollbar>\n    <Scrollbar\n      v-if=\"props.useYBar && bodyScrollHeight\"\n      ref=\"yScrollbar\"\n      inherit\n      placement=\"right\"\n      :class=\"nh.bem('bar', 'vertical')\"\n      :fade=\"props.barFade\"\n      :disabled=\"!yScrollEnabled\"\n      :bar-length=\"yBarLength\"\n      :style=\"{ top: `${headHeight}px`, bottom: `${footHeight}px` }\"\n      @scroll-start=\"setBarScrolling(true)\"\n      @scroll=\"handleYBarScroll\"\n      @scroll-end=\"setBarScrolling(false)\"\n    ></Scrollbar>\n    <div\n      v-if=\"props.rowDraggable || hasDragColumn\"\n      v-show=\"indicatorShow\"\n      ref=\"indicator\"\n      :class=\"[\n        nh.be('indicator'),\n        indicatorType === 'before' && nh.bem('indicator', 'before'),\n        indicatorType === 'after' && nh.bem('indicator', 'after')\n      ]\"\n    ></div>\n    <div\n      v-if=\"state.colResizable === 'lazy'\"\n      v-show=\"state.colResizing\"\n      :class=\"nh.be('resize-indicator')\"\n      :style=\"{ left: `${state.resizeLeft}px` }\"\n    ></div>\n  </div>\n</template>\n","import type {\n  Data,\n  TableColumnOptions,\n  TableFilterOptions,\n  TableSorterOptions,\n  TableSummaryOptions\n} from './symbol'\n\nexport function defineTableFilter<D = Data, Val extends string | number = string | number>(\n  filter: TableFilterOptions<D, Val>\n) {\n  return filter as TableFilterOptions<any, any>\n}\n\nexport function defineTableSorter<D = Data>(sorter: TableSorterOptions<D>) {\n  return sorter as TableSorterOptions<any>\n}\n\nexport function defineTableColumn<D = Data, Val extends string | number = string | number>(\n  column: TableColumnOptions<D, Val>\n) {\n  return column\n}\n\nexport function defineTableColumns<D = Data, Val extends string | number = string | number>(\n  columns: TableColumnOptions<D, Val>[]\n) {\n  return columns\n}\n\nexport function defineTableSummary<D = Data, Val extends string | number = string | number>(\n  summary: TableSummaryOptions<D, Val>\n) {\n  return summary\n}\n\nexport function defineTableSummaries<D = Data, Val extends string | number = string | number>(\n  summaries: TableSummaryOptions<D, Val>[]\n) {\n  return summaries\n}\n\nexport {\n  /** @deprecated Please use `defineTableFilter` to replace it */\n  defineTableFilter as defineFilter,\n  /** @deprecated Please use `defineTableSorter` to replace it */\n  defineTableSorter as defineSorter,\n  /** @deprecated Please use `defineTableColumn` to replace it */\n  defineTableColumn as defineColumn,\n  /** @deprecated Please use `defineTableColumns` to replace it */\n  defineTableColumns as defineColumns,\n  /** @deprecated Please use `defineTableSummary` to replace it */\n  defineTableSummary as defineSummary,\n  /** @deprecated Please use `defineTableSummaries` to replace it */\n  defineTableSummaries as defineSummaries\n}\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\nimport { TabNav } from '@/components/tab-nav'\nimport { TabNavItem } from '@/components/tab-nav-item'\n\nimport { computed, onMounted, provide, reactive, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { debounceMinor, isFunction, isNull } from '@vexip-ui/utils'\nimport { tabsProps } from './props'\nimport { TABS_STATE } from './symbol'\n\nimport type { ItemState, TabsSlots } from './symbol'\n\ntype ChangeEvent = (label: string | number) => void\n\ndefineOptions({ name: 'Tabs' })\n\nconst _props = defineProps(tabsProps)\nconst props = useProps('tabs', _props, {\n  active: {\n    default: null,\n    static: true\n  },\n  card: false,\n  align: 'left',\n  placement: 'top',\n  closable: false,\n  showAdd: false,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:active'])\n\nconst slots = defineSlots<TabsSlots>()\n\nconst nh = useNameHelper('tabs')\n\nconst currentActive = ref(props.active)\nconst currentIndex = ref(0)\nconst itemStates = reactive(new Set<ItemState>())\nconst isTransition = ref(false)\n\nconst itemList = computed(() => Array.from(itemStates))\n\nconst refreshLabels = debounceMinor(() => {\n  itemList.value.forEach((item, index) => {\n    if (isNull(item.label)) {\n      item.label = index + 1\n    }\n  })\n\n  if (itemList.value.length >= 1 && isActiveEmpty()) {\n    currentActive.value = itemList.value[0].label\n  }\n})\nconst computeIndex = debounceMinor(() => {\n  const index = itemList.value.findIndex(item => item.label === currentActive.value)\n\n  if (~index) {\n    currentIndex.value = index\n  }\n})\n\nprovide(\n  TABS_STATE,\n  reactive({\n    currentActive,\n    handleActive,\n    increaseItem,\n    decreaseItem,\n    refreshLabels\n  })\n)\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n  }\n)\n\nonMounted(computeIndex)\n\ndefineExpose({\n  currentActive,\n  isTransition,\n  itemList,\n  handleActive,\n  handleAdd,\n  handleClose\n})\n\nfunction isActiveEmpty() {\n  return isNull(currentActive.value) || currentActive.value === ''\n}\n\nfunction increaseItem(item: ItemState) {\n  itemStates.add(item)\n  refreshLabels()\n}\n\nfunction decreaseItem(item: ItemState) {\n  itemStates.delete(item)\n  refreshLabels()\n}\n\nfunction handleActive(label: string | number) {\n  currentActive.value = label\n\n  computeIndex()\n  emit('update:active', label)\n  emitEvent(props.onChange as ChangeEvent, label)\n}\n\nfunction handleAdd() {\n  emitEvent(props.onAdd)\n}\n\nfunction handleClose(label: string | number) {\n  emitEvent(props.onClose as ChangeEvent, label)\n}\n</script>\n\n<template>\n  <div :class=\"[nh.b(), nh.bm(props.placement), props.inherit && nh.bm('inherit')]\">\n    <div :class=\"nh.be('header')\">\n      <TabNav\n        inherit\n        :active=\"currentActive\"\n        :card=\"props.card\"\n        :align=\"props.align\"\n        :placement=\"props.placement\"\n        :closable=\"props.closable\"\n        :show-add=\"props.showAdd\"\n        @change=\"handleActive\"\n        @add=\"handleAdd\"\n        @close=\"handleClose\"\n      >\n        <template v-if=\"slots.prefix || props.slots.prefix\" #prefix>\n          <slot name=\"prefix\">\n            <Renderer :renderer=\"props.slots.prefix\"></Renderer>\n          </slot>\n        </template>\n        <TabNavItem\n          v-for=\"(item, index) in itemList\"\n          :key=\"index\"\n          :label=\"item.label\"\n          :icon=\"item.icon\"\n          :disabled=\"item.disabled\"\n          :closable=\"item.closable\"\n        >\n          <template v-if=\"isFunction(item.labelRenderer)\">\n            <Renderer\n              :renderer=\"item.labelRenderer\"\n              :data=\"{ label: item.label, disabled: item.disabled }\"\n            ></Renderer>\n          </template>\n          <template v-else>\n            {{ item.name || item.label }}\n          </template>\n        </TabNavItem>\n        <template v-if=\"slots.suffix || props.slots.suffix\" #suffix>\n          <slot name=\"suffix\">\n            <Renderer :renderer=\"props.slots.suffix\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"slots.add || props.slots.add\">\n          <slot name=\"add\">\n            <Renderer :renderer=\"props.slots.add\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"slots.marker || props.slots.marker\">\n          <slot name=\"marker\">\n            <Renderer :renderer=\"props.slots.marker\"></Renderer>\n          </slot>\n        </template>\n      </TabNav>\n    </div>\n    <div\n      :class=\"{\n        [nh.be('main')]: true,\n        [nh.bem('main', 'transition')]: isTransition\n      }\"\n      @transitionend=\"isTransition = false\"\n    >\n      <slot></slot>\n    </div>\n  </div>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  iconProp,\n  localeProp,\n  stateProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const textareaProps = buildProps({\n  state: stateProp,\n  locale: localeProp('input'),\n  value: String,\n  placeholder: String,\n  rows: Number,\n  noResize: booleanProp,\n  autofocus: booleanProp,\n  spellcheck: booleanProp,\n  autocomplete: booleanStringProp,\n  readonly: booleanProp,\n  disabled: booleanProp,\n  debounce: booleanProp,\n  delay: Number,\n  maxLength: Number,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  sync: booleanProp,\n  controlClass: classProp,\n  controlAttrs: Object as PropType<Record<string, any>>,\n  name: String,\n  onFocus: eventProp<(event: FocusEvent) => void>(),\n  onBlur: eventProp<(event: FocusEvent) => void>(),\n  onInput: eventProp<(value: string) => void>(),\n  onChange: eventProp<(value: string) => void>(),\n  onEnter: eventProp(),\n  onKeyDown: eventProp<(event: KeyboardEvent) => void>(),\n  onKeyPress: eventProp<(event: KeyboardEvent) => void>(),\n  onKeyUp: eventProp<(event: KeyboardEvent) => void>(),\n  onCompositionStart: eventProp<(event: CompositionEvent) => void>(),\n  onCompositionEnd: eventProp<(event: CompositionEvent) => void>()\n})\n\nexport type TextareaProps = ExtractPropTypes<typeof textareaProps>\nexport type TextareaCProps = ConfigurableProps<TextareaProps>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, ref, toRef, watch } from 'vue'\n\nimport {\n  createIconProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { debounce, isNull, throttle, toNumber } from '@vexip-ui/utils'\nimport { textareaProps } from './props'\n\ndefineOptions({ name: 'Textarea' })\n\nconst { idFor, state, labelId, disabled, loading, validateField, getFieldValue, setFieldValue } =\n  useFieldStore<string>(() => textarea.value?.focus())\n\nconst _props = defineProps(textareaProps)\nconst props = useProps('textarea', _props, {\n  state: createStateProp(state),\n  locale: null,\n  value: {\n    default: () => getFieldValue(),\n    static: true\n  },\n  placeholder: null,\n  rows: 2,\n  noResize: false,\n  autofocus: false,\n  spellcheck: false,\n  autocomplete: false,\n  readonly: false,\n  disabled: () => disabled.value,\n  debounce: false,\n  delay: null,\n  maxLength: 0,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  sync: false,\n  controlClass: null,\n  controlAttrs: null,\n  name: {\n    default: '',\n    static: true\n  }\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst nh = useNameHelper('textarea')\nconst locale = useLocale('input', toRef(props, 'locale'))\nconst icons = useIcons()\n\nconst focused = ref(false)\nconst currentValue = ref(props.value)\nconst currentLength = ref(props.value ? props.value.length : 0)\nconst composing = ref(false)\n\nconst textarea = ref<HTMLTextAreaElement>()\n\nlet lastValue = props.value\n\nconst isReadonly = computed(() => {\n  return (props.loading && props.loadingLock) || props.readonly\n})\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.ns('input-vars')]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('focused')]: focused.value,\n    [nh.bm('disabled')]: props.disabled,\n    [nh.bm('readonly')]: isReadonly.value,\n    [nh.bm('loading')]: props.loading,\n    [nh.bm('no-resize')]: props.noResize,\n    [nh.bm(props.state)]: props.state !== 'default'\n  }\n})\nconst autoComplete = computed(() => {\n  return typeof props.autocomplete === 'boolean'\n    ? props.autocomplete\n      ? 'on'\n      : 'off'\n    : props.autocomplete\n})\n\nwatch(\n  () => props.value,\n  value => {\n    currentValue.value = value\n    lastValue = value\n    limitValueLength()\n  }\n)\n\ndefineExpose({\n  idFor,\n  currentValue,\n  currentLength,\n  composing,\n  isReadonly,\n  textarea,\n  copyValue,\n  focus: (options?: FocusOptions) => textarea.value?.focus(options),\n  blur: () => textarea.value?.blur()\n})\n\nfunction handleFocus(event: FocusEvent) {\n  focused.value = true\n  emitEvent(props.onFocus, event)\n}\n\nfunction handleBlur(event: FocusEvent) {\n  focused.value = false\n  emitEvent(props.onBlur, event)\n}\n\nfunction handleChange(event: Event) {\n  const type = event.type as 'change' | 'input'\n\n  if (composing.value) {\n    if (type === 'input') return\n\n    composing.value = false\n  }\n\n  currentValue.value = (event.target as HTMLTextAreaElement).value\n  limitValueLength()\n\n  if (type === 'change') {\n    if (lastValue === currentValue.value) return\n\n    lastValue = currentValue.value\n\n    if (!props.sync) {\n      emit('update:value', currentValue.value)\n      setFieldValue(currentValue.value)\n    }\n\n    emitEvent(props.onChange, currentValue.value)\n\n    if (!props.sync) {\n      validateField()\n    }\n  } else {\n    if (props.sync) {\n      emit('update:value', currentValue.value)\n      setFieldValue(currentValue.value)\n    }\n\n    emitEvent(props.onInput, currentValue.value)\n\n    if (props.sync) {\n      validateField()\n    }\n  }\n}\n\nfunction handleEnter() {\n  emitEvent(props.onEnter)\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n  emitEvent(props.onKeyDown, event)\n}\n\nfunction handleKeyPress(event: KeyboardEvent) {\n  emitEvent(props.onKeyPress, event)\n}\n\nfunction handleKeyUp(event: KeyboardEvent) {\n  emitEvent(props.onKeyUp, event)\n}\n\nfunction limitValueLength() {\n  let value = currentValue.value\n\n  if (isNull(value)) {\n    currentLength.value = 0\n\n    return\n  }\n\n  const maxLength = props.maxLength\n\n  if (maxLength && value.length > maxLength) {\n    value = value.slice(0, maxLength)\n  }\n\n  currentLength.value = value.length\n  currentValue.value = value\n}\n\nfunction copyValue() {\n  const textarea = document.createElement('textarea')\n\n  textarea.style.height = '0'\n  textarea.setAttribute('readonly', 'readonly')\n  textarea.value = currentValue.value\n  document.body.appendChild(textarea)\n  textarea.select()\n\n  const isSuccess = document.execCommand('copy')\n\n  document.body.removeChild(textarea)\n\n  return isSuccess\n}\n\nconst delay = toNumber(props.delay)\nconst handleInput = props.debounce\n  ? debounce(handleChange, delay || 100)\n  : throttle(handleChange, delay || 16)\n\nfunction handleCompositionStart(event: CompositionEvent) {\n  composing.value = true\n  emitEvent(props.onCompositionStart, event)\n}\n\nfunction handleCompositionEnd(event: CompositionEvent) {\n  if (composing.value) {\n    composing.value = false\n\n    if (textarea.value) {\n      textarea.value.dispatchEvent(new Event('input'))\n    }\n  }\n\n  emitEvent(props.onCompositionStart, event)\n}\n</script>\n\n<template>\n  <div :id=\"idFor\" :class=\"className\" @click=\"textarea?.focus()\">\n    <textarea\n      v-bind=\"props.controlAttrs\"\n      ref=\"textarea\"\n      :class=\"[nh.be('control'), props.controlAttrs?.class, props.controlClass]\"\n      :value=\"currentValue\"\n      :rows=\"props.rows\"\n      :autofocus=\"props.autofocus\"\n      :autocomplete=\"autoComplete\"\n      :spellcheck=\"props.spellcheck\"\n      :disabled=\"props.disabled\"\n      :readonly=\"isReadonly\"\n      :placeholder=\"props.placeholder ?? locale.placeholder\"\n      :maxlength=\"props.maxLength > 0 ? props.maxLength : undefined\"\n      :name=\"props.name || props.controlAttrs?.name\"\n      :aria-labelledby=\"labelId\"\n      @blur=\"handleBlur\"\n      @focus=\"handleFocus\"\n      @keyup.enter=\"handleEnter\"\n      @keyup=\"handleKeyUp\"\n      @keypress=\"handleKeyPress\"\n      @keydown=\"handleKeyDown\"\n      @input=\"handleInput\"\n      @change=\"handleChange\"\n      @compositionstart=\"handleCompositionStart\"\n      @compositionend=\"handleCompositionEnd\"\n    ></textarea>\n    <div :class=\"nh.be('extra')\">\n      <Transition :name=\"nh.ns('fade')\" appear>\n        <div v-if=\"props.loading\" :class=\"nh.be('loading')\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"props.loadingEffect || icons.loading.effect\"\n            :icon=\"props.loadingIcon || icons.loading.icon\"\n            label=\"loading\"\n          ></Icon>\n        </div>\n      </Transition>\n      <div v-if=\"props.maxLength > 0\" :class=\"nh.be('count')\">\n        <slot name=\"count\" :value=\"currentValue\">\n          {{ props.maxLength === Infinity ? currentLength : `${currentLength}/${props.maxLength}` }}\n        </slot>\n      </div>\n    </div>\n  </div>\n</template>\n","import { getCountWord, makeSentence } from '@vexip-ui/config'\nimport {\n  DAY_ON_MILLISECONDS,\n  HOUR_ON_MILLISECONDS,\n  MINUTE_ON_MILLISECONDS,\n  SECOND_ON_MILLISECONDS\n} from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\n\nexport interface TimeAgoRecord {\n  datetime: Date,\n  timeAgo: Ref<string>,\n  locale: Ref<Record<string, string>>,\n  wordSpace: Ref<boolean>,\n  interval: false | number,\n  updated: number\n}\n\nlet id = 1\n\nexport function getId() {\n  return id++\n}\n\nconst recordMap = new Map<number, TimeAgoRecord>()\n\nlet timer: ReturnType<typeof setInterval>\nlet isRunning: boolean\n\nexport function subscribe(id: number, record: TimeAgoRecord) {\n  recordMap.set(id, record)\n\n  if (recordMap.size && !isRunning) {\n    clearInterval(timer)\n\n    timer = setInterval(() => {\n      isRunning = true\n\n      const current = Date.now()\n\n      recordMap.forEach(record => {\n        if (!record.interval) return\n\n        if (current - record.updated > record.interval) {\n          record.timeAgo.value = computeTimeAgo(\n            record.datetime,\n            current,\n            record.locale.value,\n            record.wordSpace.value\n          )\n          record.updated = current\n        }\n      })\n    }, 5000)\n  }\n}\n\nexport function unsubscribe(id: number) {\n  recordMap.delete(id)\n\n  if (!recordMap.size) {\n    clearInterval(timer)\n    isRunning = false\n  }\n}\n\nexport function computeTimeAgo(\n  date: Date,\n  current: number,\n  locale: Record<string, string>,\n  wordSpace: boolean\n) {\n  const diff = Math.abs(current - date.getTime())\n  const type = current > date.getTime() ? locale.ago : locale.late\n\n  let label: string\n  let usedDiff: number\n  let noFormat = false\n\n  if (diff < 10 * SECOND_ON_MILLISECONDS) {\n    label = locale.justNow\n    noFormat = true\n  } else if (diff < MINUTE_ON_MILLISECONDS) {\n    label = locale.second\n    usedDiff = Math.floor(diff / SECOND_ON_MILLISECONDS)\n  } else if (diff < HOUR_ON_MILLISECONDS) {\n    label = locale.minute\n    usedDiff = Math.floor(diff / MINUTE_ON_MILLISECONDS)\n  } else if (diff < DAY_ON_MILLISECONDS) {\n    label = locale.hour\n    usedDiff = Math.floor(diff / HOUR_ON_MILLISECONDS)\n  } else if (diff < 30 * DAY_ON_MILLISECONDS) {\n    usedDiff = Math.floor(diff / DAY_ON_MILLISECONDS)\n\n    if (usedDiff === 1) {\n      label = locale.yesterday\n      noFormat = true\n    } else {\n      label = locale.days\n    }\n  } else if (diff < 365 * DAY_ON_MILLISECONDS) {\n    usedDiff = Math.floor(diff / (30 * DAY_ON_MILLISECONDS))\n\n    if (usedDiff === 1) {\n      label = locale.lastMonth\n      noFormat = true\n    } else {\n      label = locale.months\n    }\n  } else {\n    usedDiff = Math.floor(diff / 365 / DAY_ON_MILLISECONDS)\n\n    if (usedDiff === 1) {\n      label = locale.lastYear\n      noFormat = true\n    } else {\n      label = locale.years\n    }\n  }\n\n  if (noFormat) {\n    return label\n  }\n\n  return makeSentence(`${getCountWord(label, usedDiff!)} ${type}`, wordSpace)\n}\n","import { booleanNumberProp, booleanStringProp, buildProps, localeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Dateable } from '@vexip-ui/utils'\n\nexport const timeAgoProps = buildProps({\n  locale: localeProp('timeAgo'),\n  datetime: [String, Number, Date] as PropType<Dateable>,\n  interval: booleanNumberProp,\n  title: booleanStringProp,\n  titleFormat: String\n})\n\nexport type TimeAgoProps = ExtractPropTypes<typeof timeAgoProps>\nexport type TimeAgoCProps = ConfigurableProps<TimeAgoProps, 'datetime'>\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, toRef, watch } from 'vue'\n\nimport { useLocale, useNameHelper, useProps, useWordSpace } from '@vexip-ui/config'\nimport { format, toDate } from '@vexip-ui/utils'\nimport { computeTimeAgo, getId, subscribe, unsubscribe } from './helper'\nimport { timeAgoProps } from './props'\n\nimport type { Dateable } from '@vexip-ui/utils'\n\ndefineOptions({ name: 'TimeAgo' })\n\nconst _props = defineProps(timeAgoProps)\nconst props = useProps('timeAgo', _props, {\n  locale: null,\n  datetime: {\n    default: () => Date.now(),\n    static: true\n  },\n  interval: {\n    default: false,\n    validator: value => typeof value === 'boolean' || value >= 1\n  },\n  title: false,\n  titleFormat: 'yyyy-MM-dd HH:mm:ss'\n})\n\nconst nh = useNameHelper('time-ago')\nconst datetime = toDateValue(props.datetime)\nconst locale = useLocale('timeAgo', toRef(props, 'locale'))\nconst wordSpace = useWordSpace()\nconst timeAgo = ref(computeTimeAgo(datetime, Date.now(), locale.value, wordSpace.value))\n\nconst id = getId()\nconst record = {\n  datetime,\n  timeAgo,\n  locale,\n  wordSpace,\n  interval: parseInterval(props.interval),\n  updated: Date.now()\n}\n\nconst currentTitle = computed(() => {\n  if (!props.title) return undefined\n\n  if (typeof props.title === 'string') return props.title\n\n  return format(props.datetime, props.titleFormat)\n})\n\nsubscribe(id, record)\n\nwatch(\n  () => props.datetime,\n  value => {\n    record.datetime = toDateValue(value)\n    timeAgo.value = computeTimeAgo(datetime, Date.now(), locale.value, wordSpace.value)\n  }\n)\nwatch(\n  () => props.interval,\n  value => {\n    record.interval = parseInterval(value)\n  }\n)\n\nonBeforeUnmount(() => {\n  unsubscribe(id)\n})\n\nfunction parseInterval(interval: boolean | number) {\n  return interval && (interval === true ? 1e4 : interval * 1000)\n}\n\nfunction toDateValue(value: Dateable) {\n  if (typeof value === 'string') {\n    value = value.replace(/-/g, '/')\n  }\n\n  return toDate(value)\n}\n\ndefineExpose({ timeAgo })\n</script>\n\n<template>\n  <span :class=\"[nh.b(), props.inherit && nh.bm('inherit')]\" :title=\"currentTitle\">\n    {{ timeAgo }}\n  </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { doubleDigits } from '@vexip-ui/utils'\nimport { handleKeyEnter } from './helper'\n\nimport type { PropType } from 'vue'\nimport type { LocaleConfig } from '@vexip-ui/config'\nimport type { TimeType } from './symbol'\n\ndefineOptions({ name: 'TimeControl' })\n\nconst props = defineProps({\n  unitType: {\n    type: String as PropType<TimeType | ''>,\n    default: ''\n  },\n  enabled: {\n    type: Object as PropType<Record<TimeType, boolean>>,\n    default: () => ({})\n  },\n  activated: {\n    type: Object as PropType<Record<TimeType, boolean>>,\n    default: () => ({})\n  },\n  timeValue: {\n    type: Object as PropType<Record<TimeType, number>>,\n    default: () => ({})\n  },\n  separator: {\n    type: String,\n    default: ':'\n  },\n  visible: {\n    type: Boolean,\n    default: false\n  },\n  focused: {\n    type: Boolean,\n    default: false\n  },\n  filler: {\n    type: String,\n    default: '-',\n    validator: (value: string) => value.length === 1\n  },\n  steps: {\n    type: Array as PropType<number[]>,\n    default: () => [1, 1, 1]\n  },\n  ctrlSteps: {\n    type: Array as PropType<number[]>,\n    default: () => [5, 5, 5]\n  },\n  labels: {\n    type: Object as PropType<Partial<Record<TimeType, string>>>,\n    default: () => ({})\n  },\n  hasError: {\n    type: Boolean,\n    default: false\n  },\n  placeholder: {\n    type: String,\n    default: ''\n  },\n  readonly: {\n    type: Boolean,\n    default: false\n  },\n  labeledBy: {\n    type: String,\n    default: undefined\n  },\n  locale: {\n    type: Object as PropType<LocaleConfig['timePicker']>,\n    default: () => ({})\n  }\n})\n\nconst emit = defineEmits([\n  'input',\n  'plus',\n  'minus',\n  'enter',\n  'cancel',\n  'unit-focus',\n  'unit-blur',\n  'prev-unit',\n  'next-unit',\n  'blur'\n])\n\nconst nh = useNameHelper('time-picker')\n\nconst wrapper = ref<HTMLElement>()\n\nconst label = computed(() => props.locale.ariaLabel ?? {})\nconst isActivated = computed(() => {\n  return (Object.keys(props.enabled) as TimeType[]).every(type => {\n    return !props.enabled[type] || props.activated[type]\n  })\n})\nconst formattedHour = computed(() => {\n  return formatValue('hour')\n})\nconst formattedMinute = computed(() => {\n  return formatValue('minute')\n})\nconst formattedSecond = computed(() => {\n  return formatValue('second')\n})\n\ndefineExpose({\n  isActivated,\n  wrapper,\n  focus: () => {\n    wrapper.value?.focus()\n  },\n  blur: () => {\n    wrapper.value?.blur()\n  }\n})\n\nfunction formatValue(type: TimeType) {\n  return props.activated[type]\n    ? doubleDigits(props.timeValue[type])\n    : `${props.filler}${props.filler}`\n}\n\nfunction getUnitFocusClass(type: TimeType) {\n  return props.visible && props.unitType === type ? nh.bem('unit', 'focused') : null\n}\n\nfunction handleInputFocus(type: TimeType) {\n  if (props.readonly) return\n\n  emit('unit-focus', type)\n}\n\nfunction handleInput(event: KeyboardEvent) {\n  if (!props.visible) return\n\n  const type = handleKeyEnter(event)\n\n  if (props.readonly) {\n    switch (type) {\n      case 'ok': {\n        emit('enter')\n        break\n      }\n      case 'esc': {\n        emit('cancel')\n        break\n      }\n    }\n\n    return\n  }\n\n  switch (type) {\n    case 'next': {\n      emit('next-unit')\n      break\n    }\n    case 'prev': {\n      emit('prev-unit')\n      break\n    }\n    case 'up': {\n      emit('minus', event.ctrlKey)\n      break\n    }\n    case 'down': {\n      emit('plus', event.ctrlKey)\n      break\n    }\n    case 'ok': {\n      handleEnter()\n      break\n    }\n    case 'esc': {\n      handleCancel()\n      break\n    }\n    default: {\n      if (typeof type === 'number') {\n        emit('input', type)\n      }\n    }\n  }\n}\n\nfunction handleEnter() {\n  emit('enter')\n}\n\nfunction handleCancel() {\n  emit('cancel')\n}\n\nfunction handleBlur() {\n  emit('blur')\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"[nh.be('input'), hasError && nh.bem('input', 'error')]\"\n    role=\"none\"\n    tabindex=\"-1\"\n    @keydown=\"handleInput\"\n    @blur=\"handleBlur\"\n  >\n    <div v-if=\"!focused && !isActivated\" :class=\"nh.be('placeholder')\">\n      {{ placeholder }}\n    </div>\n    <template v-else>\n      <div\n        v-if=\"enabled.hour\"\n        :class=\"[nh.be('unit'), getUnitFocusClass('hour')]\"\n        role=\"spinbutton\"\n        :aria-label=\"label.hour\"\n        :aria-valuenow=\"props.timeValue.hour\"\n        :aria-valuetext=\"formattedHour\"\n        :aria-valuemin=\"0\"\n        :aria-valuemax=\"23\"\n        :aria-labelledby=\"labeledBy\"\n        @click=\"handleInputFocus('hour')\"\n      >\n        {{ formattedHour }}\n      </div>\n      <div\n        v-if=\"labels.hour\"\n        :class=\"nh.be('label')\"\n        aria-hidden\n        @click=\"handleInputFocus('hour')\"\n      >\n        {{ labels.hour }}\n      </div>\n      <template v-if=\"enabled.minute\">\n        <div v-if=\"enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\n          {{ separator }}\n        </div>\n        <div\n          :class=\"[nh.be('unit'), getUnitFocusClass('minute')]\"\n          role=\"spinbutton\"\n          :aria-label=\"label.minute\"\n          :aria-valuenow=\"props.timeValue.minute\"\n          :aria-valuetext=\"formattedMinute\"\n          :aria-valuemin=\"0\"\n          :aria-valuemax=\"59\"\n          :aria-labelledby=\"labeledBy\"\n          @click=\"handleInputFocus('minute')\"\n        >\n          {{ formattedMinute }}\n        </div>\n        <div\n          v-if=\"labels.minute\"\n          :class=\"nh.be('label')\"\n          aria-hidden\n          @click=\"handleInputFocus('minute')\"\n        >\n          {{ labels.minute }}\n        </div>\n      </template>\n      <template v-if=\"enabled.second\">\n        <div v-if=\"enabled.minute || enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\n          {{ separator }}\n        </div>\n        <div\n          :class=\"[nh.be('unit'), getUnitFocusClass('second')]\"\n          role=\"spinbutton\"\n          :aria-label=\"label.second\"\n          :aria-valuenow=\"props.timeValue.second\"\n          :aria-valuetext=\"formattedSecond\"\n          :aria-valuemin=\"0\"\n          :aria-valuemax=\"59\"\n          :aria-labelledby=\"labeledBy\"\n          @click=\"handleInputFocus('second')\"\n        >\n          {{ formattedSecond }}\n        </div>\n        <div\n          v-if=\"labels.second\"\n          :class=\"nh.be('label')\"\n          aria-hidden\n          @click=\"handleInputFocus('second')\"\n        >\n          {{ labels.second }}\n        </div>\n      </template>\n    </template>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Popper } from '@/components/popper'\nimport { useFieldStore } from '@/components/form'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, nextTick, reactive, ref, toRef, watch } from 'vue'\n\nimport TimeWheel from './time-wheel.vue'\nimport TimeControl from './time-control.vue'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  makeSentence,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n  useWordSpace\n} from '@vexip-ui/config'\nimport {\n  placementWhileList,\n  useClickOutside,\n  useHover,\n  usePopper,\n  useSetTimeout\n} from '@vexip-ui/hooks'\nimport { USE_TOUCH, boundRange, callIfFunc, doubleDigits, toAttrValue } from '@vexip-ui/utils'\nimport { timePickerProps } from './props'\nimport { useColumn, useTimeBound } from './helper'\nimport { TIME_REG } from './symbol'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type { TimePickerChangeEvent, TimePickerSlots, TimeType } from './symbol'\n\ndefineOptions({ name: 'TimePicker' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue\n} = useFieldStore<string | string[]>(() => reference.value?.focus())\n\nconst nh = useNameHelper('time-picker')\n\nconst _props = defineProps(timePickerProps)\nconst props = useProps('timePicker', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  visible: false,\n  placement: {\n    default: 'bottom-start',\n    validator: value => placementWhileList.includes(value)\n  },\n  transfer: false,\n  format: 'HH:mm:ss',\n  separator: ':',\n  value: {\n    default: () => getFieldValue(),\n    static: true\n  },\n  filler: {\n    default: '-',\n    validator: value => value.length === 1\n  },\n  clearable: false,\n  noAction: false,\n  noArrow: false,\n  pointer: USE_TOUCH,\n  candidate: {\n    default: 3,\n    validator: value => [0, 1, 2, 3].includes(value)\n  },\n  steps: () => [1, 1, 1],\n  labels: () => ({}),\n  shortcuts: () => [],\n  range: null,\n  disabled: () => disabled.value,\n  transitionName: () => nh.ns('drop'),\n  confirmText: null,\n  cancelText: null,\n  ctrlSteps: () => [5, 5, 5],\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  noSuffix: false,\n  exchange: false,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  min: null,\n  max: null,\n  outsideClose: true,\n  outsideCancel: false,\n  placeholder: null,\n  unitReadonly: false,\n  popperAlive: null,\n  shortcutsPlacement: 'left',\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:value', 'update:visible'])\n\nconst slots = defineSlots<TimePickerSlots>()\n\nconst locale = useLocale('timePicker', toRef(props, 'locale'))\nconst icons = useIcons()\nconst wordSpace = useWordSpace()\n\nconst placement = toRef(props, 'placement')\nconst transfer = toRef(props, 'transfer')\nconst currentVisible = ref(props.visible)\nconst focused = ref(false)\nconst lastValue = ref('')\nconst startState = createTimeState()\nconst endState = createTimeState()\nconst currentState = ref<'start' | 'end'>('start')\nconst staticWheel = ref(false)\n\nconst { timer } = useSetTimeout()\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst popper = ref<PopperExposed>()\nconst { reference, transferTo, updatePopper } = usePopper({\n  placement,\n  transfer,\n  wrapper,\n  popper: computed(() => popper.value?.wrapper),\n  isDrop: true\n})\nconst { isHover } = useHover(reference)\nconst { isTimeDisabled } = useTimeBound(toRef(props, 'min'), toRef(props, 'max'))\n\nconst startInput = ref<InstanceType<typeof TimeControl>>()\nconst endInput = ref<InstanceType<typeof TimeControl>>()\n\nconst startPlaceholder = computed(() => {\n  if (props.placeholder) {\n    return Array.isArray(props.placeholder) ? props.placeholder[0] : props.placeholder\n  }\n\n  const { select, start, time } = locale.value.placeholder\n\n  return makeSentence(props.range ? `${start} ${time}` : `${select} ${time}`, wordSpace.value)\n})\nconst endPlaceholder = computed(() => {\n  if (props.placeholder) {\n    return Array.isArray(props.placeholder)\n      ? props.placeholder[1] || props.placeholder[0]\n      : props.placeholder\n  }\n\n  const { end, time } = locale.value.placeholder\n\n  return makeSentence(`${end} ${time}`, wordSpace.value)\n})\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.ns('input-vars'),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm('no-hour')]: !startState.enabled.hour,\n      [nh.bm('no-minute')]: !startState.enabled.minute,\n      [nh.bm('no-second')]: !startState.enabled.second,\n      [nh.bm('visible')]: currentVisible.value,\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm('is-range')]: props.range\n    }\n  ]\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst selectorClass = computed(() => {\n  const baseCls = nh.be('selector')\n\n  return {\n    [baseCls]: true,\n    [`${baseCls}--disabled`]: props.disabled,\n    [`${baseCls}--readonly`]: readonly.value,\n    [`${baseCls}--loading`]: props.loading,\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\n    [`${baseCls}--focused`]: focused.value,\n    [`${baseCls}--${props.state}`]: props.state !== 'default'\n  }\n})\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\nconst currentValue = computed(() => {\n  const values = [startState, endState].map(state => {\n    return Object.values(state.timeValue).map(doubleDigits).join(':')\n  })\n\n  return props.range ? values : values[0]\n})\nconst showClear = computed(() => {\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && !!lastValue.value\n})\nconst startError = computed(() => {\n  const { hour, minute, second } = startState.timeValue\n\n  return (\n    isTimeDisabled.hour(hour) ||\n    isTimeDisabled.minute(hour, minute) ||\n    isTimeDisabled.second(hour, minute, second)\n  )\n})\nconst endError = computed(() => {\n  if (!props.range) return false\n\n  const { hour, minute, second } = endState.timeValue\n\n  return (\n    isTimeDisabled.hour(hour) ||\n    isTimeDisabled.minute(hour, minute) ||\n    isTimeDisabled.second(hour, minute, second)\n  )\n})\n\nwatch(\n  () => props.value,\n  value => {\n    parseValue(value)\n    lastValue.value = (Array.isArray(value) ? value[0] || value[1] : value) ? getStringValue() : ''\n  },\n  { immediate: true }\n)\nwatch(() => props.format, parseFormat, { immediate: true })\nwatch(\n  () => props.visible,\n  value => {\n    currentVisible.value = value\n  }\n)\nwatch(currentVisible, value => {\n  if (value) {\n    updatePopper()\n  }\n})\nwatch(focused, value => {\n  if (value) {\n    emitEvent(props.onFocus)\n  } else {\n    emitEvent(props.onBlur)\n  }\n})\nwatch(currentState, value => {\n  if (!props.unitReadonly && currentVisible.value) {\n    emitEvent(props.onChangeCol, getCurrentState().column, value)\n  }\n})\nwatch(\n  () => startState.column,\n  value => {\n    if (!props.unitReadonly && currentVisible.value && currentState.value === 'start') {\n      emitEvent(props.onChangeCol, value, 'start')\n    }\n  }\n)\nwatch(\n  () => endState.column,\n  value => {\n    if (!props.unitReadonly && currentVisible.value && currentState.value === 'end') {\n      emitEvent(props.onChangeCol, value, 'end')\n    }\n  }\n)\nwatch(\n  () => props.disabled,\n  value => {\n    if (value) {\n      setVisible(false)\n      handleBlur()\n    }\n  }\n)\nwatch(readonly, value => {\n  if (value) {\n    setVisible(false)\n  }\n})\n\ndefineExpose({\n  idFor,\n  isHover,\n  currentVisible,\n  focused,\n  startState,\n  endState,\n  currentState,\n  currentValue,\n  startError,\n  endError,\n  wrapper,\n  reference,\n  popper,\n  start: startInput,\n  end: endInput,\n  updatePopper,\n  focus: (options?: FocusOptions) => reference.value?.focus(options),\n  blur: () => reference.value?.blur()\n})\n\nfunction createTimeState() {\n  const { currentColumn, enabled, resetColumn, enterColumn } = useColumn([\n    'hour',\n    'minute',\n    'second'\n  ] as TimeType[])\n\n  const timeValue = reactive({\n    hour: 0,\n    minute: 0,\n    second: 0\n  })\n  const activated = reactive({\n    hour: false,\n    minute: false,\n    second: false\n  })\n\n  return reactive({\n    column: currentColumn,\n    enabled,\n    activated,\n    timeValue,\n    resetColumn,\n    enterColumn\n  })\n}\n\nfunction getCurrentState() {\n  return currentState.value === 'start' ? startState : endState\n}\n\nfunction parseValue<T extends string | null>(value: T | T[]) {\n  if (!Array.isArray(value)) {\n    value = [value, value]\n  }\n\n  const defaultDate = new Date()\n\n  for (let i = 0; i < 2; ++i) {\n    const match = TIME_REG.exec(value[i] || '')\n    const state = i === 0 ? startState : endState\n    const { timeValue } = state\n\n    if (match) {\n      toggleActivated(true, i === 0 ? 'start' : 'end')\n\n      const hour = parseInt(match[1])\n      const minute = match[2] ? parseInt(match[2].slice(1)) : 0\n      const second = match[3] ? parseInt(match[3].slice(1)) : 0\n\n      const date = new Date(2000, 1, 1, hour, minute, second)\n\n      timeValue.hour = date.getHours()\n      timeValue.minute = date.getMinutes()\n      timeValue.second = date.getSeconds()\n    } else {\n      timeValue.hour = defaultDate.getHours()\n      timeValue.minute = defaultDate.getMinutes()\n      timeValue.second = defaultDate.getSeconds()\n\n      toggleActivated(false, i === 0 ? 'start' : 'end')\n    }\n\n    if (!props.range) break\n  }\n}\n\nfunction parseFormat() {\n  ;[startState, endState].forEach(state => {\n    state.enabled.hour = props.format.includes('H')\n    state.enabled.minute = props.format.includes('m')\n    state.enabled.second = props.format.includes('s')\n  })\n}\n\nfunction toggleActivated(value: boolean, valueType?: 'start' | 'end') {\n  const states = valueType\n    ? valueType === 'start'\n      ? [startState]\n      : [endState]\n    : [startState, endState]\n\n  states.forEach(state => {\n    ;(Object.keys(state.activated) as TimeType[]).forEach(type => {\n      state.activated[type] = value\n    })\n  })\n}\n\nfunction getStringValue() {\n  return Array.isArray(currentValue.value) ? currentValue.value.join('|') : currentValue.value\n}\n\nfunction verifyTime() {\n  if (startError.value || (props.range && endError.value)) {\n    parseValue(props.value)\n  }\n}\n\nfunction setVisible(visible: boolean) {\n  if (currentVisible.value === visible) return\n\n  currentVisible.value = visible\n\n  emit('update:visible', visible)\n  emitEvent(props.onToggle, visible)\n}\n\nfunction emitChange() {\n  verifyTime()\n\n  if (lastValue.value !== getStringValue()) {\n    lastValue.value = getStringValue()\n\n    toggleActivated(true)\n    emit('update:value', currentValue.value)\n    setFieldValue(currentValue.value)\n    emitEvent(props.onChange as TimePickerChangeEvent, currentValue.value)\n    validateField()\n  }\n}\n\nfunction handleFocused() {\n  if (props.disabled) return\n\n  focused.value = true\n\n  timer.focus = setTimeout(() => {\n    if (focused.value) {\n      if (currentState.value === 'start') {\n        startInput.value?.focus()\n      } else {\n        endInput.value?.focus()\n      }\n    }\n  }, 120)\n}\n\nfunction handleBlur() {\n  clearTimeout(timer.focus)\n\n  focused.value = false\n  startInput.value?.blur()\n  endInput.value?.blur()\n}\n\nfunction showPanel(event: Event) {\n  if (props.disabled || readonly.value) return\n\n  const target = event.target as Node\n\n  setVisible(true)\n  handleFocused()\n\n  if (wrapper.value && target) {\n    const units = Array.from(wrapper.value.querySelectorAll(`.${nh.be('unit')}`))\n\n    if (!units.some(unit => unit === target || unit.contains(target))) {\n      startState.column = null\n      endState.column = null\n    }\n  }\n}\n\nfunction finishInput(shouldChange = true) {\n  setVisible(false)\n\n  shouldChange && emitChange()\n  startState.resetColumn()\n  endState.resetColumn()\n}\n\nfunction handleClear(finish = true) {\n  if (props.disabled || readonly.value) return\n\n  if (props.clearable) {\n    nextTick(() => {\n      const emitValue = props.range ? ([] as string[]) : ''\n\n      parseValue(null)\n      finish && finishInput(false)\n      emit('update:value', emitValue)\n      emitEvent(props.onChange as TimePickerChangeEvent, emitValue)\n      emitEvent(props.onClear)\n      clearField(emitValue)\n      finish && handleBlur()\n\n      lastValue.value = ''\n\n      nextTick(() => {\n        toggleActivated(false)\n      })\n    })\n  }\n}\n\nfunction handleWheelChange(type: TimeType) {\n  if (currentVisible.value) {\n    getCurrentState().activated[type] = true\n  }\n}\n\nfunction handleInputFocus(type: TimeType) {\n  getCurrentState().column = type\n}\n\nfunction handleInput(value: number) {\n  const state = getCurrentState()\n  const type = state.column\n\n  if (!type) return\n\n  handleInputNumber(type, value)\n\n  if (state.column !== 'second' && state.timeValue[type] >= 10) {\n    state.enterColumn('next', false)\n  }\n}\n\nfunction handleInputNumber(type: TimeType, number: number) {\n  const state = getCurrentState()\n  const prev = state.timeValue[type]\n\n  if (state.activated[type] && prev > 0 && prev < 10) {\n    state.timeValue[type] = prev * 10 + number\n  } else {\n    state.timeValue[type] = number\n  }\n\n  verifyValue(type)\n\n  state.activated[type] = true\n  emitEvent(props.onInput, type, state.timeValue[type])\n}\n\nfunction verifyValue(type: TimeType) {\n  const timeValue = getCurrentState().timeValue\n\n  timeValue[type] = boundRange(timeValue[type], 0, type === 'hour' ? 23 : 59)\n  timeValue[type] = Math.round(timeValue[type] / getStep(type)) * getStep(type)\n}\n\nfunction handlePlus(ctrlKey: boolean) {\n  const state = getCurrentState()\n  const type = state.column\n\n  if (!type) return\n\n  if (state.enabled[type]) {\n    state.timeValue[type] += ctrlKey ? getCtrlStep(type) : getStep(type)\n\n    verifyValue(type)\n    emitEvent(props.onPlus, type, state.timeValue[type])\n  }\n}\n\nfunction handleMinus(ctrlKey: boolean) {\n  const state = getCurrentState()\n  const type = state.column\n\n  if (!type) return\n\n  if (state.enabled[type]) {\n    state.timeValue[type] -= ctrlKey ? getCtrlStep(type) : getStep(type)\n\n    verifyValue(type)\n    emitEvent(props.onMinus, type, state.timeValue[type])\n  }\n}\n\nfunction getStep(type: TimeType) {\n  return props.steps[type === 'hour' ? 0 : type === 'minute' ? 1 : 2] || 1\n}\n\nfunction getCtrlStep(type: TimeType) {\n  return props.ctrlSteps[type === 'hour' ? 0 : type === 'minute' ? 1 : 2] || 1\n}\n\nfunction fallbackFocus() {\n  requestAnimationFrame(() => {\n    handleBlur()\n    reference.value?.focus()\n  })\n}\n\nfunction handleEnter() {\n  fallbackFocus()\n  finishInput()\n  emitEvent(props.onEnter)\n}\n\nfunction handleCancel() {\n  fallbackFocus()\n  parseValue(props.value)\n  finishInput(false)\n  emitEvent(props.onCancel)\n}\n\nfunction handleShortcut(index: number) {\n  const { value, name } = props.shortcuts[index]\n  const parsedValue = callIfFunc(value)\n\n  fallbackFocus()\n  parseValue(parsedValue)\n  emitEvent(props.onShortcut as (name: string, value: string | string[]) => void, name, parsedValue)\n  finishInput()\n}\n\nfunction toggleCurrentState(type: 'start' | 'end') {\n  currentState.value = type\n}\n\nfunction enterColumn(type: 'prev' | 'next') {\n  if (props.range) {\n    if (type === 'prev' && currentState.value === 'start' && !startState.column) {\n      toggleCurrentState('end')\n    }\n\n    const state = getCurrentState()\n    const currentColumn = state.column\n\n    state.enterColumn(type, !currentColumn)\n\n    if (currentColumn === state.column) {\n      const isStart = currentState.value === 'start'\n      const otherState = isStart ? endState : startState\n\n      otherState.resetColumn(type === 'prev' ? 'second' : 'hour', type === 'prev')\n      toggleCurrentState(isStart ? 'end' : 'start')\n    }\n  } else {\n    startState.enterColumn(type)\n  }\n}\n\nfunction handleStartInput(type: TimeType) {\n  toggleCurrentState('start')\n  handleInputFocus(type)\n}\n\nfunction handleEndInput(type: TimeType) {\n  toggleCurrentState('end')\n  handleInputFocus(type)\n}\n\nfunction exchangeValue() {\n  ;(Object.keys(startState.timeValue) as TimeType[]).forEach(type => {\n    const temp = endState.timeValue[type]\n    endState.timeValue[type] = startState.timeValue[type]\n    startState.timeValue[type] = temp\n  })\n}\n\nfunction handleExchangeClick(event: MouseEvent) {\n  if (props.exchange) {\n    !currentVisible.value && event.stopPropagation()\n    exchangeValue()\n  }\n}\n\nfunction handleClickOutside() {\n  emitEvent(props.onClickOutside)\n\n  if (props.outsideClose && currentVisible.value) {\n    finishInput(!props.outsideCancel)\n    handleBlur()\n    emitEvent(props.onOutsideClose)\n  }\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"group\"\n    :aria-disabled=\"toAttrValue(props.disabled)\"\n    :aria-expanded=\"toAttrValue(currentVisible)\"\n    aria-haspopup=\"dialog\"\n    :aria-labelledby=\"labelId\"\n    @click=\"showPanel\"\n  >\n    <div\n      ref=\"reference\"\n      :class=\"selectorClass\"\n      tabindex=\"0\"\n      @keydown.space.prevent=\"showPanel\"\n      @keydown.backspace.prevent=\"handleClear(false)\"\n    >\n      <div\n        v-if=\"hasPrefix\"\n        :class=\"[nh.be('icon'), nh.be('prefix')]\"\n        :style=\"{ color: props.prefixColor }\"\n      >\n        <slot name=\"prefix\">\n          <Renderer :renderer=\"props.slots.prefix\">\n            <Icon :icon=\"props.prefix\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div :class=\"nh.be('control')\">\n        <TimeControl\n          ref=\"startInput\"\n          :unit-type=\"currentState === 'start' ? startState.column! : ''\"\n          :enabled=\"startState.enabled\"\n          :activated=\"startState.activated\"\n          :time-value=\"startState.timeValue\"\n          :steps=\"props.steps\"\n          :ctrl-steps=\"props.ctrlSteps\"\n          :focused=\"focused\"\n          :visible=\"currentVisible\"\n          :separator=\"props.separator\"\n          :filler=\"props.filler\"\n          :labels=\"props.labels\"\n          :has-error=\"startError\"\n          :placeholder=\"startPlaceholder\"\n          :readonly=\"props.unitReadonly\"\n          :labeled-by=\"labelId\"\n          :locale=\"locale\"\n          @input=\"handleInput\"\n          @plus=\"handlePlus\"\n          @minus=\"handleMinus\"\n          @enter=\"handleEnter\"\n          @cancel=\"handleCancel\"\n          @unit-focus=\"handleStartInput\"\n          @prev-unit=\"enterColumn('prev')\"\n          @next-unit=\"enterColumn('next')\"\n          @blur=\"startState.column = null\"\n        ></TimeControl>\n        <template v-if=\"props.range\">\n          <div\n            :class=\"[nh.be('exchange'), props.exchange ? nh.bem('exchange', 'enabled') : '']\"\n            @click=\"handleExchangeClick\"\n          >\n            <slot name=\"exchange\">\n              <Renderer :renderer=\"props.slots.exchange\">\n                <Icon v-bind=\"icons.exchange\" style=\"padding-top: 1px\"></Icon>\n              </Renderer>\n            </slot>\n          </div>\n          <TimeControl\n            ref=\"endInput\"\n            :unit-type=\"currentState === 'end' ? endState.column! : ''\"\n            :enabled=\"endState.enabled\"\n            :activated=\"endState.activated\"\n            :time-value=\"endState.timeValue\"\n            :steps=\"props.steps\"\n            :ctrl-steps=\"props.ctrlSteps\"\n            :focused=\"focused\"\n            :visible=\"currentVisible\"\n            :separator=\"props.separator\"\n            :filler=\"props.filler\"\n            :labels=\"props.labels\"\n            :has-error=\"endError\"\n            :placeholder=\"endPlaceholder\"\n            :readonly=\"props.unitReadonly\"\n            :labeled-by=\"labelId\"\n            :locale=\"locale\"\n            @input=\"handleInput\"\n            @plus=\"handlePlus\"\n            @minus=\"handleMinus\"\n            @enter=\"handleEnter\"\n            @cancel=\"handleCancel\"\n            @unit-focus=\"handleEndInput\"\n            @prev-unit=\"enterColumn('prev')\"\n            @next-unit=\"enterColumn('next')\"\n            @blur=\"endState.column = null\"\n          ></TimeControl>\n        </template>\n      </div>\n      <div\n        v-if=\"!props.noSuffix\"\n        :class=\"[nh.be('icon'), nh.be('suffix')]\"\n        :style=\"{\n          color: props.suffixColor,\n          opacity: showClear || props.loading ? '0%' : ''\n        }\"\n      >\n        <slot name=\"suffix\">\n          <Renderer :renderer=\"props.slots.suffix\">\n            <Icon v-bind=\"icons.clock\" :icon=\"props.suffix || icons.clock.icon\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div\n        v-else-if=\"props.clearable || props.loading\"\n        :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n      ></div>\n      <Transition :name=\"nh.ns('fade')\" appear>\n        <button\n          v-if=\"showClear\"\n          :class=\"[nh.be('icon'), nh.be('clear')]\"\n          type=\"button\"\n          tabindex=\"-1\"\n          :aria-label=\"locale.ariaLabel.clear\"\n          @click.stop=\"handleClear()\"\n        >\n          <Icon v-bind=\"icons.clear\"></Icon>\n        </button>\n        <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"props.loadingEffect || icons.loading.effect\"\n            :icon=\"props.loadingIcon || icons.loading.icon\"\n          ></Icon>\n        </div>\n      </Transition>\n    </div>\n    <Popper\n      ref=\"popper\"\n      :class=\"[nh.be('popper'), nh.bs('vars')]\"\n      :visible=\"currentVisible\"\n      :to=\"transferTo\"\n      :transition=\"props.transitionName\"\n      :alive=\"props.popperAlive ?? !transferTo\"\n      @click.stop=\"handleFocused\"\n      @before-enter=\"staticWheel = true\"\n      @before-leave=\"staticWheel = true\"\n      @after-enter=\"staticWheel = false\"\n      @after-leave=\"staticWheel = false\"\n    >\n      <div\n        :class=\"{\n          [nh.be('panel')]: true,\n          [nh.bem('panel', 'vertical')]:\n            props.shortcuts.length &&\n            (props.shortcutsPlacement === 'top' || props.shortcutsPlacement === 'bottom')\n        }\"\n        :aria-labelledby=\"labelId\"\n      >\n        <div\n          v-if=\"props.shortcuts.length\"\n          :class=\"[\n            nh.be('list'),\n            nh.bem('list', 'sub'),\n            nh.be('shortcuts'),\n            nh.bem('shortcuts', props.shortcutsPlacement)\n          ]\"\n        >\n          <div\n            v-for=\"(item, index) in props.shortcuts\"\n            :key=\"index\"\n            :class=\"nh.be('shortcut')\"\n            :title=\"item.name\"\n            @click=\"handleShortcut(index)\"\n          >\n            {{ item.name }}\n          </div>\n        </div>\n        <div :class=\"nh.be('list')\">\n          <div :class=\"nh.be('wheels')\">\n            <TimeWheel\n              v-model:hour=\"startState.timeValue.hour\"\n              v-model:minute=\"startState.timeValue.minute\"\n              v-model:second=\"startState.timeValue.second\"\n              :no-arrow=\"props.noArrow\"\n              :candidate=\"props.candidate\"\n              :steps=\"props.steps\"\n              :pointer=\"props.pointer\"\n              :disabled-time=\"isTimeDisabled\"\n              :no-transition=\"staticWheel\"\n              @change=\"handleWheelChange\"\n              @toggle-col=\"toggleCurrentState('start')\"\n            ></TimeWheel>\n            <TimeWheel\n              v-if=\"props.range\"\n              v-model:hour=\"endState.timeValue.hour\"\n              v-model:minute=\"endState.timeValue.minute\"\n              v-model:second=\"endState.timeValue.second\"\n              :no-arrow=\"props.noArrow\"\n              :candidate=\"props.candidate\"\n              :steps=\"props.steps\"\n              :pointer=\"props.pointer\"\n              :disabled-time=\"isTimeDisabled\"\n              :no-transition=\"staticWheel\"\n              @change=\"handleWheelChange\"\n              @toggle-col=\"toggleCurrentState('end')\"\n            ></TimeWheel>\n          </div>\n          <div v-if=\"!props.noAction\" :class=\"nh.be('action')\">\n            <Button\n              inherit\n              text\n              size=\"small\"\n              @click.stop=\"handleCancel\"\n            >\n              {{ props.cancelText || locale.cancel }}\n            </Button>\n            <Button\n              inherit\n              type=\"primary\"\n              size=\"small\"\n              :disabled=\"startError || endError\"\n              @click.stop=\"handleEnter\"\n            >\n              {{ props.confirmText || locale.confirm }}\n            </Button>\n          </div>\n        </div>\n      </div>\n    </Popper>\n  </div>\n</template>\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { TimelineItemType } from './symbol'\n\nexport const timelineProps = buildProps({\n  pending: booleanProp,\n  dashed: booleanProp,\n  lineColor: String,\n  spacing: [Number, String],\n  flip: booleanProp,\n  horizontal: booleanProp,\n  alternate: booleanProp,\n  onSignalClick: eventProp<(label: string | number) => void>()\n})\n\nexport type TimelineProps = ExtractPropTypes<typeof timelineProps>\nexport type TimelineCProps = ConfigurableProps<TimelineProps>\n\nexport const timelineItemProps = buildProps({\n  type: String as PropType<TimelineItemType>,\n  color: String,\n  label: [Number, String],\n  dashed: booleanProp,\n  lineColor: String,\n  spacing: [Number, String],\n  onSignalClick: eventProp<(label: string | number) => void>()\n})\n\nexport type TimelineItemProps = ExtractPropTypes<typeof timelineItemProps>\nexport type TimelineItemCProps = ConfigurableProps<TimelineItemProps>\n","import type { InjectionKey } from 'vue'\n\nexport type TimelineItemType = 'primary' | 'info' | 'success' | 'error' | 'warning' | 'disabled'\n\nexport interface ItemState {\n  label: string | number,\n  index: number,\n  total: number,\n  height: number\n}\n\nexport interface TimelineState {\n  dashed: boolean,\n  lineColor: string,\n  spacing: number | string,\n  alternate: boolean,\n  horizontal: boolean,\n  increaseItem: (item: ItemState) => void,\n  decreaseItem: (item: ItemState) => void,\n  handleSignalClick: (label: string | number) => void\n}\n\nexport const TIMELINE_STATE = '__VXP_TIMELINE_STATE' as unknown as InjectionKey<TimelineState>\n\nexport const timelineItemTypes = Object.freeze<TimelineItemType[]>([\n  'primary',\n  'info',\n  'success',\n  'error',\n  'warning',\n  'disabled'\n])\n","<script setup lang=\"ts\">\nimport { computed, provide, reactive, toRef } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { debounceMinor, isNull } from '@vexip-ui/utils'\nimport { timelineProps } from './props'\nimport { TIMELINE_STATE } from './symbol'\n\nimport type { ItemState, TimelineState } from './symbol'\n\ndefineOptions({ name: 'Timeline' })\n\nconst _props = defineProps(timelineProps)\nconst props = useProps('timeline', _props, {\n  pending: false,\n  dashed: false,\n  lineColor: null,\n  spacing: null,\n  flip: false,\n  horizontal: false,\n  alternate: false\n})\n\nconst nh = useNameHelper('timeline')\nconst itemStates = reactive(new Set<ItemState>())\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('pending')]: props.pending,\n    [nh.bm('alternate')]: props.alternate,\n    [nh.bm('flip')]: props.flip,\n    [nh.bm('horizontal')]: props.horizontal\n  }\n})\nconst height = computed(() => {\n  return Math.max(...Array.from(itemStates).map(state => state.height)) * 2\n})\n\ndefineExpose({ itemStates })\n\nconst refreshLabels = debounceMinor(() => {\n  const total = itemStates.size\n\n  Array.from(itemStates).forEach((item, index) => {\n    item.index = index + 1\n    item.total = total\n\n    if (isNull(item.label)) {\n      item.label = index + 1\n    }\n  })\n})\n\nconst state: TimelineState = reactive({\n  dashed: toRef(props, 'dashed'),\n  lineColor: toRef(props, 'lineColor'),\n  spacing: toRef(props, 'spacing'),\n  alternate: toRef(props, 'alternate'),\n  horizontal: toRef(props, 'horizontal'),\n  increaseItem,\n  decreaseItem,\n  handleSignalClick\n})\n\nprovide(TIMELINE_STATE, state)\n\nfunction increaseItem(item: ItemState) {\n  itemStates.add(item)\n  refreshLabels()\n}\n\nfunction decreaseItem(item: ItemState) {\n  itemStates.delete(item)\n  refreshLabels()\n}\n\nfunction handleSignalClick(label: string | number) {\n  emitEvent(props.onSignalClick, label)\n}\n</script>\n\n<template>\n  <div\n    :class=\"className\"\n    :style=\"{ height: props.horizontal && props.alternate ? `${height}px` : undefined }\"\n  >\n    <slot></slot>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, onMounted, onUpdated, reactive, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { timelineItemProps } from './props'\nimport { TIMELINE_STATE, timelineItemTypes } from './symbol'\n\nimport type { ItemState } from './symbol'\n\ndefineOptions({ name: 'TimelineItem' })\n\nconst _props = defineProps(timelineItemProps)\nconst props = useProps('timelineItem', _props, {\n  type: {\n    default: 'primary',\n    validator: value => timelineItemTypes.includes(value)\n  },\n  color: '',\n  label: {\n    default: null,\n    static: true\n  },\n  dashed: null,\n  lineColor: null,\n  spacing: null\n})\n\ndefineSlots<{\n  default: () => any,\n  signal: () => any,\n  line: () => any\n}>()\n\nconst timelineState = inject(TIMELINE_STATE, null)\n\nconst nh = useNameHelper('timeline')\nconst currentLabel = ref(props.label)\nconst content = ref<HTMLElement>()\n\nconst className = computed(() => {\n  return {\n    [nh.be('item')]: true,\n    [nh.bem('item', props.type)]: timelineItemTypes.includes(props.type)\n  }\n})\nconst itemStyle = computed(() => {\n  const spacing = props.spacing || props.spacing === 0 ? props.spacing : timelineState?.spacing\n  const style: Record<string, any> = {\n    [nh.cv('item-span')]: typeof spacing === 'number' ? `${spacing}px` : spacing\n  }\n\n  if (props.color) {\n    style[nh.cv('pointer-color')] = props.color\n    style[nh.cv('pointer-b-color')] = props.color\n  }\n\n  return style\n})\nconst lineStyle = computed(() => {\n  const isDashed = props.dashed ?? timelineState?.dashed ?? false\n  const color = props.lineColor ?? timelineState?.lineColor\n\n  return {\n    borderInlineStartStyle: isDashed ? ('dashed' as const) : undefined,\n    borderInlineStartColor: color\n  }\n})\n\ndefineExpose({ currentLabel, content })\n\nif (timelineState) {\n  const state: ItemState = reactive({\n    label: currentLabel,\n    index: 0,\n    total: 0,\n    height: 0\n  })\n\n  timelineState.increaseItem(state)\n\n  watch(() => timelineState.alternate, updateHeight)\n  watch(() => timelineState.horizontal, updateHeight)\n\n  onMounted(updateHeight)\n  onUpdated(updateHeight)\n\n  onBeforeUnmount(() => {\n    timelineState.decreaseItem(state)\n  })\n\n  function updateHeight() {\n    requestAnimationFrame(() => {\n      if (timelineState?.horizontal && content.value) {\n        state.height = content.value.scrollHeight\n      }\n    })\n  }\n}\n\nfunction handleSignalClick() {\n  emitEvent(props.onSignalClick, currentLabel.value)\n  timelineState?.handleSignalClick(currentLabel.value)\n}\n</script>\n\n<template>\n  <div :class=\"className\" :style=\"itemStyle\">\n    <div :class=\"nh.be('signal')\" @click=\"handleSignalClick\">\n      <slot name=\"signal\">\n        <div :class=\"nh.be('pointer')\"></div>\n      </slot>\n    </div>\n    <div :class=\"nh.be('line')\" :style=\"lineStyle\">\n      <slot name=\"line\"></slot>\n    </div>\n    <div ref=\"content\" :class=\"nh.be('content')\">\n      <slot></slot>\n    </div>\n  </div>\n</template>\n","import { booleanProp, buildProps, classProp, iconProp, styleProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { IconMinorProps } from '@/components/icon'\nimport type { ToastOptions, ToastPosition } from './symbol'\n\nexport const toastProps = buildProps({\n  bodyWidth: Number,\n  icon: iconProp,\n  iconProps: Object as PropType<IconMinorProps>,\n  position: String as PropType<ToastPosition>,\n  transitionName: String,\n  closable: booleanProp,\n  maskClose: booleanProp,\n  showMask: booleanProp,\n  maskClass: classProp,\n  maskStyle: styleProp,\n  parseHtml: booleanProp,\n  renderer: Function as PropType<(options: ToastOptions) => any>\n})\n\nexport type ToastProps = ExtractPropTypes<typeof toastProps>\nexport type ToastCProps = ConfigurableProps<ToastProps, 'renderer'>\n","import type { ComponentPublicInstance } from 'vue'\nimport type { ClassType, StyleType } from '@vexip-ui/config'\nimport type { IconMinorProps } from '@/components/icon'\n\nexport type ToastType = 'success' | 'warning' | 'error' | 'loading'\nexport type ToastPosition = 'top' | 'center' | 'bottom'\n\nexport interface ToastOptions extends Record<string, any> {\n  type?: ToastType | null,\n  content?: string,\n  icon?: Record<string, any> | (() => any) | null,\n  iconProps?: IconMinorProps,\n  position?: ToastPosition,\n  transitionName?: string,\n  closable?: boolean,\n  maskClose?: boolean,\n  showMask?: boolean,\n  maskClass?: ClassType,\n  maskStyle?: StyleType,\n  parseHtml?: boolean,\n  onClose?: () => void\n}\n\nexport interface ToastInstance extends ComponentPublicInstance {\n  openToast: (options: ToastOptions) => Promise<void>,\n  closeToast: () => void\n}\n\nexport const effectiveTypes = Object.freeze(['success', 'warning', 'error', 'loading'])\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, nextTick, onMounted, reactive } from 'vue'\n\nimport { createIconProp, useIcons, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\nimport { isFunction } from '@vexip-ui/utils'\nimport { toastProps } from './props'\nimport { effectiveTypes } from './symbol'\n\nimport type { ToastOptions, ToastType } from './symbol'\n\ndefineOptions({ name: 'Toast' })\n\nconst nh = useNameHelper('toast')\n\nconst _props = defineProps(toastProps)\nconst props = useProps('toast', _props, {\n  bodyWidth: 100,\n  icon: createIconProp(),\n  iconProps: () => ({}),\n  position: 'center',\n  transitionName: () => nh.ns('ease'),\n  closable: false,\n  maskClose: false,\n  showMask: false,\n  maskClass: null,\n  maskStyle: null,\n  renderer: {\n    default: null,\n    isFunc: true,\n    static: true\n  },\n  parseHtml: false\n})\n\nconst getIndex = useZIndex()\nconst icons = useIcons()\n\nconst predefinedIcons = computed(() => ({\n  success: icons.value.success,\n  warning: icons.value.warning,\n  error: icons.value.error,\n  loading: icons.value.loading\n}))\n\nconst state = reactive({\n  visible: false,\n  zIndex: 0,\n  type: null as ToastType | null,\n  content: '',\n  icon: props.icon,\n  iconProps: props.iconProps as any,\n  position: props.position,\n  transition: props.transitionName,\n  closable: props.closable,\n  maskClose: props.maskClose,\n  showMask: props.showMask,\n  maskClass: props.maskClass as any,\n  maskStyle: props.maskStyle as any,\n  parseHtml: props.parseHtml,\n  textOnly: false,\n  renderer: props.renderer,\n  onClose: null as (() => void) | null\n})\n\nconst mountedPromise = new Promise<void>(resolve => {\n  onMounted(() => {\n    nextTick(resolve)\n  })\n})\n\ndefineExpose({ state, openToast, closeToast, handleReset })\n\nasync function openToast(options: ToastOptions) {\n  await mountedPromise\n\n  state.zIndex = getIndex()\n  state.type = options.type ?? null\n  state.content = options.content ?? ''\n  state.icon = options.icon ?? props.icon\n  state.iconProps = options.iconProps ?? props.iconProps\n  state.position = options.position ?? props.position\n  state.transition = options.transitionName ?? props.transitionName\n  state.closable = options.closable ?? props.closable\n  state.maskClose = options.maskClose ?? props.maskClose\n  state.showMask = options.showMask ?? props.showMask\n  state.maskClass = options.maskClass ?? props.maskClass\n  state.maskStyle = options.maskStyle ?? props.maskStyle\n  state.parseHtml = options.parseHtml ?? props.parseHtml\n  state.renderer = isFunction(options.renderer) ? options.renderer : props.renderer\n  state.onClose = options.onClose || null\n\n  state.textOnly = !state.icon && !(state.type && effectiveTypes.includes(state.type))\n\n  if (isFunction(state.renderer)) {\n    const render = state.renderer\n\n    state.renderer = () => render(options)\n    state.textOnly = false\n  }\n\n  state.visible = true\n}\n\nfunction closeToast() {\n  state.visible = false\n\n  if (isFunction(state.onClose)) {\n    state.onClose()\n  }\n}\n\nfunction handleReset() {\n  if (state.visible) return\n\n  state.type = null\n  state.content = ''\n  state.icon = props.icon\n  state.iconProps = props.iconProps\n  state.position = props.position\n  state.transition = props.transitionName\n  state.closable = props.closable\n  state.maskClose = props.maskClose\n  state.showMask = props.showMask\n  state.maskClass = props.maskClass\n  state.maskStyle = props.maskStyle\n  state.parseHtml = props.parseHtml\n  state.textOnly = false\n  state.renderer = props.renderer\n  state.onClose = null\n}\n\nfunction handleWrapperClick() {\n  if (state.visible && state.closable) {\n    closeToast()\n  }\n}\n\nfunction handleMaskClick() {\n  if (state.visible && state.maskClose) {\n    closeToast()\n  }\n}\n</script>\n\n<template>\n  <div\n    :class=\"{\n      [nh.b()]: true,\n      [nh.bs('vars')]: true,\n      [nh.bm('text-only')]: state.textOnly\n    }\"\n    role=\"alert\"\n    :style=\"{\n      zIndex: state.zIndex\n    }\"\n    aria-atomic=\"true\"\n    aria-live=\"assertive\"\n  >\n    <Transition :name=\"nh.ns('fade')\">\n      <div\n        v-if=\"state.showMask && state.visible\"\n        :class=\"[nh.be('mask'), state.maskClass]\"\n        :style=\"state.maskStyle\"\n        @click=\"handleMaskClick\"\n        @wheel.stop.prevent\n      ></div>\n    </Transition>\n    <Transition :name=\"state.transition\">\n      <div\n        v-if=\"state.visible\"\n        :class=\"{\n          [nh.be('wrapper')]: true,\n          [nh.bem('wrapper', state.position)]: state.position !== 'center',\n          [nh.bem('wrapper', 'closable')]: state.closable\n        }\"\n        @click=\"handleWrapperClick\"\n        @wheel.stop.prevent\n      >\n        <Renderer v-if=\"isFunction(state.renderer)\" :renderer=\"state.renderer\"></Renderer>\n        <template v-else>\n          <div\n            v-if=\"state.icon || (state.type && effectiveTypes.includes(state.type))\"\n            :class=\"nh.be('icon')\"\n          >\n            <Icon\n              v-if=\"state.icon\"\n              :icon=\"state.icon\"\n              :scale=\"1.8\"\n              v-bind=\"state.iconProps\"\n            ></Icon>\n            <Icon\n              v-else\n              v-bind=\"{ ...predefinedIcons[state.type!], scale: 1.8, ...state.iconProps }\"\n            ></Icon>\n          </div>\n          <div v-if=\"state.parseHtml\" :class=\"nh.be('content')\" v-html=\"state.content\"></div>\n          <div v-else :class=\"nh.be('content')\">\n            {{ state.content }}\n          </div>\n        </template>\n      </div>\n    </Transition>\n  </div>\n</template>\n","import { createApp, createVNode, markRaw, render } from 'vue'\n\nimport Component from './toast.vue'\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\nimport { destroyObject, isClient, noop, toNumber } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { MaybeInstance } from '@vexip-ui/hooks'\nimport type { ToastInstance, ToastOptions, ToastType } from './symbol'\n\nexport { toastProps } from './props'\n\nexport type { ToastProps, ToastCProps } from './props'\nexport type { ToastType, ToastOptions }\n\ntype FuzzyOptions = string | ToastOptions\n\ninterface AipMethod {\n  (options: ToastOptions): () => void,\n  (content: string, duration?: number): () => void,\n  /** @internal */\n  (options: FuzzyOptions, duration?: number): () => void\n}\n\nconst conveniences: Record<ToastType, Record<string, any>> = {\n  success: {},\n  warning: {},\n  error: {},\n  loading: {\n    showMask: true\n  }\n}\n\nexport class ToastManager {\n  name: string\n  defaults: Record<string, unknown>\n\n  open: AipMethod\n  success: AipMethod\n  warning: AipMethod\n  error: AipMethod\n  loading: AipMethod\n\n  private _mountedApp: App<unknown> | null\n  private _instance: ToastInstance | null\n  private _innerApp: App<unknown> | null\n  private _container: HTMLElement | null\n  private _timer: ReturnType<typeof setTimeout> | null\n  private _wrapper: HTMLElement | SVGElement | null\n  private _mountedEl: HTMLElement | null\n\n  constructor(options: Partial<ToastOptions> = {}) {\n    options = {\n      ...options,\n      duration: options.duration ? toNumber(options.duration) : 2000\n    }\n\n    this._mountedApp = null\n    this._instance = null\n    this._innerApp = null\n    this._container = null\n    this._timer = null\n    this._wrapper = null\n    this._mountedEl = null\n    this.name = 'Toast'\n    this.defaults = {}\n\n    this.config(options)\n\n    this.open = (content: FuzzyOptions, duration?: number) => {\n      return this._open(null, content, duration)\n    }\n\n    this.success = (content: FuzzyOptions, duration?: number) => {\n      return this._open('success', content, duration)\n    }\n\n    this.warning = (content: FuzzyOptions, duration?: number) => {\n      return this._open('warning', content, duration)\n    }\n\n    this.error = (content: FuzzyOptions, duration?: number) => {\n      return this._open('error', content, duration)\n    }\n\n    this.loading = (content: FuzzyOptions, duration?: number) => {\n      return this._open('loading', content, duration)\n    }\n  }\n\n  close() {\n    this._timer && clearTimeout(this._timer)\n    this._getInstance()?.closeToast()\n  }\n\n  config(options: Record<string, unknown>) {\n    this.defaults = { ...this.defaults, ...options }\n  }\n\n  clone() {\n    const manager = new ToastManager(this.defaults)\n\n    manager._mountedApp = this._mountedApp\n\n    return manager\n  }\n\n  destroy() {\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\n    this._innerApp?.unmount()\n    this._container && render(null, this._container)\n    destroyObject(this)\n  }\n\n  isDestroyed() {\n    return false\n  }\n\n  install(app: App, options: Partial<ToastOptions> & { property?: string } = {}) {\n    const { property, ...others } = options\n\n    this.config(others)\n    this._mountedApp = app\n\n    if (property || !app.config.globalProperties.$toast) {\n      app.config.globalProperties[property || '$toast'] = this\n    }\n  }\n\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\n    if (!isClient) return\n\n    const el = unrefElement(target)\n\n    if (el) {\n      this._wrapper = el\n\n      if (this._instance) {\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\n      } else {\n        this._getInstance()\n      }\n    }\n  }\n\n  private _getInstance() {\n    if (!this._instance && isClient) {\n      if (!this._mountedApp) {\n        console.warn('[vexip-ui:Toast]: App missing, the plugin maybe not installed.')\n\n        this._container = document.createElement('div')\n        this._innerApp = createApp(Component)\n        this._instance = this._innerApp.mount(this._container) as ToastInstance\n      } else {\n        const vnode = createVNode(Component, null, null)\n\n        this._container = document.createElement('div')\n        vnode.appContext = this._mountedApp._context\n\n        render(vnode, this._container)\n\n        this._instance = proxyExposed<ToastInstance>(vnode)\n      }\n\n      this._mountedEl = this._container.firstElementChild as HTMLElement\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\n    }\n\n    return this._instance\n  }\n\n  private _open(type: null | ToastType, content: FuzzyOptions, _duration?: number) {\n    if (!isClient) {\n      return noop\n    }\n\n    this._timer && clearTimeout(this._timer)\n\n    const options = typeof content === 'string' ? { content, duration: _duration } : content\n    const convenienceOptions = type ? (conveniences[type] ?? {}) : {}\n\n    const userCloseFn = options.onClose\n    const onClose = () => {\n      this._timer && clearTimeout(this._timer)\n\n      if (typeof userCloseFn === 'function') {\n        return userCloseFn()\n      }\n    }\n\n    const toast = this._getInstance()!\n    const item: ToastOptions = {\n      ...this.defaults,\n      ...convenienceOptions,\n      ...options,\n      type: type ?? options.type,\n      onClose\n    }\n\n    if (item.icon && typeof item.icon !== 'function') {\n      item.icon = markRaw(item.icon)\n    }\n\n    toast.openToast(item)\n\n    const duration = typeof item.duration === 'number' ? item.duration : 2000\n\n    if (duration >= 500) {\n      this._timer = setTimeout(() => {\n        toast.closeToast()\n      }, duration)\n    }\n\n    return () => {\n      this._timer && clearTimeout(this._timer)\n      toast.closeToast()\n    }\n  }\n}\n\nexport const Toast = new ToastManager()\n","import { booleanProp, booleanStringProp, buildProps, eventProp, localeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { TourSignType, TourSlots, TourStepOptions, TourStepRenderFn, TourType } from './symbol'\n\nexport const tourProps = buildProps({\n  locale: localeProp('tour'),\n  active: booleanProp,\n  index: Number,\n  steps: Array as PropType<TourStepOptions[]>,\n  type: String as PropType<TourType>,\n  hideMask: booleanProp,\n  signType: String as PropType<TourSignType>,\n  padding: [Number, Array] as PropType<number | number[]>,\n  closable: booleanProp,\n  permeable: booleanProp,\n  transfer: booleanStringProp,\n  slots: Object as PropType<TourSlots>,\n  onToggle: eventProp<(active: boolean) => void>(),\n  onChange: eventProp<(index: number, step: TourStepOptions) => void>(),\n  onClose: eventProp(),\n  onMaskClick: eventProp<(event: MouseEvent) => void>()\n})\n\nexport type TourProps = ExtractPropTypes<typeof tourProps>\nexport type TourCProps = ConfigurableProps<ExtractPropTypes<typeof tourProps>>\n\nexport const tourStepProps = buildProps({\n  target: [String, Object, Function] as PropType<string | object | (() => any)>,\n  placement: String as PropType<Placement>,\n  title: String,\n  content: String,\n  order: Number,\n  type: String as PropType<TourType>,\n  renderer: Function as PropType<TourStepRenderFn>,\n  onPrev: eventProp(),\n  onNext: eventProp()\n})\n\nexport type TourStepProps = ExtractPropTypes<typeof tourStepProps>\nexport type TourStepCProps = ConfigurableProps<ExtractPropTypes<typeof tourStepProps>>\n","import type { InjectionKey, MaybeRef } from 'vue'\nimport type { MaybeElement, MaybeInstance, Placement } from '@vexip-ui/hooks'\nimport type { BubbleType } from '@/components/bubble'\n\nexport type TourType = BubbleType\nexport type TourSignType = 'dot' | 'bar' | 'count'\n\nexport interface TourVirtual {\n  getBoundingClientRect(): { top: number, left: number, width: number, height: number }\n}\n\nexport type TourTarget =\n  | MaybeRef<string | MaybeInstance | TourVirtual>\n  | (() => string | MaybeElement | TourVirtual)\n\nexport interface TourPayload {\n  start(): void,\n  prev(): void,\n  next(autoClose?: boolean): void,\n  close(): void\n}\n\nexport type TourStepRenderFn = (payload: TourPayload) => any\n\nexport interface TourStepOptions {\n  target?: TourTarget,\n  placement?: Placement,\n  title?: string,\n  content?: string,\n  order?: number,\n  type?: TourType,\n  renderer?: TourStepRenderFn\n}\n\nexport type TourSlotParams = TourPayload & { step: TourStepOptions, index: number }\nexport type TourCommonSLot = (params: TourSlotParams) => any\n\nexport interface TourState {\n  increaseStep(step: TourStepOptions): void,\n  decreaseStep(step: TourStepOptions): void\n}\n\nexport interface TourSlots {\n  /**\n   * @internal\n   */\n  default?: () => any,\n  header?: TourCommonSLot,\n  title?: TourCommonSLot,\n  close?: TourCommonSLot,\n  body?: TourCommonSLot,\n  footer?: TourCommonSLot,\n  sign?: TourCommonSLot,\n  actions?: TourCommonSLot\n}\n\nexport const TOUR_STATE = '___VXP_TOUR_STATE' as unknown as InjectionKey<TourState>\n","<script setup lang=\"ts\">\nimport { Bubble } from '@/components/bubble'\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Masker } from '@/components/masker'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, provide, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\n\nimport {\n  emitEvent,\n  getStepByWord,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { unrefElement, useModifier, usePopper } from '@vexip-ui/hooks'\nimport { callIfFunc, decide, getGlobalCount, isClient, isFunction } from '@vexip-ui/utils'\nimport { tourProps } from './props'\nimport { TOUR_STATE } from './symbol'\n\nimport type { BubbleExposed } from '@/components/bubble'\nimport type { MaskerExposed } from '@/components/masker'\nimport type { TourSlots, TourStepOptions } from './symbol'\n\ndefineOptions({\n  name: 'Tour',\n  inheritAttrs: false\n})\n\nconst _props = defineProps(tourProps)\nconst props = useProps('tour', _props, {\n  locale: null,\n  active: false,\n  index: {\n    static: true,\n    default: 0,\n    validator: value => value >= 0\n  },\n  steps: {\n    static: true,\n    default: () => []\n  },\n  type: 'default',\n  hideMask: false,\n  signType: 'dot',\n  padding: 10,\n  closable: true,\n  permeable: false,\n  transfer: false,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:active', 'update:index'])\n\ndefineSlots<TourSlots>()\n\nconst idIndex = `${getGlobalCount()}`\n\nconst nh = useNameHelper('tour')\nconst locale = useLocale('tour', toRef(props, 'locale'))\nconst icons = useIcons()\n\nconst currentActive = ref(props.active)\nconst currentIndex = ref(props.index)\nconst tempSteps: Set<TourStepOptions> = reactive(new Set<any>())\nconst currentRect = ref<number[]>()\nconst sideRects = ref<(number | string)[][]>()\n\nconst masker = ref<MaskerExposed>()\nconst bubble = ref<BubbleExposed>()\nconst wrapper = computed(() => masker.value?.wrapper)\n\nuseModifier({\n  target: wrapper,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (!currentActive.value) return\n\n    decide(\n      [\n        [() => modifier.left || modifier.up, prev],\n        [() => modifier.right || modifier.down, next],\n        [() => modifier.escape, handleClose]\n      ],\n      {\n        beforeMatchAny: () => {\n          event.preventDefault()\n          event.stopPropagation()\n        },\n        afterMatchAny: modifier.resetAll\n      }\n    )\n  }\n})\n\nconst allSteps = computed(() => {\n  return Array.from(tempSteps)\n    .concat(props.steps)\n    .sort((prev, next) => (prev.order || 0) - (next.order || 0))\n})\nconst currentStep = computed(() => allSteps.value[currentIndex.value])\nconst type = computed(() => {\n  const type = currentStep.value?.type || props.type\n\n  return type === 'default' ? undefined : type\n})\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('hide-mask')]: props.hideMask,\n      [nh.bm('permeable')]: props.permeable\n    }\n  ]\n})\nconst padding = computed(() => {\n  if (Array.isArray(props.padding)) {\n    return props.padding.length === 2\n      ? [props.padding[0], props.padding[1], props.padding[0], props.padding[1]]\n      : props.padding\n  } else {\n    return new Array<number>(4).fill(props.padding)\n  }\n})\nconst maskId = computed(() => `${nh.bs(idIndex)}__mask`)\n\nconst { reference, placement, updatePopper } = usePopper({\n  wrapper,\n  placement: computed(() => currentStep.value?.placement || 'bottom'),\n  popper: computed(() => bubble.value?.$el),\n  arrow: computed(() => bubble.value?.arrow),\n  shift: { crossAxis: true },\n  autoUpdate: false\n})\n\nwatch(\n  () => props.active,\n  value => {\n    if (value) {\n      start()\n    } else {\n      currentActive.value = value\n    }\n  }\n)\nwatch(\n  () => props.index,\n  value => {\n    currentIndex.value = Math.max(0, value)\n  }\n)\nwatch(\n  [currentActive, currentStep],\n  () => {\n    sideRects.value = undefined\n\n    if (!isClient || !currentActive.value || !currentStep.value) return\n\n    const target = unrefElement(callIfFunc(currentStep.value.target) as HTMLElement)\n\n    if (!target) {\n      currentRect.value = undefined\n      return\n    }\n\n    const { top, left, width, height } = target.getBoundingClientRect()\n\n    currentRect.value = [\n      left - padding.value[3],\n      top - padding.value[0],\n      width + padding.value[1] + padding.value[3],\n      height + padding.value[0] + padding.value[2]\n    ]\n\n    if (props.permeable) {\n      const [x, y, w, h] = currentRect.value\n\n      sideRects.value = [\n        [0, 0, '100%', y],\n        [x + w, 0, `calc(100% - ${x + w}px)`, '100%'],\n        [0, y + h, '100%', `calc(100% - ${y + h}px)`],\n        [0, 0, x, '100%']\n      ]\n    }\n\n    updatePopper()\n  },\n  { immediate: true, flush: 'post' }\n)\n\nprovide(TOUR_STATE, {\n  increaseStep,\n  decreaseStep\n})\n\ndefineExpose({\n  wrapper,\n  currentActive,\n  currentIndex,\n  currentStep,\n  allSteps,\n  start,\n  prev,\n  next,\n  close\n})\n\nconst actions = { start, prev, next, close }\nconst slotParams = shallowReadonly(\n  reactive({\n    ...actions,\n    step: currentStep,\n    index: currentIndex\n  })\n)\n\nfunction increaseStep(step: TourStepOptions) {\n  tempSteps.add(step)\n}\n\nfunction decreaseStep(step: TourStepOptions) {\n  tempSteps.delete(step)\n}\n\nfunction start() {\n  if (currentActive.value) return\n\n  currentActive.value = true\n  emit('update:active', true)\n  emitEvent(props.onToggle, true)\n\n  if (currentIndex.value) {\n    currentIndex.value = 0\n    emit('update:index', 0)\n  }\n}\n\nfunction prev() {\n  if (!currentActive.value || currentIndex.value <= 0) return\n\n  --currentIndex.value\n  emit('update:index', currentIndex.value)\n  emitEvent(props.onChange, currentIndex.value, currentStep.value)\n}\n\nfunction next(autoClose = true) {\n  if (!currentActive.value) return\n\n  if (currentIndex.value >= allSteps.value.length - 1) {\n    if (autoClose) {\n      close()\n    }\n\n    return\n  }\n\n  ++currentIndex.value\n  emit('update:index', currentIndex.value)\n  emitEvent(props.onChange, currentIndex.value, currentStep.value)\n}\n\nfunction close() {\n  if (!currentActive.value) return\n\n  currentActive.value = false\n  emit('update:active', false)\n  emitEvent(props.onToggle, false)\n}\n\nfunction handleClose() {\n  if (!currentActive.value) return\n\n  close()\n  emitEvent(props.onClose)\n}\n</script>\n\n<template>\n  <div v-show=\"false\" role=\"none\" aria-hidden=\"true\">\n    <slot></slot>\n  </div>\n  <Masker\n    v-bind=\"$attrs\"\n    ref=\"masker\"\n    v-model:active=\"currentActive\"\n    :inherit=\"props.inherit\"\n    :class=\"className\"\n    :transfer=\"transfer\"\n    auto-remove\n    transition-name=\"\"\n    :disabled=\"props.hideMask\"\n    @show=\"updatePopper\"\n    @hide=\"currentRect = undefined\"\n    @mask-click=\"emitEvent(props.onMaskClick, $event)\"\n  >\n    <template #default=\"{ show }\">\n      <div\n        v-if=\"currentRect\"\n        ref=\"reference\"\n        :class=\"nh.be('reference')\"\n        role=\"none\"\n        aria-hidden=\"true\"\n        :style=\"{\n          top: `${currentRect[1]}px`,\n          left: `${currentRect[0]}px`,\n          width: `${currentRect[2]}px`,\n          height: `${currentRect[3]}px`\n        }\"\n      ></div>\n      <Transition appear :name=\"nh.ns('fade')\">\n        <Bubble\n          v-if=\"show && currentStep\"\n          ref=\"bubble\"\n          inherit\n          :class=\"[\n            nh.be('bubble'),\n            !currentRect && nh.bem('bubble', 'center'),\n            type && nh.bem('bubble', 'typed'),\n            type && nh.bem('bubble', type)\n          ]\"\n          :content-class=\"nh.be('step')\"\n          :placement=\"placement\"\n          :type=\"currentStep.type || props.type\"\n        >\n          <Renderer\n            v-if=\"isFunction(currentStep.renderer)\"\n            :renderer=\"currentStep.renderer\"\n            :data=\"actions\"\n          ></Renderer>\n          <template v-else>\n            <div :class=\"nh.be('header')\">\n              <slot name=\"header\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.header\" :data=\"slotParams\">\n                  <div :class=\"nh.be('title')\">\n                    <slot name=\"title\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.title\" :data=\"slotParams\">\n                        {{ currentStep.title ?? getStepByWord(locale.stepCount, currentIndex) }}\n                      </Renderer>\n                    </slot>\n                  </div>\n                  <button\n                    v-if=\"props.closable\"\n                    type=\"button\"\n                    :class=\"nh.be('close')\"\n                    @click=\"handleClose\"\n                  >\n                    <slot name=\"close\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.close\" :data=\"slotParams\">\n                        <Icon\n                          v-bind=\"icons.close\"\n                          :scale=\"+(icons.close.scale || 1) * 1.2\"\n                          label=\"close\"\n                        ></Icon>\n                      </Renderer>\n                    </slot>\n                  </button>\n                </Renderer>\n              </slot>\n            </div>\n            <div :class=\"nh.be('content')\">\n              <slot name=\"body\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.body\" :data=\"slotParams\">\n                  {{ currentStep.content }}\n                </Renderer>\n              </slot>\n            </div>\n            <div :class=\"nh.be('footer')\">\n              <slot name=\"footer\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.footer\" :data=\"slotParams\">\n                  <div :class=\"[nh.be('sign'), nh.bem('sign', props.signType)]\">\n                    <slot name=\"sign\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.sign\" :data=\"slotParams\">\n                        <template v-if=\"props.signType === 'count'\">\n                          <span>{{ currentIndex + 1 }}</span>\n                          <span :class=\"nh.be('count-sep')\">/</span>\n                          <span>{{ allSteps.length }}</span>\n                        </template>\n                        <template v-else>\n                          <span\n                            v-for=\"n in allSteps.length\"\n                            :key=\"n\"\n                            :class=\"[\n                              nh.be(`sign-${props.signType === 'dot' ? 'dot' : 'bar'}`),\n                              n - 1 === currentIndex &&\n                                nh.bem(`sign-${props.signType === 'dot' ? 'dot' : 'bar'}`, 'active')\n                            ]\"\n                          ></span>\n                        </template>\n                      </Renderer>\n                    </slot>\n                  </div>\n                  <span style=\"flex: auto\" role=\"none\"></span>\n                  <slot name=\"actions\" v-bind=\"slotParams\">\n                    <Renderer :renderer=\"props.slots.actions\" :data=\"slotParams\">\n                      <Button\n                        v-if=\"currentIndex > 0\"\n                        inherit\n                        :class=\"[nh.be('action'), nh.bem('action', 'prev')]\"\n                        size=\"small\"\n                        :text=\"!!type\"\n                        @click=\"prev\"\n                      >\n                        {{ locale.prev }}\n                      </Button>\n                      <Button\n                        v-if=\"currentIndex <= allSteps.length - 1\"\n                        inherit\n                        :class=\"[nh.be('action'), nh.bem('action', 'next')]\"\n                        :type=\"type ? 'default' : 'primary'\"\n                        size=\"small\"\n                        @click=\"next()\"\n                      >\n                        {{ currentIndex === allSteps.length - 1 ? locale.done : locale.next }}\n                      </Button>\n                    </Renderer>\n                  </slot>\n                </Renderer>\n              </slot>\n            </div>\n          </template>\n        </Bubble>\n      </Transition>\n    </template>\n    <template #mask>\n      <svg style=\"width: 100%; height: 100%\">\n        <defs>\n          <mask :id=\"maskId\">\n            <rect\n              x=\"0\"\n              y=\"0\"\n              width=\"100%\"\n              height=\"100%\"\n              fill=\"white\"\n            />\n            <rect\n              v-if=\"currentRect\"\n              :class=\"[nh.be('hollow'), nh.bem('hollow', 'active')]\"\n              :x=\"currentRect[0]\"\n              :y=\"currentRect[1]\"\n              :width=\"currentRect[2]\"\n              :height=\"currentRect[3]\"\n              fill=\"black\"\n            />\n          </mask>\n        </defs>\n        <rect\n          x=\"0\"\n          y=\"0\"\n          width=\"100%\"\n          height=\"100%\"\n          fill=\"rgba(0, 0, 0, 45%)\"\n          :mask=\"`url(#${maskId})`\"\n        />\n        <g v-if=\"sideRects?.length\" fill=\"transparent\" style=\"pointer-events: auto\">\n          <rect\n            v-for=\"(rect, index) in sideRects\"\n            :key=\"index\"\n            :x=\"rect[0]\"\n            :y=\"rect[1]\"\n            :width=\"rect[2]\"\n            :height=\"rect[3]\"\n          />\n        </g>\n      </svg>\n    </template>\n  </Masker>\n</template>\n","import { defineComponent, inject, onBeforeUnmount, reactive, renderSlot, watch } from 'vue'\n\nimport { useProps } from '@vexip-ui/config'\nimport { tourStepProps } from './props'\nimport { TOUR_STATE } from './symbol'\n\nimport type { TourPayload, TourStepOptions } from './symbol'\n\ntype StepPropKey = keyof typeof tourStepProps\n\nconst propKeys = Object.keys(tourStepProps) as StepPropKey[]\nconst deepProps: StepPropKey[] = []\nconst ignoredProps: StepPropKey[] = ['renderer']\n\nconst funcProp = {\n  default: null,\n  isFunc: true,\n  static: true\n}\n\nexport default defineComponent({\n  name: 'TourStep',\n  props: tourStepProps,\n  setup(_props, { slots }) {\n    const props = useProps('tourStep', _props, {\n      target: {\n        default: null,\n        static: true\n      },\n      placement: 'bottom',\n      title: '',\n      content: '',\n      order: {\n        default: 0,\n        static: true\n      },\n      type: 'default',\n      renderer: funcProp\n    })\n\n    const tourState = inject(TOUR_STATE, null)\n    const options = reactive({}) as TourStepOptions\n\n    for (const key of propKeys) {\n      if (ignoredProps.includes(key)) continue\n\n      watch(\n        () => props[key],\n        value => {\n          ;(options[key as keyof TourStepOptions] as any) = value\n        },\n        { immediate: true, deep: deepProps.includes(key) }\n      )\n    }\n\n    watch(() => props.renderer, setRenderer)\n\n    setRenderer()\n\n    tourState?.increaseStep(options)\n\n    onBeforeUnmount(() => {\n      tourState?.decreaseStep(options)\n    })\n\n    function setRenderer() {\n      if (typeof slots.default === 'function') {\n        options.renderer = (payload: TourPayload) => renderSlot(slots, 'default', payload as any)\n      } else if (typeof props.renderer === 'function') {\n        options.renderer = props.renderer\n      } else {\n        options.renderer = undefined\n      }\n    }\n\n    return () => null\n  }\n})\n","import { Checkbox } from '@/components/checkbox'\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { Input } from '@/components/input'\nimport { NumberInput } from '@/components/number-input'\nimport { ResizeObserver } from '@/components/resize-observer'\nimport { VirtualList } from '@/components/virtual-list'\n\nimport {\n  computed,\n  defineComponent,\n  reactive,\n  ref,\n  renderSlot,\n  toRef,\n  watch,\n  watchEffect\n} from 'vue'\n\nimport { stateProp, useIcons, useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useRtl } from '@vexip-ui/hooks'\nimport { boundRange, decide } from '@vexip-ui/utils'\n\nimport type { PropType } from 'vue'\nimport type { VirtualListExposed } from '@/components/virtual-list'\nimport type { LocaleConfig } from '@vexip-ui/config'\nimport type { TransferOptionState } from './symbol'\n\nexport default defineComponent({\n  name: 'TransferPanel',\n  props: {\n    type: {\n      type: String as PropType<'source' | 'target'>,\n      default: null\n    },\n    state: {\n      type: stateProp,\n      default: 'default'\n    },\n    selected: {\n      type: Set as PropType<Set<string | number>>,\n      default: () => new Set()\n    },\n    paged: {\n      type: Boolean,\n      default: false\n    },\n    filter: {\n      type: Function as PropType<(value: string, options: TransferOptionState) => boolean>,\n      default: null\n    },\n    disabled: {\n      type: Boolean,\n      default: false\n    },\n    title: {\n      type: String,\n      default: ''\n    },\n    options: {\n      type: Array as PropType<TransferOptionState[]>,\n      default: () => []\n    },\n    emptyText: {\n      type: String,\n      default: '暂无数据'\n    },\n    optionHeight: {\n      type: Number,\n      default: 32\n    },\n    deepState: {\n      type: Boolean,\n      default: false\n    },\n    loading: {\n      type: Boolean,\n      default: false\n    },\n    loadingIcon: {\n      type: [Object, Function],\n      default: null\n    },\n    loadingLock: {\n      type: Boolean,\n      default: false\n    },\n    loadingEffect: {\n      type: String,\n      default: null\n    },\n    locale: {\n      type: Object as PropType<LocaleConfig['transfer']>,\n      default: () => ({})\n    }\n  },\n  emits: ['update:selected', 'select', 'enter', 'switch'],\n  setup(props, { slots, emit }) {\n    const nh = useNameHelper('transfer')\n    const icons = useIcons()\n\n    const { isRtl } = useRtl()\n\n    const currentSelected = ref(new Set(props.selected))\n    const pageSize = ref(10)\n    const currentPage = ref(1)\n    const currentMark = ref<string | number | null>(null)\n    const currentHitting = ref(-1)\n    const currentFilter = ref('')\n    const searching = ref(false)\n\n    const header = ref<HTMLElement>()\n    const body = ref<HTMLElement>()\n    const footer = ref<HTMLElement>()\n    const search = ref<HTMLElement>()\n    const input = ref<InstanceType<typeof Input>>()\n    const list = ref<VirtualListExposed>()\n\n    let bodyRealHeight = 0\n    let lastSelected: string | number | null = null\n    let keyUsed = false\n\n    const { target: wrapper, modifier } = useModifier({\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        decide(\n          [\n            [\n              () => modifier.up || modifier.down,\n              () => {\n                if (!keyUsed && currentHitting.value < 0) {\n                  keyUsed = true\n\n                  if (lastSelected) {\n                    currentHitting.value = props.options.findIndex(\n                      option => option.value === lastSelected\n                    )\n                  } else if (list.value) {\n                    currentHitting.value = Math.round(list.value.scrollOffset / props.optionHeight)\n                  }\n\n                  currentHitting.value = currentHitting.value === -1 ? 0 : currentHitting.value\n                } else {\n                  currentHitting.value = boundRange(\n                    findEnabledIndex(\n                      currentHitting.value + (modifier.up ? -1 : 1),\n                      modifier.up ? -1 : 1\n                    ),\n                    0,\n                    currentOptions.value.length - 1\n                  )\n                }\n\n                if (!props.paged) {\n                  ensureOptionInView(currentHitting.value, modifier.up ? 'top' : 'bottom')\n                }\n              }\n            ],\n            [\n              () => props.paged && (modifier.left || modifier.right) && event.ctrlKey,\n              () => {\n                handlePageChange(currentPage.value + (modifier.left ? -1 : 1))\n                currentHitting.value = 0\n              }\n            ],\n            [\n              () =>\n                (props.type === 'source' && modifier.right) ||\n                (props.type === 'target' && modifier.left),\n              () => {\n                keyUsed = false\n                currentHitting.value = -1\n                lastSelected = null\n                emit('switch')\n              }\n            ],\n            [\n              () => modifier.space,\n              () => {\n                const option = currentOptions.value[currentHitting.value]\n\n                if (option) {\n                  currentSelected.value[currentSelected.value.has(option.value) ? 'delete' : 'add'](\n                    option.value\n                  )\n                  emitSelectedChange()\n                }\n              }\n            ],\n            [() => modifier.enter, () => emit('enter')],\n            [\n              () => typeof props.filter === 'function' && !!input.value && modifier['ctrl+f'],\n              () => {\n                event.stopPropagation()\n                input.value!.focus()\n              }\n            ]\n          ],\n          {\n            beforeMatchAny: () => event.preventDefault(),\n            afterMatchAny: modifier.resetAll\n          }\n        )\n      }\n    })\n\n    const className = computed(() => {\n      return {\n        [nh.be('panel')]: true,\n        [nh.bem('panel', props.state)]: props.state !== 'default',\n        [nh.bem('panel', 'disabled')]: props.disabled\n      }\n    })\n    const visibleOptions = computed(() => {\n      const filter = props.filter\n      const filterValue = currentFilter.value\n\n      if (filter && filterValue) {\n        return props.options.filter(option => filter(filterValue, option))\n      }\n\n      return props.options\n    })\n    const optionSize = computed(() => visibleOptions.value.length)\n    const pagedOptions = computed(() => {\n      return visibleOptions.value.slice(\n        (currentPage.value - 1) * pageSize.value,\n        currentPage.value * pageSize.value\n      )\n    })\n    const currentOptions = computed(() => (props.paged ? pagedOptions.value : visibleOptions.value))\n    const totalPages = computed(() => Math.ceil(optionSize.value / (pageSize.value || 1)))\n\n    watch(\n      () => props.selected,\n      value => {\n        currentSelected.value = value\n      }\n    )\n    watch(optionSize, () => {\n      keyUsed = false\n      currentHitting.value = -1\n      lastSelected = null\n    })\n\n    const partial = ref(false)\n    const allSelected = ref(false)\n\n    watchEffect(() => {\n      const options = visibleOptions.value\n      const selected = currentSelected.value\n\n      let hasSelected = false\n      let hasUnselected = false\n\n      for (let i = 0, len = optionSize.value; i < len; ++i) {\n        const option = options[i]\n\n        if (!option.disabled) {\n          if (selected.has(option.value)) {\n            hasSelected = true\n          } else {\n            hasUnselected = true\n          }\n        }\n\n        if (hasSelected && hasUnselected) {\n          break\n        }\n      }\n\n      allSelected.value = hasSelected && !hasUnselected\n      partial.value = !allSelected.value && selected.size > 0\n    })\n\n    function computePageSize() {\n      requestAnimationFrame(() => {\n        const bodyEl = body.value || list.value?.wrapper\n\n        if (bodyEl) {\n          const style = getComputedStyle(bodyEl)\n          const paddingTop = parseInt(style.paddingTop)\n          const paddingBottom = parseInt(style.paddingBottom)\n          const innerHeight = bodyEl.offsetHeight - paddingTop - paddingBottom\n\n          bodyRealHeight = innerHeight\n          pageSize.value = Math.floor(innerHeight / (props.optionHeight || 1))\n        }\n      })\n    }\n\n    function toggleSelect(option: TransferOptionState) {\n      if (props.disabled || option.disabled) return\n\n      if (currentMark.value && modifier.shift) {\n        handleRangeSelect(currentMark.value, option.value)\n        return\n      }\n\n      if (currentSelected.value.has(option.value)) {\n        currentSelected.value.delete(option.value)\n      } else {\n        currentSelected.value.add(option.value)\n      }\n\n      keyUsed = false\n      currentHitting.value = -1\n      lastSelected = option.value\n      currentMark.value = option.value\n      emitSelectedChange()\n    }\n\n    function handleRangeSelect(start: string | number, end: string | number) {\n      const options = visibleOptions.value\n\n      let startIndex = -1\n      let endIndex = -1\n\n      for (let i = 0, len = options.length; i < len; ++i) {\n        const option = options[i]\n\n        if (option.value === start) {\n          startIndex = i\n        } else if (option.value === end) {\n          endIndex = i\n        }\n\n        if (startIndex > 0 && endIndex > 0) break\n      }\n\n      const method = currentSelected.value.has(options[startIndex]?.value) ? 'add' : 'delete'\n\n      if (startIndex > endIndex) {\n        ;[startIndex, endIndex] = [endIndex, startIndex]\n      }\n\n      for (let i = startIndex; i <= endIndex; ++i) {\n        const option = options[i]\n\n        if (!option.disabled) {\n          currentSelected.value[method](option.value)\n        }\n      }\n\n      emitSelectedChange()\n    }\n\n    function toggleSelectAll(event?: Event) {\n      event?.preventDefault()\n\n      if (props.disabled) return\n\n      if (allSelected.value) {\n        for (const option of visibleOptions.value) {\n          !option.disabled && currentSelected.value.delete(option.value)\n        }\n      } else {\n        for (const option of visibleOptions.value) {\n          !option.disabled && currentSelected.value.add(option.value)\n        }\n      }\n\n      currentMark.value = null\n      emitSelectedChange()\n    }\n\n    function handleReverse() {\n      if (props.disabled) return\n\n      if (partial.value) {\n        const prevSelected = new Set(currentSelected.value)\n\n        for (const option of visibleOptions.value) {\n          if (!option.disabled) {\n            if (prevSelected.has(option.value)) {\n              currentSelected.value.delete(option.value)\n            } else {\n              currentSelected.value.add(option.value)\n            }\n          }\n        }\n\n        currentMark.value = null\n        emitSelectedChange()\n      } else {\n        toggleSelectAll()\n      }\n    }\n\n    function handleBlur() {\n      currentMark.value = null\n      modifier.resetAll()\n    }\n\n    function emitSelectedChange() {\n      emit('update:selected', currentSelected.value)\n      emit('select')\n    }\n\n    function handlePageChange(page: number) {\n      currentPage.value = boundRange(page, 1, totalPages.value)\n    }\n\n    function queryEnabledIndex(index: number, step: number) {\n      const options = currentOptions.value\n      step = step / Math.abs(step)\n\n      while (options[index]?.disabled) {\n        index += step\n\n        if (index < 0 || index >= options.length) break\n      }\n\n      return index\n    }\n\n    function findEnabledIndex(index: number, sign: 1 | -1 = 1) {\n      const options = currentOptions.value\n\n      if (options[index]?.disabled) {\n        index = queryEnabledIndex(index, sign)\n\n        if (sign > 0 ? index >= options.length : index < 0) {\n          index = queryEnabledIndex(index, -sign)\n\n          // 全禁用\n          if (sign > 0 ? index < 0 : index >= options.length) index = -1\n        }\n      }\n\n      return index\n    }\n\n    function ensureOptionInView(index: number, direction: 'top' | 'bottom') {\n      const option = props.options[index]\n\n      if (props.paged || !option || !list.value) return\n\n      if (direction === 'bottom') {\n        const target = (index + 1) * props.optionHeight\n\n        if (list.value.scrollOffset + bodyRealHeight < target) {\n          list.value.scrollTo((index - pageSize.value + 1) * props.optionHeight)\n        }\n      } else {\n        const target = index * props.optionHeight\n\n        if (list.value.scrollOffset > target) {\n          list.value.scrollTo(target)\n        }\n      }\n    }\n\n    const slotParams = reactive({\n      type: toRef(props, 'type'),\n      currentPage,\n      pageSize,\n      totalPages,\n      allSelected,\n      partial,\n      selected: computed(() => Array.from(currentSelected.value)),\n      options: computed(() => visibleOptions.value),\n      toggleSelectAll,\n      handleReverse\n    })\n\n    function renderOption({ option, index }: { option: TransferOptionState, index: number }) {\n      const disabled = props.disabled || option.disabled\n      const handleCheck = (event: MouseEvent) => {\n        event.preventDefault()\n        event.stopPropagation()\n        toggleSelect(option)\n      }\n\n      return (\n        <li\n          class={{\n            [nh.be('option')]: true,\n            [nh.bem('option', 'disabled')]: disabled,\n            [nh.bem('option', 'hitting')]: currentHitting.value === index\n          }}\n          role={'option'}\n          aria-disabled={disabled ? 'true' : undefined}\n          onClick={() => toggleSelect(option)}\n        >\n          {renderSlot(slots, 'option', { type: props.type, option, index }, () => [\n            <Checkbox\n              key={1}\n              class={nh.be('checkbox')}\n              state={props.deepState ? props.state : undefined}\n              checked={currentSelected.value.has(option.value)}\n              disabled={disabled}\n              tab-index={-1}\n              onClick={handleCheck}\n            ></Checkbox>,\n            <span key={2} class={nh.be('label')}>\n              {renderSlot(slots, 'label', { type: props.type, option, index }, () => [\n                option.label\n              ])}\n            </span>\n          ])}\n        </li>\n      )\n    }\n\n    function renderHeader() {\n      return (\n        <div ref={header} class={nh.be('header')}>\n          {renderSlot(slots, 'header', slotParams, () => [\n            <>\n              <Checkbox\n                inherit\n                control\n                class={nh.be('checkbox')}\n                state={props.deepState ? props.state : undefined}\n                checked={allSelected.value}\n                partial={partial.value}\n                disabled={props.disabled}\n                tab-index={-1}\n                onClick={toggleSelectAll}\n              ></Checkbox>\n              <div\n                class={[nh.be('reverse'), props.disabled && nh.bem('reverse', 'disabled')]}\n                title={props.locale.reverse}\n                onClick={handleReverse}\n              >\n                <Icon\n                  {...icons.value.retweet}\n                  scale={+(icons.value.retweet.scale || 1) * 1.2}\n                ></Icon>\n              </div>\n              <div class={nh.be('counter')}>\n                {`${currentSelected.value.size}/${visibleOptions.value.length}`}\n              </div>\n              {(props.title || slots.title) && (\n                <span class={nh.be('title')}>\n                  {renderSlot(slots, 'title', slotParams, () => [props.title])}\n                </span>\n              )}\n              <CollapseTransition appear horizontal fade-effect>\n                {props.loading && (\n                  <div class={nh.be('loading')}>\n                    <Icon\n                      {...icons.value.loading}\n                      effect={props.loadingEffect || icons.value.loading.effect}\n                      icon={props.loadingIcon || icons.value.loading.icon}\n                      label={'loading'}\n                    ></Icon>\n                  </div>\n                )}\n              </CollapseTransition>\n            </>\n          ])}\n        </div>\n      )\n    }\n\n    function renderFilter() {\n      if (typeof props.filter !== 'function') return null\n\n      const stop = (e: Event) => e.stopPropagation()\n      // const setFilter = (value: string) => (currentFilter.value = value)\n\n      return (\n        <div ref={search} class={nh.be('filter')}>\n          <Input\n            ref={input}\n            v-model:value={currentFilter.value}\n            inherit\n            clearable\n            sync\n            disabled={props.disabled}\n            placeholder={searching.value ? undefined : props.locale.search}\n            onKeydown={stop}\n            onFocus={() => (searching.value = true)}\n            onBlur={() => (searching.value = false)}\n          >\n            {{\n              suffix: () => <Icon {...icons.value.search}></Icon>\n            }}\n          </Input>\n        </div>\n      )\n    }\n\n    function renderBody() {\n      if (props.paged || slots.body) {\n        return (\n          <ResizeObserver throttle onResize={computePageSize}>\n            <ul ref={body} class={nh.be('body')} role={'listbox'}>\n              {renderSlot(slots, 'body', slotParams, () => [\n                pagedOptions.value.length ? (\n                  pagedOptions.value.map((option, index) => renderOption({ option, index }))\n                ) : (\n                  <div class={nh.be('empty')}>{props.emptyText || props.locale.empty}</div>\n                )\n              ])}\n            </ul>\n          </ResizeObserver>\n        )\n      }\n\n      return (\n        <VirtualList\n          ref={list}\n          inherit\n          class={nh.be('body')}\n          items={visibleOptions.value}\n          item-size={props.optionHeight}\n          item-fixed\n          use-y-bar\n          id-key={'value'}\n          items-attrs={{ role: 'listbox', ariaLabel: props.type }}\n          onResize={computePageSize}\n        >\n          {{\n            default: ({ item, index }: { item: TransferOptionState, index: number }) =>\n              renderOption({ option: item, index }),\n            empty: () => <div class={nh.be('empty')}>{props.emptyText || props.locale.empty}</div>\n          }}\n        </VirtualList>\n      )\n    }\n\n    function renderFooter() {\n      if (!props.paged && !slots.footer) return null\n\n      return (\n        <div ref={footer} class={nh.be('footer')}>\n          {renderSlot(slots, 'footer', slotParams, () => [\n            <div class={nh.be('pagination')}>\n              <Icon\n                {...(isRtl.value ? icons.value.angleRight : icons.value.angleLeft)}\n                class={[\n                  nh.be('page-plus'),\n                  currentPage.value <= 1 && nh.bem('page-plus', 'disabled')\n                ]}\n                onClick={() => handlePageChange(currentPage.value - 1)}\n              ></Icon>\n              <NumberInput\n                inherit\n                value={currentPage.value}\n                class={nh.be('page-input')}\n                size={'small'}\n                min={1}\n                max={totalPages.value}\n                onChange={handlePageChange}\n              ></NumberInput>\n              <span style={'margin: 0 4px'}>{'/'}</span>\n              <span>{totalPages.value}</span>\n              <Icon\n                {...(isRtl.value ? icons.value.angleLeft : icons.value.angleRight)}\n                class={[\n                  nh.be('page-minus'),\n                  currentPage.value >= totalPages.value && nh.bem('page-minus', 'disabled')\n                ]}\n                onClick={() => handlePageChange(currentPage.value + 1)}\n              ></Icon>\n            </div>\n          ])}\n        </div>\n      )\n    }\n\n    return () => (\n      <div ref={wrapper} class={className.value} tabindex={0} onBlur={handleBlur}>\n        {renderHeader()}\n        {renderFilter()}\n        {renderBody()}\n        {renderFooter()}\n      </div>\n    )\n  }\n})\n","import {\n  booleanProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  localeProp,\n  stateProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { TransferFilter, TransferKeyConfig, TransferSlots } from './symbol'\n\nexport type RawOption = string | Record<string, any>\nexport type Values = (string | number)[]\n\nexport type SelectHandler = (\n  type: 'source' | 'target',\n  selected: { source: Values, target: Values },\n  data: { source: RawOption[], target: RawOption[] }\n) => void\n\nexport const transferProps = buildProps({\n  state: stateProp,\n  locale: localeProp('transfer'),\n  options: Array as PropType<RawOption[]>,\n  value: Array as PropType<Values>,\n  disabled: booleanProp,\n  paged: booleanProp,\n  filter: {\n    type: [Boolean, Function] as PropType<boolean | TransferFilter>,\n    default: null\n  },\n  emptyText: String,\n  keyConfig: Object as PropType<TransferKeyConfig>,\n  optionHeight: Number,\n  ignoreCase: booleanProp,\n  sourceTitle: String,\n  targetTitle: String,\n  deepState: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  slots: Object as PropType<TransferSlots>,\n  onChange: eventProp<(values: Values) => void>(),\n  onSelect: eventProp<SelectHandler>()\n})\n\nexport type TransferProps = ExtractPropTypes<typeof transferProps>\nexport type TransferCProps = ConfigurableProps<TransferProps>\n","import { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport {\n  computed,\n  defineComponent,\n  reactive,\n  ref,\n  renderSlot,\n  toRef,\n  watch,\n  watchEffect\n} from 'vue'\n\nimport {\n  createIconProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { isNull } from '@vexip-ui/utils'\nimport { createSlotRender, useRtl } from '@vexip-ui/hooks'\nimport TransferPanel from './transfer-panel'\nimport { transferProps } from './props'\n\nimport type { TransferKeyConfig, TransferOptionState, TransferSlots } from './symbol'\n\nconst defaultKeyConfig: Required<TransferKeyConfig> = {\n  value: 'value',\n  label: 'label',\n  disabled: 'disabled'\n}\n\nexport default defineComponent({\n  name: 'Transfer',\n  props: transferProps,\n  emits: ['update:value'],\n  setup(_props, { slots, emit, expose }) {\n    const {\n      idFor,\n      labelId,\n      state,\n      disabled,\n      loading,\n      validateField,\n      getFieldValue,\n      setFieldValue\n    } = useFieldStore<(string | number)[]>(() => source.value?.$el?.focus())\n\n    const props = useProps('transfer', _props, {\n      state: createStateProp(state),\n      locale: null,\n      options: {\n        default: () => [],\n        static: true\n      },\n      value: {\n        default: () => getFieldValue(),\n        static: true\n      },\n      disabled: () => disabled.value,\n      paged: false,\n      filter: false,\n      emptyText: null,\n      keyConfig: () => ({}),\n      optionHeight: {\n        default: 32,\n        validator: value => value > 0\n      },\n      ignoreCase: false,\n      sourceTitle: null,\n      targetTitle: null,\n      deepState: false,\n      loading: () => loading.value,\n      loadingIcon: createIconProp(),\n      loadingLock: false,\n      loadingEffect: null,\n      slots: () => ({})\n    })\n\n    const { isRtl } = useRtl()\n\n    const nh = useNameHelper('transfer')\n    const locale = useLocale('transfer', toRef(props, 'locale'))\n    const icons = useIcons()\n\n    const currentValue = ref<Set<string | number>>(null!)\n    const sourceSelected = ref(new Set<string | number>())\n    const targetSelected = ref(new Set<string | number>())\n    const sourceOptions = ref<TransferOptionState[]>([])\n    const targetOptions = ref<TransferOptionState[]>([])\n    const optionStates = ref<TransferOptionState[]>([])\n\n    const source = ref<InstanceType<typeof TransferPanel>>()\n    const target = ref<InstanceType<typeof TransferPanel>>()\n\n    const keyConfig = computed(() => ({ ...defaultKeyConfig, ...props.keyConfig }))\n\n    let optionValueMap = new Map<string | number, TransferOptionState>()\n    let emittedValue = props.value\n\n    const updateTrigger = ref(0)\n\n    watchEffect(() => {\n      /* eslint-disable @typescript-eslint/no-unused-expressions */\n      props.keyConfig.value\n      props.keyConfig.label\n      props.keyConfig.disabled\n\n      for (let i = 0, len = props.options.length; i < len; ++i) {\n        props.options[i]\n      }\n      /* eslint-enable */\n\n      updateTrigger.value++\n    })\n\n    watch(updateTrigger, initOptions, { immediate: true })\n\n    watchEffect(() => {\n      if (!currentValue.value.size) {\n        sourceOptions.value = Array.from(optionStates.value)\n        targetOptions.value = []\n        return\n      }\n\n      const selectedValues = new Set(currentValue.value)\n      const target: TransferOptionState[] = []\n      const source: TransferOptionState[] = []\n\n      for (const option of optionStates.value) {\n        if (selectedValues.has(option.value)) {\n          target.push(option)\n        } else {\n          source.push(option)\n        }\n      }\n\n      targetOptions.value = target\n      sourceOptions.value = source\n    })\n\n    function initOptions() {\n      const { value: valueKey, label: labelKey, disabled: disabledKey } = keyConfig.value\n      const oldMap = optionValueMap\n      const map = new Map<string | number, TransferOptionState>()\n\n      props.options.forEach(option => {\n        const rawOption = typeof option === 'string' ? { [valueKey]: option } : option\n        const value = rawOption[valueKey]\n\n        if (isNull(value)) return\n\n        const label = rawOption[labelKey] || String(value)\n        const { [disabledKey]: disabled = false } = rawOption\n        const oldState = oldMap.get(rawOption.value)\n        const optionState = reactive({\n          disabled,\n          value,\n          label,\n          hidden: oldState?.hidden ?? false,\n          hitting: oldState?.hitting ?? false,\n          data: option\n        })\n\n        map.set(value, optionState)\n      })\n\n      optionValueMap = map\n      optionStates.value = Array.from(map.values())\n      currentValue.value = new Set(emittedValue)\n    }\n\n    const readonly = computed(() => props.loading && props.loadingLock)\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        {\n          [nh.bm('inherit')]: props.inherit,\n          [nh.bm(props.state)]: props.state !== 'default',\n          [nh.bm('readonly')]: readonly.value,\n          [nh.bm('loading')]: props.loading\n        }\n      ]\n    })\n    const actionType = computed(() => {\n      return props.deepState && props.state !== 'default' ? props.state : 'primary'\n    })\n    const toTargetEnabled = computed(() => !!sourceSelected.value.size)\n    const toSourceEnabled = computed(() => !!targetSelected.value.size)\n    const defaultFilter = computed(() => {\n      return props.ignoreCase\n        ? (value: string, option: TransferOptionState) =>\n            option.label.toLocaleLowerCase().includes(value)\n        : (value: string, option: TransferOptionState) => option.label.includes(value)\n    })\n    const sourceFilter = computed(() => getFilterMethod('source'))\n    const targetFilter = computed(() => getFilterMethod('target'))\n\n    watch(\n      () => props.value,\n      value => {\n        emittedValue = value\n        currentValue.value = new Set(emittedValue)\n      }\n    )\n\n    expose({\n      handleToTarget,\n      handleToSource,\n      handlePanelFocus,\n      handlePanelBlur,\n      focus: (options?: FocusOptions) => source.value?.$el?.focus(options),\n      blur: () => {\n        source.value?.$el?.blur()\n        target.value?.$el?.blur()\n      }\n    })\n\n    function getFilterMethod(type: 'source' | 'target') {\n      const filter = props.filter\n\n      if (!filter) return undefined\n\n      if (typeof filter === 'function') {\n        return (value: string, option: TransferOptionState) => filter(value, option, type)\n      }\n\n      return defaultFilter.value\n    }\n\n    function handleChange() {\n      emittedValue = Array.from(currentValue.value)\n\n      emit('update:value', emittedValue)\n      setFieldValue(emittedValue)\n      emitEvent(props.onChange, emittedValue)\n      validateField()\n    }\n\n    function handleToTarget() {\n      for (const value of sourceSelected.value) {\n        currentValue.value.add(value)\n      }\n\n      sourceSelected.value.clear()\n      handleChange()\n    }\n\n    function handleToSource() {\n      for (const value of targetSelected.value) {\n        currentValue.value.delete(value)\n      }\n\n      targetSelected.value.clear()\n      handleChange()\n    }\n\n    function handleSelect(type: 'source' | 'target') {\n      const selected = {\n        source: Array.from(sourceSelected.value),\n        target: Array.from(targetSelected.value)\n      }\n      const data = {\n        source: selected.source.map(value => optionValueMap.get(value)?.data ?? ''),\n        target: selected.target.map(value => optionValueMap.get(value)?.data ?? '')\n      }\n\n      emitEvent(props.onSelect, type, selected, data)\n    }\n\n    function handlePanelFocus(type: 'source' | 'target') {\n      if (type === 'source') {\n        source.value?.$el.focus()\n      } else {\n        target.value?.$el.focus()\n      }\n    }\n\n    function handlePanelBlur() {\n      source.value?.$el.blur()\n      target.value?.$el.blur()\n    }\n\n    function getSlotRender(names: string[]) {\n      let renderer: unknown = createSlotRender(slots, names)\n\n      if (!renderer) {\n        for (const name of names) {\n          renderer = props.slots[name as keyof TransferSlots]\n          if (typeof renderer === 'function') {\n            break\n          }\n        }\n\n        return typeof renderer === 'function'\n          ? (params: any) => <Renderer renderer={renderer as any} data={params}></Renderer>\n          : null\n      }\n\n      return null\n    }\n\n    return () => {\n      return (\n        <div\n          id={idFor.value}\n          class={className.value}\n          role={'application'}\n          aria-labelledby={labelId.value}\n        >\n          <TransferPanel\n            ref={source}\n            v-model:selected={sourceSelected.value}\n            type={'source'}\n            class={nh.bem('panel', 'source')}\n            state={props.state}\n            paged={props.paged}\n            filter={sourceFilter.value}\n            disabled={props.disabled}\n            title={props.sourceTitle || locale.value.source}\n            options={sourceOptions.value}\n            empty-text={props.emptyText || locale.value.empty}\n            option-height={props.optionHeight}\n            ignore-case={props.ignoreCase}\n            deep-state={props.deepState}\n            loading={props.loading}\n            loading-icon={props.loadingIcon}\n            loading-lock={props.loadingLock}\n            loading-effect={props.loadingEffect}\n            locale={locale.value}\n            onSelect={() => handleSelect('source')}\n            onEnter={handleToTarget}\n            onSwitch={() => handlePanelFocus('target')}\n          >\n            {{\n              header: getSlotRender(['source-header', 'sourceHeader', 'header']),\n              title: getSlotRender(['source-title', 'sourceTitle', 'title']),\n              body: getSlotRender(['source-body', 'sourceBody', 'body']),\n              footer: getSlotRender(['source-footer', 'sourceFooter', 'footer']),\n              option: getSlotRender(['source-option', 'sourceOption', 'option']),\n              label: getSlotRender(['source-label', 'sourceLabel', 'label'])\n            }}\n          </TransferPanel>\n          <div class={nh.be('actions')}>\n            {renderSlot(slots, 'actions', { handleToTarget, handleToSource }, () => [\n              <Renderer renderer={props.slots.actions} data={{ handleToTarget, handleToSource }}>\n                <Button\n                  key={1}\n                  inherit\n                  class={nh.be('action')}\n                  type={actionType.value}\n                  size={'small'}\n                  disabled={props.disabled || !toTargetEnabled.value}\n                  loading={readonly.value}\n                  loading-icon={props.loadingIcon}\n                  loading-effect={props.loadingEffect}\n                  style={{ marginBottom: '6px' }}\n                  onClick={handleToTarget}\n                >\n                  {{\n                    icon: () => (\n                      <Icon\n                        {...(isRtl.value ? icons.value.angleLeft : icons.value.angleRight)}\n                        label={isRtl.value ? 'to left' : 'to right'}\n                      ></Icon>\n                    )\n                  }}\n                </Button>\n                <Button\n                  key={2}\n                  inherit\n                  class={nh.be('action')}\n                  type={actionType.value}\n                  size={'small'}\n                  disabled={props.disabled || !toSourceEnabled.value}\n                  loading={readonly.value}\n                  loading-icon={props.loadingIcon}\n                  loading-effect={props.loadingEffect}\n                  style={{ margin: '0' }}\n                  onClick={handleToSource}\n                >\n                  {{\n                    icon: () => (\n                      <Icon\n                        {...(isRtl.value ? icons.value.angleRight : icons.value.angleLeft)}\n                        label={isRtl.value ? 'to right' : 'to left'}\n                      ></Icon>\n                    )\n                  }}\n                </Button>\n              </Renderer>\n            ])}\n          </div>\n          <TransferPanel\n            ref={target}\n            v-model:selected={targetSelected.value}\n            type={'target'}\n            class={nh.bem('panel', 'target')}\n            state={props.state}\n            paged={props.paged}\n            filter={targetFilter.value}\n            disabled={props.disabled}\n            title={props.targetTitle || locale.value.target}\n            options={targetOptions.value}\n            empty-text={props.emptyText || locale.value.empty}\n            option-height={props.optionHeight}\n            ignore-case={props.ignoreCase}\n            deep-state={props.deepState}\n            loading={props.loading}\n            loading-icon={props.loadingIcon}\n            loading-lock={props.loadingLock}\n            loading-effect={props.loadingEffect}\n            locale={locale.value}\n            onSelect={() => handleSelect('target')}\n            onEnter={handleToSource}\n            onSwitch={() => handlePanelFocus('source')}\n          >\n            {{\n              header: getSlotRender(['target-header', 'targetHeader', 'header']),\n              title: getSlotRender(['target-title', 'targetTitle', 'title']),\n              body: getSlotRender(['target-body', 'targetBody', 'body']),\n              footer: getSlotRender(['target-footer', 'targetFooter', 'footer']),\n              option: getSlotRender(['target-option', 'targetOption', 'option']),\n              label: getSlotRender(['target-label', 'targetLabel', 'label'])\n            }}\n          </TransferPanel>\n        </div>\n      )\n    }\n  }\n})\n","import type { InjectionKey } from 'vue'\n// import type { BITree } from '@vexip-ui/utils'\n\nexport type Key = string | number | symbol\nexport type Data = any\nexport type TreeNodeDropType = 'before' | 'inner' | 'after'\nexport type TreeLinkLine = 'dashed' | 'solid' | 'dotted' | 'none'\n\nexport interface TreeNodeKeyConfig {\n  id?: string,\n  parent?: string,\n  label?: string,\n  children?: string,\n  visible?: string,\n  selected?: string,\n  expanded?: string,\n  disabled?: string,\n  checked?: string,\n  loading?: string,\n  loaded?: string,\n  loadFail?: string,\n  readonly?: string,\n  arrow?: string,\n  checkbox?: string,\n  selectDisabled?: string,\n  expandDisabled?: string,\n  checkDisabled?: string,\n  isLeaf?: string\n}\n\nexport const enum DropType {\n  BEFORE = 'before',\n  INNER = 'inner',\n  AFTER = 'after'\n}\n\nexport type TreeNodeProps<D = Data> = {\n  id: Key,\n  parent?: Key,\n  children: TreeNodeProps[],\n  visible: boolean,\n  selected: boolean,\n  expanded: boolean,\n  disabled: boolean,\n  checked: boolean,\n  loading: boolean,\n  loaded: boolean,\n  loadFail: boolean,\n  readonly: boolean,\n  arrow: boolean | 'auto',\n  checkbox: boolean,\n  selectDisabled: boolean,\n  expandDisabled: boolean,\n  checkDisabled: boolean,\n  isLeaf: boolean | 'auto',\n  data: D,\n  /** @internal */\n  partial: boolean,\n  /** @internal */\n  matched: boolean,\n  /** @internal */\n  childMatched: boolean,\n  /** @internal */\n  upperMatched: boolean,\n  /** @internal */\n  depth: number,\n  /** @internal */\n  last: boolean,\n  /** @internal */\n  upstreamLast: boolean[],\n  /** @internal */\n  lineIndexes: number[]\n}\n\nexport type TreeNodePostCreate<D = Data> = (node: TreeNodeProps<D>) => void\nexport type TreeNodeRenderFn<D = Data> = (params: { data: D, node: TreeNodeProps<D> }) => any\nexport type AsyncLoadFn<D = Data> = (\n  data: D,\n  node: Readonly<TreeNodeProps<D>>\n) => void | boolean | Promise<any>\nexport type FilterFn<D = Data> = (data: D, node: TreeNodeProps<D>) => boolean\nexport type NodePropsFn<D = Data> = (data: D, node: TreeNodeProps<D>) => Data\n\nexport interface TreeCommonSlotParams {\n  data: Data,\n  node: TreeNodeProps,\n  depth: number,\n  focused: boolean\n}\n\nexport interface TreeNodeSlotParams extends TreeCommonSlotParams {\n  /** @deprecated */\n  lineCount: number,\n  lineIndexes: number[],\n  toggleCheck: (checked?: boolean) => void,\n  toggleExpand: (expanded?: boolean) => Promise<void>,\n  toggleSelect: (able?: boolean) => Promise<void>\n}\n\nexport interface TreeNodeInstance {\n  el?: HTMLElement | null,\n  arrow?: HTMLElement | null,\n  node: TreeNodeProps\n}\n\nexport interface TreeNodeState {\n  el?: HTMLElement | null,\n  depth: number,\n  disabled: boolean,\n  readonly: boolean\n}\n\nexport interface TreeCollapseProps {\n  id: symbol,\n  placeholder: true,\n  type: 'expand' | 'reduce',\n  height: number,\n  nodes: TreeNodeProps[]\n}\n\nexport interface TreeState {\n  arrow: boolean | 'auto',\n  checkbox: boolean,\n  suffixCheckbox: boolean,\n  noCascaded: boolean,\n  linkLine: false | TreeLinkLine,\n  virtual: boolean,\n  labelKey: string,\n  draggable: boolean,\n  floorSelect: boolean,\n  renderer: TreeNodeRenderFn,\n  prefixRenderer: TreeNodeRenderFn,\n  suffixRenderer: TreeNodeRenderFn,\n  arrowIcon: Record<string, any>,\n  blockEffect: boolean,\n  dragging: boolean,\n  boundAsyncLoad: boolean,\n  nodeStates: Map<Key, TreeNodeState>,\n  expanding: boolean,\n  getParentNode(node: TreeNodeProps): TreeNodeProps | null,\n  updateVisibleNodeEls(): void,\n  computeCheckedState(originNode: TreeNodeProps, able: boolean): void,\n  handleNodeClick(node: TreeNodeProps): void,\n  handleNodeSelect(node: TreeNodeProps): void,\n  handleNodeCancel(node: TreeNodeProps): void,\n  handleNodeExpand(node: TreeNodeProps): void,\n  handleNodeReduce(node: TreeNodeProps): void,\n  handleAsyncLoad(node: TreeNodeProps): Promise<boolean>,\n  handleNodeDragStart(nodeInstance: TreeNodeInstance): void,\n  handleNodeDragOver(nodeInstance: TreeNodeInstance, event: DragEvent): void,\n  handleNodeDrop(nodeInstance: TreeNodeInstance): void,\n  handleNodeDragEnd(nodeInstance: TreeNodeInstance): void,\n  handleHittingChange(type: 'up' | 'down'): void,\n  handleNodeHitting(nodeEl?: HTMLElement | null): void,\n  handleLabelClick(node: TreeNodeProps): void\n}\n\nexport interface TreeSlots {\n  node?: (params: TreeNodeSlotParams) => any,\n  arrow?: (params: TreeCommonSlotParams) => any,\n  label?: (params: TreeCommonSlotParams) => any,\n  prefix?: (params: TreeCommonSlotParams) => any,\n  suffix?: (params: TreeCommonSlotParams) => any,\n  empty?: () => any\n}\n\nexport const TREE_STATE = '__VXP_TREE_STATE' as unknown as InjectionKey<TreeState>\nexport const TREE_NODE_STATE = '__VXP_TREE_NODE_STATE' as unknown as InjectionKey<TreeNodeState>\n\nexport const defaultKeyConfig: Required<TreeNodeKeyConfig> = {\n  id: 'id',\n  parent: 'parent',\n  label: 'label',\n  children: 'children',\n  visible: 'visible',\n  selected: 'selected',\n  expanded: 'expanded',\n  disabled: 'disabled',\n  checked: 'checked',\n  loading: 'loading',\n  loaded: 'loaded',\n  loadFail: 'loadFail',\n  readonly: 'readonly',\n  arrow: 'arrow',\n  checkbox: 'checkbox',\n  selectDisabled: 'selectDisabled',\n  expandDisabled: 'expandDisabled',\n  checkDisabled: 'checkDisabled',\n  isLeaf: 'isLeaf'\n}\n","<script setup lang=\"ts\">\nimport { Checkbox } from '@/components/checkbox'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, inject, nextTick, onBeforeUnmount, reactive, ref, watch } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useRtl } from '@vexip-ui/hooks'\nimport { decide, isNull } from '@vexip-ui/utils'\nimport { TREE_STATE } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { TreeNodeProps } from './symbol'\n\ndefineOptions({ name: 'TreeNode', inheritAttrs: false })\n\nconst props = defineProps({\n  node: {\n    type: Object as PropType<TreeNodeProps>,\n    default: () => ({})\n  }\n})\n\nconst treeState = inject(TREE_STATE)!\n\nconst nh = useNameHelper('tree')\nconst icons = useIcons()\n\nconst { isRtl } = useRtl()\n\nconst wrapper = ref<HTMLElement>()\nconst arrowEl = ref<HTMLElement>()\n\nconst parentState = computed(() => {\n  return props.node.parent ? treeState.nodeStates.get(props.node.parent) : undefined\n})\n\nuseModifier({\n  target: wrapper,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (treeState.expanding) return\n\n    decide(\n      [\n        [\n          () => modifier.up || modifier.down,\n          () => treeState.handleHittingChange(modifier.up ? 'up' : 'down')\n        ],\n        [\n          () => modifier.left || modifier.right,\n          () => {\n            const hasChild = props.node.children?.length > 0\n\n            if (modifier.right && props.node.expanded && hasChild) {\n              treeState.handleHittingChange('down')\n            } else if (modifier.left && (!props.node.expanded || !hasChild)) {\n              treeState.handleNodeHitting(parentState.value?.el)\n            } else {\n              toggleExpanded(modifier.right)\n            }\n          }\n        ],\n        [() => hasCheckbox.value && modifier.space, handleToggleCheck],\n        [() => modifier.enter, handleToggleSelect]\n      ],\n      {\n        beforeMatchAny: () => {\n          event.preventDefault()\n          event.stopPropagation()\n        },\n        afterMatchAny: modifier.resetAll\n      }\n    )\n  }\n})\n\nconst loaded = ref(!treeState.boundAsyncLoad || props.node.loaded)\nconst loadFail = ref(treeState.boundAsyncLoad && props.node.loadFail)\nconst dragging = ref(false)\nconst isDragOver = ref(false)\nconst focused = ref(false)\n\nconst isDisabled = computed(() => {\n  return (!treeState.noCascaded && parentState.value?.disabled) || props.node.disabled\n})\nconst isReadonly = computed(() => {\n  return (!treeState.noCascaded && parentState.value?.readonly) || props.node.readonly\n})\n// const depth = computed(() => parentState.depth + 1)\nconst secondary = computed(\n  () => !props.node.matched && (props.node.childMatched || props.node.upperMatched)\n)\nconst hasLinkLine = computed(() => !!treeState.linkLine && props.node.depth > 0)\nconst className = computed(() => {\n  return {\n    [nh.be('node')]: true,\n    [nh.bem('node', 'last')]: props.node.last,\n    [nh.bem('node', 'focused')]: focused.value,\n    [nh.bem('node', 'selected')]: props.node.selected,\n    [nh.bem('node', 'expanded')]: props.node.expanded,\n    [nh.bem('node', 'disabled')]: isDisabled.value,\n    [nh.bem('node', 'readonly')]: isReadonly.value,\n    [nh.bem('node', 'secondary')]: secondary.value,\n    [nh.bem('node', 'dragging')]: dragging.value,\n    [nh.bem('node', 'drag-over')]: isDragOver.value,\n    [nh.bem('node', 'link-line')]: hasLinkLine.value,\n    [nh.bem('node', 'no-arrow')]: !hasArrow.value,\n    [nh.bem('node', 'is-floor')]: treeState.floorSelect && props.node.children?.length,\n    [nh.bem('node', 'loaded')]: loaded.value,\n    [nh.bem('node', 'load-fail')]: loadFail.value\n  }\n})\nconst isLeaf = computed(() => {\n  const isLeaf = props.node.isLeaf\n\n  let leafSign: boolean | 'auto' = 'auto'\n  let asyncLoad = false\n\n  if (isNull(isLeaf) || isLeaf === 'auto') {\n    leafSign = 'auto'\n    asyncLoad = treeState.boundAsyncLoad\n  } else {\n    leafSign = isLeaf\n  }\n\n  return leafSign === 'auto'\n    ? !(props.node.children?.length || (asyncLoad && !loaded.value))\n    : !!leafSign\n})\nconst hasArrow = computed(() => {\n  return isNull(props.node.arrow) || props.node.arrow === 'auto'\n    ? treeState.arrow === 'auto'\n      ? !isLeaf.value\n      : treeState.arrow\n    : props.node.arrow\n})\nconst hasCheckbox = computed(() => {\n  const checkbox = props.node.checkbox\n\n  return isNull(checkbox) ? treeState.checkbox : checkbox\n})\n// const renderer = computed(() => treeState.renderer)\nconst suffixCheckbox = computed(() => treeState.suffixCheckbox)\nconst nodeState = reactive({\n  el: wrapper,\n  depth: computed(() => props.node.depth),\n  disabled: isDisabled,\n  readonly: isReadonly\n})\n\nwatch([() => treeState.boundAsyncLoad, () => props.node.loaded], values => {\n  loaded.value = !values[0] || values[1]\n})\nwatch([() => treeState.boundAsyncLoad, () => props.node.loadFail], values => {\n  loadFail.value = !values[0] || values[1]\n})\nwatch(\n  () => props.node.id,\n  (value, prev) => {\n    treeState.nodeStates.delete(prev)\n    treeState.nodeStates.set(value, nodeState)\n  }\n)\n\ntreeState.nodeStates.set(props.node.id, nodeState)\n\nlet dragTimer: ReturnType<typeof setTimeout>\n\nonBeforeUnmount(() => {\n  clearTimeout(dragTimer)\n  treeState.nodeStates.set(props.node.id, nodeState)\n})\n\n// function updateVisible() {\n//   treeState.updateVisibleNodeEls()\n// }\n\nfunction setValue<T = unknown>(key: keyof TreeNodeProps, value: T) {\n  ;(props.node as any)[key] = value\n}\n\nfunction handleClick() {\n  treeState.handleNodeClick(props.node)\n\n  if (treeState.blockEffect) {\n    handleLabelClick()\n  }\n}\n\nfunction handleToggleCheck(able = !props.node.checked) {\n  if (isDisabled.value || props.node.checkDisabled) return\n\n  setValue('checked', able)\n  setValue('partial', false)\n\n  nextTick(() => {\n    treeState.computeCheckedState(props.node, able)\n  })\n}\n\nasync function toggleExpanded(able = !props.node.expanded) {\n  if (\n    treeState.expanding ||\n    props.node.loading ||\n    isDisabled.value ||\n    props.node.expandDisabled ||\n    isLeaf.value\n  ) {\n    return\n  }\n\n  if (able && treeState.boundAsyncLoad && !loaded.value) {\n    setValue('loading', true)\n\n    const result = await treeState.handleAsyncLoad(props.node)\n\n    asyncLoadCallback(result)\n  } else {\n    setValue('expanded', able)\n\n    if (able) {\n      treeState.handleNodeExpand(props.node)\n    } else {\n      treeState.handleNodeReduce(props.node)\n    }\n  }\n}\n\nasync function handleToggleSelect(able = !props.node.selected) {\n  if (isDisabled.value || props.node.selectDisabled) return\n\n  if (treeState.floorSelect) {\n    await toggleExpanded()\n    return\n  }\n\n  setValue('selected', !isReadonly.value && able)\n\n  if (isReadonly.value || able) {\n    treeState.handleNodeSelect(props.node)\n  } else {\n    treeState.handleNodeCancel(props.node)\n  }\n}\n\nfunction handleLabelClick() {\n  treeState.handleLabelClick(props.node)\n  handleToggleSelect()\n}\n\nfunction asyncLoadCallback(success = true) {\n  setValue('loading', false)\n  setValue('expanded', success !== false)\n\n  if (success !== false) {\n    setValue('loaded', true)\n    setValue('loadFail', false)\n\n    if (props.node.children?.length) {\n      treeState.handleNodeExpand(props.node)\n    } else {\n      setValue('arrow', false)\n    }\n  } else {\n    setValue('loadFail', true)\n  }\n}\n\nfunction getNodeState() {\n  return {\n    el: wrapper.value,\n    arrow: arrowEl.value,\n    node: props.node\n  }\n}\n\nfunction handleDragStart() {\n  if (!treeState.draggable) return\n\n  dragging.value = true\n  treeState.handleNodeDragStart(getNodeState())\n}\n\nfunction handleDragOver(event: DragEvent) {\n  if (!treeState.draggable || !treeState.dragging) return\n\n  clearTimeout(dragTimer)\n  event.stopPropagation()\n  event.preventDefault()\n\n  isDragOver.value = true\n\n  treeState.handleNodeDragOver(getNodeState(), event)\n}\n\nfunction handleDragLeave(event: DragEvent) {\n  if (!treeState.draggable) return\n\n  clearTimeout(dragTimer)\n  event.preventDefault()\n\n  dragTimer = setTimeout(() => {\n    isDragOver.value = false\n  }, 100)\n}\n\nfunction handleDrop(event: DragEvent) {\n  if (!treeState.draggable || !treeState.dragging) return\n\n  clearTimeout(dragTimer)\n  event.stopPropagation()\n  event.preventDefault()\n\n  isDragOver.value = false\n\n  treeState.handleNodeDrop(getNodeState())\n}\n\nfunction handleDragEnd(event: DragEvent) {\n  if (!treeState.draggable || !treeState.dragging) return\n\n  event.stopPropagation()\n  dragging.value = false\n  treeState.handleNodeDragEnd(getNodeState())\n}\n</script>\n\n<template>\n  <li\n    v-bind=\"$attrs\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    :draggable=\"treeState.draggable\"\n    tabindex=\"-1\"\n    :aria-disabled=\"isDisabled\"\n    :aria-grabbed=\"treeState.draggable && dragging ? 'true' : undefined\"\n    :style=\"{ [nh.cv('depth')]: node.depth }\"\n    @click.left=\"handleClick\"\n    @focus=\"focused = true\"\n    @blur=\"focused = false\"\n    @dragstart.stop=\"handleDragStart\"\n    @dragover=\"handleDragOver\"\n    @dragleave=\"handleDragLeave\"\n    @dragend=\"handleDragEnd\"\n    @drop=\"handleDrop\"\n  >\n    <slot\n      :data=\"node.data\"\n      :node=\"node\"\n      :depth=\"node.depth\"\n      :focused=\"focused\"\n      :line-count=\"0\"\n      :line-indexes=\"node.lineIndexes\"\n      :toggle-check=\"handleToggleCheck\"\n      :toggle-expand=\"toggleExpanded\"\n      :toggle-select=\"handleToggleSelect\"\n    >\n      <template v-if=\"hasLinkLine\">\n        <div\n          v-for=\"(lineIndex, index) in node.lineIndexes\"\n          :key=\"index\"\n          :class=\"[\n            nh.be('link-line'),\n            nh.bem('link-line', 'vertical'),\n            !index && nh.bem('link-line', 'first')\n          ]\"\n          :style=\"{ [nh.cv('link-line-index')]: lineIndex }\"\n          aria-hidden=\"true\"\n        ></div>\n\n        <div\n          :class=\"[nh.be('link-line'), nh.bem('link-line', 'horizontal')]\"\n          aria-hidden=\"true\"\n        ></div>\n      </template>\n      <div\n        :class=\"{\n          [nh.be('content')]: true,\n          [nh.bem('content', 'effect')]: treeState.blockEffect,\n          [nh.bem('content', 'disabled')]:\n            treeState.blockEffect && (isDisabled || node.selectDisabled)\n        }\"\n      >\n        <span\n          ref=\"arrowEl\"\n          :class=\"{\n            [nh.be('arrow')]: true,\n            [nh.bem('arrow', 'transparent')]: !node.loading && !hasArrow,\n            [nh.bem('arrow', 'expanded')]: node.expanded,\n            [nh.bem('arrow', 'disabled')]: isDisabled || node.expandDisabled\n          }\"\n          :aria-hidden=\"!node.loading && !hasArrow\"\n          @click.stop=\"toggleExpanded()\"\n        >\n          <Icon v-if=\"node.loading\" v-bind=\"icons.loading\" label=\"loading\"></Icon>\n          <slot\n            v-else\n            name=\"arrow\"\n            :data=\"node.data\"\n            :node=\"node\"\n            :depth=\"node.depth\"\n            :focused=\"focused\"\n          >\n            <Icon v-if=\"treeState.arrowIcon\" :icon=\"treeState.arrowIcon\"></Icon>\n            <Icon v-else v-bind=\"isRtl ? icons.angleLeft : icons.angleRight\"></Icon>\n          </slot>\n        </span>\n        <Checkbox\n          v-if=\"hasCheckbox && !suffixCheckbox\"\n          inherit\n          :class=\"nh.be('checkbox')\"\n          :tab-index=\"-1\"\n          :control=\"hasArrow\"\n          :checked=\"node.checked\"\n          :disabled=\"isDisabled || node.checkDisabled\"\n          :partial=\"node.partial\"\n          @click.prevent.stop=\"handleToggleCheck()\"\n        ></Checkbox>\n        <div\n          :class=\"{\n            [nh.be('label')]: true,\n            [nh.bem('label', 'effect')]: !treeState.blockEffect,\n            [nh.bem('label', 'disabled')]:\n              !treeState.blockEffect && (isDisabled || node.selectDisabled)\n          }\"\n          @click=\"!treeState.blockEffect && handleLabelClick()\"\n        >\n          <div v-if=\"treeState.prefixRenderer || $slots.prefix\" :class=\"nh.be('prefix')\">\n            <Renderer\n              v-if=\"treeState.prefixRenderer\"\n              :renderer=\"treeState.prefixRenderer\"\n              :data=\"{ node, depth: node.depth, data: node.data, focused }\"\n            ></Renderer>\n            <slot\n              v-else\n              name=\"prefix\"\n              :data=\"node.data\"\n              :node=\"node\"\n              :depth=\"node.depth\"\n              :focused=\"focused\"\n            ></slot>\n          </div>\n          <div :class=\"nh.be('text')\">\n            <Renderer\n              v-if=\"treeState.renderer\"\n              :renderer=\"treeState.renderer\"\n              :data=\"{ node, depth: node.depth, data: node.data, focused }\"\n            ></Renderer>\n            <slot\n              v-else\n              name=\"label\"\n              :data=\"node.data\"\n              :node=\"node\"\n              :depth=\"node.depth\"\n              :focused=\"focused\"\n            >\n              {{ node.data[treeState.labelKey] }}\n            </slot>\n          </div>\n          <div v-if=\"treeState.suffixRenderer || $slots.suffix\" :class=\"nh.be('suffix')\">\n            <Renderer\n              v-if=\"treeState.suffixRenderer\"\n              :renderer=\"treeState.suffixRenderer\"\n              :data=\"{ node, depth: node.depth, data: node.data, focused }\"\n            ></Renderer>\n            <slot\n              v-else\n              name=\"suffix\"\n              :data=\"node.data\"\n              :node=\"node\"\n              :depth=\"node.depth\"\n              :focused=\"focused\"\n            ></slot>\n          </div>\n        </div>\n        <Checkbox\n          v-if=\"hasCheckbox && suffixCheckbox\"\n          inherit\n          :class=\"[nh.be('checkbox'), nh.bem('checkbox', 'suffix')]\"\n          :tab-index=\"-1\"\n          :control=\"hasArrow\"\n          :checked=\"node.checked\"\n          :disabled=\"isDisabled || node.checkDisabled\"\n          :partial=\"node.partial\"\n          @click.prevent.stop=\"handleToggleCheck()\"\n        ></Checkbox>\n      </div>\n    </slot>\n  </li>\n</template>\n","import { booleanProp, buildProps, eventProp, iconProp, localeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type {\n  AsyncLoadFn,\n  Data,\n  FilterFn,\n  NodePropsFn,\n  TreeLinkLine,\n  TreeNodeDropType,\n  TreeNodeKeyConfig,\n  TreeNodePostCreate,\n  TreeNodeProps,\n  TreeNodeRenderFn,\n  TreeSlots\n} from './symbol'\n\nexport const treeProps = buildProps({\n  locale: localeProp('tree'),\n  arrow: {\n    type: [Boolean, String] as PropType<boolean | 'auto'>,\n    default: null\n  },\n  data: Array as PropType<Data[]>,\n  noBuildTree: booleanProp,\n  emptyText: String,\n  disabled: booleanProp,\n  readonly: booleanProp,\n  checkbox: booleanProp,\n  suffixCheckbox: booleanProp,\n  renderer: Function as PropType<TreeNodeRenderFn>,\n  prefixRenderer: Function as PropType<TreeNodeRenderFn>,\n  suffixRenderer: Function as PropType<TreeNodeRenderFn>,\n  multiple: booleanProp,\n  indent: [String, Number],\n  accordion: booleanProp,\n  draggable: booleanProp,\n  appear: booleanProp,\n  floorSelect: booleanProp,\n  onAsyncLoad: Function as PropType<AsyncLoadFn>,\n  cacheNode: booleanProp,\n  rootId: [String, Number],\n  keyConfig: Object as PropType<TreeNodeKeyConfig>,\n  noCascaded: booleanProp,\n  filter: [String, Function] as PropType<string | FilterFn>,\n  ignoreCase: booleanProp,\n  nodeProps: [Object, Function] as PropType<Data | NodePropsFn>,\n  linkLine: {\n    type: [Boolean, String] as PropType<boolean | TreeLinkLine>,\n    default: null\n  },\n  postCreate: Function as PropType<TreeNodePostCreate>,\n  virtual: booleanProp,\n  nodeMinHeight: Number,\n  useYBar: booleanProp,\n  noTransition: booleanProp,\n  arrowIcon: iconProp,\n  blockEffect: booleanProp,\n  filterLeaf: booleanProp,\n  slots: Object as PropType<TreeSlots>,\n  onNodeChange: eventProp<(data: Data, node: TreeNodeProps, checked: boolean) => void>(),\n  onNodeClick: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n  onNodeSelect: eventProp<(data: Data | Data[], node: TreeNodeProps | TreeNodeProps[]) => void>(),\n  onNodeCancel: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n  onNodeExpand: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n  onNodeReduce: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n  onDragStart: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n  onDragOver: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n  onDrop: eventProp<(data: Data, node: TreeNodeProps, type: TreeNodeDropType) => void>(),\n  onDragEnd: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n  onLabelClick: eventProp<(data: Data, node: TreeNodeProps) => void>()\n})\n\nexport type TreeProps = ExtractPropTypes<typeof treeProps>\nexport type TreeCProps = ConfigurableProps<TreeProps, 'data', 'onAsyncLoad'>\n","<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Renderer } from '@/components/renderer'\nimport { VirtualList } from '@/components/virtual-list'\n\nimport {\n  computed,\n  nextTick,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  toRef,\n  watch,\n  watchEffect\n} from 'vue'\n\nimport TreeNode from './tree-node.vue'\nimport { createIconProp, emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useMounted, useSetTimeout } from '@vexip-ui/hooks'\nimport {\n  debounce,\n  filterTree,\n  flatTree,\n  getGlobalCount,\n  getLast,\n  isNull,\n  isPromise,\n  mapTree,\n  queryAll,\n  removeArrayItem,\n  transformTree,\n  walkTree\n} from '@vexip-ui/utils'\nimport { treeProps } from './props'\nimport { useCascadedChecked } from './hooks'\nimport { DropType, TREE_NODE_STATE, TREE_STATE, defaultKeyConfig } from './symbol'\n\nimport type { VirtualListExposed } from '@/components/virtual-list'\nimport type {\n  Data,\n  FilterFn,\n  Key,\n  TreeCollapseProps,\n  TreeNodeInstance,\n  TreeNodeProps,\n  TreeNodeState,\n  TreeSlots\n} from './symbol'\n\ndefineOptions({ name: 'Tree' })\n\nconst _props = defineProps(treeProps)\nconst props = useProps('tree', _props, {\n  arrow: {\n    default: 'auto',\n    validator: value => typeof value === 'boolean' || value === 'auto'\n  },\n  data: {\n    default: () => [],\n    static: true\n  },\n  noBuildTree: false,\n  emptyText: null,\n  disabled: false,\n  readonly: false,\n  checkbox: false,\n  suffixCheckbox: false,\n  renderer: {\n    default: null,\n    isFunc: true\n  },\n  prefixRenderer: {\n    default: null,\n    isFunc: true\n  },\n  suffixRenderer: {\n    default: null,\n    isFunc: true\n  },\n  multiple: false,\n  indent: '16px',\n  accordion: false,\n  draggable: false,\n  appear: false,\n  floorSelect: false,\n  onAsyncLoad: {\n    default: null,\n    isFunc: true\n  },\n  cacheNode: false,\n  rootId: null,\n  keyConfig: () => ({}),\n  noCascaded: false,\n  filter: '',\n  ignoreCase: false,\n  nodeProps: null,\n  linkLine: false,\n  postCreate: {\n    default: null,\n    isFunc: true\n  },\n  virtual: false,\n  nodeMinHeight: {\n    default: 26,\n    validator: value => value > 0\n  },\n  useYBar: false,\n  noTransition: false,\n  arrowIcon: createIconProp(),\n  blockEffect: false,\n  filterLeaf: false,\n  slots: () => ({})\n})\n\nconst slots = defineSlots<TreeSlots>()\n\nconst nh = useNameHelper('tree')\nconst locale = useLocale('tree', toRef(props, 'locale'))\n\nconst nodeMap = new Map<Key, TreeNodeProps>()\nconst nodeDataMap = new Map<Data, TreeNodeProps>()\nconst treeNodes = ref<TreeNodeProps[]>([])\nconst flattedNodes = ref<TreeNodeProps[]>([])\nconst dragging = ref(false)\nconst indicatorShow = ref(false)\nconst keyConfig = reactive({ ...defaultKeyConfig })\nconst nodeStates = reactive(new Map<Key, TreeNodeState>())\nconst expanding = ref(false)\nconst expandingNodes = ref<TreeNodeProps[]>([])\nconst expandedNodeIds = ref(new Set<Key>())\n\nconst { timer } = useSetTimeout()\nconst { isMounted } = useMounted()\n\nconst virtualList = ref<VirtualListExposed>()\nconst trap = ref<HTMLElement>()\nconst indicator = ref<HTMLElement>()\n\nconst wrapper = computed(() => virtualList.value?.wrapper)\n\nlet visibleNodeEls: HTMLElement[] = []\n\nconst defaultNodeProperties = {\n  visible: true,\n  selected: false,\n  expanded: false,\n  disabled: false,\n  checked: false,\n  loading: false,\n  loaded: false,\n  loadFail: false,\n  readonly: false,\n  arrow: 'auto' as boolean | 'auto',\n  // will follow checkbox prop of tree when not set (be null)\n  checkbox: null! as boolean,\n  selectDisabled: false,\n  expandDisabled: false,\n  checkDisabled: false,\n  isLeaf: 'auto' as boolean | 'auto'\n}\n\nconst boundAsyncLoad = computed(() => typeof props.onAsyncLoad === 'function')\nconst linkLine = computed(() => {\n  return props.linkLine === true ? 'dashed' : props.linkLine === 'none' ? false : props.linkLine\n})\nconst style = computed(() => {\n  return {\n    [nh.cv('indent-width')]: typeof props.indent === 'number' ? `${props.indent}px` : props.indent,\n    [nh.cv('link-line-type')]: linkLine.value || undefined\n  }\n})\nconst visibleNodes = computed(() => flatNodes(treeNodes.value))\nconst renderedNodes = computed(() => {\n  return expanding.value ? expandingNodes.value : visibleNodes.value\n})\nconst toNodeProps = computed(() => {\n  return typeof props.nodeProps === 'function' ? props.nodeProps : () => props.nodeProps\n})\n\nfunction createDefaultFilter(value: string) {\n  const pattern = props.ignoreCase ? String(value).toLocaleLowerCase() : value\n  const defaultFilter: FilterFn = data => {\n    const label = data[keyConfig.label]\n\n    return props.ignoreCase\n      ? String(label).toLocaleLowerCase().includes(pattern)\n      : String(label).includes(pattern)\n  }\n\n  return defaultFilter\n}\n\nconst updateVisibleNodeEls = debounce(() => {\n  if (wrapper.value) {\n    visibleNodeEls = queryAll(`.${nh.be('node')}`, wrapper.value)\n  }\n}, 300)\n\nlet disableExpand = false\n\nfunction disableExpandTick() {\n  disableExpand = true\n\n  nextTick(() => {\n    disableExpand = false\n  })\n}\nwatchEffect(() => {\n  const nodes = flattedNodes.value\n\n  disableExpandTick()\n\n  if (!props.filter) {\n    for (let i = 0, len = nodes.length; i < len; ++i) {\n      const node = nodes[i]\n\n      node.matched = true\n      node.childMatched = false\n      node.upperMatched = false\n    }\n  } else {\n    const filter =\n      typeof props.filter === 'function' ? props.filter : createDefaultFilter(props.filter)\n    const leafOnly = props.filterLeaf\n\n    for (let i = 0, len = nodes.length; i < len; ++i) {\n      const node = nodes[i]\n\n      if (leafOnly && !isLeafNode(node)) {\n        node.matched = false\n        node.childMatched = false\n        node.upperMatched = false\n\n        continue\n      }\n\n      const parent = node.parent ? nodeMap.get(node.parent) : undefined\n\n      node.matched = filter(node.data, node)\n      node.childMatched = false\n      node.upperMatched = !!parent && (parent.matched || parent.upperMatched)\n\n      if (node.matched) {\n        let upper = parent\n\n        while (upper && !upper.childMatched) {\n          upper.childMatched = true\n          upper.expanded = true\n          upper = upper.parent ? nodeMap.get(upper.parent) : undefined\n        }\n      }\n    }\n  }\n\n  resetExpanded()\n})\nwatchEffect(() => Object.assign(keyConfig, props.keyConfig))\nwatchEffect(() => {\n  const oldIds = expandedNodeIds.value\n  const ids = new Set<Key>()\n\n  let changed = false\n\n  for (const node of flattedNodes.value) {\n    if (node.expanded) {\n      ids.add(node.id)\n\n      if (!changed && !oldIds.has(node.id)) {\n        changed = true\n      }\n    }\n  }\n\n  if (changed || ids.size !== oldIds.size) {\n    expandedNodeIds.value = ids\n  }\n})\nwatch(\n  [\n    () => props.data,\n    () => props.data.length,\n    () => keyConfig.id,\n    () => keyConfig.children,\n    () => keyConfig.parent,\n    () => props.rootId\n  ],\n  parseAndTransformData,\n  { immediate: true }\n)\nwatch(\n  [treeNodes, () => props.rootId],\n  () => {\n    flattedNodes.value = flatTree(treeNodes.value, {\n      keyField: 'id',\n      parentField: 'parent',\n      childField: 'children',\n      rootId: props.rootId,\n      injectId: false,\n      depthFirst: true\n    })\n  },\n  { immediate: true }\n)\nwatch(expandedNodeIds, (value, prev) => {\n  if (props.noTransition) {\n    updateVisibleNodeEls()\n  }\n\n  if (props.noTransition || disableExpand || !wrapper.value) return\n\n  let addedId: Key | undefined\n  let removedId: Key | undefined\n\n  for (const id of value) {\n    if (!prev.has(id)) {\n      if (addedId != null) return\n\n      addedId = id\n    }\n  }\n\n  for (const id of prev) {\n    if (!value.has(id)) {\n      if (removedId != null) return\n\n      removedId = id\n    }\n  }\n\n  if (addedId == null && removedId == null) return\n  if (\n    (addedId && !nodeMap.get(addedId)?.children?.length) ||\n    (removedId && !nodeMap.get(removedId)?.children?.length)\n  )\n    return\n\n  clearTimeout(timer.expand)\n\n  transferring.value = false\n  expanding.value = true\n\n  let baseExpandedIds: Set<Key> | undefined\n\n  if (addedId != null) {\n    baseExpandedIds = prev\n  }\n\n  if (removedId != null) {\n    if (!baseExpandedIds) {\n      baseExpandedIds = value\n    } else {\n      baseExpandedIds = new Set(baseExpandedIds)\n      baseExpandedIds.delete(removedId)\n    }\n  }\n\n  const baseNodes = flatNodes(treeNodes.value, baseExpandedIds!)\n\n  const virtual = props.virtual\n  const viewHeight = wrapper.value.offsetHeight\n  const nodeHeight = props.nodeMinHeight || 1\n  const viewCount = Math.ceil(viewHeight / nodeHeight) + 1\n\n  const loop = [\n    addedId != null && { id: addedId, type: 'expand' },\n    removedId != null && { id: removedId, type: 'reduce' }\n  ]\n\n  for (const meta of loop) {\n    if (!meta) continue\n\n    const { id, type } = meta\n    const index = baseNodes.findIndex(node => node.id === id)\n\n    if (~index) {\n      const children = baseNodes[index].children\n\n      if (children?.length) {\n        const addedNodes = flatNodes(children, value)\n\n        baseNodes.splice(index + 1, 0, {\n          id: Symbol('TreeNodePlaceholder'),\n          collapse: true,\n          type,\n          height: virtual ? addedNodes.length * nodeHeight : undefined,\n          nodes: virtual ? addedNodes.slice(0, viewCount) : addedNodes\n        } as any)\n      }\n    }\n  }\n\n  expandingNodes.value = baseNodes\n})\n\nprovide(\n  TREE_STATE,\n  reactive({\n    arrow: toRef(props, 'arrow'),\n    checkbox: toRef(props, 'checkbox'),\n    suffixCheckbox: toRef(props, 'suffixCheckbox'),\n    noCascaded: toRef(props, 'noCascaded'),\n    linkLine,\n    virtual: toRef(props, 'virtual'),\n    labelKey: toRef(keyConfig, 'label'),\n    draggable: toRef(props, 'draggable'),\n    floorSelect: toRef(props, 'floorSelect'),\n    renderer: toRef(props, 'renderer'),\n    prefixRenderer: toRef(props, 'prefixRenderer'),\n    suffixRenderer: toRef(props, 'suffixRenderer'),\n    arrowIcon: toRef(props, 'arrowIcon'),\n    blockEffect: toRef(props, 'blockEffect'),\n    dragging,\n    boundAsyncLoad,\n    nodeStates,\n    expanding,\n    getParentNode,\n    updateVisibleNodeEls,\n    computeCheckedState,\n    handleNodeClick,\n    handleNodeSelect,\n    handleNodeCancel,\n    handleNodeExpand,\n    handleNodeReduce,\n    handleAsyncLoad,\n    handleNodeDragStart,\n    handleNodeDragOver,\n    handleNodeDrop,\n    handleNodeDragEnd,\n    handleHittingChange,\n    handleNodeHitting,\n    handleLabelClick\n  })\n)\nprovide(\n  TREE_NODE_STATE,\n  reactive({\n    depth: -1,\n    disabled: toRef(props, 'disabled'),\n    readonly: toRef(props, 'readonly')\n  })\n)\n\ndefineExpose({\n  treeNodes,\n  flattedNodes,\n  dragging,\n  expanding,\n\n  virtualList,\n  trap,\n  indicator,\n\n  refreshScroll,\n  isLeafNode,\n  parseAndTransformData,\n  forceUpdateData,\n  syncNodeStateIntoData,\n  getCheckedNodes,\n  getCheckedNodeData,\n  getSelectedNodes,\n  getSelectedNodeData,\n  getExpandedNodes,\n  getDisabledNodes,\n  getParentNode,\n  getNodeChildren,\n  getSiblingNodes,\n  getPrevSiblingNode,\n  getNextSiblingNode,\n  getNodeByData,\n  expandNodeByData,\n  selectNodeByData,\n  checkNodeByData,\n  toggleNodeLoadingByData,\n  toggleAllExpanded,\n  getTreeData,\n  getFlattedData,\n  updateVisibleNodeEls\n})\n\nonMounted(updateVisibleNodeEls)\n\nconst { updateCheckedUpward, updateCheckedDown } = useCascadedChecked({\n  getNode: key => nodeMap.get(key),\n  disableNode: node => node.disabled\n})\n\nfunction getIndexId() {\n  return `__vxp-tree-key-${getGlobalCount()}`\n}\n\nfunction isLeafNode(node: TreeNodeProps) {\n  const isLeaf = node.isLeaf\n\n  let leafSign: boolean | 'auto' = 'auto'\n  let asyncLoad = false\n\n  if (isNull(isLeaf) || isLeaf === 'auto') {\n    leafSign = 'auto'\n    asyncLoad = boundAsyncLoad.value\n  } else {\n    leafSign = isLeaf\n  }\n\n  return leafSign === 'auto' ? !(node.children?.length || (asyncLoad && !node.loaded)) : !!leafSign\n}\n\nfunction flatNodes(nodes: TreeNodeProps[], expandedIds?: Set<Key>) {\n  const rootNodes = new Set(nodes)\n\n  return flatTree(nodes, {\n    keyField: 'id',\n    parentField: 'parent',\n    childField: 'children',\n    injectId: false,\n    depthFirst: true,\n    cascaded: true,\n    filter: node => {\n      if (rootNodes.has(node)) {\n        return node.matched || node.childMatched || node.upperMatched\n      }\n\n      const parentNode = getParentNode(node)\n\n      return (\n        node.visible &&\n        (node.matched || node.childMatched || node.upperMatched) &&\n        (!parentNode || (expandedIds ? expandedIds.has(parentNode.id) : parentNode.expanded))\n      )\n    }\n  })\n}\n\nfunction isCollapse(node: any): node is TreeCollapseProps {\n  return node.collapse\n}\n\nfunction refreshNodesDepth() {\n  walkTree(treeNodes.value, (node, depth) => {\n    node.depth = depth\n    node.lineIndexes = [0]\n\n    if (node.parent && nodeMap.has(node.parent)) {\n      const parent = nodeMap.get(node.parent)!\n\n      node.last = getLast(parent.children) === node\n      node.upstreamLast = [parent.last, ...parent.upstreamLast]\n    } else {\n      node.last = getLast(treeNodes.value) === node\n      node.upstreamLast = []\n    }\n\n    for (let i = 1; i < depth; ++i) {\n      if (!node.upstreamLast[i - 1]) {\n        node.lineIndexes.push(i)\n      }\n    }\n  })\n}\n\nfunction buildTreeNodes(nodes: TreeNodeProps[]) {\n  treeNodes.value = transformTree(nodes, {\n    keyField: 'id',\n    parentField: 'parent',\n    childField: 'children',\n    rootId: props.rootId\n  })\n\n  refreshNodesDepth()\n}\n\nfunction parseAndTransformData() {\n  const idKey = keyConfig.id\n  const oldDataMap = new Map<Data, TreeNodeProps>()\n  const oldIdMap = new Map<any, TreeNodeProps>()\n\n  for (const node of nodeMap.values()) {\n    oldDataMap.set(node.data, node)\n    oldIdMap.set(node.data[idKey], node)\n  }\n\n  nodeMap.clear()\n  nodeDataMap.clear()\n\n  const nodes: TreeNodeProps[] = []\n\n  if (props.noBuildTree) {\n    walkTree(\n      props.data,\n      (item, _, parent) => {\n        const oldNode = oldDataMap.get(item)\n        const id = oldNode?.id ?? getIndexId()\n        const node = props.cacheNode\n          ? (oldNode ?? createNodeItem(item))\n          : createNodeItem(item, oldNode)\n\n        node.id = id\n        node.parent = parent ? nodeDataMap.get(parent)?.id : undefined\n\n        nodeMap.set(node.id, node)\n        nodes.push(node)\n        nodeDataMap.set(item, node)\n      },\n      { childField: keyConfig.children, depthFirst: true }\n    )\n  } else {\n    const data = props.data\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      const item = data[i]\n      const oldNode = oldDataMap.get(item) ?? oldIdMap.get(item[idKey])\n      const node = props.cacheNode\n        ? (oldNode ?? createNodeItem(item))\n        : createNodeItem(item, oldNode)\n\n      nodeMap.set(node.id, node)\n      nodes.push(node)\n      nodeDataMap.set(item, node)\n    }\n  }\n\n  buildTreeNodes(nodes)\n\n  if (!props.noCascaded) {\n    const checkedNodes = flattedNodes.value.filter(item => item.checked)\n\n    for (let i = 0, len = checkedNodes.length; i < len; ++i) {\n      const item = checkedNodes[i]\n      const parentKey = item.parent\n\n      updateCheckedDown(item.id)\n\n      if (parentKey && nodeMap.has(parentKey)) {\n        const parent = nodeMap.get(parentKey)!\n\n        if (!parent.checked) {\n          updateCheckedUpward(item.id)\n        }\n      }\n    }\n  }\n\n  resetExpanded()\n}\n\nfunction forceUpdateData() {\n  const nodes: TreeNodeProps[] = []\n\n  const {\n    id: idKey,\n    visible: visibleKey,\n    selected: selectedKey,\n    expanded: expandedKey,\n    disabled: disabledKey,\n    checked: checkedKey,\n    loading: loadingKey,\n    loaded: loadedKey,\n    loadFail: loadFailKey,\n    readonly: readonlyKey,\n    arrow: arrowKey,\n    checkbox: checkboxKey,\n    selectDisabled: selectDisabledKey,\n    expandDisabled: expandDisabledKey,\n    checkDisabled: checkDisabledKey,\n    isLeaf: isLeafKey\n  } = keyConfig\n\n  const refresh = (node: TreeNodeProps, item: Data) => {\n    const {\n      [visibleKey]: visible = node.visible,\n      [selectedKey]: selected = node.selected,\n      [expandedKey]: expanded = node.expanded,\n      [disabledKey]: disabled = node.disabled,\n      [checkedKey]: checked = node.checked,\n      [loadingKey]: loading = node.loading,\n      [loadedKey]: loaded = node.loaded,\n      [loadFailKey]: loadFail = node.loadFail,\n      [readonlyKey]: readonly = node.readonly,\n      [arrowKey]: arrow = node.arrow,\n      [checkboxKey]: checkbox = node.checkbox,\n      [selectDisabledKey]: selectDisabled = node.selectDisabled,\n      [expandDisabledKey]: expandDisabled = node.expandDisabled,\n      [checkDisabledKey]: checkDisabled = node.checkDisabled,\n      [isLeafKey]: isLeaf = node.isLeaf\n    } = item\n\n    node.visible = visible\n    node.selected = selected\n    node.expanded = expanded\n    node.disabled = disabled\n    node.checked = checked\n    node.loading = loading\n    node.loaded = loaded\n    node.loadFail = loadFail\n    node.readonly = readonly\n    node.arrow = arrow\n    node.checkbox = checkbox\n    node.selectDisabled = selectDisabled\n    node.expandDisabled = expandDisabled\n    node.checkDisabled = checkDisabled\n    node.isLeaf = isLeaf\n  }\n\n  if (props.noBuildTree) {\n    walkTree(\n      props.data,\n      (item, _, parent) => {\n        let node = nodeDataMap.get(item)\n\n        if (node) {\n          refresh(node, item)\n        } else {\n          node = createNodeItem(item)\n          node.id = getIndexId()\n          node.parent = parent ? nodeDataMap.get(parent)?.id : undefined\n\n          nodeMap.set(node.id, node)\n          nodeDataMap.set(item, node)\n        }\n\n        nodes.push(node)\n      },\n      { childField: keyConfig.children, depthFirst: true }\n    )\n  } else {\n    const data = props.data\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      const item = data[i]\n      const id = item[idKey] as Key\n\n      let node = nodeMap.get(id)\n\n      if (node) {\n        refresh(node, item)\n      } else {\n        node = createNodeItem(item)\n        nodeMap.set(id, node)\n      }\n\n      nodes.push(node)\n    }\n  }\n\n  buildTreeNodes(nodes)\n  resetExpanded()\n}\n\nfunction syncNodeStateIntoData() {\n  flattedNodes.value.forEach(node => {\n    if (!node.data) return\n\n    const { data, visible, selected, expanded, disabled, checked, loading, readonly } = node\n\n    data.visible = visible\n    data.selected = selected\n    data.expanded = expanded\n    data.disabled = disabled\n    data.checked = checked\n    data.loading = loading\n    data.readonly = readonly\n  })\n\n  resetExpanded()\n}\n\nfunction createNodeItem(data: Data, defaults = defaultNodeProperties): TreeNodeProps {\n  const {\n    id: idKey,\n    parent: parentKey,\n    visible: visibleKey,\n    selected: selectedKey,\n    expanded: expandedKey,\n    disabled: disabledKey,\n    checked: checkedKey,\n    loading: loadingKey,\n    loaded: loadedKey,\n    loadFail: loadFailKey,\n    readonly: readonlyKey,\n    arrow: arrowKey,\n    checkbox: checkboxKey,\n    selectDisabled: selectDisabledKey,\n    expandDisabled: expandDisabledKey,\n    checkDisabled: checkDisabledKey,\n    isLeaf: isLeafKey\n  } = keyConfig\n\n  const {\n    [visibleKey]: visible = defaults.visible,\n    [selectedKey]: selected = defaults.selected,\n    [expandedKey]: expanded = defaults.expanded,\n    [disabledKey]: disabled = defaults.disabled,\n    [checkedKey]: checked = defaults.checked,\n    [loadingKey]: loading = defaults.loading,\n    [loadedKey]: loaded = defaults.loaded,\n    [loadFailKey]: loadFail = defaults.loadFail,\n    [readonlyKey]: readonly = defaults.readonly,\n    [arrowKey]: arrow = defaults.arrow,\n    [checkboxKey]: checkbox = defaults.checkbox,\n    [selectDisabledKey]: selectDisabled = defaults.selectDisabled,\n    [expandDisabledKey]: expandDisabled = defaults.expandDisabled,\n    [checkDisabledKey]: checkDisabled = defaults.checkDisabled,\n    [isLeafKey]: isLeaf = defaults.isLeaf\n  } = data\n  const id = props.noBuildTree ? null : data[idKey]\n  const parent = props.noBuildTree ? null : data[parentKey]\n\n  const node = {\n    id,\n    parent,\n    data,\n    visible,\n    selected,\n    expanded,\n    disabled,\n    checked,\n    loading,\n    loaded,\n    loadFail,\n    readonly,\n    arrow,\n    checkbox,\n    selectDisabled,\n    expandDisabled,\n    checkDisabled,\n    isLeaf\n  }\n\n  if (typeof props.postCreate === 'function') {\n    props.postCreate(node as TreeNodeProps)\n  }\n\n  return reactive({\n    ...node,\n    id,\n    parent,\n    children: [],\n    partial: false,\n    matched: false,\n    childMatched: false,\n    upperMatched: false,\n    depth: -1,\n    last: false,\n    // inLastCount: 0,\n    upstreamLast: [],\n    lineIndexes: []\n  })\n}\n\nfunction computeCheckedState(originNode: TreeNodeProps, able: boolean) {\n  if (!props.noCascaded) {\n    const nodeList = [originNode].concat(\n      // 需要包含被禁用且被勾选的节点\n      flattedNodes.value.filter(item => (item.disabled || item.checkDisabled) && item.checked)\n    )\n\n    for (let i = 0, len = nodeList.length; i < len; ++i) {\n      const item = nodeList[i]\n\n      updateCheckedUpward(item.id)\n      updateCheckedDown(item.id)\n    }\n  }\n\n  emitEvent(props.onNodeChange, originNode.data, originNode, able)\n}\n\nfunction handleNodeClick(node: TreeNodeProps) {\n  emitEvent(props.onNodeClick, node.data, node)\n}\n\nfunction handleLabelClick(node: TreeNodeProps) {\n  emitEvent(props.onLabelClick, node.data, node)\n}\n\nfunction handleNodeSelect(node: TreeNodeProps) {\n  const selectedNodes = flattedNodes.value.filter(item => item.selected)\n\n  if (props.multiple) {\n    emitEvent(\n      props.onNodeSelect,\n      selectedNodes.map(item => item.data),\n      selectedNodes\n    )\n  } else {\n    const currentId = node.id\n\n    for (let i = 0, len = selectedNodes.length; i < len; ++i) {\n      const item = selectedNodes[i]\n\n      item.selected = item.id === currentId\n    }\n\n    emitEvent(props.onNodeSelect, node.data, node)\n  }\n}\n\nfunction handleNodeCancel(node: TreeNodeProps) {\n  emitEvent(props.onNodeCancel, node.data, node)\n}\n\nfunction handleNodeExpand(node: TreeNodeProps) {\n  if (props.accordion) {\n    const siblingNodes = getSiblingNodes(node)\n\n    for (let i = 0, len = siblingNodes.length; i < len; ++i) {\n      siblingNodes[i].expanded = false\n    }\n  }\n\n  emitEvent(props.onNodeExpand, node.data, node)\n}\n\nfunction handleNodeReduce(node: TreeNodeProps) {\n  emitEvent(props.onNodeReduce, node.data, node)\n}\n\nasync function handleAsyncLoad(node: TreeNodeProps) {\n  if (!boundAsyncLoad.value) return false\n\n  let result = props.onAsyncLoad(node.data, node)\n\n  if (isPromise(result)) {\n    result = await result\n  }\n\n  return result !== false\n}\n\nlet dragState: {\n  draggingNode: TreeNodeProps,\n  treeRect: DOMRect,\n  willDropNode: TreeNodeProps | null,\n  dropType: DropType\n} | null = null\n\nfunction handleNodeDragStart(nodeInstance: TreeNodeInstance) {\n  if (!wrapper.value) return\n\n  dragState = {\n    draggingNode: nodeInstance.node,\n    treeRect: wrapper.value.getBoundingClientRect(),\n    willDropNode: null,\n    dropType: DropType.BEFORE\n  }\n\n  dragging.value = true\n  emitEvent(props.onDragStart, nodeInstance.node.data, nodeInstance.node)\n}\n\nfunction handleNodeDragOver(nodeInstance: TreeNodeInstance, event: DragEvent) {\n  if (!dragState || !nodeInstance.el || !nodeInstance.arrow) return\n\n  const dropNodeRect = nodeInstance.el.getBoundingClientRect()\n  const treeRect = dragState.treeRect\n  const dropArrowRect = nodeInstance.arrow.getBoundingClientRect()\n  const prevPercent = 0.25\n  const nextPercent = 0.75\n  const distance = event.clientY - dropNodeRect.top\n  const dropNodeHeight = dropArrowRect.height\n\n  let dropType: DropType\n  let indicatorTop = -9999\n  let isIndicatorShow = true\n\n  if (distance < dropNodeHeight * prevPercent) {\n    dropType = DropType.BEFORE\n    indicatorTop = dropArrowRect.top - treeRect.top\n  } else if (distance > dropNodeHeight * nextPercent) {\n    dropType = DropType.AFTER\n    indicatorTop = dropArrowRect.bottom - treeRect.top\n  } else {\n    dropType = DropType.INNER\n    isIndicatorShow = false\n  }\n\n  if (indicator.value) {\n    indicator.value.style.top = `${indicatorTop}px`\n    indicator.value.style.insetInlineStart = `${dropArrowRect.right - treeRect.left}px`\n  }\n\n  dragState.willDropNode = nodeInstance.node\n  dragState.dropType = dropType\n\n  indicatorShow.value = isIndicatorShow\n  emitEvent(props.onDragOver, nodeInstance.node.data, nodeInstance.node)\n}\n\nfunction isLeftInsideRight(left: TreeNodeProps, right: TreeNodeProps) {\n  if (!left || !right) return true\n\n  while (left) {\n    if (left === right || left.id === right.id) {\n      return true\n    }\n\n    left = getParentNode(left)!\n  }\n\n  return false\n}\n\nfunction handleNodeDrop(nodeInstance: TreeNodeInstance) {\n  if (!dragState) return\n\n  const { draggingNode, willDropNode, dropType } = dragState\n\n  if (!willDropNode || isLeftInsideRight(willDropNode, draggingNode)) return\n\n  let currentId: Key\n  let parent: TreeNodeProps | null\n\n  if (draggingNode) {\n    parent = getParentNode(draggingNode)\n\n    if (!parent) {\n      parent = {\n        children: treeNodes.value\n      } as TreeNodeProps\n    }\n\n    currentId = draggingNode.id as Key\n    removeArrayItem(parent.children, item => item.id === currentId)\n  }\n\n  if (dropType === DropType.INNER) {\n    if (!Array.isArray(willDropNode.children)) {\n      willDropNode.children = []\n    }\n\n    const children = Array.from(willDropNode.children as TreeNodeProps[])\n\n    children.push(draggingNode)\n\n    willDropNode.children = children\n    draggingNode.parent = willDropNode.id\n  } else {\n    parent = getParentNode(willDropNode)\n\n    if (!parent) {\n      parent = {\n        parent: undefined! as Key,\n        children: treeNodes.value\n      } as TreeNodeProps\n    }\n\n    currentId = willDropNode.id\n    const index = parent.children.findIndex(item => item.id === currentId)\n\n    if (~index) {\n      parent.children.splice(+(dropType === DropType.AFTER) + index, 0, draggingNode)\n\n      draggingNode.parent = parent.id\n    }\n  }\n\n  refreshNodesDepth()\n  emitEvent(props.onDrop, nodeInstance.node.data, nodeInstance.node, dropType)\n}\n\nfunction handleNodeDragEnd(nodeInstance: TreeNodeInstance) {\n  dragging.value = true\n  indicatorShow.value = false\n  dragState = null\n  emitEvent(props.onDragEnd, nodeInstance.node.data, nodeInstance.node)\n}\n\nfunction handleHittingChange(type: 'up' | 'down') {\n  const activeEl = document.activeElement\n\n  if (!visibleNodeEls.length || !activeEl) return\n\n  const index = visibleNodeEls.findIndex(nodeEl => nodeEl === activeEl)\n\n  if (~index) {\n    visibleNodeEls[\n      (index + (type === 'up' ? -1 : 1) + visibleNodeEls.length) % visibleNodeEls.length\n    ]?.focus()\n  }\n}\n\nfunction handleNodeHitting(nodeEl?: HTMLElement | null) {\n  if (!nodeEl || !visibleNodeEls.length) return\n\n  if (visibleNodeEls.includes(nodeEl)) {\n    nodeEl.focus()\n  }\n}\n\nfunction handleScroll() {\n  // onScroll()\n  updateVisibleNodeEls()\n}\n\nfunction handleTreeFocus(event: FocusEvent) {\n  const target = event.target as HTMLElement\n\n  if (!visibleNodeEls.length || !target || !trap.value) {\n    return\n  }\n\n  if (target === trap.value) {\n    visibleNodeEls[0].focus()\n  }\n}\n\nfunction refreshScroll() {\n  virtualList.value?.refresh()\n}\n\nfunction resetExpanded() {\n  expanding.value = false\n  isMounted.value && updateVisibleNodeEls()\n}\n\nfunction afterExpand() {\n  if (props.virtual) {\n    resetExpanded()\n    return\n  }\n\n  transferring.value = true\n\n  requestAnimationFrame(() => {\n    resetExpanded()\n    timer.expand = setTimeout(() => {\n      transferring.value = false\n    }, 300)\n  })\n}\n\nfunction getCheckedNodes(includePartial = false): TreeNodeProps[] {\n  return flattedNodes.value.filter(item => item.checked || (includePartial && item.partial))\n}\n\nfunction getCheckedNodeData(includePartial = false) {\n  return getCheckedNodes(includePartial).map(node => node.data)\n}\n\nfunction getSelectedNodes(): TreeNodeProps[] {\n  return flattedNodes.value.filter(item => item.selected)\n}\n\nfunction getSelectedNodeData() {\n  return getSelectedNodes().map(node => node.data)\n}\n\nfunction getExpandedNodes(): TreeNodeProps[] {\n  return flattedNodes.value.filter(item => item.expanded)\n}\n\nfunction getDisabledNodes(): TreeNodeProps[] {\n  return flattedNodes.value.filter(item => item.disabled)\n}\n\nfunction getParentNode(node: TreeNodeProps): TreeNodeProps | null {\n  if (node.parent) {\n    return nodeMap.get(node.parent) ?? null\n  }\n\n  return null\n}\n\nfunction getNodeChildren(node: TreeNodeProps) {\n  return node.children\n}\n\nfunction getSiblingNodes(node: TreeNodeProps, includeSelf = false): TreeNodeProps[] {\n  const parent = getParentNode(node)\n\n  const currentId = node.id as Key\n  const parentId = parent ? (parent.id as Key) : null\n\n  return flattedNodes.value.filter(item => {\n    const isChild = parentId === null ? !item.parent : item.parent === parentId\n\n    if (isChild && !includeSelf) {\n      return item.id !== currentId\n    }\n\n    return isChild\n  })\n}\n\nfunction getPrevSiblingNode(node: TreeNodeProps): TreeNodeProps | null {\n  const parent = getParentNode(node)\n\n  if (!parent) return null\n\n  const currentId = node.id\n  const parentId = parent.id\n  const children = flattedNodes.value.filter(item => item.parent === parentId)\n\n  if (children && children.length) {\n    const index = children.findIndex(item => item.id === currentId)\n\n    if (index > 0) {\n      return children[index - 1]\n    }\n  }\n\n  return null\n}\n\nfunction getNextSiblingNode(node: TreeNodeProps): TreeNodeProps | null {\n  const parent = getParentNode(node)\n\n  if (!parent) return null\n\n  const currentId = node.id\n  const parentId = parent.id\n  const children = flattedNodes.value.filter(item => item.parent === parentId)\n\n  if (children && children.length) {\n    const index = children.findIndex(item => item.id === currentId)\n\n    if (!~index && index < children.length - 1) {\n      return children[index + 1]\n    }\n  }\n\n  return null\n}\n\nfunction getNodeByData<T extends Data>(data: T): TreeNodeProps | null {\n  if (props.noBuildTree) {\n    return flattedNodes.value.find(item => item.data === data) ?? null\n  }\n\n  const idKey = keyConfig.id\n\n  return (\n    flattedNodes.value.find(\n      item => item.data === data || item.data[idKey] === data[idKey as keyof T]\n    ) ?? null\n  )\n}\n\nfunction expandNodeByData<T extends Data>(data: T, expanded?: boolean, upstream = false) {\n  const node = getNodeByData(data)\n\n  if (node) {\n    node.expanded = isNull(expanded) ? !node.expanded : !!expanded\n\n    if (upstream) {\n      let parentNode = getParentNode(node)\n\n      while (parentNode) {\n        parentNode.expanded = node.expanded\n        parentNode = getParentNode(parentNode)\n      }\n    }\n  }\n}\n\nfunction selectNodeByData<T extends Data>(data: T, selected?: boolean) {\n  const node = getNodeByData(data)\n\n  if (node) {\n    node.selected = isNull(selected) ? !node.selected : !!selected\n  }\n}\n\nfunction checkNodeByData<T extends Data>(data: T, checked?: boolean) {\n  const node = getNodeByData(data)\n\n  if (node) {\n    node.checked = isNull(checked) ? !node.checked : !!checked\n\n    if (!props.noCascaded) {\n      const nodeList = [node].concat(\n        flattedNodes.value.filter(item => item.disabled && item.checked)\n      )\n\n      for (let i = 0, len = nodeList.length; i < len; ++i) {\n        const item = nodeList[i]\n\n        updateCheckedUpward(item.id)\n        updateCheckedDown(item.id)\n      }\n    }\n  }\n}\n\nfunction toggleNodeLoadingByData<T extends Data>(data: T, loading?: boolean) {\n  const node = getNodeByData(data)\n\n  if (node) {\n    node.checked = isNull(loading) ? !node.loading : !!loading\n  }\n}\n\nfunction toggleAllExpanded(expanded: boolean) {\n  for (const node of flattedNodes.value) {\n    if (!node.disabled && !node.expandDisabled && !node.loading && node.children?.length) {\n      node.expanded = expanded\n    }\n  }\n}\n\nfunction getTreeData(withFilter = false) {\n  return mapTree(\n    withFilter\n      ? filterTree(treeNodes.value, node => node.matched, {\n        childField: 'children',\n        leafOnly: props.filterLeaf,\n        isLeaf: isLeafNode\n      })\n      : treeNodes.value,\n    node => ({ ...node.data })\n  )\n}\n\nfunction getFlattedData(withFilter = false) {\n  return (\n    withFilter\n      ? flattedNodes.value.filter(node => node.matched || node.childMatched || node.upperMatched)\n      : flattedNodes.value\n  ).map(node => ({ ...node.data }))\n}\n\nconst transferring = ref(false)\n</script>\n\n<template>\n  <VirtualList\n    ref=\"virtualList\"\n    :class=\"[nh.b(), nh.bs('vars'), props.inherit && nh.bm('inherit')]\"\n    :inherit=\"props.inherit\"\n    :items=\"renderedNodes\"\n    :item-size=\"props.nodeMinHeight\"\n    items-tag=\"ul\"\n    :items-attrs=\"{ class: nh.be('list') }\"\n    :hide-bar=\"!props.useYBar\"\n    :ignore-resize=\"transferring\"\n    :disabled=\"!props.virtual\"\n    role=\"tree\"\n    tabindex=\"-1\"\n    :aria-disabled=\"props.disabled\"\n    :aria-readonly=\"props.readonly\"\n    :style=\"style\"\n    @scroll=\"handleScroll\"\n  >\n    <template #prefix-trap>\n      <div\n        ref=\"trap\"\n        tabindex=\"0\"\n        role=\"none\"\n        style=\"width: 0; height: 0; overflow: hidden; outline: none\"\n        @focus=\"handleTreeFocus\"\n      ></div>\n    </template>\n    <template #default=\"{ item: node }: { item: TreeNodeProps }\">\n      <CollapseTransition\n        v-if=\"isCollapse(node)\"\n        appear\n        :reverse=\"node.type === 'reduce'\"\n        @after-enter=\"afterExpand\"\n      >\n        <div :class=\"nh.be('collapse')\" :style=\"{ height: `${node.height}px` }\">\n          <TreeNode\n            v-for=\"(innerNode, index) in node.nodes\"\n            :key=\"innerNode.id ?? index\"\n            v-bind=\"toNodeProps(innerNode.data, innerNode)\"\n            :node=\"innerNode\"\n          >\n            <template v-if=\"slots.node || props.slots.node\" #default=\"payload\">\n              <slot name=\"node\" v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.node\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n            <template v-if=\"slots.arrow || props.slots.arrow\" #arrow=\"payload\">\n              <slot name=\"arrow\" v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.arrow\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n            <template v-if=\"slots.label || props.slots.label\" #label=\"payload\">\n              <slot name=\"label\" v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.label\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n            <template v-if=\"slots.prefix || props.slots.prefix\" #prefix=\"payload\">\n              <slot name=\"prefix\" v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.prefix\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n            <template v-if=\"slots.suffix || props.slots.suffix\" #suffix=\"payload\">\n              <slot name=\"suffix\" v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.suffix\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n          </TreeNode>\n        </div>\n      </CollapseTransition>\n      <TreeNode v-else v-bind=\"toNodeProps(node.data, node)\" :node=\"node\">\n        <template v-if=\"slots.node || props.slots.node\" #default=\"payload\">\n          <slot name=\"node\" v-bind=\"payload\">\n            <Renderer :renderer=\"props.slots.node\" :data=\"payload\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"slots.arrow || props.slots.arrow\" #arrow=\"payload\">\n          <slot name=\"arrow\" v-bind=\"payload\">\n            <Renderer :renderer=\"props.slots.arrow\" :data=\"payload\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"slots.label || props.slots.label\" #label=\"payload\">\n          <slot name=\"label\" v-bind=\"payload\">\n            <Renderer :renderer=\"props.slots.label\" :data=\"payload\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"slots.prefix || props.slots.prefix\" #prefix=\"payload\">\n          <slot name=\"prefix\" v-bind=\"payload\">\n            <Renderer :renderer=\"props.slots.prefix\" :data=\"payload\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"slots.suffix || props.slots.suffix\" #suffix=\"payload\">\n          <slot name=\"suffix\" v-bind=\"payload\">\n            <Renderer :renderer=\"props.slots.suffix\" :data=\"payload\"></Renderer>\n          </slot>\n        </template>\n      </TreeNode>\n    </template>\n    <template #empty>\n      <div :class=\"nh.be('empty-tip')\">\n        <slot name=\"empty\">\n          <Renderer :renderer=\"props.slots.empty\">\n            {{ props.emptyText ?? locale.empty }}\n          </Renderer>\n        </slot>\n      </div>\n    </template>\n    <template #suffix-trap>\n      <div\n        v-if=\"props.draggable\"\n        v-show=\"indicatorShow\"\n        ref=\"indicator\"\n        :class=\"nh.be('indicator')\"\n      ></div>\n    </template>\n  </VirtualList>\n</template>\n","import {\n  booleanProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  localeProp,\n  stateProp,\n  styleProp\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type {\n  BeforeSelect,\n  BeforeUpload,\n  RenderFn,\n  UploadFetchMethod,\n  UploadFileOptions,\n  UploadFileSlots,\n  UploadFileState,\n  UploadHttpError,\n  UploadListSlots,\n  UploadListType,\n  UploadSlots\n} from './symbol'\n\nexport const uploadProps = buildProps({\n  state: stateProp,\n  locale: localeProp('upload'),\n  url: String,\n  fileList: Array as PropType<UploadFileOptions[]>,\n  multiple: booleanProp,\n  tip: String,\n  accept: [String, Array] as PropType<string | string[]>,\n  filter: [String, Array] as PropType<string | string[]>,\n  maxSize: Number,\n  field: String,\n  data: Object as PropType<Record<string, string | Blob>>,\n  headers: Object as PropType<Record<string, string>>,\n  withCredentials: booleanProp,\n  manual: booleanProp,\n  hiddenFiles: booleanProp,\n  countLimit: Number,\n  allowDrag: booleanProp,\n  onBeforeUpload: Function as PropType<BeforeUpload>,\n  onBeforeSelect: Function as PropType<BeforeSelect>,\n  iconRenderer: Function as PropType<RenderFn>,\n  selectToAdd: booleanProp,\n  listType: String as PropType<UploadListType>,\n  block: booleanProp,\n  loadingText: String,\n  directory: booleanProp,\n  pathField: String,\n  disabledClick: booleanProp,\n  buttonLabel: String,\n  disabled: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  image: booleanProp,\n  defaultFiles: Array as PropType<UploadFileOptions[]>,\n  canPreview: Function as PropType<(file: UploadFileState) => boolean>,\n  listStyle: styleProp,\n  name: String,\n  customFetch: Function as PropType<UploadFetchMethod>,\n  slots: Object as PropType<UploadSlots>,\n  onExceed: eventProp<(files: UploadFileState[]) => void>(),\n  onChange: eventProp<(files: UploadFileState[]) => void>(),\n  onFilterError: eventProp<(files: UploadFileState) => void>(),\n  onSizeError: eventProp<(files: UploadFileState) => void>(),\n  onDelete: eventProp<(file: UploadFileState) => void>(),\n  onPreview: eventProp<(file: UploadFileState) => void>(),\n  onProgress: eventProp<(file: UploadFileState, percent: number) => void>(),\n  onSuccess: eventProp<(file: UploadFileState, response: any) => void>(),\n  onError: eventProp<(file: UploadFileState, error: UploadHttpError) => void>()\n})\n\nexport type UploadProps = ExtractPropTypes<typeof uploadProps>\nexport type UploadCProps = ConfigurableProps<\n  UploadProps,\n  'url' | 'fileList',\n  'onBeforeUpload' | 'onBeforeSelect'\n>\n\nexport const uploadListProps = buildProps({\n  files: Array as PropType<UploadFileState[]>,\n  selectToAdd: booleanProp,\n  iconRenderer: Function as PropType<RenderFn>,\n  type: String as PropType<UploadListType>,\n  loadingText: String,\n  style: styleProp,\n  precision: Number,\n  canPreview: Function as PropType<(file: UploadFileState) => boolean>,\n  slots: Object as PropType<UploadListSlots>,\n  onDelete: eventProp<(file: UploadFileState) => void>(),\n  onPreview: eventProp<(file: UploadFileState) => void>()\n})\n\nexport type UploadListProps = ExtractPropTypes<typeof uploadListProps>\nexport type UploadListCProps = ConfigurableProps<UploadListProps, 'files'>\n\nexport const uploadFileProps = buildProps({\n  locale: localeProp('upload'),\n  file: Object as PropType<UploadFileState>,\n  iconRenderer: Function as PropType<RenderFn>,\n  listType: String as PropType<UploadListType>,\n  loadingText: String,\n  selectToAdd: booleanProp,\n  precision: Number,\n  canPreview: Function as PropType<(file: UploadFileState) => boolean>,\n  slots: Object as PropType<UploadFileSlots>,\n  onDelete: eventProp<(file: UploadFileState) => void>(),\n  onPreview: eventProp<(file: UploadFileState) => void>()\n})\n\nexport type UploadFileProps = ExtractPropTypes<typeof uploadFileProps>\nexport type UploadFileCProps = ConfigurableProps<UploadFileProps, 'file'>\n","import { computed } from 'vue'\n\nimport { useIcons } from '@vexip-ui/config'\n\nimport type { IconsConfig } from '@vexip-ui/config'\n\nconst iconConfig = new Map<keyof IconsConfig, string[]>()\n\n// iconConfig.set('fileWord', ['doc', 'docx'])\niconConfig.set('fileVideo', [\n  'mp4',\n  'flv',\n  'mkv',\n  'rm',\n  'rmvb',\n  'mov',\n  'mtv',\n  'wnv',\n  'avi',\n  '3gp',\n  'amv',\n  'dmv'\n])\n// iconConfig.set('filePdf', ['pdf'])\niconConfig.set('fileImage', [\n  'bmp',\n  'jpg',\n  'jpeg',\n  'png',\n  'tif',\n  'gif',\n  'pcx',\n  'tga',\n  'exif',\n  'fpx',\n  'svg',\n  'psd',\n  'cdr',\n  'pcd',\n  'dxf',\n  'ufo',\n  'eps',\n  'ai',\n  'raw',\n  'wmf',\n  'webp'\n])\n// iconConfig.set('fileExcel', ['xls', 'xlsx', 'xlsm', 'xlsb', 'xlam', 'csv'])\niconConfig.set(\n  'fileCode',\n  [\n    [\n      'json',\n      'xml',\n      'property',\n      'class',\n      'c',\n      'cpp',\n      'cc',\n      'cxx',\n      'h',\n      'hpp',\n      'hxx',\n      'cs',\n      'yml',\n      'yaml',\n      'ts',\n      'tsx'\n    ],\n    ['js', 'jsx', 'mjs', 'cjs', 'ts', 'tsx', 'mts', 'cts'],\n    ['css', 'styl', 'pcss'],\n    ['sass', 'scss'],\n    ['less'],\n    ['java', 'class', 'jsp'],\n    ['vue'],\n    ['html', 'htm'],\n    ['py', 'pyc', 'pyw', 'pyo', 'pyd']\n  ].flat()\n)\niconConfig.set('fileAudio', [\n  'cd',\n  'wave',\n  'aiff',\n  'mpeg',\n  'mp3',\n  'mpeg-4',\n  'midi',\n  'wma',\n  'ra',\n  'rm',\n  'rmx',\n  'vqf',\n  'amr',\n  'ape',\n  'flac',\n  'aac'\n])\niconConfig.set('fileZip', [\n  'rar',\n  'zip',\n  '7z',\n  'cab',\n  'arj',\n  'lzh',\n  'tar',\n  'gz',\n  'ace',\n  'uue',\n  'bz2',\n  'jar',\n  'iso'\n])\niconConfig.set(\n  'fileText',\n  [\n    ['doc', 'docx'],\n    ['xls', 'xlsx', 'xlsm', 'xlsb', 'xlam', 'csv'],\n    ['pdf', 'txt', 'md']\n  ].flat()\n)\niconConfig.set('file', ['default'])\n\nexport function useFileIcons(icons = useIcons()) {\n  return computed(() => {\n    const map: Record<string, Record<string, any>> = {}\n\n    for (const [iconName, types] of iconConfig.entries()) {\n      if (types?.length) {\n        for (const type of types) {\n          map[type] = icons.value[iconName]\n        }\n      }\n    }\n\n    return map\n  })\n}\n","import type { ComponentPublicInstance } from 'vue'\n\nexport type UploadListType = 'name' | 'detail' | 'thumbnail' | 'card'\nexport type UploadStatus = 'pending' | 'uploading' | 'fail' | 'success' | 'delete'\n\nexport type UploadSourceFile = File & { path?: string }\n\nexport type UploadHttpError = Error & {\n  response: any,\n  url: string,\n  status: number,\n  method: string\n}\n\nexport const enum StatusType {\n  PENDING = 'pending',\n  UPLOADING = 'uploading',\n  FAIL = 'fail',\n  SUCCESS = 'success',\n  DELETE = 'delete'\n}\n\nexport interface UploadFileState {\n  id: string | number,\n  name: string,\n  size: number,\n  type: string,\n  base64: string | null,\n  status: UploadStatus,\n  percentage: number,\n  source: UploadSourceFile | null,\n  url: string | null,\n  path: string,\n  /**\n   * @deprecated\n   */\n  xhr: XMLHttpRequest | null,\n  response: any,\n  error: UploadHttpError | null,\n  abort: () => void\n}\n\nexport type UploadFileOptions = Partial<Omit<UploadFileState, 'response' | 'error' | 'abort'>>\n\ntype MaybePromise<T> = T | Promise<T>\n\nexport type BeforeUpload = (\n  file: UploadFileState,\n  files: UploadFileState[]\n) => MaybePromise<boolean | Blob | UploadSourceFile | void>\nexport type BeforeSelect = (\n  file: UploadFileState,\n  files: UploadFileState[]\n) => MaybePromise<boolean | void>\nexport type RenderFn = (data: { file: UploadFileState }) => any\n\nexport interface UploadFetchOptions {\n  url: string,\n  file: UploadSourceFile,\n  headers?: Record<string, string>,\n  withCredentials?: boolean,\n  data?: Record<string, string | Blob>,\n  field?: string,\n  pathField?: string,\n  onProgress?: (percent: number) => void,\n  onSuccess?: (response: any) => void,\n  onError?: (error: UploadHttpError) => void,\n  onAbort?: () => void\n}\n\n/**\n * Should return an abort method.\n */\nexport type UploadFetchMethod = (options: UploadFetchOptions) => () => void\n\nexport interface DirectoryEntity {\n  name: string,\n  fullPath: string,\n  isFile: boolean,\n  isDirectory: boolean,\n  file: (callback: (file: UploadSourceFile) => void) => void,\n\n  createReader: () => DirectoryReader\n}\n\nexport interface DirectoryReader {\n  readEntries: (\n    onSuccess: (entities: DirectoryEntity[]) => void,\n    onError?: (errors: any) => void\n  ) => void\n}\n\nexport interface UploadExposed extends ComponentPublicInstance {\n  isDragOver: boolean,\n  execute: () => Promise<false | any[]>,\n  handleDelete: (file: UploadFileState) => void,\n  focus: (options?: FocusOptions) => void,\n  blur: () => void\n}\n\nexport interface UploadListSlots {\n  item?: (params: { file: UploadFileState, status: UploadStatus, percentage: number }) => any,\n  icon?: (params: { file: UploadFileState, status: UploadStatus, percentage: number }) => any,\n  suffix?: () => any\n}\n\nexport interface UploadFileSlots {\n  default?: (params: { file: UploadFileState, status: UploadStatus, percentage: number }) => any,\n  icon?: (params: { file: UploadFileState, status: UploadStatus, percentage: number }) => any\n}\n\nexport interface UploadSlots extends Omit<UploadListSlots, 'suffix'> {\n  default?: (params: { isDragOver: boolean }) => any,\n  tip?: () => any\n}\n\nexport const uploadListTypes = Object.freeze<UploadListType[]>([\n  'name',\n  'detail',\n  'thumbnail',\n  'card'\n])\n\n/**\n * @deprecated Use `UploadHttpError` to replace it\n */\nexport type HttpError = UploadHttpError\n/**\n * @deprecated Use `UploadSourceFile` to replace it\n */\nexport type SourceFile = UploadSourceFile\n/**\n * @deprecated Use `UploadFileState` to replace it\n */\nexport type FileState = UploadFileState\n/**\n * @deprecated Use `UploadFileOptions` to replace it\n */\nexport type FileOptions = UploadFileOptions\n","<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { Progress } from '@/components/progress'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, reactive, shallowReadonly, toRef } from 'vue'\n\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { toFixed } from '@vexip-ui/utils'\nimport { uploadFileProps } from './props'\nimport { useFileIcons } from './file-icon'\nimport { StatusType, uploadListTypes } from './symbol'\n\nimport type { UploadFileSlots, UploadFileState } from './symbol'\n\ndefineOptions({ name: 'UploadFile' })\n\nconst imageExtRE = /\\.(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico)$/i\nconst imageBase64RE = /^data:image\\//\n\nfunction isImage(file: UploadFileState) {\n  if (file.type) {\n    return file.type.startsWith('image/')\n  }\n\n  const { name, url, base64 } = file\n\n  return !!(\n    imageExtRE.test(name) ||\n    (url && (imageExtRE.test(url) || imageBase64RE.test(url))) ||\n    (base64 && imageBase64RE.test(base64))\n  )\n}\n\nconst _props = defineProps(uploadFileProps)\nconst props = useProps('uploadFile', _props, {\n  locale: null,\n  file: {\n    default: () => ({}) as UploadFileState,\n    static: true\n  },\n  iconRenderer: {\n    default: null,\n    isFunc: true\n  },\n  listType: {\n    default: 'name',\n    validator: value => uploadListTypes.includes(value)\n  },\n  loadingText: null,\n  selectToAdd: false,\n  precision: 2,\n  canPreview: {\n    default: isImage,\n    isFunc: true\n  },\n  slots: () => ({})\n})\n\ndefineSlots<UploadFileSlots>()\n\nconst nh = useNameHelper('upload')\nconst locale = useLocale('upload', toRef(props, 'locale'))\nconst icons = useIcons()\nconst fileIcons = useFileIcons(icons)\n\nconst useIconRenderer = computed(() => typeof props.iconRenderer === 'function')\nconst fileName = computed(() => props.file.path || props.file.name)\nconst status = computed(() => props.file.status)\nconst percentage = computed(() => toFixed(props.file.percentage, props.precision))\nconst showThumb = computed(() => isImage(props.file) && (props.file.url || props.file.base64))\n\nconst slotParams = shallowReadonly(\n  reactive({\n    file: toRef(props, 'file'),\n    status,\n    percentage\n  })\n)\n\nfunction getFileExtension(file: UploadFileState) {\n  return file.name.split('.').pop()!.toLocaleLowerCase()\n}\n\nfunction getFileIcon(file: UploadFileState, scale = 1) {\n  const extension = getFileExtension(file)\n  const icon = extension\n    ? fileIcons.value[extension] || fileIcons.value.default\n    : fileIcons.value.default\n\n  return { ...icon, scale: +(icon.scale || 1) * scale }\n}\n\nfunction handleDelete(file: UploadFileState) {\n  emitEvent(props.onDelete, file)\n}\n\nfunction handlePreview(file: UploadFileState) {\n  emitEvent(props.onPreview, file)\n}\n\nfunction imageToBase64(file: UploadFileState) {\n  if (!file.source || !isImage(props.file)) return\n\n  const reader = new FileReader()\n\n  reader.readAsDataURL(file.source)\n  reader.onload = () => {\n    if (file.status !== StatusType.DELETE) {\n      file.base64 = reader.result?.toString() ?? null\n    }\n  }\n}\n</script>\n\n<template>\n  <li\n    :class=\"[\n      nh.be('file'),\n      nh.bem('file', props.listType),\n      nh.bem('file', status),\n      props.inherit && nh.bem('file', 'inherit')\n    ]\"\n    :title=\"fileName\"\n    tabindex=\"-1\"\n  >\n    <slot v-bind=\"slotParams\">\n      <Renderer :renderer=\"props.slots.default\" :data=\"slotParams\">\n        <template v-if=\"props.listType === 'name'\">\n          <div :class=\"nh.be('label')\">\n            <div :class=\"[nh.be('icon'), nh.be('file-icon')]\">\n              <slot name=\"icon\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.icon\" :data=\"slotParams\">\n                  <Renderer\n                    v-if=\"useIconRenderer\"\n                    :renderer=\"props.iconRenderer\"\n                    :data=\"{ file: props.file }\"\n                  ></Renderer>\n                  <Icon v-else v-bind=\"getFileIcon(props.file)\"></Icon>\n                </Renderer>\n              </slot>\n            </div>\n            <span :class=\"nh.be('filename')\">\n              {{ fileName }}\n            </span>\n          </div>\n          <div :class=\"nh.be('actions')\">\n            <span\n              v-if=\"status === 'uploading'\"\n              style=\"margin-inline-end: 0.5em\"\n              :class=\"nh.be('percentage')\"\n            >\n              {{ `${percentage}%` }}\n            </span>\n            <div v-if=\"status === 'success'\" :class=\"[nh.be('icon'), nh.be('success')]\">\n              <Icon v-bind=\"icons.success\"></Icon>\n            </div>\n            <div v-else-if=\"status === 'fail'\" :class=\"[nh.be('icon'), nh.be('fail')]\">\n              <Icon v-bind=\"icons.warning\"></Icon>\n            </div>\n            <div v-else-if=\"status === 'uploading'\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n              <Icon v-bind=\"icons.loading\"></Icon>\n            </div>\n            <button\n              type=\"button\"\n              :class=\"[nh.be('icon'), nh.be('close')]\"\n              :aria-label=\"locale.ariaLabel.delete\"\n              @click=\"handleDelete(props.file)\"\n            >\n              <Icon v-bind=\"icons.delete\"></Icon>\n            </button>\n          </div>\n          <div v-if=\"status === 'uploading'\" :class=\"nh.be('progress')\">\n            <Progress\n              inherit\n              info-type=\"none\"\n              :stroke-width=\"2\"\n              :percentage=\"props.file.percentage\"\n              :precision=\"props.precision\"\n            ></Progress>\n          </div>\n        </template>\n        <template v-else-if=\"props.listType === 'thumbnail' || props.listType === 'card'\">\n          <div :class=\"nh.be('card')\">\n            <div :class=\"nh.be('thumbnail')\">\n              <template v-if=\"status === 'uploading'\">\n                <div v-if=\"props.listType === 'thumbnail'\" :class=\"nh.be('progress')\">\n                  <span style=\"margin-bottom: 0.3em\">\n                    {{ props.loadingText ?? locale.uploading }}\n                  </span>\n                  <Progress\n                    inherit\n                    info-type=\"none\"\n                    :stroke-width=\"2\"\n                    :percentage=\"props.file.percentage\"\n                    :precision=\"props.precision\"\n                  ></Progress>\n                  <span style=\"margin-top: 3px\" :class=\"nh.be('percentage')\">\n                    {{ `${percentage}%` }}\n                  </span>\n                </div>\n                <Icon\n                  v-else\n                  v-bind=\"icons.loading\"\n                  :scale=\"+(icons.loading.scale || 1) * 1.8\"\n                  label=\"loading\"\n                ></Icon>\n              </template>\n              <img\n                v-else-if=\"showThumb\"\n                :class=\"nh.be('image')\"\n                :src=\"props.file.url || props.file.base64 || ''\"\n                :alt=\"fileName\"\n              />\n              <template v-else>\n                {{ imageToBase64(props.file) }}\n                <slot name=\"icon\" v-bind=\"slotParams\">\n                  <Renderer :renderer=\"props.slots.icon\" :data=\"slotParams\">\n                    <Renderer\n                      v-if=\"useIconRenderer\"\n                      :renderer=\"props.iconRenderer\"\n                      :data=\"{ file: props.file }\"\n                    ></Renderer>\n                    <Icon v-else v-bind=\"getFileIcon(props.file, 2.8)\"></Icon>\n                  </Renderer>\n                </slot>\n              </template>\n            </div>\n            <div v-if=\"props.listType === 'card'\" :class=\"nh.be('info')\">\n              <span :class=\"nh.be('filename')\">\n                {{ fileName }}\n              </span>\n              <CollapseTransition>\n                <div v-if=\"status === 'uploading'\" :class=\"nh.be('progress')\">\n                  <Progress\n                    inherit\n                    info-type=\"none\"\n                    :stroke-width=\"4\"\n                    :percentage=\"props.file.percentage\"\n                    :precision=\"props.precision\"\n                  ></Progress>\n                </div>\n              </CollapseTransition>\n            </div>\n            <div\n              v-if=\"props.listType === 'card' || status !== 'uploading'\"\n              :class=\"nh.be('actions')\"\n            >\n              <div v-if=\"props.listType === 'thumbnail'\" :class=\"nh.be('mask')\"></div>\n              <button\n                type=\"button\"\n                :class=\"[\n                  nh.be('icon'),\n                  nh.be('action'),\n                  {\n                    [nh.bem('action', 'disabled')]: !props.canPreview(props.file)\n                  }\n                ]\"\n                :disabled=\"!props.canPreview(props.file)\"\n                :aria-label=\"locale.ariaLabel.preview\"\n                @click=\"handlePreview(props.file)\"\n              >\n                <Icon v-bind=\"icons.preview\" :scale=\"+(icons.preview.scale || 1) * 1.4\"></Icon>\n              </button>\n              <button\n                type=\"button\"\n                :class=\"[nh.be('icon'), nh.be('action')]\"\n                :aria-label=\"locale.ariaLabel.delete\"\n                @click=\"handleDelete(props.file)\"\n              >\n                <Icon v-bind=\"icons.delete\" :scale=\"+(icons.delete.scale || 1) * 1.4\"></Icon>\n              </button>\n            </div>\n          </div>\n        </template>\n      </Renderer>\n    </slot>\n  </li>\n</template>\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\nimport { UploadFile } from '@/components/upload-file'\n\nimport { computed } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { uploadListProps } from './props'\nimport { uploadListTypes } from './symbol'\n\nimport type { UploadFileState, UploadListSlots } from './symbol'\n\ndefineOptions({ name: 'UploadList' })\n\nconst _props = defineProps(uploadListProps)\nconst props = useProps('uploadList', _props, {\n  files: {\n    default: () => [],\n    static: true\n  },\n  selectToAdd: false,\n  iconRenderer: {\n    default: null,\n    isFunc: true\n  },\n  type: {\n    default: 'name',\n    validator: value => uploadListTypes.includes(value)\n  },\n  loadingText: null,\n  style: null,\n  precision: 2,\n  // 'canPreview' using UploadFile default\n  slots: () => ({})\n})\n\nconst slots = defineSlots<UploadListSlots>()\n\nconst nh = useNameHelper('upload')\nconst transitionName = computed(() => nh.ns('fade'))\n\nfunction handleDelete(file: UploadFileState) {\n  emitEvent(props.onDelete, file)\n}\n\nfunction handlePreview(file: UploadFileState) {\n  emitEvent(props.onPreview, file)\n}\n</script>\n\n<template>\n  <ul\n    :class=\"[nh.be('files'), nh.bs('vars'), props.inherit && nh.bem('files', 'inherit')]\"\n    :style=\"props.style\"\n  >\n    <Transition\n      v-for=\"item in props.files\"\n      :key=\"item.id\"\n      appear\n      :name=\"props.selectToAdd ? transitionName : undefined\"\n    >\n      <UploadFile\n        inherit\n        :file=\"item\"\n        :icon-renderer=\"props.iconRenderer\"\n        :list-type=\"props.type\"\n        :loading-text=\"props.loadingText\"\n        :select-to-add=\"props.selectToAdd\"\n        :precision=\"props.precision\"\n        :can-preview=\"props.canPreview\"\n        @delete=\"handleDelete\"\n        @preview=\"handlePreview\"\n      >\n        <template v-if=\"slots.item || props.slots.item\" #default=\"{ file, status, percentage }\">\n          <slot\n            name=\"item\"\n            :file=\"file\"\n            :status=\"status\"\n            :percentage=\"percentage\"\n          >\n            <Renderer\n              :renderer=\"props.slots.item\"\n              :data=\"{\n                file,\n                status,\n                percentage\n              }\"\n            ></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"slots.icon || props.slots.icon\" #icon=\"{ file, status, percentage }\">\n          <slot\n            name=\"icon\"\n            :file=\"file\"\n            :status=\"status\"\n            :percentage=\"percentage\"\n          >\n            <Renderer :renderer=\"props.slots.icon\" :data=\"{ file, status, percentage }\"></Renderer>\n          </slot>\n        </template>\n      </UploadFile>\n    </Transition>\n    <slot name=\"suffix\">\n      <Renderer :renderer=\"props.slots.suffix\"></Renderer>\n    </slot>\n  </ul>\n</template>\n","import { has, isDefined, noop } from '@vexip-ui/utils'\n\nimport type { UploadFetchOptions, UploadHttpError } from './symbol'\n\nfunction getError(url: string, xhr: XMLHttpRequest) {\n  const message = `fail to post ${url} ${xhr.status}'`\n  const error = new Error(message) as UploadHttpError\n\n  error.response = getBody(xhr)\n  error.url = url\n  error.status = xhr.status\n  error.method = 'POST'\n\n  return error\n}\n\nfunction getBody(xhr: XMLHttpRequest) {\n  const text = xhr.responseText || xhr.response\n\n  if (!text) {\n    return text\n  }\n\n  try {\n    return JSON.parse(text)\n  } catch (e) {\n    return text\n  }\n}\n\nexport function upload(options: UploadFetchOptions) {\n  if (typeof XMLHttpRequest === 'undefined') {\n    return noop\n  }\n\n  const xhr = new XMLHttpRequest()\n  const url = options.url\n\n  if (xhr.upload && options.onProgress) {\n    xhr.upload.onprogress = event => {\n      let percent = 0\n\n      if (event.total > 0) {\n        percent = (event.loaded / event.total) * 100\n      }\n\n      options.onProgress!(percent)\n    }\n  }\n\n  const formData = new FormData()\n\n  if (options.data) {\n    const data = options.data\n\n    Object.keys(data).forEach(key => {\n      formData.append(key, data[key])\n    })\n  }\n\n  formData.append(options.field || 'file', options.file)\n  options.file.path && formData.append(options.pathField || 'path', options.file.path)\n\n  if (options.onError) {\n    xhr.onerror = () => {\n      options.onError!(getError(url, xhr))\n    }\n  }\n\n  xhr.onload = () => {\n    if (xhr.status < 200 || xhr.status >= 300) {\n      if (options.onError) {\n        options.onError(getError(url, xhr))\n      }\n\n      return\n    }\n\n    const body = getBody(xhr)\n\n    options.onSuccess?.(body)\n  }\n\n  if (options.onAbort) {\n    xhr.onabort = () => {\n      options.onAbort!()\n    }\n  }\n\n  xhr.open('POST', url, true)\n\n  if (options.withCredentials && 'withCredentials' in xhr) {\n    xhr.withCredentials = true\n  }\n\n  const headers = options.headers ?? {}\n\n  Object.keys(headers).forEach(header => {\n    if (has(headers, header) && isDefined(headers[header])) {\n      xhr.setRequestHeader(header, headers[header])\n    }\n  })\n\n  xhr.send(formData)\n\n  return () => xhr.abort()\n}\n","import { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { UploadList } from '@/components/upload-list'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, defineComponent, onBeforeUnmount, ref, renderSlot, toRef, watch } from 'vue'\n\nimport {\n  createIconProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { isClient, isDefined, isFalse, isPromise, noop, randomString } from '@vexip-ui/utils'\nimport { uploadProps } from './props'\nimport { upload } from './request'\nimport { StatusType, uploadListTypes } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type {\n  DirectoryEntity,\n  UploadFileOptions,\n  UploadFileState,\n  UploadHttpError,\n  UploadSourceFile\n} from './symbol'\n\nfunction getDefaultFileState(): UploadFileState {\n  return {\n    id: randomString(),\n    name: '',\n    size: 0,\n    type: '',\n    base64: null,\n    status: StatusType.PENDING,\n    percentage: 0,\n    source: null,\n    url: null,\n    path: '',\n    xhr: null,\n    response: null,\n    error: null,\n    abort: noop\n  }\n}\n\nexport default defineComponent({\n  name: 'Upload',\n  props: uploadProps,\n  emits: ['update:file-list'],\n  setup(_props, { slots, emit, expose }) {\n    const {\n      idFor,\n      labelId,\n      state,\n      disabled,\n      loading,\n      size,\n      validateField,\n      getFieldValue,\n      setFieldValue\n    } = useFieldStore<UploadFileOptions[]>(focus)\n\n    const props = useProps('upload', _props, {\n      state: createStateProp(state),\n      locale: null,\n      url: {\n        default: '',\n        static: true\n      },\n      fileList: {\n        default: () => getFieldValue(),\n        static: true\n      },\n      multiple: false,\n      tip: '',\n      accept: null,\n      filter: '',\n      maxSize: {\n        default: null,\n        validator: value => value >= 0\n      },\n      field: 'file',\n      data: () => ({}),\n      headers: () => ({}),\n      withCredentials: false,\n      manual: false,\n      hiddenFiles: false,\n      countLimit: {\n        default: 0,\n        validator: value => value >= 0\n      },\n      allowDrag: false,\n      onBeforeUpload: {\n        default: null,\n        isFunc: true\n      },\n      onBeforeSelect: {\n        default: null,\n        isFunc: true\n      },\n      iconRenderer: {\n        default: null,\n        isFunc: true\n      },\n      selectToAdd: false,\n      listType: {\n        default: 'name',\n        validator: value => uploadListTypes.includes(value)\n      },\n      block: false,\n      loadingText: null,\n      directory: false,\n      pathField: 'path',\n      disabledClick: false,\n      buttonLabel: null,\n      disabled: () => disabled.value,\n      loading: () => loading.value,\n      loadingIcon: createIconProp(),\n      loadingLock: false,\n      loadingEffect: null,\n      image: false,\n      defaultFiles: () => [],\n      // canPreview: don't set, using UploadFile default value\n      listStyle: null,\n      name: {\n        default: '',\n        static: true\n      },\n      customFetch: {\n        default: null,\n        isFunc: true\n      },\n      slots: () => ({})\n    })\n\n    const nh = useNameHelper('upload')\n    const locale = useLocale('upload', toRef(props, 'locale'))\n    const icons = useIcons()\n    const fileStates = ref([]) as Ref<UploadFileState[]>\n    const isDragOver = ref(false)\n\n    const input = ref<HTMLInputElement>()\n    const button = ref<InstanceType<typeof Button>>()\n    const panel = ref<HTMLElement>()\n\n    const readonly = computed(() => props.loading && props.loadingLock)\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        nh.bm(`type-${props.listType}`),\n        {\n          [nh.bm('inherit')]: props.inherit,\n          [nh.bm(props.state)]: props.state !== 'default',\n          [nh.bm('multiple')]: props.multiple,\n          [nh.bm('drag')]: props.allowDrag,\n          [nh.bm('to-add')]: props.selectToAdd,\n          [nh.bm('block')]: props.block,\n          [nh.bm('drag-only')]: props.disabledClick,\n          [nh.bm('image')]: props.image,\n          [nh.bm('has-file')]: !props.hiddenFiles && renderFiles.value.length,\n          [nh.bm('readonly')]: readonly.value,\n          [nh.bm('loading')]: props.loading\n        }\n      ]\n    })\n    const controlClass = computed(() => {\n      if (props.image) {\n        return {\n          [nh.be('image-control')]: true,\n          [nh.bem('image-control', 'drag-over')]: isDragOver.value,\n          [nh.bem('image-control', 'disabled')]: props.disabled\n        }\n      }\n\n      return {\n        [nh.be('control')]: true,\n        [nh.bem('control', 'drag-over')]: isDragOver.value\n      }\n    })\n    const acceptString = computed(() => {\n      const accept = props.image ? (props.accept?.length ? props.accept : 'image/*') : props.accept\n\n      return accept && (typeof accept === 'string' ? accept : accept.join())\n    })\n    const defaultList = computed(() => props.defaultFiles.map(file => createFileState(file)))\n    const renderFiles = computed(() => {\n      return defaultList.value\n        .concat(fileStates.value)\n        .filter(item => item.status !== StatusType.DELETE)\n    })\n\n    watch(\n      () => props.fileList,\n      value => {\n        const idMap = new Map<string | number, UploadFileState>()\n        const fileMap = new Map<UploadSourceFile, UploadFileState>()\n\n        for (const state of fileStates.value) {\n          if (isDefined(state.id)) {\n            idMap.set(state.id, state)\n          }\n\n          if (state.source) {\n            fileMap.set(state.source, state)\n          }\n        }\n\n        fileStates.value = (value || []).map(file =>\n          createFileState(\n            file,\n            file.id ? idMap.get(file.id) : file.source ? fileMap.get(file.source) : undefined\n          )\n        )\n        syncInputFiles()\n      },\n      { immediate: true, deep: true }\n    )\n\n    expose({\n      isDragOver,\n      execute,\n      handleDelete,\n      focus,\n      blur: () => {\n        button.value?.$el.blur()\n        panel.value?.blur()\n      }\n    })\n\n    function focus(options?: FocusOptions) {\n      if (button.value?.$el) {\n        button.value.$el.focus(options)\n      } else {\n        panel.value?.focus(options)\n      }\n    }\n\n    function handleClick() {\n      if (props.disabled || readonly.value) return\n\n      !props.disabledClick && input.value?.click()\n    }\n\n    function handleKeyDown(event: KeyboardEvent) {\n      const key = event.code || event.key\n\n      if (key === 'Enter' || key === 'Space') {\n        handleClick()\n      }\n    }\n\n    function handleInputChange(event: Event) {\n      const target = event.target as HTMLInputElement\n\n      if (target?.files) {\n        handleFilesChange(target.files)\n      }\n    }\n\n    async function handleFilesChange(inputFiles: FileList | UploadSourceFile[]) {\n      const originFiles = Array.from(inputFiles || []) as UploadSourceFile[]\n      const shouldAdd = props.selectToAdd\n      const files = shouldAdd ? Array.from(fileStates.value) : []\n\n      for (const file of originFiles) {\n        if (!file.path) {\n          file.path = file.webkitRelativePath\n        }\n\n        let fileState = getFileStateBySource(file)\n\n        if (fileState) {\n          if (\n            fileState.status !== StatusType.SUCCESS &&\n            fileState.status !== StatusType.UPLOADING\n          ) {\n            fileState.status = StatusType.PENDING\n          }\n        } else {\n          fileState = createFileState({\n            name: file.name,\n            size: file.size,\n            type: file.type,\n            source: file\n          })\n        }\n\n        if (typeof props.onBeforeSelect === 'function') {\n          let result = props.onBeforeSelect(fileState, files)\n\n          if (isPromise(result)) {\n            result = await result\n          }\n\n          if (isFalse(result)) continue\n        }\n\n        if (!files.includes(fileState)) {\n          files.push(fileState)\n        }\n      }\n\n      const countLimit = props.countLimit\n\n      if (countLimit > 0 && files.length > countLimit) {\n        const exceedFiles = files.slice(countLimit)\n\n        emitEvent(props.onExceed, exceedFiles)\n        fileStates.value = files.slice(0, countLimit)\n      } else {\n        fileStates.value = files\n      }\n\n      syncInputFiles()\n      emitChangeEvent()\n\n      if (!props.manual) {\n        execute()\n      }\n    }\n\n    function emitChangeEvent() {\n      emit('update:file-list', fileStates.value)\n      setFieldValue(fileStates.value)\n      emitEvent(props.onChange, fileStates.value)\n      validateField()\n    }\n\n    function getFileStateBySource(file: UploadSourceFile) {\n      const { name, size, type } = file\n      const path = file.path || file.webkitRelativePath\n\n      return fileStates.value.find(({ source }) => {\n        return (\n          source &&\n          (source.path || source.webkitRelativePath) === path &&\n          source.name === name &&\n          source.size === size &&\n          source.type === type\n        )\n      })\n    }\n\n    function createFileState(\n      file: UploadFileOptions,\n      defaults = getDefaultFileState()\n    ): UploadFileState {\n      const { id, name, size, type, base64, status, percentage, source, url, path } = file\n\n      Object.assign(defaults, {\n        id: id ?? defaults.id ?? randomString(),\n        name: name || '',\n        size: size || 0,\n        type: type || '',\n        base64: base64 || null,\n        status: status ?? StatusType.PENDING,\n        percentage: percentage || 0,\n        source: source || null,\n        url: url || null,\n        path: path || '',\n        xhr: null,\n        response: null,\n        error: null\n      })\n\n      return defaults\n    }\n\n    function getFileExtension(file: UploadFileState) {\n      return file.name.split('.').pop()!.toLocaleLowerCase()\n    }\n\n    async function execute() {\n      if (!props.url || !verifyFiles()) {\n        return false\n      }\n\n      const uploadFiles = fileStates.value.filter(\n        item => item.status !== StatusType.SUCCESS && item.status !== StatusType.DELETE\n      )\n      const requests: Promise<any>[] = []\n\n      for (const file of uploadFiles) {\n        requests.push(uploadFile(file).catch(noop))\n      }\n\n      return await Promise.all(requests).then(responses => responses.filter(response => response))\n    }\n\n    async function uploadFile(file: UploadFileState) {\n      if (typeof props.onBeforeUpload === 'function') {\n        let result = props.onBeforeUpload(\n          file,\n          fileStates.value.filter(\n            item => item.status !== StatusType.SUCCESS && item.status !== StatusType.DELETE\n          )\n        )\n\n        if (isPromise(result)) {\n          try {\n            result = await result\n          } catch (e) {\n            return\n          }\n        }\n\n        if (isFalse(result)) return\n\n        if (result instanceof Blob) {\n          if (result instanceof File) {\n            file.source = result\n          } else {\n            file.source = new File([result], file.name, {\n              type: file.type\n            })\n          }\n        }\n      }\n\n      if (!file.source) return\n\n      file.status = StatusType.UPLOADING\n\n      const { url, headers, withCredentials, data, field, pathField } = props\n\n      return await new Promise((resolve, reject) => {\n        file.abort = (props.customFetch || upload)({\n          url,\n          headers,\n          withCredentials,\n          data,\n          field,\n          pathField,\n          file: file.source!,\n          onProgress: percent => {\n            handleProgress(percent, file)\n          },\n          onSuccess: response => {\n            handleSuccess(response, file)\n            resolve(response)\n          },\n          onError: error => {\n            handleError(error, file)\n            reject(error)\n          },\n          onAbort: () => {\n            resolve(null)\n          }\n        })\n      })\n    }\n\n    function verifyFiles() {\n      const limitSize = props.maxSize ? props.maxSize * 1024 : Infinity\n      const filter =\n        typeof props.filter === 'string'\n          ? props.filter\n            ? [props.filter]\n            : []\n          : props.filter.filter(item => item)\n\n      for (let i = 0, len = fileStates.value.length; i < len; ++i) {\n        const file = fileStates.value[i]\n        const extension = getFileExtension(file)\n\n        if (filter.length && !filter.includes(extension)) {\n          emitEvent(props.onFilterError, file)\n\n          return false\n        }\n\n        if (file.size > limitSize) {\n          emitEvent(props.onSizeError, file)\n\n          return false\n        }\n      }\n\n      return true\n    }\n\n    function handleDelete(file: UploadFileState) {\n      file.status = StatusType.DELETE\n\n      file.abort?.()\n      syncInputFiles()\n      emitEvent(props.onDelete, file)\n      emitChangeEvent()\n    }\n\n    function handlePreview(file: UploadFileState) {\n      emitEvent(props.onPreview, file)\n    }\n\n    function syncInputFiles() {\n      if (!isClient) return\n\n      const dataTransfer = new DataTransfer()\n      fileStates.value = fileStates.value.filter(item => item.status !== StatusType.DELETE)\n\n      fileStates.value.forEach(item => {\n        item.source && dataTransfer.items.add(item.source)\n      })\n\n      if (input.value) {\n        input.value.files = dataTransfer.files\n      }\n    }\n\n    function handleProgress(percent: number, file: UploadFileState) {\n      if (file.status === StatusType.DELETE) return\n\n      file.percentage = percent\n\n      emitEvent(props.onProgress, file, percent)\n      emitChangeEvent()\n    }\n\n    function handleSuccess(response: any, file: UploadFileState) {\n      if (file.status === StatusType.DELETE) return\n\n      file.status = StatusType.SUCCESS\n      file.response = response\n      file.error = null\n\n      emitEvent(props.onSuccess, file, response)\n      emitChangeEvent()\n    }\n\n    function handleError(error: UploadHttpError, file: UploadFileState) {\n      if (file.status === StatusType.DELETE) return\n\n      file.status = StatusType.FAIL\n      file.error = error\n\n      emitEvent(props.onError, file, error)\n      emitChangeEvent()\n    }\n\n    let dragTimer: ReturnType<typeof setTimeout>\n\n    onBeforeUnmount(() => {\n      clearTimeout(dragTimer)\n    })\n\n    async function handleDrop(event: DragEvent) {\n      if (!props.allowDrag || props.disabled || readonly.value) return\n\n      clearTimeout(dragTimer)\n      event.preventDefault()\n\n      isDragOver.value = false\n\n      if (event.dataTransfer) {\n        const files = await collectDropFiles(event.dataTransfer)\n\n        files.length && handleFilesChange(files)\n      }\n    }\n\n    function handleDragEnter(event: DragEvent) {\n      if (!props.allowDrag || props.disabled || readonly.value) return\n\n      clearTimeout(dragTimer)\n      event.preventDefault()\n\n      isDragOver.value = true\n    }\n\n    function handleDragLeave(event: DragEvent) {\n      if (!props.allowDrag || props.disabled || readonly.value) return\n\n      event.preventDefault()\n\n      dragTimer = setTimeout(() => {\n        isDragOver.value = false\n      }, 100)\n    }\n\n    async function collectDropFiles(dataTransfer: DataTransfer) {\n      const { items, files } = dataTransfer\n\n      if (!items.length) return []\n\n      const collectedFiles: File[] = []\n      const dirLoop: Array<{ dir: DirectoryEntity, prefix: string }> = []\n      const processes: Promise<void>[] = []\n\n      for (let i = 0, len = items.length; i < len; ++i) {\n        const entity = items[i].webkitGetAsEntry?.()\n\n        // 内核不支持\n        if (!entity) return files\n\n        if (entity.isFile) {\n          collectedFiles.push(files[i])\n        } else {\n          dirLoop.push({ dir: entity as unknown as DirectoryEntity, prefix: '' })\n          // directories.push(entity as unknown as DirectoryEntity)\n        }\n      }\n\n      if (!props.directory || !dirLoop.length) return collectedFiles\n\n      const fileEntries: Array<{ entry: DirectoryEntity, prefix: string }> = []\n\n      let countLimit = props.countLimit - (props.selectToAdd ? fileStates.value.length : 0)\n      countLimit = Math.round(countLimit) > 0 ? countLimit : 100\n\n      const doProcess = () => {\n        while (dirLoop.length) {\n          const loop = dirLoop.shift()!\n          const dir = loop.dir\n          const prefix = loop.prefix ? `${loop.prefix}/${dir.name}` : dir.name\n          const reader = dir.createReader()\n\n          processes.push(\n            new Promise<void>(resolve => {\n              reader.readEntries(entries => {\n                entries.forEach(entry => {\n                  if (entry.isFile) {\n                    fileEntries.push({ entry, prefix })\n                  } else {\n                    dirLoop.push({ dir: entry, prefix })\n                  }\n                })\n\n                resolve()\n              })\n            })\n          )\n        }\n      }\n\n      while (true) {\n        doProcess()\n        await Promise.all(processes)\n\n        if (!dirLoop.length || fileEntries.length >= countLimit) {\n          break\n        }\n      }\n\n      if (fileEntries.length > 0) {\n        return collectedFiles.concat(\n          await Promise.all(\n            fileEntries.map(\n              ({ entry, prefix }) =>\n                new Promise<File>(resolve =>\n                  entry.file(file => {\n                    file.path = `${prefix}/${file.name}`\n                    resolve(file)\n                  })\n                )\n            )\n          )\n        )\n      }\n\n      return collectedFiles\n    }\n\n    function preventDefault(event: Event) {\n      event.preventDefault()\n    }\n\n    function renderNormalAction() {\n      return !props.allowDrag && !props.disabledClick ? (\n        <>\n          <Button\n            ref={button}\n            inherit\n            size={size.value}\n            type={props.state}\n            disabled={props.disabled}\n            loading={props.loading}\n          >\n            {{\n              default: () => props.buttonLabel ?? locale.value.upload,\n              icon: () => <Icon {...icons.value.upload} />,\n              loading: () => (\n                <Icon\n                  {...icons.value.loading}\n                  class={nh.be('loading-icon')}\n                  effect={props.loadingEffect || icons.value.loading.effect}\n                  icon={props.loadingIcon || icons.value.loading.icon}\n                  label={'loading'}\n                />\n              )\n            }}\n          </Button>\n          {renderSlot(slots, 'tip', undefined, () => [\n            <Renderer renderer={props.slots.tip}>\n              {props.tip && <p class={nh.be('tip')}>{props.tip}</p>}\n            </Renderer>\n          ])}\n        </>\n      ) : (\n        <div\n          ref={panel}\n          class={[nh.be('drag-panel'), props.disabled && nh.bem('drag-panel', 'disabled')]}\n          tabindex={0}\n        >\n          <Icon\n            {...icons.value.uploadCloud}\n            class={[nh.be('cloud'), props.disabled && nh.bem('cloud', 'disabled')]}\n            scale={+(icons.value.uploadCloud.scale || 1) * 4}\n          />\n          {renderSlot(slots, 'tip', undefined, () => [\n            <Renderer renderer={props.slots.tip}>\n              <p class={nh.be('tip')}>{props.tip || locale.value.dragOrClick}</p>\n            </Renderer>\n          ])}\n          <Icon\n            {...icons.value.loading}\n            class={nh.be('loading-icon')}\n            effect={props.loadingEffect || icons.value.loading.effect}\n            icon={props.loadingIcon || icons.value.loading.icon}\n            label={'loading'}\n            style={{ opacity: props.loading ? '100%' : '0%' }}\n          />\n        </div>\n      )\n    }\n\n    function renderImageAction() {\n      return (\n        <button\n          class={[nh.be('image-action'), props.disabled && nh.bem('image-action', 'disabled')]}\n          type={'button'}\n        >\n          {renderSlot(\n            slots,\n            'default',\n            {\n              isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value\n            },\n            () => [\n              <Renderer\n                renderer={props.slots.default}\n                data={{ isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value }}\n              >\n                {props.loading ? (\n                  <Icon\n                    {...icons.value.loading}\n                    class={nh.be('loading-icon')}\n                    effect={props.loadingEffect || icons.value.loading.effect}\n                    icon={props.loadingIcon || icons.value.loading.icon}\n                    label={'loading'}\n                    style={{ marginBottom: '6px' }}\n                  />\n                ) : (\n                  <Icon\n                    {...icons.value.plus}\n                    class={[nh.be('cloud'), props.disabled && nh.bem('cloud', 'disabled')]}\n                    scale={+(icons.value.plus.scale || 1) * 1.2}\n                    style={{ marginBottom: '6px' }}\n                  />\n                )}\n                <span>{props.buttonLabel ?? locale.value.upload}</span>\n              </Renderer>\n            ]\n          )}\n        </button>\n      )\n    }\n\n    function renderControl() {\n      const HtmlTag = props.image ? 'li' : 'div'\n\n      return (\n        <HtmlTag\n          class={controlClass.value}\n          tabindex={-1}\n          onClick={handleClick}\n          onDrop={handleDrop}\n          onDragover={handleDragEnter}\n          onDragleave={handleDragLeave}\n          onKeydown={handleKeyDown}\n        >\n          {!props.disabledClick && (\n            <input\n              ref={input}\n              type={'file'}\n              class={nh.be('input')}\n              disabled={props.disabled}\n              multiple={props.multiple}\n              name={props.name}\n              accept={acceptString.value}\n              webkitdirectory={props.directory || undefined}\n              onChange={handleInputChange}\n              onSubmit={preventDefault}\n            />\n          )}\n          {props.image\n            ? renderImageAction()\n            : renderSlot(\n              slots,\n              'default',\n              {\n                isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value\n              },\n              () => [\n                <Renderer\n                  renderer={props.slots.default}\n                  data={{\n                    isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value\n                  }}\n                >\n                  {renderNormalAction()}\n                </Renderer>\n              ]\n            )}\n        </HtmlTag>\n      )\n    }\n\n    function renderFileList() {\n      return (\n        <UploadList\n          inherit\n          files={renderFiles.value}\n          select-to-add={props.selectToAdd}\n          type={props.image ? 'thumbnail' : props.listType}\n          icon-renderer={props.iconRenderer}\n          loading-text={props.loadingText}\n          can-preview={props.canPreview}\n          style={props.listStyle}\n          onDelete={handleDelete}\n          onPreview={handlePreview}\n        >\n          {{\n            item:\n              slots.item || props.slots.item\n                ? (params: any) =>\n                    renderSlot(slots, 'item', params, () => [\n                      <Renderer renderer={props.slots.item} data={params}></Renderer>\n                    ])\n                : null,\n            icon:\n              slots.icon || props.slots.icon\n                ? (params: any) =>\n                    renderSlot(slots, 'icon', params, () => [\n                      <Renderer renderer={props.slots.icon} data={params}></Renderer>\n                    ])\n                : null,\n            suffix: () =>\n              props.image && (!props.countLimit || renderFiles.value.length < props.countLimit)\n                ? renderControl()\n                : null\n          }}\n        </UploadList>\n      )\n    }\n\n    return () => (\n      <div id={idFor.value} class={className.value} role={'group'} aria-labelledby={labelId.value}>\n        {!props.image && renderControl()}\n        {!props.hiddenFiles && renderFileList()}\n      </div>\n    )\n  },\n  methods: {\n    execute: noop as () => Promise<false | any[]>,\n    handleDelete: noop as (file: UploadFileState) => void,\n    focus: noop as (options?: FocusOptions) => void,\n    blur: noop as () => void\n  }\n})\n","import { booleanProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { FullScreenType } from '@/components/full-screen'\nimport type { IconEffect } from '@/components/icon'\nimport type { ClassType, ConfigurableProps } from '@vexip-ui/config'\nimport type {\n  VideoControlLayout,\n  VideoControlOption,\n  VideoControlType,\n  // VideoKernel,\n  VideoPlaybackRate,\n  VideoSegment,\n  VideoShortcutOptions,\n  VideoSlots\n} from './symbol'\n\nexport const videoProps = buildProps({\n  src: String,\n  srcList: Array as PropType<string[]>,\n  noControls: booleanProp,\n  videoAttrs: Object,\n  time: Number,\n  volume: Number,\n  playbackRate: Number,\n  playbackRates: Array as PropType<(number | VideoPlaybackRate)[]>,\n  // kernel: Object as PropType<VideoKernel>,\n  controlLayout: Object as PropType<VideoControlLayout>,\n  poster: String,\n  video: Object as PropType<HTMLVideoElement>,\n  segments: Array as PropType<(number | VideoSegment)[]>,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingEffect: String as PropType<IconEffect>,\n  shortcuts: Object as PropType<VideoShortcutOptions>,\n  slots: Object as PropType<VideoSlots>,\n  onPlay: eventProp(),\n  onPause: eventProp(),\n  onEnded: eventProp(),\n  onTimeChange: eventProp<(time: number) => void>(),\n  onVolumeChange: eventProp<(volume: number) => void>(),\n  onRateChange: eventProp<(rate: number) => void>(),\n  onToggleFlip: eventProp<(flip: boolean) => void>(),\n  onTogglePip: eventProp<(pip: boolean) => void>(),\n  onToggleFull: eventProp<(full: false | FullScreenType) => void>(),\n  onPrev: eventProp(),\n  onNext: eventProp(),\n  onRefresh: eventProp()\n})\n\nexport type VideoProps = ExtractPropTypes<typeof videoProps>\nexport type VideoCProps = ConfigurableProps<ExtractPropTypes<typeof videoProps>>\n\nexport const videoControlProps = buildProps({\n  type: String as PropType<VideoControlType>,\n  label: String,\n  tipClass: [String, Array, Object] as PropType<ClassType>,\n  disabled: booleanProp,\n  shortcut: String,\n  focusable: booleanProp,\n  value: [Number, String],\n  options: Array as PropType<(string | VideoControlOption)[]>,\n  onClick: eventProp(),\n  onEnter: eventProp(),\n  onLeave: eventProp(),\n  onFocus: eventProp<(event: FocusEvent) => void>(),\n  onBlur: eventProp<(event: FocusEvent) => void>(),\n  onSelect: eventProp<(option: VideoControlOption) => void>()\n})\n\nexport type VideoControlProps = ExtractPropTypes<typeof videoControlProps>\nexport type VideoControlCProps = ConfigurableProps<ExtractPropTypes<typeof videoControlProps>>\n","import type { InjectionKey } from 'vue'\n\nexport type VideoPresetControl =\n  | 'play'\n  | 'play-prev'\n  | 'play-next'\n  | 'refresh'\n  | 'timer'\n  | 'playback-rate'\n  | 'flip'\n  | 'volume'\n  | 'pip'\n  | 'full-window'\n  | 'full-browser'\nexport type VideoShortcutOptions = Partial<Record<VideoPresetControl, string>>\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type VideoControlName = VideoPresetControl | (string & {})\nexport type VideoControlConfig = VideoControlName | [VideoControlName, any]\n\nexport interface VideoControlLayout {\n  left?: VideoControlConfig[],\n  center?: VideoControlConfig[],\n  right?: VideoControlConfig[]\n}\n\nexport interface VideoPlaybackRate {\n  label?: string,\n  value: number\n}\n\nexport type VideoControlType = 'button' | 'select' | 'panel'\n\nexport interface VideoControlOption {\n  value: string | number,\n  label?: string,\n  selectedLabel?: string,\n  disabled?: boolean,\n  divided?: boolean,\n  title?: string\n}\n\nexport interface VideoSegment {\n  time: number,\n  title?: string\n}\n\n// export interface VideoKernel {\n//   play: () => void,\n//   pause: () => void,\n//   mute: () => void,\n//   unmute: () => void,\n//   prev: () => void,\n//   next: () => void,\n//   refresh: () => void | boolean\n// }\n\nexport interface VideoState {\n  placeId?: string,\n  iconScale: number,\n  addShortcut: (key: string, cb: () => void) => () => void\n}\n\nexport interface VideoSlots {\n  poster?: () => any\n}\n\nconst defaultLayout: Required<VideoControlLayout> = {\n  left: ['play-prev', 'play', 'play-next', 'refresh', 'timer'],\n  center: [],\n  right: ['playback-rate', 'volume', 'flip', 'pip', 'full-window', 'full-browser']\n}\n\nfor (const key of Object.keys(defaultLayout) as (keyof VideoControlLayout)[]) {\n  defaultLayout[key] = Object.freeze(defaultLayout[key]) as any\n}\n\nexport const videoDefaultControlLayout = Object.freeze(defaultLayout)\n\nexport const videoDefaultShortcuts = Object.freeze({\n  play: 'Space',\n  'play-prev': 'PageUp',\n  'play-next': 'PageDown',\n  refresh: 'R',\n  flip: 'C',\n  volume: 'M',\n  pip: 'P',\n  'full-window': 'G',\n  'full-browser': 'F'\n})\n\nexport const VIDEO_STATE = '__VXP_VIDEO_STATE' as unknown as InjectionKey<VideoState>\n","<script setup lang=\"ts\">\nimport { Option } from '@/components/option'\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, inject, onBeforeUnmount, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { listToMap } from '@vexip-ui/utils'\nimport { videoControlProps } from './props'\nimport { VIDEO_STATE } from './symbol'\n\nimport type { VideoControlOption } from './symbol'\n\ndefineOptions({ name: 'VideoControl' })\n\nconst _props = defineProps(videoControlProps)\nconst props = useProps('videoControl', _props, {\n  type: 'button',\n  label: {\n    static: true,\n    default: ''\n  },\n  tipClass: null,\n  disabled: false,\n  shortcut: {\n    static: true,\n    default: ''\n  },\n  focusable: false,\n  value: null,\n  options: () => []\n})\n\ndefineSlots<{\n  selected: (params: { option: VideoControlOption }) => any,\n  default: () => any,\n  label: () => any,\n  panel: () => any,\n  option: (params: { option: VideoControlOption, index: number, selected: boolean }) => any\n}>()\n\nconst nh = useNameHelper('video')\n\nconst videoState = inject(VIDEO_STATE)!\n\nconst currentValue = ref(props.value)\n\nconst className = computed(() => {\n  return {\n    [nh.be('control')]: true,\n    [nh.bem('control', props.type)]: props.type !== 'button',\n    [nh.bem('control', 'disabled')]: props.disabled\n  }\n})\nconst tipClass = computed(() => {\n  return props.type === 'button' ? nh.be('control-tip') : nh.be('control-panel')\n})\nconst objectOptions = computed(() => {\n  return props.options.map(option => {\n    return typeof option === 'string' ? { value: option } : option\n  })\n})\nconst optionMap = computed(() => listToMap(objectOptions.value, 'value', undefined, true))\nconst currentOption = computed(() => optionMap.value.get(currentValue.value))\n\nlet removeShortcut: (() => void) | undefined\n\nwatch(\n  () => props.shortcut,\n  value => {\n    removeShortcut?.()\n\n    if (value) {\n      removeShortcut = videoState.addShortcut(value, handleClick)\n    }\n  },\n  { immediate: true }\n)\n\nonBeforeUnmount(() => removeShortcut?.())\n\nfunction handleClick() {\n  !props.disabled && emitEvent(props.onClick)\n}\n\nfunction handleSelect(option: VideoControlOption) {\n  if (props.disabled || option.disabled) return\n\n  currentValue.value = option.value\n  emitEvent(props.onSelect, option)\n}\n</script>\n\n<template>\n  <div :class=\"className\">\n    <Tooltip\n      :trigger=\"props.focusable ? 'hover-focus' : 'hover'\"\n      raw\n      shift\n      :transfer=\"videoState.placeId && `#${videoState.placeId}`\"\n      :tip-class=\"[tipClass, props.tipClass]\"\n      :no-hover=\"props.type === 'button'\"\n      :disabled=\"props.type === 'button' ? !props.label : props.disabled\"\n      @tip-enter=\"emitEvent(props.onEnter)\"\n      @tip-leave=\"emitEvent(props.onLeave)\"\n    >\n      <template #trigger>\n        <button\n          :class=\"nh.be('control-button')\"\n          type=\"button\"\n          @focus=\"emitEvent(props.onFocus, $event)\"\n          @blur=\"emitEvent(props.onBlur, $event)\"\n          @click=\"handleClick\"\n        >\n          <slot v-if=\"currentOption\" name=\"selected\" :option=\"currentOption\">\n            {{ currentOption.selectedLabel || currentOption.label || currentOption.value }}\n          </slot>\n          <slot v-else></slot>\n        </button>\n      </template>\n      <template v-if=\"props.type === 'button'\">\n        <span :class=\"nh.be('control-name')\">\n          <slot name=\"label\">\n            {{ props.label }}\n            <span v-if=\"props.shortcut\" :class=\"nh.be('control-shortcut')\">\n              {{ `(${props.shortcut})` }}\n            </span>\n          </slot>\n        </span>\n      </template>\n      <slot v-else name=\"panel\">\n        <ul v-if=\"props.type === 'select'\" :class=\"nh.be('control-options')\">\n          <Option\n            v-for=\"(option, index) in objectOptions\"\n            :key=\"option.value\"\n            :class=\"{\n              [nh.be('control-option')]: true,\n              [nh.bem('control-option', 'selected')]: option.value === currentValue\n            }\"\n            :label=\"option.label\"\n            :value=\"option.value\"\n            :disabled=\"option.disabled\"\n            :divided=\"option.disabled\"\n            :title=\"option.title\"\n            no-hover\n            @select=\"handleSelect(option)\"\n          >\n            <slot\n              name=\"option\"\n              :option=\"option\"\n              :index=\"index\"\n              :selected=\"option.value === currentValue\"\n            >\n              {{ option.label || option.value }}\n            </slot>\n          </Option>\n        </ul>\n      </slot>\n    </Tooltip>\n  </div>\n</template>\n","import { doubleDigits, leaveNumber } from '@vexip-ui/utils'\n\nimport type { IconOptions, IconValue } from '@vexip-ui/config'\n\nexport function formatSeconds(seconds: number) {\n  if (seconds <= 0) return '00:00'\n\n  const remainders = leaveNumber(Math.ceil(seconds), 60, 2)\n\n  if (remainders.length < 2) {\n    remainders.unshift(0)\n  }\n\n  return remainders.length < 3\n    ? remainders.map(doubleDigits).join(':')\n    : remainders.map((r, i) => (i ? doubleDigits(r) : r)).join(':')\n}\n\nexport function mergeIconScale(scale: number, icon: IconOptions & { icon: IconValue }) {\n  return {\n    ...icon,\n    scale: +(icon.scale || 1) * scale\n  }\n}\n","<script setup lang=\"ts\">\nimport { ResizeObserver } from '@/components/resize-observer'\nimport { Slider } from '@/components/slider'\n\nimport { computed, ref } from 'vue'\n\nimport { getStepByWord, useLocale, useNameHelper } from '@vexip-ui/config'\nimport { useListener, useSetTimeout } from '@vexip-ui/hooks'\nimport { boundRange, throttle } from '@vexip-ui/utils'\nimport { formatSeconds } from './helper'\n\nimport type { PropType } from 'vue'\nimport type { SliderExposed } from '@/components/slider'\nimport type { VideoSegment } from './symbol'\n\ninterface PointState {\n  start: number,\n  startPercent: number,\n  end: number,\n  endPercent: number,\n  duration: number,\n  durationPercent: number,\n  width: number\n}\n\ndefineOptions({ name: 'VideoProgress' })\n\nconst props = defineProps({\n  time: {\n    type: Number,\n    default: 0\n  },\n  duration: {\n    type: Number,\n    default: 0\n  },\n  segments: {\n    type: Array as PropType<VideoSegment[]>,\n    default: () => []\n  },\n  noPreview: {\n    type: Boolean,\n    default: false\n  },\n  previewSrc: {\n    type: String,\n    default: ''\n  }\n})\n\nconst emit = defineEmits(['change'])\n\nconst nh = useNameHelper('video')\nconst locale = useLocale('video')\n\nconst { timer } = useSetTimeout()\n\nconst slidTime = ref(0)\nconst hovered = ref(false)\nconst hoveredTime = ref(0)\nconst indicatorLeft = ref(0)\nconst previewLeft = ref(0)\n\nlet paddingX = [0, 0]\nlet sliderWidth = 100\nlet previewWidth = 60\n\nconst wrapper = ref<HTMLElement>()\nconst slider = ref<SliderExposed>()\nconst sliderEl = computed(() => slider.value?.$el as HTMLElement | undefined)\nconst preview = ref<HTMLElement>()\n\nconst sliding = computed(() => !!slider.value?.sliding[1])\nconst percent = computed(() => {\n  return props.duration ? ((sliding.value ? slidTime.value : props.time) / props.duration) * 100 : 0\n})\nconst className = computed(() => {\n  return {\n    [nh.be('progress')]: true,\n    [nh.bem('progress', 'sliding')]: sliding.value,\n    [nh.bem('progress', 'disabled')]: props.duration <= 0\n  }\n})\nconst points = computed<PointState[]>(() => {\n  const duration = Math.max(1, props.duration)\n\n  let times = props.segments.map(segment => segment.time)\n\n  if (!times.length) times = [0, duration]\n\n  times = times.at(-1) === duration ? times : [...times, duration]\n  times = times[0] === 0 ? times : [0, ...times]\n\n  const points: PointState[] = []\n\n  for (let i = 0, len = times.length - 1; i < len; ++i) {\n    const start = times[i]\n    const end = times[i + 1]\n    const pointDuration = end - start\n\n    points.push({\n      start,\n      startPercent: (start / duration) * 100,\n      end,\n      endPercent: (end / duration) * 100,\n      duration: pointDuration,\n      durationPercent: (pointDuration / duration) * 100,\n      width: ((end - start) / duration) * 100\n    })\n  }\n\n  return points\n})\nconst segmentLabel = computed(() => {\n  const time = hoveredTime.value\n  const segments = props.segments\n\n  if (!segments.length) return ''\n\n  let index = -1\n\n  if (time <= 0) {\n    index = 0\n  } else {\n    for (let i = 1, len = segments.length; i < len; ++i) {\n      if (segments[i].time > time) {\n        index = i - 1\n        break\n      }\n    }\n  }\n\n  if (index < 0) {\n    index = segments.length - 1\n  }\n\n  const title = segments[index]?.title || getStepByWord(locale.value.chapterCount, index + 1)\n\n  return title && ` (${title})`\n})\n\nuseListener(sliderEl, 'pointerenter', () => {\n  clearTimeout(timer.hover)\n\n  timer.hover = setTimeout(() => {\n    hovered.value = true\n  }, 100)\n})\nuseListener(sliderEl, 'pointerleave', () => {\n  clearTimeout(timer.hover)\n\n  timer.hover = setTimeout(() => {\n    hovered.value = false\n  }, 100)\n})\nuseListener(\n  sliderEl,\n  'pointermove',\n  throttle((event: PointerEvent) => {\n    if (!sliding.value) {\n      processMoveOnTrack(event)\n    }\n  })\n)\n\nfunction processMoveOnTrack(event: PointerEvent) {\n  if (!sliderEl.value) return\n\n  const offsetX = boundRange(\n    event.clientX - sliderEl.value.getBoundingClientRect().left,\n    0,\n    sliderWidth\n  )\n\n  hoveredTime.value = (offsetX / sliderWidth) * props.duration\n  indicatorLeft.value = offsetX + paddingX[0]\n  previewLeft.value = boundRange(\n    offsetX - previewWidth * 0.5 + paddingX[0],\n    0,\n    sliderWidth - previewWidth + paddingX[0] + paddingX[1]\n  )\n}\n\nfunction onSliderResize(entry: ResizeObserverEntry) {\n  if (!wrapper.value) return\n\n  const style = getComputedStyle(wrapper.value)\n\n  paddingX = [parseFloat(style.paddingLeft), parseFloat(style.paddingRight)]\n  sliderWidth = entry.borderBoxSize?.[0]?.inlineSize ?? entry.contentRect.width\n}\n\nfunction onPreviewResize(entry: ResizeObserverEntry) {\n  previewWidth = entry.borderBoxSize?.[0]?.inlineSize ?? entry.contentRect.width\n}\n\nfunction handleChange(permillage: number) {\n  emit('change', (permillage / 1000) * props.duration)\n}\n\nconst onSlideMove = throttle(processMoveOnTrack)\n\nfunction onSlideStart() {\n  slidTime.value = props.time\n\n  document.addEventListener('pointermove', onSlideMove)\n  document.addEventListener('pointerup', onSlideEnd)\n}\n\nfunction onSlideEnd() {\n  document.removeEventListener('pointermove', onSlideMove)\n  document.removeEventListener('pointerup', onSlideEnd)\n}\n</script>\n\n<template>\n  <div ref=\"wrapper\" :class=\"className\">\n    <ResizeObserver :on-resize=\"onSliderResize\">\n      <Slider\n        ref=\"slider\"\n        :class=\"nh.be('progress-slider')\"\n        :value=\"percent * 10\"\n        :max=\"1000\"\n        :vertical=\"false\"\n        :range=\"false\"\n        hide-tip\n        trigger-fade\n        flip-marker\n        :disabled=\"duration <= 0\"\n        @change=\"handleChange\"\n        @pointerdown=\"onSlideStart\"\n      >\n        <template #filler=\"state\">\n          <div\n            v-for=\"(point, index) in points\"\n            :key=\"index\"\n            :class=\"nh.be('progress-segment')\"\n            :style=\"{ width: `${point.width}%` }\"\n          >\n            <div :class=\"nh.be('progress-track')\">\n              <div\n                :class=\"nh.be('progress-filler')\"\n                :style=\"{\n                  visibility: state.percent[1] < point.startPercent ? 'hidden' : undefined,\n                  transform: `translateX(${Math.min(\n                    (Math.max(state.percent[1] - point.startPercent, 0) / point.durationPercent) *\n                      100 -\n                      100,\n                    0\n                  )}%) translateZ(0)`\n                }\"\n              ></div>\n            </div>\n          </div>\n        </template>\n        <template #trigger>\n          <slot name=\"trigger\">\n            <div :class=\"nh.be('progress-trigger')\"></div>\n          </slot>\n        </template>\n      </Slider>\n    </ResizeObserver>\n    <div\n      :class=\"{\n        [nh.be('progress-indicator')]: true,\n        [nh.bem('progress-indicator', 'active')]: hovered && !sliding\n      }\"\n      :style=\"{ transform: `translateX(${indicatorLeft}px) translateZ(0)` }\"\n    ></div>\n    <ResizeObserver v-if=\"!noPreview\" :on-resize=\"onPreviewResize\">\n      <div\n        ref=\"preview\"\n        :class=\"{\n          [nh.be('preview')]: true,\n          [nh.bem('preview', 'has-image')]: previewSrc,\n          [nh.bem('preview', 'active')]: hovered || sliding\n        }\"\n        :style=\"{ transform: `translateX(${previewLeft}px) translateZ(0)` }\"\n      >\n        <slot name=\"preview\">\n          <div v-if=\"previewSrc\" :class=\"nh.be('preview-image')\">\n            <img :src=\"previewSrc\" />\n          </div>\n          <div :class=\"nh.be('preview-time')\">\n            {{ formatSeconds(hoveredTime) + segmentLabel }}\n          </div>\n        </slot>\n      </div>\n    </ResizeObserver>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Input } from '@/components/input'\n\nimport { computed, nextTick, onMounted, ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { getRangeWidth, isValidNumber, toNumber } from '@vexip-ui/utils'\nimport { formatSeconds } from './helper'\n\ndefineOptions({ name: 'VideoTimer' })\n\nconst props = defineProps({\n  time: {\n    type: Number,\n    default: 0\n  },\n  duration: {\n    type: Number,\n    default: 0\n  },\n  disabled: {\n    type: Boolean,\n    default: false\n  }\n})\n\nconst emit = defineEmits(['change'])\n\nconst nh = useNameHelper('video')\n\nconst currentTime = ref(props.time)\nconst editing = ref(false)\nconst width = ref(84)\nconst inputTime = ref('')\n\nconst input = ref<HTMLInputElement>()\nconst durationEl = ref<HTMLElement>()\n\nconst formattedTime = computed(() => formatSeconds(currentTime.value))\n\nwatch(\n  () => props.time,\n  value => {\n    currentTime.value = value\n  }\n)\nwatch(\n  () => props.disabled,\n  value => {\n    if (value) {\n      editing.value = false\n    }\n  }\n)\n\nonMounted(() => {\n  watch(\n    () => props.duration,\n    () => {\n      nextTick(() => {\n        width.value = durationEl.value ? getRangeWidth(durationEl.value) * 2 + 20 : 84\n      })\n    },\n    { immediate: true }\n  )\n})\n\nfunction handleClick() {\n  if (!props.disabled && !editing.value) {\n    editing.value = true\n    inputTime.value = formattedTime.value\n    nextTick(() => {\n      input.value?.focus()\n    })\n  }\n}\n\nfunction finishInput(confirm: boolean) {\n  editing.value = false\n\n  if (confirm) {\n    const units = inputTime.value.trim().split(':')\n\n    if (units.every(unit => isValidNumber(unit))) {\n      currentTime.value = units\n        .map(toNumber)\n        .reverse()\n        .slice(0, 3)\n        .reduce((seconds, unit, i) => seconds + 60 ** i * unit, 0)\n      currentTime.value = Math.min(currentTime.value, props.duration)\n      emit('change', currentTime.value)\n    }\n  }\n}\n</script>\n\n<template>\n  <div\n    :class=\"[nh.be('control'), nh.be('timer'), props.disabled && nh.bem('control', 'disabled')]\"\n    :style=\"{ width: `${width}px` }\"\n    @click=\"handleClick\"\n  >\n    <Input\n      v-if=\"editing\"\n      ref=\"input\"\n      v-model:value=\"inputTime\"\n      :class=\"nh.be('timer-input')\"\n      size=\"small\"\n      transparent\n      @blur=\"finishInput(false)\"\n      @enter=\"finishInput(true)\"\n    ></Input>\n    <template v-else>\n      <span>\n        {{ formattedTime }}\n      </span>\n      <span :class=\"nh.be('timer-separator')\">/</span>\n      <span ref=\"durationEl\">\n        {{ formatSeconds(duration) }}\n      </span>\n    </template>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Slider } from '@/components/slider'\n\nimport { computed, inject, ref, watch } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport VideoControl from './video-control.vue'\nimport { mergeIconScale } from './helper'\nimport { VIDEO_STATE } from './symbol'\n\ndefineOptions({ name: 'VideoVolume' })\n\nconst props = defineProps({\n  volume: {\n    type: Number,\n    default: 1\n  }\n})\n\nconst emit = defineEmits(['change'])\n\nconst nh = useNameHelper('video')\nconst icons = useIcons()\n\nconst videoState = inject(VIDEO_STATE)!\n\nconst currentVolume = ref(props.volume)\nconst muted = ref(false)\n// const visible = ref(true)\n\nconst volumeIcon = computed(() => {\n  return muted.value\n    ? icons.value.volumeMute\n    : currentVolume.value < 0.5\n      ? icons.value.volumeLow\n      : icons.value.volume\n})\n\nwatch(\n  () => props.volume,\n  value => {\n    currentVolume.value = value\n  }\n)\n\ndefineExpose({ toggleMute })\n\nlet prevVolume = currentVolume.value\n\nfunction toggleMute() {\n  if (muted.value) {\n    currentVolume.value = prevVolume <= 0 ? 0.5 : prevVolume\n  } else {\n    prevVolume = currentVolume.value\n    currentVolume.value = 0\n  }\n\n  muted.value = !muted.value\n\n  emit('change', currentVolume.value)\n}\n\nfunction handleSlide(value: number) {\n  value /= 100\n  prevVolume = value\n  currentVolume.value = value\n  muted.value = value <= 0\n\n  emit('change', currentVolume.value)\n}\n</script>\n\n<template>\n  <VideoControl\n    :class=\"nh.be('volume')\"\n    type=\"panel\"\n    :tip-class=\"nh.be('volume-panel')\"\n    @click=\"toggleMute\"\n  >\n    <Icon v-bind=\"mergeIconScale(videoState.iconScale, volumeIcon)\"></Icon>\n    <template #panel>\n      <div :class=\"nh.be('volume-text')\">\n        {{ (currentVolume * 100).toFixed() }}\n      </div>\n      <Slider\n        :value=\"currentVolume * 100\"\n        :class=\"nh.be('volume-slider')\"\n        :min=\"0\"\n        :max=\"100\"\n        vertical\n        hide-tip\n        reverse\n        :range=\"false\"\n        @input=\"handleSlide\"\n      ></Slider>\n    </template>\n  </VideoControl>\n</template>\n","import { FullScreen } from '@/components/full-screen'\nimport { Icon } from '@/components/icon'\nimport { Progress } from '@/components/progress'\nimport { Renderer } from '@/components/renderer'\n\nimport {\n  Transition,\n  computed,\n  defineComponent,\n  nextTick,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  renderSlot,\n  shallowReadonly,\n  watch\n} from 'vue'\n\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport VideoControl from './video-control.vue'\nimport VideoProgress from './video-progress.vue'\nimport VideoTimer from './video-timer.vue'\nimport VideoVolume from './video-volume.vue'\nimport { createSlotRender, useListener, useModifier, useSetTimeout } from '@vexip-ui/hooks'\nimport { decide, decimalLength, isClient, noop, toCapitalCase, toNumber } from '@vexip-ui/utils'\nimport { videoProps } from './props'\nimport { VIDEO_STATE, videoDefaultControlLayout, videoDefaultShortcuts } from './symbol'\n\nimport type { FullScreenExposed, FullScreenType } from '@/components/full-screen'\nimport type { VideoControlConfig, VideoPlaybackRate } from './symbol'\n\nexport default defineComponent({\n  name: 'Video',\n  props: videoProps,\n  emits: ['update:src', 'update:time', 'update:volume', 'update:playback-rate'],\n  setup(_props, { slots, emit, expose }) {\n    const props = useProps('video', _props, {\n      src: {\n        static: true,\n        default: ''\n      },\n      srcList: {\n        static: true,\n        default: null\n      },\n      noControls: false,\n      videoAttrs: null,\n      time: {\n        static: true,\n        default: 0\n      },\n      volume: 1,\n      playbackRate: 1,\n      playbackRates: () => [0.5, 1, 1.25, 1.5, 2],\n      // kernel: null,\n      controlLayout: () => videoDefaultControlLayout,\n      poster: '',\n      video: {\n        static: true,\n        default: null\n      },\n      segments: () => [],\n      loading: false,\n      loadingIcon: null,\n      loadingEffect: null,\n      shortcuts: () => ({}),\n      slots: () => ({})\n    })\n\n    const nh = useNameHelper('video')\n    const locale = useLocale('video')\n    const icons = useIcons()\n\n    const { timer } = useSetTimeout()\n\n    const pipEnabled = isClient && document.pictureInPictureEnabled\n\n    const currentSrc = ref(\n      props.src || props.srcList?.[0] || (props.videoAttrs?.src as string) || ''\n    )\n    const playing = ref(false)\n    const currentTime = ref(props.time)\n    const canPlay = ref(false)\n    const duration = ref(0)\n    const currentVolume = ref(props.volume) // 0 ~ 1\n    const pip = ref(false)\n    const stateShow = ref(true)\n    // record the state is invisible (whether finish transition)\n    const stateHidden = ref(false)\n    const currentRate = ref(props.playbackRate)\n    // const loadedData = ref(false)\n    const interacting = ref(false)\n    const hasPlayed = ref(false)\n    const flipped = ref(false)\n    const iconScale = ref(1.3)\n\n    const screen = ref<FullScreenExposed>()\n    const wrapper = computed(() => screen.value?.wrapper as HTMLElement | undefined)\n    const video = ref<HTMLVideoElement>()\n    const volumeRef = ref<InstanceType<typeof VideoVolume>>()\n\n    const placeId = computed(() => screen.value?.placeId)\n    const full = computed<false | FullScreenType>(() => screen.value?.full ?? false)\n    const videoRef = computed<HTMLVideoElement | undefined>(() => video.value || props.video)\n\n    const shortcutRecord = reactive({} as Record<string, () => void>)\n    const shortcuts = computed(() => ({ ...videoDefaultShortcuts, ...props.shortcuts }))\n\n    function addShortcut(key: string, cb: () => void) {\n      if (shortcutRecord[key]) {\n        console.warn(`[vexip-ui:Video] duplicate shortcut key '${key}' and it will be ignored`)\n\n        return noop\n      }\n\n      shortcutRecord[key] = cb\n\n      return () => {\n        delete shortcutRecord[key]\n      }\n    }\n\n    useModifier({\n      target: wrapper,\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) return\n\n        decide(\n          [\n            [\n              () => modifier.up,\n              () => {\n                currentVolume.value = Math.min(1, currentVolume.value + 0.05)\n              }\n            ],\n            [\n              () => modifier.down,\n              () => (currentVolume.value = Math.max(0, currentVolume.value - 0.05))\n            ],\n            [\n              () => modifier.right,\n              () => (currentTime.value = Math.min(duration.value, currentTime.value + 5))\n            ],\n            [() => modifier.left, () => (currentTime.value = Math.max(0, currentTime.value - 5))],\n            [() => modifier[shortcuts.value.volume || 'M'], () => volumeRef.value?.toggleMute()],\n            ...Object.keys(shortcutRecord).map(key => {\n              return [() => modifier[key], shortcutRecord[key]] as [() => boolean, () => void]\n            })\n          ],\n          { afterMatchAny: modifier.resetAll }\n        )\n      }\n    })\n\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        {\n          [nh.bm('loading')]: props.loading\n        }\n      ]\n    })\n    const playIcon = computed(() => (playing.value ? icons.value.pause : icons.value.play))\n    const stateIcon = computed(() => {\n      return playing.value ? icons.value.pauseState : icons.value.playState\n    })\n    const rateOptions = computed(() => {\n      const rates = props.playbackRates\n        .map(raw => {\n          const rate = typeof raw === 'number' ? { value: raw } : raw\n\n          rate.value = toNumber(rate.value)\n          rate.label =\n            rate.label || `${decimalLength(rate.value) ? rate.value : rate.value.toFixed(1)}x`\n\n          return rate\n        })\n        .filter(rate => rate.value > 0)\n        .sort((prev, next) => next.value - prev.value)\n\n      if (!rates.find(rate => rate.value === 1)) {\n        const index = rates.findIndex(rate => rate.value < 1)\n\n        rates.splice((index + rates.length) % rates.length, 0, { value: 1, label: '1.0x' })\n      }\n\n      return rates\n    })\n    const segments = computed(() => {\n      return props.segments\n        .map(segment => (typeof segment === 'number' ? { time: segment } : segment))\n        .filter(segment => segment.time >= 0 && segment.time <= duration.value)\n        .sort((prev, next) => prev.time - next.time)\n    })\n    const percent = computed(() => {\n      return duration.value ? (currentTime.value / duration.value) * 100 : 0\n    })\n    const srcFullList = computed(() => {\n      const src = props.src || (props.videoAttrs?.src as string) || ''\n\n      if (src && props.srcList && !props.srcList.includes(src)) {\n        return [src].concat(props.srcList)\n      }\n\n      return props.srcList || [src]\n    })\n    const srcIndex = computed(() => {\n      return srcFullList.value ? srcFullList.value.indexOf(currentSrc.value) : -1\n    })\n\n    const slotParams = shallowReadonly(\n      reactive({\n        playing,\n        currentTime,\n        currentVolume,\n        currentRate,\n        interacting,\n        flipped,\n        canPlay,\n        duration,\n        pip,\n        hasPlayed,\n        togglePlaying,\n        togglePip,\n        changeRate,\n        changeTime,\n        changeVolume,\n        toggleFull\n      })\n    )\n\n    watch(\n      () => props.src,\n      value => {\n        resetMetaState()\n        currentSrc.value = value\n      },\n      { flush: 'pre' }\n    )\n    watch(\n      () => props.time,\n      value => {\n        changeTime(value, false)\n      }\n    )\n    watch(\n      () => props.volume,\n      value => {\n        changeVolume(value, false)\n      }\n    )\n    watch(\n      () => props.playbackRate,\n      value => {\n        changeRate(value, false)\n      }\n    )\n    watch(playing, value => {\n      if (value) {\n        requestAnimationFrame(() => {\n          stateShow.value = false\n        })\n      } else {\n        stateShow.value = true\n      }\n    })\n    watch(canPlay, value => {\n      if (!value) {\n        playing.value = false\n      }\n    })\n    watch(stateShow, value => {\n      if (value) {\n        stateHidden.value = false\n      }\n    })\n\n    onMounted(() => {\n      nextTick(() => {\n        if (isClient && !videoRef.value && screen.value?.wrapper) {\n          video.value = (screen.value.wrapper as HTMLElement).querySelector('video') ?? undefined\n        }\n\n        if (videoRef.value && currentTime.value > 0) {\n          videoRef.value.currentTime = currentTime.value\n        }\n      })\n    })\n\n    provide(VIDEO_STATE, reactive({ placeId, iconScale, addShortcut }))\n\n    useListener(videoRef, 'canplay', () => {\n      canPlay.value = true\n      duration.value = videoRef.value?.duration ?? 0\n    })\n    useListener(videoRef, 'timeupdate', () => {\n      currentTime.value = videoRef.value?.currentTime ?? 0\n\n      emit('update:time', currentTime.value)\n      emitEvent(props.onTimeChange, currentTime.value)\n    })\n    useListener(videoRef, 'ended', handleEnded)\n    // useListener(videoRef, 'loadeddata', () => {\n    //   loadedData.value = true\n    // })\n    useListener(videoRef, 'enterpictureinpicture', () => {\n      pip.value = true\n      emitEvent(props.onTogglePip, true)\n    })\n    useListener(videoRef, 'leavepictureinpicture', () => {\n      pip.value = false\n      emitEvent(props.onTogglePip, false)\n    })\n\n    expose({\n      currentSrc,\n      playing,\n      currentTime,\n      duration,\n      pip,\n      interacting,\n      stateHidden,\n      wrapper,\n      video,\n      resetMetaState\n    })\n\n    function togglePlaying(value = !playing.value) {\n      if (!canPlay.value) {\n        playing.value = false\n\n        return\n      }\n\n      playing.value = value\n\n      if (playing.value) {\n        hasPlayed.value = true\n        videoRef.value?.play()\n      } else {\n        videoRef.value?.pause()\n      }\n\n      wrapper.value?.focus()\n      emitEvent(playing.value ? props.onPlay : props.onPause)\n    }\n\n    function handleEnded() {\n      playing.value = false\n\n      videoRef.value?.pause()\n      emitEvent(props.onEnded)\n    }\n\n    async function togglePip() {\n      if (!pipEnabled || !videoRef.value) return\n\n      if (pip.value) {\n        await document.exitPictureInPicture()\n      } else {\n        await videoRef.value.requestPictureInPicture()\n      }\n    }\n\n    function changeRate(rate: number, dispatch = true) {\n      currentRate.value = rate\n\n      if (videoRef.value) {\n        videoRef.value.playbackRate = rate\n      }\n\n      if (dispatch) {\n        emit('update:playback-rate', rate)\n        emitEvent(props.onRateChange, rate)\n      }\n    }\n\n    function changeTime(time: number, dispatch = true) {\n      currentTime.value = time\n\n      if (videoRef.value && time !== videoRef.value.currentTime) {\n        videoRef.value.currentTime = time\n        time = videoRef.value.currentTime\n      }\n\n      if (dispatch) {\n        emit('update:time', time)\n        emitEvent(props.onTimeChange, time)\n      }\n    }\n\n    function changeVolume(volume: number, dispatch = true) {\n      currentVolume.value = volume\n\n      if (videoRef.value) {\n        videoRef.value.volume = volume\n      }\n\n      if (dispatch) {\n        emit('update:volume', volume)\n        emitEvent(props.onVolumeChange, volume)\n      }\n    }\n\n    function toggleFlip(value = !flipped.value, dispatch = true) {\n      flipped.value = value\n\n      if (dispatch) {\n        emitEvent(props.onToggleFlip, flipped.value)\n      }\n    }\n\n    function onFullChange(full: false | FullScreenType) {\n      nextTick(() => {\n        wrapper.value?.focus()\n        emitEvent(props.onToggleFull, full)\n      })\n    }\n\n    function resetMetaState() {\n      playing.value = false\n      currentTime.value = 0\n      canPlay.value = false\n      duration.value = 0\n      // loadedData.value = false\n      pip.value = false\n      hasPlayed.value = false\n\n      videoRef.value?.pause()\n    }\n\n    function handleInteract() {\n      clearTimeout(timer.interact)\n\n      interacting.value = true\n      timer.interact = setTimeout(() => {\n        interacting.value = false\n      }, 3000)\n    }\n\n    function handlePointerLeave() {\n      clearTimeout(timer.interact)\n      timer.interact = setTimeout(() => {\n        interacting.value = false\n      }, 500)\n    }\n\n    function adjustSrc(amount: number) {\n      const list = srcFullList.value\n\n      if (props.srcList) {\n        currentSrc.value = list[(srcIndex.value + amount + list.length) % list.length]\n        emit('update:src', currentSrc.value)\n      }\n    }\n\n    function playPrev() {\n      adjustSrc(-1)\n      emitEvent(props.onPrev)\n    }\n\n    function playNext() {\n      adjustSrc(1)\n      emitEvent(props.onNext)\n    }\n\n    function toggleFull(type: FullScreenType) {\n      screen.value?.toggle(type)\n    }\n\n    function handleRefresh() {\n      emitEvent(props.onRefresh)\n    }\n\n    function renderPlayPrev() {\n      return (\n        <VideoControl\n          class={nh.be('play-prev')}\n          label={locale.value.playPrev}\n          shortcut={shortcuts.value['play-prev']}\n          disabled={!!props.srcList && !srcIndex.value}\n          onClick={playPrev}\n        >\n          <Icon\n            {...icons.value.playPrev}\n            scale={+(icons.value.playPrev.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderPlay() {\n      return (\n        <VideoControl\n          class={nh.be('play')}\n          label={playing.value ? locale.value.pause : locale.value.play}\n          shortcut={shortcuts.value.play}\n          disabled={!canPlay.value}\n          onClick={togglePlaying}\n        >\n          <Icon\n            {...playIcon.value}\n            scale={+(playIcon.value.scale || 1) * iconScale.value * 1.16}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderPlayNext() {\n      return (\n        <VideoControl\n          class={nh.be('play-next')}\n          label={locale.value.playNext}\n          shortcut={shortcuts.value['play-next']}\n          disabled={!!props.srcList && srcIndex.value === srcFullList.value.length - 1}\n          onClick={playNext}\n        >\n          <Icon\n            {...icons.value.playNext}\n            scale={+(icons.value.playNext.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderRefresh() {\n      return (\n        <VideoControl\n          class={nh.be('play-refresh')}\n          label={locale.value.refresh}\n          shortcut={shortcuts.value.refresh}\n          onClick={handleRefresh}\n        >\n          <Icon\n            {...icons.value.refresh}\n            scale={+(icons.value.refresh.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderTimer() {\n      return (\n        <VideoTimer\n          time={currentTime.value}\n          duration={duration.value}\n          disabled={!canPlay.value}\n          onChange={changeTime}\n        ></VideoTimer>\n      )\n    }\n\n    function renderPlaybackRate() {\n      return (\n        <VideoControl\n          class={nh.be('playback-rate')}\n          type={'select'}\n          value={currentRate.value}\n          options={rateOptions.value}\n          onSelect={(rate: VideoPlaybackRate) => changeRate(rate.value)}\n        ></VideoControl>\n      )\n    }\n\n    function renderVolume() {\n      return (\n        <VideoVolume\n          ref={volumeRef}\n          volume={currentVolume.value}\n          onChange={changeVolume}\n        ></VideoVolume>\n      )\n    }\n\n    function renderFlip() {\n      return (\n        <VideoControl\n          class={nh.be('flip')}\n          label={locale.value.flip}\n          shortcut={shortcuts.value.flip}\n          onClick={toggleFlip}\n        >\n          <Icon\n            {...icons.value.flipX}\n            scale={+(icons.value.flipX.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderPip() {\n      if (!pipEnabled || !video.value) return null\n\n      return (\n        <VideoControl\n          class={nh.be('pip')}\n          label={pip.value ? locale.value.exitPip : locale.value.requestPip}\n          shortcut={shortcuts.value.pip}\n          disabled={!canPlay.value}\n          onClick={togglePip}\n        >\n          <Icon {...icons.value.pip} scale={+(icons.value.pip.scale || 1) * iconScale.value}></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderFullWindow() {\n      return (\n        <VideoControl\n          class={nh.be('full-window')}\n          label={full.value === 'window' ? locale.value.fullWindowExit : locale.value.fullWindow}\n          shortcut={shortcuts.value['full-window']}\n          onClick={() => toggleFull('window')}\n        >\n          <Icon\n            {...icons.value.fullWindow}\n            scale={+(icons.value.fullWindow.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderFullBrowser() {\n      return (\n        <VideoControl\n          class={nh.be('full-browser')}\n          label={full.value === 'browser' ? locale.value.fullScreenExit : locale.value.fullScreen}\n          shortcut={shortcuts.value['full-browser']}\n          onClick={() => toggleFull('browser')}\n        >\n          <Icon\n            {...icons.value.fullScreen}\n            scale={+(icons.value.fullScreen.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderControl(name: VideoControlConfig) {\n      switch (name) {\n        case 'play-prev':\n          return renderPlayPrev()\n        case 'play':\n          return renderPlay()\n        case 'play-next':\n          return renderPlayNext()\n        case 'refresh':\n          return renderRefresh()\n        case 'timer':\n          return renderTimer()\n        case 'playback-rate':\n          return renderPlaybackRate()\n        case 'volume':\n          return renderVolume()\n        case 'flip':\n          return renderFlip()\n        case 'pip':\n          return renderPip()\n        case 'full-window':\n          return renderFullWindow()\n        case 'full-browser':\n          return renderFullBrowser()\n        default:\n          return createSlotRender(slots, [\n            `control-${name}`,\n            `control${toCapitalCase(name as string)}`\n          ])?.(slotParams)\n      }\n    }\n\n    function renderControls() {\n      if (props.noControls) {\n        return (\n          <Progress\n            class={nh.be('progress-line')}\n            percentage={percent.value}\n            stroke-width={1}\n            info-type={'none'}\n          ></Progress>\n        )\n      }\n\n      return (\n        <div\n          class={{\n            [nh.be('controls')]: true,\n            [nh.bem('controls', 'collapsed')]: hasPlayed.value && !interacting.value\n          }}\n        >\n          <section class={nh.be('controls-top')}>\n            <VideoProgress\n              time={currentTime.value}\n              duration={duration.value}\n              segments={segments.value}\n              onChange={changeTime}\n            ></VideoProgress>\n          </section>\n          <section class={nh.be('controls-bottom')}>\n            <div class={nh.be('controls-left')}>\n              {(props.controlLayout.left ?? videoDefaultControlLayout.left).map(renderControl)}\n            </div>\n            <div class={nh.be('controls-center')}>\n              {(props.controlLayout.center ?? videoDefaultControlLayout.center).map(renderControl)}\n            </div>\n            <div class={nh.be('controls-right')}>\n              {(props.controlLayout.right ?? videoDefaultControlLayout.right).map(renderControl)}\n            </div>\n          </section>\n        </div>\n      )\n    }\n\n    function renderMain() {\n      return (\n        <div class={nh.be('main')}>\n          <div\n            class={[nh.be('player'), flipped.value && nh.bem('player', 'flipped')]}\n            onClick={() => togglePlaying()}\n          >\n            {renderSlot(slots, 'player', {}, () => [\n              <video\n                {...props.videoAttrs}\n                ref={video}\n                class={nh.be('video')}\n                src={currentSrc.value || props.videoAttrs?.src}\n              >\n                {renderSlot(slots, 'default')}\n              </video>\n            ])}\n          </div>\n          {!hasPlayed.value && (props.poster || slots.poster || props.slots.poster) && (\n            <div class={nh.be('poster')}>\n              {renderSlot(slots, 'poster', undefined, () => [\n                <Renderer renderer={props.slots.poster}>\n                  <img src={props.poster} />\n                </Renderer>\n              ])}\n            </div>\n          )}\n          <Transition name={nh.bs('state-effect')} onAfterLeave={() => (stateHidden.value = true)}>\n            {canPlay.value && stateShow.value && (\n              <div class={nh.be('state')}>\n                {renderSlot(slots, 'state', { active: stateShow.value }, () => [\n                  <Icon {...stateIcon.value} scale={+(stateIcon.value.scale || 1) * 5}></Icon>\n                ])}\n              </div>\n            )}\n          </Transition>\n          <Transition name={nh.ns('fade')}>\n            {((!canPlay.value && !stateShow.value) || (props.loading && stateHidden.value)) && (\n              <div class={nh.be('loading')}>\n                {renderSlot(slots, 'loading', {}, () => [\n                  <Icon\n                    {...icons.value.loading}\n                    icon={props.loadingIcon || icons.value.loading.icon}\n                    label={'loading'}\n                    effect={props.loadingEffect || icons.value.loading.effect}\n                    scale={+(stateIcon.value.scale || 1) * 5}\n                  ></Icon>\n                ])}\n              </div>\n            )}\n          </Transition>\n          {renderControls()}\n          {renderSlot(slots, 'extra')}\n        </div>\n      )\n    }\n\n    return () => {\n      return (\n        <FullScreen\n          ref={screen}\n          class={className.value}\n          tabindex={'-1'}\n          onToggle={onFullChange}\n          onPointermove={handleInteract}\n          onPointerleave={handlePointerLeave}\n        >\n          {{ default: renderMain }}\n        </FullScreen>\n      )\n    }\n  }\n})\n","import { booleanProp, buildProps, omitProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { TitleLevel, TypographyType } from './symbol'\n\nexport const textProps = buildProps({\n  type: String as PropType<TypographyType>,\n  tag: String,\n  delete: booleanProp,\n  strong: booleanProp,\n  italic: booleanProp,\n  underline: booleanProp,\n  code: booleanProp,\n  mark: booleanProp,\n  disabled: booleanProp,\n  keyboard: booleanProp,\n  thin: booleanProp,\n  reversed: booleanProp\n})\n\nexport type TextProps = ExtractPropTypes<typeof textProps>\nexport type TextCProps = ConfigurableProps<TextProps>\n\nexport const pProps = omitProps(textProps, ['tag', 'code'])\n\nexport type PProps = ExtractPropTypes<typeof pProps>\nexport type PCProps = ConfigurableProps<PProps>\n\nexport const strongProps = omitProps(textProps, ['tag', 'strong', 'code'])\n\nexport type StrongProps = ExtractPropTypes<typeof strongProps>\nexport type StrongCProps = ConfigurableProps<StrongProps>\n\nexport const titleProps = buildProps({\n  type: String as PropType<TypographyType>,\n  level: Number as PropType<TitleLevel>,\n  top: booleanProp,\n  marker: booleanProp,\n  aligned: booleanProp,\n  thin: booleanProp,\n  markerType: String\n})\n\nexport type TitleProps = ExtractPropTypes<typeof titleProps>\nexport type TitleCProps = ConfigurableProps<TitleProps>\n\nexport const hProps = omitProps(titleProps, ['level'])\n\nexport const h1Props = hProps\nexport const h2Props = hProps\nexport const h3Props = hProps\nexport const h4Props = hProps\nexport const h5Props = hProps\nexport const h6Props = hProps\n\nexport type HProps = ExtractPropTypes<typeof hProps>\nexport type HCProps = ConfigurableProps<HProps>\n\nexport type H1Props = HProps\nexport type H2Props = HProps\nexport type H3Props = HProps\nexport type H4Props = HProps\nexport type H5Props = HProps\nexport type H6Props = HProps\n\nexport type H1CProps = HCProps\nexport type H2CProps = HCProps\nexport type H3CProps = HCProps\nexport type H4CProps = HCProps\nexport type H5CProps = HCProps\nexport type H6CProps = HCProps\n\nexport const blockquoteProps = buildProps({\n  type: String as PropType<TypographyType>\n})\n\nexport type BlockquoteProps = ExtractPropTypes<typeof blockquoteProps>\nexport type BlockquoteCProps = ConfigurableProps<BlockquoteProps>\n\nexport const olProps = buildProps({\n  type: String as PropType<'a' | 'A' | 'i' | 'I' | '1'>\n})\n\nexport type OLProps = ExtractPropTypes<typeof olProps>\nexport type OLCProps = ConfigurableProps<OLProps>\n\nexport const ulProps = buildProps({\n  listStyle: String\n})\n\nexport type ULProps = ExtractPropTypes<typeof ulProps>\nexport type ULCProps = ConfigurableProps<ULProps>\n","import { computed, defineComponent } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { boundRange, isColor } from '@vexip-ui/utils'\nimport { titleProps } from './props'\n\nexport default defineComponent({\n  name: 'Title',\n  props: titleProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('title', _props, {\n      type: 'default',\n      level: 5,\n      top: false,\n      marker: false,\n      aligned: false,\n      thin: false,\n      markerType: null\n    })\n\n    const nh = useNameHelper('title')\n\n    const coloredMarker = computed(() => isColor(props.markerType))\n    const markerType = computed(() => props.markerType || props.type)\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.type)]: props.type !== 'default',\n        [nh.bm('top')]: props.top,\n        [nh.bm('marker')]: props.marker,\n        [nh.bm('aligned')]: props.aligned,\n        [nh.bm('thin')]: props.thin,\n        [nh.bm(`marker-${markerType.value}`)]:\n          !coloredMarker.value && markerType.value !== 'default'\n      }\n    })\n    const level = computed(() => boundRange(Math.round(props.level), 1, 6) || 5)\n    const style = computed(() => {\n      return coloredMarker.value\n        ? {\n            [nh.cv('marker-color')]: props.markerType\n          }\n        : null\n    })\n\n    return () => {\n      const CustomTag = `h${level.value}` as any\n\n      return (\n        <CustomTag class={className.value} style={style.value}>\n          {slots.default?.()}\n        </CustomTag>\n      )\n    }\n  }\n})\n","import { computed, defineComponent, renderSlot } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { textProps } from './props'\n\nexport default defineComponent({\n  name: 'Text',\n  props: textProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('text', _props, {\n      type: 'default',\n      tag: 'span',\n      delete: false,\n      strong: false,\n      italic: false,\n      underline: false,\n      code: false,\n      mark: false,\n      disabled: false,\n      keyboard: false,\n      thin: false,\n      reversed: false\n    })\n\n    const nh = useNameHelper('text')\n\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.type)]: props.type !== 'default',\n        [nh.bm('delete')]: props.delete,\n        [nh.bm('strong')]: props.strong,\n        [nh.bm('italic')]: props.italic,\n        [nh.bm('underline')]: props.underline,\n        [nh.bm('code')]: props.code,\n        [nh.bm('mark')]: props.mark,\n        [nh.bm('disabled')]: props.disabled,\n        [nh.bm('keyboard')]: props.keyboard,\n        [nh.bm('thin')]: props.thin,\n        [nh.bm('reversed')]: props.reversed\n      }\n    })\n\n    return () => {\n      const CustomTag = props.tag || ('span' as any)\n      const children = renderSlot(slots, 'default')\n\n      return props.code ? (\n        <code class={className.value}>{props.delete ? <del>{children}</del> : children}</code>\n      ) : props.keyboard ? (\n        <kbd class={className.value}>{props.delete ? <del>{children}</del> : children}</kbd>\n      ) : props.delete ? (\n        <del class={className.value}>{children}</del>\n      ) : (\n        <CustomTag class={className.value}>{children}</CustomTag>\n      )\n    }\n  }\n})\n","import { computed, defineComponent } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { blockquoteProps } from './props'\n\nexport default defineComponent({\n  name: 'Blockquote',\n  props: blockquoteProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('blockquote', _props, {\n      type: 'default'\n    })\n\n    const nh = useNameHelper('blockquote')\n\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.type)]: props.type !== 'default'\n      }\n    })\n\n    return () => <blockquote class={className.value}>{slots.default?.()}</blockquote>\n  }\n})\n","import { defineComponent } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { olProps } from './props'\n\nexport default defineComponent({\n  name: 'OL',\n  props: olProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('ol', _props, {\n      type: '1'\n    })\n\n    const nh = useNameHelper('ol')\n\n    return () => (\n      <ol class={[nh.b(), props.inherit && nh.bm('inherit')]} type={props.type}>\n        {slots.default?.()}\n      </ol>\n    )\n  }\n})\n","import { computed, defineComponent } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { ulProps } from './props'\n\nexport default defineComponent({\n  name: 'UL',\n  props: ulProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('ul', _props, {\n      listStyle: 'circle'\n    })\n\n    const nh = useNameHelper('ul')\n\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm('no-marker')]: props.listStyle === 'none'\n      }\n    })\n\n    return () => (\n      <ul class={className.value} style={{ listStyleType: props.listStyle }}>\n        {slots.default?.()}\n      </ul>\n    )\n  }\n})\n","import { defineComponent } from 'vue'\n\nimport { useProps } from '@vexip-ui/config'\nimport Title from './title'\nimport { hProps } from './props'\n\nimport type { TitleLevel } from './symbol'\n\nfunction createHComponent(level: TitleLevel) {\n  return defineComponent({\n    name: `H${level}`,\n    props: hProps,\n    emits: [],\n    setup(_props, { slots }) {\n      const props = useProps(`h${level}`, _props, {\n        type: 'default',\n        top: false,\n        marker: false,\n        aligned: false,\n        thin: false\n      })\n\n      return () => (\n        <Title {...props} level={level}>\n          {slots.default?.()}\n        </Title>\n      )\n    }\n  })\n}\n\nexport const H1 = createHComponent(1)\nexport const H2 = createHComponent(2)\nexport const H3 = createHComponent(3)\nexport const H4 = createHComponent(4)\nexport const H5 = createHComponent(5)\nexport const H6 = createHComponent(6)\n","import { defineComponent } from 'vue'\n\nimport { useProps } from '@vexip-ui/config'\nimport Text from './text'\nimport { pProps } from './props'\n\nexport default defineComponent({\n  name: 'P',\n  props: pProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('p', _props, {\n      type: 'default',\n      delete: false,\n      strong: false,\n      italic: false,\n      underline: false,\n      mark: false,\n      disabled: false,\n      keyboard: false,\n      thin: false,\n      reversed: false\n    })\n\n    return () => (\n      <Text {...props} tag={'p'}>\n        {slots.default?.()}\n      </Text>\n    )\n  }\n})\n","import { defineComponent } from 'vue'\n\nimport { useProps } from '@vexip-ui/config'\nimport Text from './text'\nimport { strongProps } from './props'\n\nexport default defineComponent({\n  name: 'Strong',\n  props: strongProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('strong', _props, {\n      type: 'default',\n      delete: false,\n      italic: false,\n      underline: false,\n      mark: false,\n      disabled: false,\n      keyboard: false,\n      thin: false,\n      reversed: false\n    })\n\n    return () => (\n      <Text {...props} tag={'strong'} strong>\n        {slots.default?.()}\n      </Text>\n    )\n  }\n})\n","import { computed, unref } from 'vue'\n\nimport {\n  configHoverDelay,\n  configIcons,\n  configLocale,\n  configNamespace,\n  configProps,\n  configZIndex\n} from '@vexip-ui/config'\nimport { isEmpty, toCapitalCase } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { IconsOptions, LocaleConfig, LocaleOptions } from '@vexip-ui/config'\nimport type { PropsOptions } from './props'\n\nexport interface InstallOptions {\n  prefix?: string,\n  namespace?: MaybeRef<string>,\n  props?: MaybeRef<PropsOptions>,\n  locale?: MaybeRef<LocaleOptions>,\n  zIndex?: MaybeRef<number>,\n  icons?: MaybeRef<IconsOptions>,\n  hoverDelay?: MaybeRef<number>\n}\n\nexport function buildInstall(components: any[] = [], defaultLocale?: LocaleConfig) {\n  return function install(app: App, options: InstallOptions = {}) {\n    const {\n      prefix = '',\n      namespace = '',\n      props = {},\n      locale = defaultLocale,\n      zIndex,\n      icons = {},\n      hoverDelay = 100\n    } = options\n\n    const withDefaultLocale = computed(() => {\n      return { ...defaultLocale, ...unref(locale) }\n    })\n\n    configNamespace(namespace, app)\n    configProps(props, app)\n    configLocale(withDefaultLocale, app)\n    configIcons(icons, app)\n    configHoverDelay(hoverDelay, app)\n\n    if (typeof unref(zIndex) === 'number') {\n      configZIndex(zIndex!, app)\n    }\n\n    const normalizedPrefix = toCapitalCase(prefix || '')\n\n    components.forEach(component => {\n      if (typeof component === 'function' || typeof component.install === 'function') {\n        app.use(component)\n      } else {\n        app.component(`${normalizedPrefix}${component.name}`, component)\n      }\n    })\n  }\n}\n\n/**\n * Provide a props config for under components.\n *\n * @param props props config\n * @param app the app of Vue, will use app.provide if specify\n */\nfunction proxyConfigProps(props: MaybeRef<PropsOptions>, app?: App) {\n  !isEmpty(props) && configProps(props, app)\n}\n\n/**\n * Provide supported config for under components.\n *\n * @param config supported config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function provideConfig(\n  config: Omit<InstallOptions, 'prefix' | 'namespace'> = {},\n  app?: App\n) {\n  const { props = {}, locale = {}, zIndex, icons = {} } = config\n\n  proxyConfigProps(props, app)\n  !isEmpty(locale) && configLocale(locale, app)\n  !isEmpty(icons) && configIcons(icons, app)\n\n  if (typeof unref(zIndex) === 'number') {\n    configZIndex(zIndex!, app)\n  }\n}\n\nexport { proxyConfigProps as configProps, configLocale, configZIndex, configIcons }\n","export const version = __VERSION__\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","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","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","listToMap","list","accessor","isMap","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","defaultAttributes","Icon","strokeWidth","absoluteStrokeWidth","iconNode","classes","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","Filter","FlipHorizontal","FlipVertical","Fullscreen","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","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_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","counter","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","className","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","createSpin","binding","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","vnode","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","readonly","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","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","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","computedRtl","elId","useRtl","initObserver","content","placementWhileList","usePopper","initOptions","transfer","isDrop","shallowRef","popper","arrowRef","transferTo","isRtl","watchEffect","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","autoResize","indexMap","itemList","visibleHeight","heightDiffMap","heightTree","heightDiff","treeUpdateDep","scrollOffset","startIndex","visibleItems","unrefItems","endIndex","listStyle","fixed","itemsStyle","unobserve","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","animateScrollTo","from","to","distance","emit","__emit","animating","markerTop","linkStates","prevScrollTop","increaseLink","decreaseLink","handleActive","computeMarkerPosition","viewer","_d","getContainerEl","computeCurrentLink","containerTop","offsetList","currentLink","elementTop","containerEl","linkRect","wrapperTop","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","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","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","handleFocus","handleBlur","setTimeout","onBlur","emitChangeEvent","handleChange","setValue","parseFloat","onChange","onInput","slice","toggleShowPassword","handleClear","stopPropagation","onClear","handleEnter","onEnter","handlePrefixClick","onPrefixClick","handleSuffixClick","onSuffixClick","handleKeyDown","handleKeyPress","onKeyPress","handleKeyUp","handleCompositionStart","onCompositionStart","handleCompositionEnd","document","createElement","setAttribute","appendChild","select","isSuccess","execCommand","removeChild","preventDefault","handleInput","renderPrefix","be","renderCustomSuffix","opacity","bem","renderSuffixAction","ariaLabel","clear","_mergeProps","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","resizeObserverProps","ResizeObserver$1","observed","observe","nativeScrollProps","xFrom","xTo","yFrom","yTo","xDistance","yDistance","xStep","yStep","currentX","currentY","useScrollWrapper","mode","appear","scrollX","scrollY","onResize","onBeforeRefresh","onAfterRefresh","syncing","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","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","_Fragment","popperProps","_sfc_main$1x","Portal","getIndex","emitHookEvent","_resolveComponent","_ctx","_withCtx","_cache","$event","_withDirectives","_openBlock","_createElementBlock","$attrs","_vShow","_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","idIndex","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","selected","newOption","prevValue","handleFilterInput","hittingIndex","handleFilterKeyDown","toggleShowRestTip","autoCompleteProps","lastInput","isReadonly","filteredOptions","computeHitting","handleInputInternal","testOptionCanDrop","valid","beforeVisible","inClickProcess","beforeClick","handleClick","handleToggle","avatarProps","avatarGroupProps","GROUP_STATE","objectFitValues","groupState","loadFail","fallbackFail","text","scaleText","handleError","lastText","avatarEl","textEl","avatarWidth","avatarHeight","textWidth","textHeight","renderAvatars","restAvatars","badgeProps","badgeTypes","hasSlot","showSub","handleBadgeClick","breadcrumbProps","breadcrumbItemProps","BREADCRUMB_STATE","breadcrumbState","currentLabel","separator","separatorRenderer","handleSeparatorClick","itemStates","route","meta","refreshLabels","increaseItem","decreaseItem","slotValue","propValue","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","weekDay","calendarPanelProps","calendarProps","startValue","endValue","hoveredDate","reversed","updateDateRange","setDateRange","isHovered","isPrevMonth","isNextMonth","isToday","isInRange","getWeekLabel","dateYear","dateMonth","handleHover","startTime","endTime","hoveredTime","selectedTime","minTime","maxTime","calendarValue","calendarYear","calendarMonth","formatYearInput","formatMonthInput","handleYearChange","handleMonthChange","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","Tooltip","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","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","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_render","$props","$setup","$data","$options","_normalizeClass","_createElementVNode","_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","configProviderProps","theme","maskerProps","wrapperShow","topTrap","bottomTrap","maskShow","contentShow","stable","prevFocusedEl","afterOpen","afterClose","disableWheel","toggleActive","afterMaskOpen","afterMaskClose","afterContentOpen","afterContentClose","handleFocusIn","tabables","handleEscape","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","useModal","appContext","headerRenderer","titleRenderer","closeRenderer","footerRenderer","onHide","createModal","createApp","Component","destroy","Modal","confirmProps","confirmButtonTypes","rendererR","beforeConfirmR","onConfirm","onCancel","mountedPromise","openConfirm","handleReset","ConfirmManager","__publicField","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","onSelect","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","scrollProps","isReady","refreshWrapper","computeWrapperSize","sizeType","titleCaseSizeType","promises","transitionDuration","waitDelay","precessScroll","handleTouchStart","moved","lastDate","signX","signY","handleBuffer","computedDelta","ensureScrollOffset","waitTransition","setDuration","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","currentHour","currentMinute","currentSecond","hourRange","minuteRange","secondRange","hourWheel","minuteWheel","secondWheel","updateTimeRange","refreshWheel","hourStep","minuteStep","secondStep","handleToggleColumn","wheel","today","monthRange","rangeNumbers","currentPanel","hoveredYear","hoveredMonth","yearRange","shortcutsRect","panelStyle","startActivated","activated","endActivated","isDatetime","getStringValue","weekDays","week","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","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","dividerProps","hasText","drawerProps","drawerPlacements","moveTransition","ellipsisProps","ellipsisStyle","formActions","formFields","isError","errorTip","validating","disabledValidate","isRequired","requiredTip","allRules","requiredRule","selfRules","formRules","isValidateAll","useAsterisk","hideLabel","labelAlign","computedLabelWidth","controlStyle","instances","fieldObject","handleValidate","resetValue","handleValidateEnd","useRules","asyncValidate","handleLabelClick","isNative","actions","isInherit","submit","handleSubmit","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","imageProps","imageGroupProps","imageViewerProps","srcArray","verifyIndex","skeletonProps","skeletonGroupProps","repeat","imageIcon","iconScale","spread","itemTag","parseSize","test","renderSkeleton","useImgLoading","showImg","currentSrc","viewerActive","showError","hasPreview","imageSrc","imgLoading","handleLoad","handlePreview","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","renderLabel","angleDown","menuNh","titleStyle","onlyShowSlot","menus","renderMenuItems","ellipsis","menuMarkerTypes","MenuRest","Overflow","reduced","router","manualRoute","menuItemSet","Set","rest","routes","parseRoutesToMenus","currentRoute","handleMenuReduce","handleMenuExpand","expandItemByLabel","routeMeta","menu","delete","onExpand","onReduce","firstExpandedItem","selectedItem","renderMenuItem","renderMenus","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","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","signInHeader","handleToggleTheme","handleUserAction","onContentResize","cancelChange","doChange","stopAndPrevent","renderSign","showSignName","renderHeader","LayoutHeader","onMousemove","sidebar","LayoutAside","renderMain","LayoutMain","LayoutFooter","renderMasker","Masker","renderWrapper","scrollbar","maxPercent","rafId","startLoading","setLoading","LoadingManager","Loading","DELETE_HANDLER","popupPlacements","handleDelete","pending","placementArray","deleteItem","getItemStyle","verticalStyle","horizontalStyle","onOpen","queueOut","removeItem","currentVertical","existingItem","removeHeight","enterItem","leaveItem","effectiveTypes","assertiveTypes","popup","placementCenter","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","Tag","prevPage","renderNext","nextPage","renderPrevEllipsis","_slot3","anglesRight","anglesLeft","entered","renderNextEllipsis","_slot4","_slot5","onKeydownEnter","onKeydownSpace","renderTotalPlugin","order","renderSizePlugin","Select","renderJumpPlugin","jumpTo","NumberInput","ItemTag","progressProps","infoTypes","strokeColor","useBubble","bubbleType","bubbleStyle","percentValue","radioProps","radioGroupProps","radioShapes","radioGroupShapes","shape","isButton","registerInput","unregisterInput","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","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","_normalizeStyle","_renderSlot","_withModifiers","_renderList","tabNavProps","tabNavItemProps","TAB_NAV_STATE","trackStyleMap","tabNavState","contentClass","isClosable","markerPosition","markerSize","updateMarkerPosition","markerStyle","scrollMode","isActiveEmpty","handleAdd","activeItem","tabsProps","tabPanelProps","TABS_STATE","tabsState","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","row","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","isDragOver","rowEl","expandEl","rowKey","rowType","maxHeight","groupStyle","cellDraggable","rowDraggable","draggable","expandRenderer","hasExpand","setExpandHeight","updateTotalHeight","shouldProcessDrag","handleDragOver","handleDrop","handleDragLeave","afterExpand","allColumns","getRow","isTypeColumn","isSelectionColumn","isOrderColumn","isExpandColumn","isDragColumn","handleCheckRow","single","handleExpandRow","handleDragRow","handleExpandTree","emptyStyle","rowHeight","rowMinHeight","summaries","heights","summaryData","summary","useCascadedChecked","originNode","disable","defaultSummaryData","indexId","defaultIndexLabel","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","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","rowColumns","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","sidePadding","flexColumns","flexWidth","flexColumnCount","flexUnitWidth","usedWidth","columnKey","noCascaded","spanFn","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","colIndex","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","defineTableFilter","defineTableSorter","defineTableColumn","defineTableColumns","defineTableSummary","defineTableSummaries","isTransition","computeIndex","textareaProps","textarea","getId","recordMap","isRunning","subscribe","computeTimeAgo","unsubscribe","usedDiff","noFormat","timeAgoProps","datetime","toDateValue","timeAgo","parseInterval","currentTitle","createTimeState","timeValue","defaultDate","verifyTime","handleWheelChange","parsedValue","exchangeValue","handleExchangeClick","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","w","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","Checkbox","retweet","renderFilter","Input","renderBody","VirtualList","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","loaded","secondary","hasLinkLine","hasArrow","leafSign","asyncLoad","checkbox","suffixCheckbox","nodeState","dragTimer","asyncLoadCallback","getNodeState","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","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","uploadProps","uploadListProps","uploadFileProps","iconConfig","useFileIcons","StatusType","uploadListTypes","imageExtRE","imageBase64RE","isImage","file","url","base64","fileIcons","useIconRenderer","fileName","status","percentage","showThumb","getFileExtension","getFileIcon","extension","imageToBase64","reader","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","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","currentTime","inputTime","durationEl","formattedTime","currentVolume","muted","volumeIcon","toggleMute","prevVolume","handleSlide","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","VideoControl","renderPlay","renderPlayNext","renderRefresh","renderTimer","VideoTimer","renderPlaybackRate","renderVolume","VideoVolume","renderFlip","renderPip","exitPip","requestPip","renderFullWindow","fullWindowExit","fullWindow","renderFullBrowser","fullScreenExit","fullScreen","renderControls","Progress","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","AnchorLink","AutoComplete","AvatarGroup","Breadcrumb","BreadcrumbItem","Bubble","ButtonGroup","CalendarPanel","Captcha","Card","Carousel","CarouselItem","Cascader","CheckboxGroup","Collapse","CollapsePanel","ColorPicker","ConfigProvider","DatePicker","Divider","Drawer","Form","FormItem","FormReset","FormSubmit","Highlight","ImageGroup","ImageViewer","Layout","Option","OptionGroup","Pagination","Popup","Radio","RadioGroup","Result","Scroll","Skeleton","Slider","Space","Split","TabNav","TabNavItem","TabPanel","Table","Tabs","Textarea","TimeAgo","TimePicker","Timeline","TimelineItem","Tour","Transfer","Tree","UploadFile","Video","Viewer","Wheel","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,112,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]}