UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 3.1 MB
{"version":3,"file":"vexip-ui.cjs","sources":["../common/utils/src/common.ts","../common/utils/src/color.ts","../common/utils/src/counter.ts","../common/utils/src/data.ts","../common/utils/src/number.ts","../common/utils/src/date.ts","../common/utils/src/deep-clone.ts","../common/utils/src/destroy-object.ts","../common/utils/src/dom-event.ts","../common/utils/src/dom.ts","../common/utils/src/event-emitter.ts","../common/utils/src/log.ts","../common/utils/src/performance.ts","../common/utils/src/support.ts","../common/utils/src/transform.ts","../common/utils/src/word-case.ts","../common/config/src/hover-delay.ts","../common/config/src/locale/zh-CN.ts","../common/config/src/locale/index.ts","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/shared/src/utils.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/defaultAttributes.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/Icon.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/createLucideIcon.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/arrow-left-right.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/calendar.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/check.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-down.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-left.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-right.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-up.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevrons-left.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevrons-right.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-alert.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-check.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-help.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-x.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/clock.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/cloud-upload.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/ellipsis.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/eye-off.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/eye.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-archive.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-code.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-image.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-music.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-text.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-video.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/flip-horizontal.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/flip-vertical.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/fullscreen.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/funnel.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/grip-vertical.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/image.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/indent-decrease.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/indent-increase.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/info.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/loader-circle.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/log-out.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/maximize.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/message-circle-question.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/minimize.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/minus.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/moon.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/pause.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/picture-in-picture.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/play.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/plus.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/refresh-cw.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/repeat-2.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/rotate-ccw.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/rotate-cw.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/search.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/siren.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/skip-back.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/skip-forward.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/square-minus.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/square-plus.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/sun.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/trash-2.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/upload.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/user-round.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/volume-1.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/volume-2.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/volume-x.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/x.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/zoom-in.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/zoom-out.js","../common/config/src/icons.ts","../common/bem-helper/src/index.ts","../common/config/src/namespace.ts","../common/config/src/id.ts","../common/config/src/props.ts","../common/config/src/z-index.ts","../components/icon/props.ts","../components/icon/icon.tsx","../components/renderer/props.ts","../components/renderer/renderer.ts","../components/spin/props.ts","../components/spin/spin.vue","../directives/loading/index.ts","../common/hooks/src/listener.ts","../common/hooks/src/clickoutside.ts","../common/hooks/src/display.ts","../common/hooks/src/shared/utils.ts","../common/hooks/src/full-screen.ts","../common/hooks/src/hover.ts","../common/hooks/src/intersection.ts","../common/hooks/src/manual-ref.ts","../common/hooks/src/modifier.ts","../common/hooks/src/mounted.ts","../common/hooks/src/moving.ts","../common/hooks/src/pointer.ts","../node_modules/.pnpm/@floating-ui+utils@0.2.9/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/.pnpm/@floating-ui+core@1.7.0/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/.pnpm/@floating-ui+utils@0.2.9/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/.pnpm/@floating-ui+dom@1.7.0/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/resizeObservers.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/freeze.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverSize.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/element.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/global.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/process.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/scheduler.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObservation.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverController.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserver.js","../common/hooks/src/resize.ts","../common/hooks/src/rtl.ts","../common/hooks/src/popper.ts","../common/hooks/src/theme.ts","../common/hooks/src/timer-record.ts","../common/hooks/src/virtual.ts","../directives/resize/index.ts","../directives/index.ts","../components/affix/props.ts","../components/affix/helpers.ts","../components/affix/affix.vue","../components/collapse/props.ts","../components/collapse/collapse-transition.ts","../components/alert/props.ts","../components/alert/symbol.ts","../components/alert/alert.vue","../components/anchor/props.ts","../components/anchor/symbol.ts","../components/anchor/anchor-link.vue","../components/anchor/helper.ts","../components/anchor/anchor.vue","../components/row/props.ts","../components/row/symbol.ts","../components/row/row.ts","../components/form/props.ts","../components/form/symbol.ts","../components/form/form.vue","../components/form/helper.ts","../components/form/validator.ts","../components/input/props.ts","../components/input/input.tsx","../components/scrollbar/props.ts","../components/scrollbar/symbol.ts","../components/scrollbar/hooks.ts","../components/scrollbar/scrollbar.vue","../components/resize-observer/props.ts","../components/resize-observer/resize-observer.ts","../components/native-scroll/props.ts","../components/native-scroll/helper.ts","../components/native-scroll/hooks.ts","../components/native-scroll/native-scroll.tsx","../components/option/props.ts","../components/option/option.vue","../components/overflow/props.ts","../components/overflow/overflow.tsx","../components/portal/portal.vue","../components/popper/props.ts","../components/popper/popper.vue","../components/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-hue.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/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, toStrin