{"version":3,"file":"index.cjs","sources":["../src/components/auto-center/index.vue","../src/components/auto-center/index.vue","../src/utils/to-css-length.ts","../src/components/image/LazyDetector.vue","../src/components/image/ImageIcon.vue","../src/components/image/BrokenImageIcon.vue","../src/components/image/index.vue","../src/components/avatar/fallback-icon.vue","../src/components/avatar/avatar.vue","../src/components/badge/dot.ts","../src/components/badge/index.vue","../src/components/dot-loading/index.vue","../src/utils/validate.ts","../src/components/button/index.vue","../src/components/card/card.vue","../src/components/config-provider/types.ts","../src/components/config-provider/useConfig.ts","../src/components/spin-loading/index.vue","../src/utils/bound.ts","../src/utils/is-dev.ts","../src/utils/dev-log.ts","../src/utils/measure-css-length.ts","../src/utils/rubberband.ts","../src/utils/supports-passive.ts","../src/components/picker-view/wheel.vue","../src/utils/with-cache.ts","../src/components/picker-view/columns-extend.ts","../src/components/picker-view/picker-utils.ts","../src/components/picker-view/picker-view.vue","../src/components/mask/index.vue","../src/components/popup/popup-base-props.ts","../src/components/popup/popup.vue","../src/components/safe-area/index.vue","../src/components/picker/picker.vue","../src/components/cascade-picker/cascade-picker-utils.ts","../src/components/cascade-picker/cascade-picker.vue","../src/components/cascade-picker/prompt.ts","../src/components/cascade-picker-view/cascade-picker-view.vue","../src/components/list/list.vue","../src/components/check-list/context.ts","../src/components/check-list/check-list.vue","../src/components/list/item.vue","../src/components/check-list/check-list-item.vue","../src/utils/generate-int-array.ts","../src/components/skeleton/skeletonParagraph.vue","../src/components/skeleton/skeletonTitle.vue","../src/components/skeleton/skeleton.vue","../src/components/tabs/tab.vue","../src/components/tabs/utils.ts","../src/components/tabs/tabs.vue","../src/components/cascader-view/option-skeleton.ts","../src/components/cascader-view/use-cascader-value-extend.ts","../src/components/cascader-view/use-field-names.ts","../src/components/cascader-view/cascader-view.vue","../src/components/cascader/cascader.vue","../src/components/cascader/prompt.ts","../src/utils/attach-properties-to-component.ts","../src/components/cascader/index.ts","../src/utils/use-lock-scroll.ts","../src/components/center-popup/center-popup.vue","../src/components/checkbox/check-icon.vue","../src/components/checkbox/indeterminate-icon.vue","../src/components/checkbox/checkbox.vue","../src/components/checkbox/checkbox-group.vue","../src/components/collapse/collapse.vue","../src/components/collapse/collapse-panel.vue","../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/plugin/isLeapYear.js","../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/plugin/isoWeek.js","../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/plugin/isoWeeksInYear.js","../src/components/date-picker/util.ts","../src/components/date-picker/date-picker-date-utils.ts","../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/plugin/quarterOfYear.js","../src/components/date-picker/date-picker-quarter-utils.ts","../src/components/date-picker/date-picker-week-utils.ts","../src/components/date-picker/date-picker-utils.ts","../src/components/picker/prompt.ts","../src/components/date-picker/date-picker.vue","../src/components/date-picker/prompt.vue","../src/components/date-picker/prompt.ts","../src/components/date-picker-view/date-picker-view.vue","../src/components/date-picker-view/useRenderLabel.ts","../src/components/demo-block/index.vue","../src/components/dialog/dialog-action-button.vue","../src/components/dialog/dialog.vue","../src/components/dialog/show.ts","../src/components/dialog/alert.ts","../src/components/dialog/clear.ts","../src/components/dialog/confirm.ts","../src/components/dialog/index.ts","../src/components/config-provider/index.vue","../src/components/divider/index.vue","../src/components/ellipsis/useMeasure.ts","../src/components/ellipsis/index.vue","../src/components/empty/EmptyIcon.vue","../src/components/empty/index.vue","../src/components/error-block/images/DefaultImage.vue","../src/components/error-block/images/DisconnectedImage.vue","../src/components/error-block/images/EmptyImage.vue","../src/components/error-block/images/BusyImage.vue","../src/components/error-block/error-block.vue","../src/components/form/types.ts","../src/components/form/context.ts","../src/components/form/utils.ts","../src/components/form/validator.ts","../src/components/form/form-store.ts","../src/components/form/form.vue","../src/utils/convert-px.ts","../src/utils/with-default-props.tsx","../src/components/popover/arrow.vue","../src/components/popover/normalize-placement.ts","../src/components/popover/should-render.ts","../src/components/popover/wrapper.vue","../src/components/popover/popover.vue","../src/utils/undefined-fallback.ts","../src/components/form/form-item.vue","../src/components/form/form-array.vue","../src/components/form/header.vue","../src/components/form/form-subscribe.vue","../src/components/floating-panel/floating-panel.vue","../src/components/grid/index.vue","../src/components/grid/item.vue","../src/components/image-viewer/slide.vue","../src/components/image-viewer/image-viewer.vue","../src/components/image-viewer/slides.vue","../src/components/image-viewer/multi-image-viewer.vue","../src/components/image-viewer/methods.ts","../src/components/image-viewer/index.ts","../src/components/space/index.vue","../src/components/image-uploader/preview-item.vue","../src/components/image-uploader/image-uploader.vue","../src/utils/ahooks.ts","../src/utils/get-scroll-parent.ts","../src/components/infinite-scroll/infinite-scroll-content.vue","../src/components/infinite-scroll/infinite-scroll.vue","../src/components/input/input.vue","../src/components/modal/modal-action-button.vue","../src/components/modal/modal.vue","../src/components/modal/show.ts","../src/components/modal/alert.ts","../src/components/modal/clear.ts","../src/components/modal/confirm.ts","../src/components/modal/index.ts","../src/components/nav-bar/index.vue","../src/components/notice-bar/index.vue","../src/components/page-indicator/page-indicator.vue","../src/components/popover/popover-menu.vue","../src/utils/sleep.ts","../src/components/pull-to-refresh/pull-to-refresh.vue","../src/components/radio/native-input.vue","../src/components/radio/radio.vue","../src/components/radio/radio-group.vue","../src/components/result/useResultIcon.ts","../src/components/result/index.vue","../src/components/search-bar/search-bar.vue","../src/components/selector/check-mark.vue","../src/components/selector/selector-option-item.vue","../src/components/selector/selector.vue","../src/components/slider/marks.vue","../src/components/slider/thumb-icon.vue","../src/components/slider/thumb.vue","../src/components/slider/ticks.vue","../src/utils/nearest.ts","../src/components/slider/slider.vue","../src/components/stepper/stepper.vue","../src/components/steps/steps.vue","../src/components/steps/step.vue","../src/components/steps/steps-wrapper.vue","../src/components/switch/spin-icon.vue","../src/components/switch/switch.vue","../src/components/tag/tag.vue","../src/components/text-area/useInputHandleKeyDown.ts","../src/components/text-area/text-area.vue","../src/components/toast/toast.vue","../src/components/toast/index.ts","../src/components/water-mark/water-mark.vue","../src/utils/lorem.ts"],"sourcesContent":["<template>\r\n  <div class=\"adm-auto-center\" v-bind=\"$attrs\">\r\n    <div class=\"adm-auto-center-content\">\r\n      <slot />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\"></script>\r\n\r\n<script lang=\"ts\">\r\n// 组件选项\r\nexport default {\r\n  name: 'AutoCenter',\r\n  inheritAttrs: false,\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n</style>\r\n","<template>\r\n  <div class=\"adm-auto-center\" v-bind=\"$attrs\">\r\n    <div class=\"adm-auto-center-content\">\r\n      <slot />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\"></script>\r\n\r\n<script lang=\"ts\">\r\n// 组件选项\r\nexport default {\r\n  name: 'AutoCenter',\r\n  inheritAttrs: false,\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n</style>\r\n","export function toCSSLength(val: string | number) {\n  return typeof val === 'number' ? `${val}px` : val\n}\n","<template>\r\n  <div ref=\"lazyRef\"></div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, onMounted, onUnmounted } from 'vue'\r\n\r\nconst emit = defineEmits<{\r\n  active: []\r\n}>()\r\n\r\nconst lazyRef = ref<HTMLDivElement>()\r\nlet observer: IntersectionObserver | null = null\r\n\r\nonMounted(() => {\r\n  if (!lazyRef.value) return\r\n\r\n  observer = new IntersectionObserver(\r\n    (entries) => {\r\n      entries.forEach((entry) => {\r\n        if (entry.isIntersecting) {\r\n          emit('active')\r\n          observer?.disconnect()\r\n        }\r\n      })\r\n    },\r\n    {\r\n      threshold: 0.1,\r\n    },\r\n  )\r\n\r\n  observer.observe(lazyRef.value)\r\n})\r\n\r\nonUnmounted(() => {\r\n  observer?.disconnect()\r\n})\r\n</script>\r\n","<template>\r\n  <svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\r\n    <path\r\n      d=\"M41.396 6.234c1.923 0 3.487 1.574 3.487 3.505v29.14c0 1.937-1.568 3.51-3.491 3.51H6.604c-1.923 0-3.487-1.573-3.487-3.51V9.745c0-1.936 1.564-3.51 3.487-3.51Zm0 2.847H6.604c-.355 0-.654.3-.654.658V34.9l5.989-8.707a2.373 2.373 0 0 1 1.801-1.005 2.405 2.405 0 0 1 1.933.752l4.182 4.525 7.58-11.005a2.374 2.374 0 0 1 1.96-1.01c.79 0 1.532.38 1.966 1.01L42.05 34.89V9.74a.664.664 0 0 0-.654-.658Zm-28.305 2.763a3.119 3.119 0 0 1 3.117 3.117 3.119 3.119 0 0 1-3.117 3.117 3.122 3.122 0 0 1-3.117-3.117 3.119 3.119 0 0 1 3.117-3.117Z\"\r\n      fill=\"#DBDBDB\"\r\n      fill-rule=\"nonzero\"\r\n    />\r\n  </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n// ImageIcon 组件\r\n</script>\r\n","<template>\r\n  <svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\r\n    <path\r\n      d=\"M19.233 6.233 17.42 9.08l-10.817.001a.665.665 0 0 0-.647.562l-.007.096V34.9l5.989-8.707a2.373 2.373 0 0 1 1.801-1.005 2.415 2.415 0 0 1 1.807.625l.126.127 4.182 4.525 2.267-3.292 5.461 7.841-4.065 7.375H6.604c-1.86 0-3.382-1.47-3.482-3.317l-.005-.192V9.744c0-1.872 1.461-3.405 3.296-3.505l.19-.005h12.63Zm22.163 0c1.86 0 3.382 1.472 3.482 3.314l.005.192v29.14a3.507 3.507 0 0 1-3.3 3.505l-.191.006H27.789l3.63-6.587.06-.119a1.87 1.87 0 0 0-.163-1.853l-6.928-9.949 3.047-4.422a2.374 2.374 0 0 1 1.96-1.01 2.4 2.4 0 0 1 1.86.87l.106.14L42.05 34.89V9.74a.664.664 0 0 0-.654-.658H21.855l1.812-2.848h17.73Zm-28.305 5.611c.794 0 1.52.298 2.07.788l-.843 1.325-.067.114a1.87 1.87 0 0 0 .11 1.959l.848 1.217c-.556.515-1.3.83-2.118.83a3.122 3.122 0 0 1-3.117-3.116 3.119 3.119 0 0 1 3.117-3.117Z\"\r\n      fill=\"#DBDBDB\"\r\n      fill-rule=\"nonzero\"\r\n    />\r\n  </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n// BrokenImageIcon 组件\r\n</script>\r\n","<script setup lang=\"ts\">\r\nimport { ref, computed, watch, onMounted, h, type Component } from 'vue'\r\nimport { toCSSLength } from '../../utils/to-css-length'\r\nimport LazyDetector from './LazyDetector.vue'\r\nimport ImageIcon from './ImageIcon.vue'\r\nimport BrokenImageIcon from './BrokenImageIcon.vue'\r\n\r\nconst classPrefix = 'adm-image'\r\n\r\nexport interface ImageProps {\r\n  src?: string\r\n  alt?: string\r\n  width?: number | string\r\n  height?: number | string\r\n  fit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down'\r\n  placeholder?: string | Component\r\n  fallback?: string | Component\r\n  lazy?: boolean\r\n  draggable?: boolean\r\n  onClick?: (event: MouseEvent) => void\r\n  onError?: (event: Event) => void\r\n  onLoad?: (event: Event) => void\r\n  onContainerClick?: (event: MouseEvent) => void\r\n  style?: Record<string, string | number>\r\n  className?: string\r\n  // HTML img attributes\r\n  crossOrigin?: '' | 'anonymous' | 'use-credentials'\r\n  decoding?: 'async' | 'auto' | 'sync'\r\n  loading?: 'eager' | 'lazy'\r\n  referrerPolicy?: ReferrerPolicy\r\n  sizes?: string\r\n  srcSet?: string\r\n  useMap?: string\r\n  id?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<ImageProps>(), {\r\n  fit: 'fill',\r\n  lazy: false,\r\n  draggable: false,\r\n  style: () => ({}),\r\n  className: '',\r\n})\r\n\r\n// 默认的 placeholder 和 fallback\r\nconst defaultPlaceholder = h('div', { class: `${classPrefix}-tip` }, h(ImageIcon))\r\nconst defaultFallback = h('div', { class: `${classPrefix}-tip` }, h(BrokenImageIcon))\r\n\r\nconst loaded = ref(false)\r\nconst failed = ref(false)\r\nconst initialized = ref(!props.lazy)\r\nconst containerRef = ref<HTMLDivElement>()\r\nconst imgRef = ref<HTMLImageElement>()\r\n\r\n// 计算当前的 src 和 srcSet\r\nconst currentSrc = computed(() => (initialized.value ? props.src : undefined))\r\nconst currentSrcSet = computed(() => (initialized.value ? props.srcSet : undefined))\r\n\r\n// 监听 src 变化，重置状态\r\nwatch(\r\n  () => props.src,\r\n  () => {\r\n    loaded.value = false\r\n    failed.value = false\r\n  },\r\n)\r\n\r\n// 容器样式\r\nconst containerStyle = computed(() => {\r\n  const style: Record<string, string | number> = { ...props.style }\r\n\r\n  if (props.width) {\r\n    style['--width'] = toCSSLength(props.width)\r\n    style['width'] = toCSSLength(props.width)\r\n  }\r\n  if (props.height) {\r\n    style['--height'] = toCSSLength(props.height)\r\n    style['height'] = toCSSLength(props.height)\r\n  }\r\n\r\n  return style\r\n})\r\n\r\n// 图片样式\r\nconst imgStyle = computed(() => ({\r\n  objectFit: props.fit,\r\n  display: loaded.value ? 'block' : 'none',\r\n}))\r\n\r\n// 处理图片加载完成\r\nconst handleLoad = (event: Event) => {\r\n  loaded.value = true\r\n  props.onLoad?.(event)\r\n}\r\n\r\n// 处理图片加载失败\r\nconst handleError = (event: Event) => {\r\n  failed.value = true\r\n  props.onError?.(event)\r\n}\r\n\r\n// 处理容器点击\r\nconst handleContainerClick = (event: MouseEvent) => {\r\n  props.onContainerClick?.(event)\r\n}\r\n\r\n// 处理懒加载激活\r\nconst handleLazyActive = () => {\r\n  initialized.value = true\r\n}\r\n\r\n// 检查服务端渲染后的图片状态\r\nonMounted(() => {\r\n  // 处理 Next.js SSR 的情况\r\n  if (imgRef.value?.complete) {\r\n    loaded.value = true\r\n  }\r\n})\r\n\r\n// 获取 placeholder 和 fallback\r\nconst placeholder = computed(() => props.placeholder ?? defaultPlaceholder)\r\nconst fallback = computed(() => props.fallback ?? defaultFallback)\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"containerRef\"\r\n    :class=\"classPrefix\"\r\n    :style=\"containerStyle\"\r\n    @click=\"handleContainerClick\"\r\n  >\r\n    <LazyDetector v-if=\"lazy && !initialized\" @active=\"handleLazyActive\" />\r\n    <template v-if=\"failed\">\r\n      <component v-if=\"typeof fallback === 'object'\" :is=\"fallback\" />\r\n      <template v-else>{{ fallback }}</template>\r\n    </template>\r\n    <template v-else>\r\n      <template v-if=\"!loaded\">\r\n        <component v-if=\"typeof placeholder === 'object'\" :is=\"placeholder\" />\r\n        <template v-else>{{ placeholder }}</template>\r\n      </template>\r\n      <img\r\n        ref=\"imgRef\"\r\n        :id=\"id\"\r\n        :class=\"`${classPrefix}-img`\"\r\n        :src=\"currentSrc\"\r\n        :alt=\"alt\"\r\n        :style=\"imgStyle\"\r\n        :crossorigin=\"crossOrigin\"\r\n        :decoding=\"decoding\"\r\n        :loading=\"loading\"\r\n        :referrerpolicy=\"referrerPolicy\"\r\n        :sizes=\"sizes\"\r\n        :srcset=\"currentSrcSet\"\r\n        :usemap=\"useMap\"\r\n        :draggable=\"draggable\"\r\n        @click=\"onClick\"\r\n        @load=\"handleLoad\"\r\n        @error=\"handleError\"\r\n      />\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n</style>\r\n","<template>\r\n  <svg class=\"adm-avatar-fallback\" width=\"88px\" height=\"88px\" viewBox=\"0 0 88 88\" version=\"1.1\">\r\n    <title>编组 3</title>\r\n    <defs>\r\n      <polygon id=\"path-1\" points=\"0 0 88 0 88 88 0 88\" />\r\n    </defs>\r\n    <g id=\"页面-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n      <g id=\"语雀\" transform=\"translate(-495.000000, -71.000000)\">\r\n        <g id=\"编组-3\" transform=\"translate(495.000000, 71.000000)\">\r\n          <mask id=\"mask-2\" fill=\"white\">\r\n            <use xlink:href=\"#path-1\" />\r\n          </mask>\r\n          <use id=\"Mask\" fill=\"#EEEEEE\" fill-rule=\"nonzero\" xlink:href=\"#path-1\" />\r\n          <path\r\n            d=\"M44.5707528,16 L43.4292117,16 L42.9575197,16.0086403 L42.9575195,16.0086403 C36.5215787,16.2615464 31.4341803,21.5678078 31.4344832,28.0273864 L31.4344832,34.7776551 L31.4495601,35.3716788 L31.4495593,35.3716628 C31.599687,38.5368723 32.9422041,41.5269327 35.2058513,43.7376716 L38.2147759,46.6775505 L38.4086219,46.8913989 C38.7747759,47.3385365 38.9750835,47.9001589 38.9750835,48.4833848 L38.9750835,48.8938006 L38.9556989,49.1897326 L38.9556989,49.1897325 C38.8577746,49.9812662 38.3754713,50.67284 37.667703,51.036605 L18.7375269,60.7440265 L18.4101421,60.9276334 L18.4101423,60.9276333 C16.9141658,61.8418636 16.0009389,63.4714674 16,65.2283758 L16,66.070809 L16.0129231,66.3948217 C16.1766149,68.4123376 17.860922,70 19.91569,70 L68.0843101,70 L68.08431,70 C70.2460467,70 71.9988087,68.243122 72,66.0751224 L72,65.2326893 C72,63.3382982 70.9446194,61.6037466 69.2624598,60.7440295 L50.3322837,51.036608 L50.3322835,51.0366079 C49.5291218,50.6249082 49.0240448,49.7962466 49.024903,48.8916436 L49.024903,48.4812278 C49.024903,47.8029608 49.3005955,47.1527756 49.7852106,46.6775603 L52.7941352,43.7376813 L52.7941354,43.7376811 C55.204308,41.3832325 56.5636029,38.151975 56.5633606,34.7776456 L56.5633606,28.0273769 L56.5633606,28.0273774 C56.5633606,21.3848531 51.1940878,16 44.5707524,16 L44.5707528,16 Z\"\r\n            id=\"形状\"\r\n            fill=\"#CCCCCC\"\r\n            fill-rule=\"nonzero\"\r\n            mask=\"url(#mask-2)\"\r\n          />\r\n        </g>\r\n      </g>\r\n    </g>\r\n  </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n// 纯 SVG 组件，无需逻辑\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.adm-avatar-fallback {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: block;\r\n}\r\n</style>\r\n","<template>\r\n  <Image\r\n    :class=\"classPrefix\"\r\n    :src=\"props.src\"\r\n    :fallback=\"fallbackComponent\"\r\n    :placeholder=\"fallbackComponent\"\r\n    :alt=\"props.alt\"\r\n    :lazy=\"props.lazy\"\r\n    :fit=\"props.fit\"\r\n    :style=\"nativeStyle\"\r\n    @click=\"props.onClick\"\r\n    @error=\"props.onError\"\r\n    @load=\"props.onLoad\"\r\n  />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, type Component } from 'vue'\r\nimport Image from '../image/index.vue'\r\nimport FallbackIcon from './fallback-icon.vue'\r\n\r\nconst classPrefix = 'adm-avatar'\r\n\r\nexport interface AvatarProps {\r\n  src: string\r\n  fallback?: string | Component\r\n  fit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down'\r\n  // 从 Image 组件继承的 props\r\n  alt?: string\r\n  lazy?: boolean\r\n  onClick?: (e: MouseEvent) => void\r\n  onError?: (e: Event) => void\r\n  onLoad?: (e: Event) => void\r\n  // CSS Variables\r\n  '--size'?: string\r\n  '--border-radius'?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<AvatarProps>(), {\r\n  fit: 'cover',\r\n  fallback: undefined,\r\n})\r\n\r\nconst fallbackComponent = computed(() => {\r\n  return props.fallback || FallbackIcon\r\n})\r\n\r\nconst nativeStyle = computed(() => {\r\n  const style: Record<string, string> = {}\r\n\r\n  if (props['--size']) {\r\n    style['--size'] = props['--size']\r\n  }\r\n  if (props['--border-radius']) {\r\n    style['--border-radius'] = props['--border-radius']\r\n  }\r\n\r\n  return style\r\n})\r\n</script>\r\n<style lang=\"less\" scoped>\r\n@import './avatar.less';\r\n</style>\r\n","export const Dot = Symbol('badge-dot')\r\n","<template>\r\n  <div\r\n    v-if=\"hasChildren\"\r\n    :class=\"[`${classPrefix}-wrapper`, props.wrapperClassName]\"\r\n    :style=\"props.wrapperStyle\"\r\n  >\r\n    <slot />\r\n    <div v-if=\"showBadge\" :class=\"badgeClass\" :style=\"badgeStyle\">\r\n      <div v-if=\"!isDot\" :class=\"`${classPrefix}-content`\">{{ props.content }}</div>\r\n    </div>\r\n  </div>\r\n  <div v-else-if=\"showBadge\" :class=\"badgeClass\" :style=\"badgeStyle\">\r\n    <div v-if=\"!isDot\" :class=\"`${classPrefix}-content`\">{{ props.content }}</div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, useSlots } from 'vue'\r\nimport classNames from 'classnames'\r\nimport { Dot as dot } from './dot'\r\n\r\nconst classPrefix = 'adm-badge'\r\n\r\ninterface BadgeProps {\r\n  content?: string | number | typeof dot\r\n  color?: string\r\n  bordered?: boolean\r\n  wrapperClassName?: string\r\n  wrapperStyle?: Record<string, string | number>\r\n  style?: Record<string, string | number>\r\n}\r\n\r\nconst props = defineProps<BadgeProps>()\r\nconst slots = useSlots()\r\nconst hasChildren = computed(() => !!slots.default)\r\nconst isDot = computed(() => props.content === dot)\r\nconst showBadge = computed(() => props.content || props.content === 0)\r\n\r\nconst badgeClass = computed(() =>\r\n  classNames(classPrefix, {\r\n    [`${classPrefix}-fixed`]: hasChildren.value,\r\n    [`${classPrefix}-dot`]: isDot.value,\r\n    [`${classPrefix}-bordered`]: props.bordered,\r\n  }),\r\n)\r\n\r\nconst badgeStyle = computed(() => ({\r\n  '--color': props.color,\r\n  ...(props.style || {}),\r\n}))\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n</style>\r\n","<template>\r\n  <div :class=\"['adm-loading', classPrefix]\" :style=\"{ color: finalColor, ...nativeStyle }\">\r\n    <svg height=\"1em\" viewBox=\"0 0 100 40\" style=\"vertical-align: -0.125em\">\r\n      <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n        <g transform=\"translate(-100.000000, -71.000000)\">\r\n          <g transform=\"translate(95.000000, 71.000000)\">\r\n            <g transform=\"translate(5.000000, 0.000000)\">\r\n              <rect\r\n                v-for=\"i in 3\"\r\n                :key=\"i - 1\"\r\n                fill=\"currentColor\"\r\n                :x=\"20 + (i - 1) * 26\"\r\n                y=\"16\"\r\n                width=\"8\"\r\n                height=\"8\"\r\n                rx=\"2\"\r\n              >\r\n                <animate\r\n                  attributeName=\"y\"\r\n                  from=\"16\"\r\n                  to=\"16\"\r\n                  dur=\"2s\"\r\n                  :begin=\"`${(i - 1) * 0.2}s`\"\r\n                  repeatCount=\"indefinite\"\r\n                  values=\"16; 6; 26; 16; 16\"\r\n                  keyTimes=\"0; 0.1; 0.3; 0.4; 1\"\r\n                />\r\n              </rect>\r\n            </g>\r\n          </g>\r\n        </g>\r\n      </g>\r\n    </svg>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\nconst classPrefix = 'adm-dot-loading'\r\n\r\nconst colorRecord: Record<string, string> = {\r\n  default: 'var(--adm-color-weak)',\r\n  primary: 'var(--adm-color-primary)',\r\n  white: 'var(--adm-color-white)',\r\n}\r\n\r\nexport interface DotLoadingProps {\r\n  color?: 'default' | 'primary' | 'white' | (string & {})\r\n  style?: Record<string, string | number>\r\n  className?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<DotLoadingProps>(), {\r\n  color: 'default',\r\n  style: () => ({}),\r\n  className: '',\r\n})\r\n\r\nconst finalColor = computed(() => {\r\n  return colorRecord[props.color] ?? props.color\r\n})\r\n\r\nconst nativeStyle = computed(() => {\r\n  return props.style || {}\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.adm-loading {\r\n  display: inline-block;\r\n}\r\n</style>\r\n","import { canUseDom } from './can-use-dom'\n\nexport function isDef<T>(val: T): val is NonNullable<T> {\n  return val !== undefined && val !== null\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isObject(val: unknown): val is Record<any, any> {\n  return val !== null && typeof val === 'object'\n}\n\nexport function isPromise(obj: unknown): obj is Promise<unknown> {\n  return (\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    !!obj && typeof obj === 'object' && typeof (obj as any).then === 'function'\n  )\n}\n\nexport function isDate(val: unknown): val is Date {\n  return (\n    Object.prototype.toString.call(val) === '[object Date]' &&\n    !Number.isNaN((val as Date).getTime())\n  )\n}\n\nexport function isMobile(value: string): boolean {\n  value = value.replace(/[^-|\\d]/g, '')\n  return /^((\\+86)|(86))?(1)\\d{10}$/.test(value) || /^0[0-9-]{10,13}$/.test(value)\n}\n\nexport function isNumeric(val: string | number): val is string {\n  return typeof val === 'number' || /^\\d+(\\.\\d+)?$/.test(val)\n}\n\nexport function isAndroid(): boolean {\n  return canUseDom ? /android/.test(navigator.userAgent.toLowerCase()) : false\n}\n\nexport function isIOS(): boolean {\n  return canUseDom ? /ios|iphone|ipad|ipod/.test(navigator.userAgent.toLowerCase()) : false\n}\n","<script setup lang=\"ts\">\r\nimport { ref, computed, h, type VNode, type CSSProperties, type Component } from 'vue'\r\nimport DotLoading from '../dot-loading/index.vue'\r\nimport { isPromise } from '../../utils/validate'\r\n\r\nconst classPrefix = 'adm-button'\r\n\r\nexport interface ButtonProps {\r\n  color?: 'default' | 'primary' | 'success' | 'warning' | 'danger'\r\n  fill?: 'solid' | 'outline' | 'none'\r\n  size?: 'mini' | 'small' | 'middle' | 'large'\r\n  block?: boolean\r\n  loading?: boolean | 'auto'\r\n  loadingText?: string\r\n  loadingIcon?: VNode | Component\r\n  disabled?: boolean\r\n  type?: 'submit' | 'reset' | 'button'\r\n  shape?: 'default' | 'rounded' | 'rectangular'\r\n  // Native props\r\n  onMouseDown?: (event: MouseEvent) => void\r\n  onMouseUp?: (event: MouseEvent) => void\r\n  onTouchStart?: (event: TouchEvent) => void\r\n  onTouchEnd?: (event: TouchEvent) => void\r\n  onClick?: (event: MouseEvent) => void | Promise<void>\r\n  id?: string\r\n  form?: string\r\n  // CSS Variables\r\n  style?: CSSProperties\r\n  class?: string | string[] | Record<string, boolean>\r\n}\r\n\r\nexport interface ButtonEmits {\r\n  (e: 'click', event: MouseEvent): void | Promise<void>\r\n}\r\n\r\n// Props with defaults\r\nconst props = withDefaults(defineProps<ButtonProps>(), {\r\n  color: 'default',\r\n  fill: 'solid',\r\n  block: false,\r\n  loading: false,\r\n  type: 'button',\r\n  shape: 'default',\r\n  size: 'middle',\r\n})\r\n\r\n// Emits\r\nconst emit = defineEmits<ButtonEmits>()\r\n\r\n// Refs\r\nconst buttonRef = ref<HTMLButtonElement | null>(null)\r\nconst innerLoading = ref(false)\r\n\r\n// Computed\r\nconst isLoading = computed(() => {\r\n  return props.loading === 'auto' ? innerLoading.value : props.loading\r\n})\r\n\r\nconst isDisabled = computed(() => {\r\n  return props.disabled || isLoading.value\r\n})\r\n\r\nconst currentLoadingIcon = computed(() => {\r\n  if (props.loadingIcon) {\r\n    return props.loadingIcon\r\n  }\r\n  return h(DotLoading, { color: 'currentColor' })\r\n})\r\n\r\nconst buttonClasses = computed(() => {\r\n  return [\r\n    classPrefix,\r\n    {\r\n      [`${classPrefix}-${props.color}`]: props.color,\r\n      [`${classPrefix}-block`]: props.block,\r\n      [`${classPrefix}-disabled`]: isDisabled.value,\r\n      [`${classPrefix}-fill-outline`]: props.fill === 'outline',\r\n      [`${classPrefix}-fill-none`]: props.fill === 'none',\r\n      [`${classPrefix}-mini`]: props.size === 'mini',\r\n      [`${classPrefix}-small`]: props.size === 'small',\r\n      [`${classPrefix}-large`]: props.size === 'large',\r\n      [`${classPrefix}-loading`]: isLoading.value,\r\n    },\r\n    `${classPrefix}-shape-${props.shape}`,\r\n    props.class,\r\n  ]\r\n})\r\n\r\nconst nativeStyle = computed(() => {\r\n  const baseStyle: CSSProperties = {}\r\n\r\n  // CSS Variables support\r\n  if (props.style) {\r\n    Object.assign(baseStyle, props.style)\r\n  }\r\n\r\n  return baseStyle\r\n})\r\n\r\n// Methods\r\nconst handleClick = async (event: MouseEvent): Promise<void> => {\r\n  const result = props.onClick ? props.onClick(event) : emit('click', event)\r\n  // Auto loading handling\r\n  if (props.loading === 'auto' && isPromise(result)) {\r\n    try {\r\n      innerLoading.value = true\r\n      await result\r\n      innerLoading.value = false\r\n    } catch (error) {\r\n      innerLoading.value = false\r\n      throw error\r\n    }\r\n  }\r\n}\r\n\r\nconst handleTouchStart = (event: TouchEvent) => {\r\n  props.onTouchStart?.(event)\r\n}\r\n\r\nconst handleTouchEnd = (event: TouchEvent) => {\r\n  props.onTouchEnd?.(event)\r\n}\r\n\r\n// Expose native element\r\ndefineExpose({\r\n  nativeElement: buttonRef,\r\n})\r\n</script>\r\n\r\n<template>\r\n  <button\r\n    ref=\"buttonRef\"\r\n    :type=\"props.type\"\r\n    :form=\"props.form\"\r\n    :class=\"buttonClasses\"\r\n    :disabled=\"isDisabled\"\r\n    @click=\"handleClick\"\r\n    @mousedown=\"props.onMouseDown\"\r\n    @mouseup=\"props.onMouseUp\"\r\n    @touchstart.passive=\"handleTouchStart\"\r\n    @touchend.passive=\"handleTouchEnd\"\r\n    :style=\"nativeStyle\"\r\n  >\r\n    <div v-if=\"isLoading\" :class=\"`${classPrefix}-loading-wrapper`\">\r\n      <component :is=\"currentLoadingIcon\" />\r\n      <span v-if=\"props.loadingText\">{{ props.loadingText }}</span>\r\n    </div>\r\n    <span v-else>\r\n      <slot />\r\n    </span>\r\n  </button>\r\n</template>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n</style>\r\n","<template>\r\n  <div class=\"adm-card\" @click=\"handleClick\">\r\n    <!-- Header -->\r\n    <div\r\n      v-if=\"showHeader\"\r\n      :class=\"headerClasses\"\r\n      :style=\"props.headerStyle\"\r\n      @click=\"handleHeaderClick\"\r\n    >\r\n      <div v-if=\"props.icon || $slots.icon\" class=\"adm-card-header-icon\">\r\n        <slot name=\"icon\">{{ props.icon }}</slot>\r\n      </div>\r\n      <div class=\"adm-card-header-title\">\r\n        <slot name=\"title\">{{ props.title }}</slot>\r\n      </div>\r\n      <div v-if=\"props.extra || $slots.extra\" class=\"adm-card-header-extra\">\r\n        <slot name=\"extra\" v-if=\"typeof props.extra === 'string' || $slots.extra\">{{\r\n          props.extra\r\n        }}</slot>\r\n        <component v-else :is=\"props.extra\" />\r\n      </div>\r\n    </div>\r\n\r\n    <!-- Body -->\r\n    <div\r\n      v-if=\"$slots.default\"\r\n      :class=\"bodyClasses\"\r\n      :style=\"props.bodyStyle\"\r\n      @click=\"handleBodyClick\"\r\n    >\r\n      <slot></slot>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, useSlots, type Component } from 'vue'\r\n\r\ninterface CardProps {\r\n  title?: string\r\n  icon?: string\r\n  extra?: string | Component\r\n  headerStyle?: Record<string, string | number>\r\n  headerClassName?: string\r\n  bodyStyle?: Record<string, string | number>\r\n  bodyClassName?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<CardProps>(), {})\r\n\r\nconst emit = defineEmits<{\r\n  click: [event: MouseEvent]\r\n  bodyClick: [event: MouseEvent]\r\n  headerClick: [event: MouseEvent]\r\n}>()\r\n\r\nconst slots = useSlots()\r\n\r\n// 计算是否显示 header\r\nconst showHeader = computed(() => {\r\n  return props.title || props.extra || slots.icon || slots.extra\r\n})\r\n\r\n// 计算 header 的 class\r\nconst headerClasses = computed(() => {\r\n  const classes = ['adm-card-header']\r\n  if (props.headerClassName) {\r\n    classes.push(props.headerClassName)\r\n  }\r\n  return classes\r\n})\r\n\r\n// 计算 body 的 class\r\nconst bodyClasses = computed(() => {\r\n  const classes = ['adm-card-body']\r\n  if (props.bodyClassName) {\r\n    classes.push(props.bodyClassName)\r\n  }\r\n  return classes\r\n})\r\n\r\n// 事件处理\r\nconst handleClick = (event: MouseEvent) => {\r\n  emit('click', event)\r\n}\r\n\r\nconst handleBodyClick = (event: MouseEvent) => {\r\n  emit('bodyClick', event)\r\n}\r\n\r\nconst handleHeaderClick = (event: MouseEvent) => {\r\n  emit('headerClick', event)\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './card.less';\r\n</style>\r\n","import type { Component, InjectionKey } from 'vue'\r\nimport type { Locale } from '../../locales/base'\r\nimport enUS from '../../locales/en-US'\r\n\r\nexport interface Config {\r\n  locale: Locale\r\n  checkList?: {\r\n    activeIcon?: Component\r\n  }\r\n  collapse?: {\r\n    arrowIcon?: Component | ((active: boolean) => Component)\r\n  }\r\n  dropdown?: {\r\n    arrowIcon?: Component\r\n  }\r\n  form?: {\r\n    helpIcon?: Component\r\n  }\r\n  input?: {\r\n    clearIcon?: Component\r\n  }\r\n  list?: {\r\n    arrowIcon?: Component\r\n  }\r\n  navBar?: {\r\n    backIcon?: Component\r\n  }\r\n  noticeBar?: {\r\n    icon?: Component\r\n    closeIcon?: Component\r\n  }\r\n  popup?: {\r\n    closeIcon?: Component\r\n  }\r\n  result?: {\r\n    successIcon?: Component\r\n    errorIcon?: Component\r\n    infoIcon?: Component\r\n    waitingIcon?: Component\r\n    warningIcon?: Component\r\n  }\r\n  searchBar?: {\r\n    searchIcon?: Component\r\n  }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\r\nexport interface ConfigProviderProps extends Partial<Config> {}\r\n\r\n// 全局默认配置引用\r\nexport const defaultConfigRef: {\r\n  current: Config\r\n} = {\r\n  current: {\r\n    locale: {} as Locale, // 将在运行时设置\r\n  },\r\n}\r\n\r\n// 设置全局默认配置\r\nexport function setDefaultConfig(config: Partial<Config>) {\r\n  defaultConfigRef.current = { ...defaultConfigRef.current, ...config }\r\n}\r\n\r\n// 获取全局默认配置\r\nexport function getDefaultConfig(): Config {\r\n  // 确保默认配置有 locale\r\n  if (!defaultConfigRef.current.locale.common) {\r\n    defaultConfigRef.current.locale = enUS\r\n  }\r\n  return defaultConfigRef.current\r\n}\r\n\r\n// 全局统一的注入键\r\nexport const CONFIG_INJECTION_KEY: InjectionKey<Config> = Symbol('ConfigProvider')\r\n","import { inject } from 'vue'\r\nimport { CONFIG_INJECTION_KEY, getDefaultConfig, type Config } from './types'\r\n\r\nexport function useConfig(): Config {\r\n  // 尝试从注入的配置中获取，如果没有则使用全局默认配置\r\n  const injectedConfig = inject(CONFIG_INJECTION_KEY, null)\r\n  if (injectedConfig?.locale?.common) {\r\n    return injectedConfig\r\n  }\r\n  // 返回全局默认配置\r\n  return getDefaultConfig()\r\n}\r\n","<template>\r\n  <div :class=\"classPrefix\" :style=\"spinStyle\" v-bind=\"$attrs\">\r\n    <svg :class=\"`${classPrefix}-svg`\" viewBox=\"0 0 32 32\">\r\n      <circle\r\n        :class=\"`${classPrefix}-fill`\"\r\n        fill=\"transparent\"\r\n        stroke-width=\"2\"\r\n        :stroke-dasharray=\"circumference\"\r\n        :stroke-dashoffset=\"animatedPercent\"\r\n        stroke-linecap=\"square\"\r\n        :r=\"15\"\r\n        :cx=\"16\"\r\n        :cy=\"16\"\r\n      />\r\n    </svg>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, onMounted, onUnmounted } from 'vue'\r\n\r\n// 类型定义\r\ninterface SpinLoadingProps {\r\n  color?: 'default' | 'primary' | 'white' | string\r\n  size?: string | number\r\n}\r\n\r\n// Props 定义\r\nconst props = withDefaults(defineProps<SpinLoadingProps>(), {\r\n  color: 'default',\r\n})\r\n\r\n// 常量\r\nconst classPrefix = 'adm-spin-loading'\r\n\r\nconst colorRecord: Record<string, string> = {\r\n  default: 'var(--adm-color-weak)',\r\n  primary: 'var(--adm-color-primary)',\r\n  white: 'var(--adm-color-white)',\r\n}\r\n\r\nconst circumference = 15 * 3.14159265358979 * 2\r\n\r\n// 响应式数据\r\nconst animatedPercent = ref(80)\r\nconst animationId = ref<number>()\r\nconst isReversing = ref(false)\r\n\r\n// 计算属性\r\nconst spinStyle = computed(() => {\r\n  const style: Record<string, string | number> = {\r\n    '--color': colorRecord[props.color] ?? props.color,\r\n    '--percent': animatedPercent.value,\r\n  }\r\n\r\n  if (props.size) {\r\n    style['--size'] = typeof props.size === 'number' ? `${props.size}px` : props.size\r\n  }\r\n\r\n  return style\r\n})\r\n\r\n// 动画逻辑\r\nconst animate = () => {\r\n  const duration = 1200 // 毫秒\r\n  const startTime = performance.now()\r\n  const startValue = 80\r\n  const endValue = 30\r\n\r\n  const animateStep = (currentTime: number) => {\r\n    const elapsed = currentTime - startTime\r\n    const progress = Math.min(elapsed / duration, 1)\r\n\r\n    // 使用缓动函数\r\n    const easeInOut = (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t)\r\n    const easedProgress = easeInOut(progress)\r\n\r\n    if (isReversing.value) {\r\n      animatedPercent.value = endValue + (startValue - endValue) * easedProgress\r\n    } else {\r\n      animatedPercent.value = startValue + (endValue - startValue) * easedProgress\r\n    }\r\n\r\n    if (progress < 1) {\r\n      animationId.value = requestAnimationFrame(animateStep)\r\n    } else {\r\n      // 动画完成，反转方向\r\n      isReversing.value = !isReversing.value\r\n      // 递归调用以实现循环\r\n      animate()\r\n    }\r\n  }\r\n\r\n  animationId.value = requestAnimationFrame(animateStep)\r\n}\r\n\r\n// 检查是否需要减少动画 (简化版实现)\r\nconst checkMotionReduced = () => {\r\n  return window.matchMedia('(prefers-reduced-motion: reduce)').matches\r\n}\r\n\r\n// 生命周期\r\nonMounted(() => {\r\n  if (!checkMotionReduced()) {\r\n    animate()\r\n  }\r\n})\r\n\r\nonUnmounted(() => {\r\n  if (animationId.value) {\r\n    cancelAnimationFrame(animationId.value)\r\n  }\r\n})\r\n\r\n// 暴露给模板使用\r\ndefineExpose({\r\n  animatedPercent,\r\n})\r\n</script>\r\n\r\n<script lang=\"ts\">\r\n// 组件选项\r\nexport default {\r\n  name: 'SpinLoading',\r\n  inheritAttrs: false,\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n</style>\r\n","export function bound(\n  position: number,\n  min: number | undefined,\n  max: number | undefined\n) {\n  let ret = position\n  if (min !== undefined) {\n    ret = Math.max(position, min)\n  }\n  if (max !== undefined) {\n    ret = Math.min(ret, max)\n  }\n  return ret\n}\n","export const isDev = process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test'\n","import { isDev } from './is-dev'\n\nexport function devWarning(component: string, message: string): void {\n  if (isDev) {\n    console.warn(`[antd-mobile: ${component}] ${message}`)\n  }\n}\n\nexport function devError(component: string, message: string) {\n  if (isDev) {\n    console.error(`[antd-mobile: ${component}] ${message}`)\n  }\n}\n\nlet infoBox: HTMLTextAreaElement\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function devPrint(...message: any[]) {\n  if (isDev) {\n    if (!infoBox) {\n      infoBox = document.createElement('textarea')\n      document.body.append(infoBox)\n      infoBox.style.position = 'fixed'\n      infoBox.style.top = '0'\n      infoBox.style.left = '0'\n      infoBox.style.width = '100vw'\n      infoBox.style.height = '100vh'\n      infoBox.style.zIndex = '999999'\n      infoBox.style.fontSize = '12px'\n      // infoBox.style.opacity = '0.85'\n      infoBox.style.pointerEvents = 'none'\n      infoBox.style.background = 'transparent'\n      infoBox.style.textShadow =\n        '-1px -1px 0 #FFF, -1px 1px 0 #FFF, 1px -1px 0 #FFF, 1px 1px 0 #FFF'\n    }\n\n    infoBox.value = `${infoBox.value}\\n${message.join(' ')}`.trim()\n    infoBox.scrollTop = infoBox.scrollHeight\n  }\n}\n","import { isDev } from './is-dev'\nimport { devError } from './dev-log'\n\nexport function measureCSSLength(raw: string | undefined | null): number {\n  if (raw === null || raw === undefined || raw === '') {\n    if (isDev) {\n      devError(\n        'Global',\n        'Something went wrong when calculating CSS length. Please report an issue at https://github.com/ant-design/ant-design-mobile/issues/new/choose'\n      )\n    }\n    return 0\n  }\n  const withUnit = raw.trim()\n  if (withUnit.endsWith('px')) {\n    return parseFloat(withUnit)\n  } else if (withUnit.endsWith('rem')) {\n    return (\n      parseFloat(withUnit) *\n      parseFloat(window.getComputedStyle(document.documentElement).fontSize)\n    )\n  } else if (withUnit.endsWith('vw')) {\n    return (parseFloat(withUnit) * window.innerWidth) / 100\n  } else {\n    if (isDev) {\n      devError(\n        'Global',\n        `You are using a not supported CSS unit in \\`${raw}\\`. Only \\`px\\` \\`rem\\` and \\`vw\\` are supported.`\n      )\n    }\n    return 0\n  }\n}\n","import { bound } from './bound'\n\nexport function rubberband(\n  distance: number,\n  dimension: number,\n  constant: number\n) {\n  return (distance * dimension * constant) / (dimension + constant * distance)\n}\n\nexport function rubberbandIfOutOfBounds(\n  position: number,\n  min: number,\n  max: number,\n  dimension: number,\n  constant = 0.15\n) {\n  if (constant === 0) return bound(position, min, max)\n  if (position < min)\n    return -rubberband(min - position, dimension, constant) + min\n  if (position > max)\n    return +rubberband(position - max, dimension, constant) + max\n  return position\n}\n","import { canUseDom } from './can-use-dom'\n\nexport let supportsPassive = false\n\nif (canUseDom) {\n  try {\n    const opts = {}\n    Object.defineProperty(opts, 'passive', {\n      get() {\n        supportsPassive = true\n      },\n    })\n    window.addEventListener('test-passive', null as any, opts)\n  } catch (e) {}\n}\n","<template>\r\n  <div :class=\"`${classPrefix}-column`\">\r\n    <sub :class=\"`${classPrefix}-item-sub`\" v-if=\"props.unit\" :style=\"unitStyle\">{{\r\n      props.unit\r\n    }}</sub>\r\n    <div :class=\"`${classPrefix}-item-height-measure`\" ref=\"itemHeightMeasureRef\" />\r\n    <div\r\n      ref=\"rootRef\"\r\n      :style=\"{ transform: `translateY(${y}px)` }\"\r\n      :class=\"`${classPrefix}-column-wheel`\"\r\n      aria-hidden=\"true\"\r\n    >\r\n      <div\r\n        v-for=\"(item, index) in column\"\r\n        :key=\"item.key ?? item.value\"\r\n        :data-selected=\"props.value === item.value\"\r\n        :class=\"[\r\n          `${classPrefix}-column-item`,\r\n          {\r\n            [`${classPrefix}-column-item-active`]: props.value === item.value,\r\n          },\r\n        ]\"\r\n        @click=\"() => handleClick(index)\"\r\n        :aria-hidden=\"!(props.value === item.value)\"\r\n        :aria-label=\"props.value === item.value ? 'active' : ''\"\r\n      >\r\n        <div :class=\"`${classPrefix}-column-item-label`\">\r\n          <component :is=\"renderLabel(item)\" v-if=\"typeof renderLabel(item) === 'object'\" />\r\n          <span v-else>{{ renderLabel(item) }}</span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <component :is=\"renderAccessible()\" v-if=\"renderAccessible()\" />\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, h, nextTick, onMounted, reactive, ref, watch, type VNode } from 'vue'\r\nimport { bound } from '../../utils/bound'\r\nimport { measureCSSLength } from '../../utils/measure-css-length'\r\nimport { rubberbandIfOutOfBounds } from '../../utils/rubberband'\r\nimport { supportsPassive } from '../../utils/supports-passive'\r\nimport type { PickerColumnItem, PickerValue } from './types'\r\n\r\nconst classPrefix = 'adm-picker-view'\r\n\r\ninterface Props {\r\n  index: number\r\n  column: PickerColumnItem[]\r\n  value: PickerValue\r\n  onSelect: (value: PickerValue, index: number) => void\r\n  renderLabel: (item: PickerColumnItem) => VNode | string | number\r\n  mouseWheel: boolean\r\n  unit?: string\r\n}\r\n\r\nconst props = defineProps<Props>()\r\n\r\nconst unitStyle = reactive<{ [key: string]: string | number }>({})\r\n\r\n// Refs\r\nconst rootRef = ref<HTMLDivElement>()\r\nconst itemHeightMeasureRef = ref<HTMLDivElement>()\r\nconst itemHeight = ref<number>(34)\r\nconst y = ref<number>(0)\r\nconst draggingRef = ref<boolean>(false)\r\n\r\n// Spring animation state\r\nconst isAnimating = ref(false)\r\nconst targetY = ref<number>(0)\r\n\r\nfunction initUnitStyle() {\r\n  const rootElment = rootRef.value\r\n  if (!rootElment) return\r\n  const label = rootElment.querySelector(`.${classPrefix}-column-item-label`) as HTMLElement\r\n  Object.assign(unitStyle, {\r\n    left: `calc(50% + ${label.offsetWidth / 2 + 5}px)`,\r\n    opacity: 1,\r\n  })\r\n}\r\n\r\n// Animation function to replace react-spring\r\nfunction animateToPosition(target: number, immediate = false) {\r\n  if (immediate) {\r\n    y.value = target\r\n    return\r\n  }\r\n\r\n  targetY.value = target\r\n  isAnimating.value = true\r\n\r\n  const startY = y.value\r\n  const distance = target - startY\r\n  const duration = 300 // milliseconds\r\n  const startTime = performance.now()\r\n\r\n  function animate(currentTime: number) {\r\n    const elapsed = currentTime - startTime\r\n    const progress = Math.min(elapsed / duration, 1)\r\n\r\n    // Easing function (similar to react-spring config)\r\n    const eased = 1 - Math.pow(1 - progress, 3)\r\n\r\n    y.value = startY + distance * eased\r\n\r\n    if (progress < 1) {\r\n      requestAnimationFrame(animate)\r\n    } else {\r\n      isAnimating.value = false\r\n    }\r\n  }\r\n\r\n  requestAnimationFrame(animate)\r\n}\r\n\r\n// eslint-disable-next-line vue/no-dupe-keys\r\nfunction onSelect(val: PickerValue) {\r\n  props.onSelect(val, props.index)\r\n}\r\n\r\n// Measure item height\r\nonMounted(async () => {\r\n  await nextTick()\r\n  const itemHeightMeasure = itemHeightMeasureRef.value\r\n  if (!itemHeightMeasure) return\r\n  itemHeight.value = measureCSSLength(\r\n    window.getComputedStyle(itemHeightMeasure).getPropertyValue('height'),\r\n  )\r\n\r\n  // 初始化位置 - 确保在测量完高度后立即设置正确位置\r\n  syncPositionWithValue()\r\n  // 初始化单位的位置\r\n  initUnitStyle()\r\n})\r\n\r\n// 同步位置与 value 的函数\r\nfunction syncPositionWithValue() {\r\n  if (props.value === null || props.column.length === 0) return\r\n\r\n  const targetIndex = props.column.findIndex((item) => item.value === props.value)\r\n  if (targetIndex >= 0) {\r\n    const finalPosition = targetIndex * -itemHeight.value\r\n    // 立即设置位置，不使用动画\r\n    y.value = finalPosition\r\n  }\r\n}\r\n\r\n// Watch value changes\r\nwatch(\r\n  () => [props.value, props.column],\r\n  () => {\r\n    if (draggingRef.value) return\r\n    if (props.value === null) return\r\n    const targetIndex = props.column.findIndex((item) => item.value === props.value)\r\n    if (targetIndex < 0) return\r\n    const finalPosition = targetIndex * -itemHeight.value\r\n\r\n    // 如果位置差异很大或者是初始状态，立即设置位置\r\n    const shouldAnimate = Math.abs(y.value - finalPosition) < itemHeight.value * 3 && y.value !== 0\r\n    animateToPosition(finalPosition, !shouldAnimate)\r\n  },\r\n  { immediate: true, flush: 'post' },\r\n)\r\n\r\n// Watch column changes to validate current value\r\nwatch(\r\n  () => props.column,\r\n  (newColumn, oldColumn) => {\r\n    if (newColumn.length === 0) {\r\n      if (props.value !== null) {\r\n        onSelect(null)\r\n      }\r\n      return\r\n    }\r\n\r\n    // 如果是首次加载或列数据变化，同步位置\r\n    if (!oldColumn || oldColumn.length === 0) {\r\n      nextTick(() => {\r\n        syncPositionWithValue()\r\n      })\r\n      return\r\n    }\r\n\r\n    if (!newColumn.some((item) => item.value === props.value)) {\r\n      const firstItem = newColumn[0]\r\n      if (firstItem) {\r\n        onSelect(firstItem.value)\r\n      }\r\n    }\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\n// 监听 itemHeight 变化，重新同步位置\r\nwatch(itemHeight, () => {\r\n  if (itemHeight.value > 0) {\r\n    syncPositionWithValue()\r\n  }\r\n})\r\n\r\nfunction scrollSelect(index: number) {\r\n  const finalPosition = index * -itemHeight.value\r\n  animateToPosition(finalPosition)\r\n  const item = props.column[index]\r\n  if (!item) return\r\n  onSelect(item.value)\r\n}\r\n\r\nfunction handleClick(index: number) {\r\n  draggingRef.value = false\r\n  scrollSelect(index)\r\n}\r\n\r\n// Gesture handlers\r\ntype GestureState = {\r\n  direction: number\r\n  distance: number\r\n  velocity: number\r\n  offset: number\r\n  last: boolean\r\n}\r\n\r\nfunction handleGestureState(data: {\r\n  deltaY: number\r\n  velocityY: number\r\n  offsetY: number\r\n  last: boolean\r\n}): GestureState {\r\n  return {\r\n    direction: data.deltaY > 0 ? 1 : -1,\r\n    distance: Math.abs(data.deltaY),\r\n    velocity: Math.abs(data.velocityY),\r\n    offset: data.offsetY,\r\n    last: data.last,\r\n  }\r\n}\r\n\r\nfunction handleDrag(state: GestureState) {\r\n  draggingRef.value = true\r\n  const min = -((props.column.length - 1) * itemHeight.value)\r\n  const max = 0\r\n  const { direction, last, velocity, offset } = state\r\n\r\n  if (last) {\r\n    draggingRef.value = false\r\n\r\n    const position = offset + velocity * direction * 50\r\n    const boundNum = bound(position, min, max)\r\n    const targetIndex = -Math.round(boundNum / itemHeight.value)\r\n\r\n    scrollSelect(targetIndex)\r\n  } else {\r\n    const position = offset\r\n\r\n    y.value = rubberbandIfOutOfBounds(position, min, max, itemHeight.value * 50, 0.2)\r\n  }\r\n}\r\n\r\nfunction handleWheel(state: GestureState) {\r\n  draggingRef.value = true\r\n  const min = -((props.column.length - 1) * itemHeight.value)\r\n  const max = 0\r\n  const { direction, last, velocity, distance } = state\r\n  const wheelDir = -direction // 取反\r\n  const scrollY = y.value\r\n\r\n  if (last) {\r\n    draggingRef.value = false\r\n\r\n    const speed = velocity * wheelDir * 50\r\n    const position = scrollY + distance * wheelDir + speed\r\n    const boundNum = bound(position, min, max)\r\n    const targetIndex = -Math.round(boundNum / itemHeight.value)\r\n\r\n    scrollSelect(targetIndex)\r\n  } else {\r\n    const position = scrollY + distance * wheelDir\r\n\r\n    y.value = rubberbandIfOutOfBounds(position, min, max, itemHeight.value * 50, 0.2)\r\n  }\r\n}\r\n\r\n// Touch and mouse event handlers\r\nlet isDragging = false\r\nlet startY = 0\r\nlet startTouchY = 0\r\nlet lastTouchY = 0\r\nlet startTime = 0\r\nlet velocityTracker: Array<{ time: number; y: number }> = []\r\n\r\nfunction handleTouchStart(e: TouchEvent) {\r\n  e.stopPropagation()\r\n  isDragging = true\r\n  startY = y.value\r\n  startTouchY = e.touches[0].clientY\r\n  lastTouchY = startTouchY\r\n  startTime = performance.now()\r\n  velocityTracker = [{ time: startTime, y: startTouchY }]\r\n}\r\n\r\nfunction handleTouchMove(e: TouchEvent) {\r\n  if (!isDragging) return\r\n  e.stopPropagation()\r\n\r\n  const currentY = e.touches[0].clientY\r\n  const deltaY = currentY - lastTouchY\r\n  const totalDelta = currentY - startTouchY\r\n  const currentTime = performance.now()\r\n\r\n  // Update velocity tracker\r\n  velocityTracker.push({ time: currentTime, y: currentY })\r\n  if (velocityTracker.length > 5) {\r\n    velocityTracker.shift()\r\n  }\r\n\r\n  lastTouchY = currentY\r\n\r\n  const state = handleGestureState({\r\n    deltaY,\r\n    velocityY: calculateVelocity(),\r\n    offsetY: startY + totalDelta,\r\n    last: false,\r\n  })\r\n\r\n  handleDrag(state)\r\n}\r\n\r\nfunction handleTouchEnd(e: TouchEvent) {\r\n  if (!isDragging) return\r\n  e.stopPropagation()\r\n  isDragging = false\r\n\r\n  const velocity = calculateVelocity()\r\n  const totalDelta = lastTouchY - startTouchY\r\n\r\n  const state = handleGestureState({\r\n    deltaY: totalDelta,\r\n    velocityY: velocity,\r\n    offsetY: startY + totalDelta,\r\n    last: true,\r\n  })\r\n\r\n  handleDrag(state)\r\n}\r\n\r\nfunction calculateVelocity(): number {\r\n  if (velocityTracker.length < 2) return 0\r\n\r\n  const recent = velocityTracker[velocityTracker.length - 1]\r\n  const previous = velocityTracker[velocityTracker.length - 2]\r\n  const timeDiff = recent.time - previous.time\r\n  const yDiff = recent.y - previous.y\r\n\r\n  return timeDiff > 0 ? yDiff / timeDiff : 0\r\n}\r\n\r\n// Wheel event handler\r\nfunction handleWheelEvent(e: WheelEvent) {\r\n  if (!props.mouseWheel) return\r\n  e.stopPropagation()\r\n  e.preventDefault()\r\n\r\n  const deltaY = e.deltaY\r\n  const velocity = Math.abs(deltaY) / 10 // Normalize velocity\r\n\r\n  const state = handleGestureState({\r\n    deltaY,\r\n    velocityY: velocity,\r\n    offsetY: y.value,\r\n    last: true, // Treat wheel events as immediate\r\n  })\r\n\r\n  handleWheel(state)\r\n}\r\n\r\n// Setup event listeners\r\nonMounted(() => {\r\n  const root = rootRef.value\r\n  if (!root) return\r\n\r\n  // Touch events\r\n  root.addEventListener('touchstart', handleTouchStart, { passive: false })\r\n  root.addEventListener('touchmove', handleTouchMove, { passive: false })\r\n  root.addEventListener('touchend', handleTouchEnd, { passive: false })\r\n\r\n  // Mouse wheel events (if enabled)\r\n  if (props.mouseWheel) {\r\n    root.addEventListener('wheel', handleWheelEvent, supportsPassive ? { passive: false } : false)\r\n  }\r\n})\r\n\r\n// Selected index for accessibility\r\nconst selectedIndex = computed(() => {\r\n  return props.column.findIndex((item) => item.value === props.value)\r\n})\r\n\r\nfunction renderAccessible() {\r\n  const index = selectedIndex.value\r\n  if (index === -1) return null\r\n\r\n  const current = props.column[index]\r\n  const previousIndex = index - 1\r\n  const nextIndex = index + 1\r\n  const previous = props.column[previousIndex]\r\n  const next = props.column[nextIndex]\r\n\r\n  return h('div', { class: `${classPrefix}-column-accessible` }, [\r\n    h(\r\n      'div',\r\n      {\r\n        class: `${classPrefix}-column-accessible-current`,\r\n        role: 'button',\r\n        'aria-label': current ? `当前选择的是：${current.label}` : '当前未选择',\r\n      },\r\n      '-',\r\n    ),\r\n    h(\r\n      'div',\r\n      {\r\n        class: `${classPrefix}-column-accessible-button`,\r\n        onClick: () => {\r\n          if (!previous) return\r\n          scrollSelect(previousIndex)\r\n        },\r\n        role: previous ? 'button' : 'text',\r\n        'aria-label': !previous ? '没有上一项' : `选择上一项：${previous.label}`,\r\n      },\r\n      '-',\r\n    ),\r\n    h(\r\n      'div',\r\n      {\r\n        class: `${classPrefix}-column-accessible-button`,\r\n        onClick: () => {\r\n          if (!next) return\r\n          scrollSelect(nextIndex)\r\n        },\r\n        role: next ? 'button' : 'text',\r\n        'aria-label': !next ? '没有下一项' : `选择下一项：${next.label}`,\r\n      },\r\n      '-',\r\n    ),\r\n  ])\r\n}\r\n</script>\r\n","export function withCache<T>(generate: () => T) {\n  let cache: T | null = null\n  return () => {\n    if (cache === null) {\n      cache = generate()\n    }\n    return cache\n  }\n}\n","import { computed, ref, watch, type ComputedRef } from 'vue'\r\nimport { withCache } from '../../utils/with-cache'\r\nimport type { PickerValue, PickerValueExtend, PickerViewProps } from './types'\r\n\r\nexport function generateColumnsExtend(rawColumns: PickerViewProps['columns'], val: PickerValue[]) {\r\n  const columns = withCache(() => {\r\n    const c = typeof rawColumns === 'function' ? rawColumns(val) : rawColumns\r\n    return c.map((column) =>\r\n      column.map((item) =>\r\n        typeof item === 'string'\r\n          ? {\r\n              label: item,\r\n              value: item,\r\n            }\r\n          : item,\r\n      ),\r\n    )\r\n  })\r\n  const items = withCache(() => {\r\n    return val.map((v, index) => {\r\n      const column = columns()[index]\r\n      if (!column) return null\r\n      return column.find((item) => item.value === v) ?? null\r\n    })\r\n  })\r\n  const extend: PickerValueExtend = {\r\n    get columns() {\r\n      return columns()\r\n    },\r\n    get items() {\r\n      return items()\r\n    },\r\n  }\r\n  return extend\r\n}\r\n\r\nexport function useColumnsExtend(\r\n  rawColumns: ComputedRef<PickerViewProps['columns']> | PickerViewProps['columns'],\r\n  value: ComputedRef<PickerValue[]> | PickerValue[],\r\n): ComputedRef<PickerValueExtend> {\r\n  let stored: PickerValueExtend = { columns: [], items: [] }\r\n  return computed(() => {\r\n    const rawColumnsValue =\r\n      typeof rawColumns === 'function' || Array.isArray(rawColumns) ? rawColumns : rawColumns.value\r\n    const valueValue = Array.isArray(value) ? value : value.value\r\n    const temp = generateColumnsExtend(rawColumnsValue, valueValue)\r\n    if (temp.items.length && temp.items.every((item) => item !== null)) {\r\n      stored = temp\r\n    } else if (!stored.columns.length) {\r\n      stored = temp\r\n    } else {\r\n      stored = {\r\n        columns: temp.columns,\r\n        items: stored.items,\r\n      }\r\n    }\r\n    return stored\r\n  })\r\n}\r\n","import type { PickerColumnItem } from './types'\r\n\r\nexport const defaultRenderLabel = (item: PickerColumnItem) => item.label\r\n","<template>\r\n  <div :class=\"classPrefix\" :style=\"style\">\r\n    <template v-if=\"loading\">\r\n      <component :is=\"props.loadingContent\" v-if=\"typeof props.loadingContent === 'object'\" />\r\n      <div v-else-if=\"props.loadingContent\" :class=\"`${classPrefix}-loading-content`\">\r\n        {{ props.loadingContent }}\r\n      </div>\r\n      <div v-else :class=\"`${classPrefix}-loading-content`\">\r\n        <SpinLoading />\r\n      </div>\r\n    </template>\r\n    <template v-else-if=\"columns.length && columns[0].length\">\r\n      <Wheel\r\n        v-for=\"(column, index) in columns\"\r\n        :key=\"index\"\r\n        :index=\"index\"\r\n        :column=\"column\"\r\n        :value=\"innerValue[index]\"\r\n        :on-select=\"handleSelect\"\r\n        :render-label=\"props.renderLabel || defaultRenderLabel\"\r\n        :mouse-wheel=\"mouseWheel\"\r\n        :unit=\"props.units && props.units.length > index ? props.units[index] : undefined\"\r\n      />\r\n      <div :class=\"`${classPrefix}-mask`\">\r\n        <div :class=\"`${classPrefix}-mask-top`\" />\r\n        <div :class=\"`${classPrefix}-mask-middle`\" />\r\n        <div :class=\"`${classPrefix}-mask-bottom`\" />\r\n      </div>\r\n    </template>\r\n    <template v-else>\r\n      <slot name=\"empty\"></slot>\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport SpinLoading from '../spin-loading/index.vue'\r\nimport Wheel from './wheel.vue'\r\nimport { useColumnsExtend } from './columns-extend'\r\nimport { defaultRenderLabel } from './picker-utils'\r\nimport type { PickerValue, PickerValueExtend, PickerViewProps } from './types'\r\n\r\nconst classPrefix = 'adm-picker-view'\r\n\r\nconst props = withDefaults(defineProps<PickerViewProps>(), {\r\n  defaultValue: () => [],\r\n  mouseWheel: false,\r\n  loading: false,\r\n  value: undefined,\r\n  units: undefined,\r\n})\r\n\r\n// Define emits\r\nconst emit = defineEmits<{\r\n  change: [value: PickerValue[], extend: PickerValueExtend]\r\n}>()\r\n\r\n// Internal state\r\nconst innerValue = ref<PickerValue[]>(props.value === undefined ? props.defaultValue : props.value)\r\n// Sync `value` to `innerValue`\r\nwatch(\r\n  () => props.value,\r\n  (newValue) => {\r\n    if (newValue === undefined) return // Uncontrolled mode\r\n    if (newValue === innerValue.value) return\r\n    innerValue.value = newValue\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\n// Additional sync with timeout (like React version)\r\nwatch(\r\n  () => props.value,\r\n  (newValue) => {\r\n    if (newValue === innerValue.value) return\r\n    const timeout = window.setTimeout(() => {\r\n      if (props.value !== undefined && props.value !== innerValue.value) {\r\n        innerValue.value = props.value\r\n      }\r\n    }, 1000)\r\n    return () => {\r\n      window.clearTimeout(timeout)\r\n    }\r\n  },\r\n)\r\n\r\n// Get columns extend\r\nconst extend = useColumnsExtend(\r\n  computed(() => props.columns),\r\n  computed(() => innerValue.value),\r\n)\r\n\r\nconst columns = computed(() => extend.value.columns)\r\n\r\n// Watch inner value changes and emit\r\nlet debounceTimer: number | null = null\r\nwatch(\r\n  () => innerValue.value,\r\n  (newValue) => {\r\n    if (props.value === newValue) return\r\n\r\n    // Clear previous timer\r\n    if (debounceTimer) {\r\n      clearTimeout(debounceTimer)\r\n    }\r\n\r\n    // Set new timer (debounce with wait: 0, leading: false, trailing: true)\r\n    debounceTimer = window.setTimeout(() => {\r\n      // fix: change 二次触发\r\n      // props.onChange?.(newValue, extend.value)\r\n      emit('change', newValue, extend.value)\r\n    }, 0)\r\n  },\r\n  { flush: 'post' },\r\n)\r\n\r\n// Handle column selection\r\nfunction handleSelect(val: PickerValue, index: number) {\r\n  const next = [...innerValue.value]\r\n  next[index] = val\r\n  innerValue.value = next\r\n}\r\n\r\n// Expose methods if needed\r\ndefineExpose({\r\n  // Add any methods that need to be exposed\r\n})\r\n</script>\r\n","<!-- Vue 3 版本的 Mask 组件 (完整的 SFC 格式) -->\r\n<template>\r\n  <!-- 使用条件渲染组件包装器 -->\r\n  <transition\r\n    name=\"mask-fade\"\r\n    @enter=\"handleEnter\"\r\n    @leave=\"handleLeave\"\r\n    @after-enter=\"handleAfterEnter\"\r\n    @after-leave=\"handleAfterLeave\"\r\n  >\r\n    <teleport :to=\"getContainer\" :disabled=\"!getContainer\">\r\n      <div\r\n        v-show=\"visible\"\r\n        ref=\"maskRef\"\r\n        :class=\"maskClasses\"\r\n        :style=\"maskStyle\"\r\n        aria-hidden=\"true\"\r\n        @click=\"handleMaskClick\"\r\n        v-bind=\"$attrs\"\r\n      >\r\n        <!-- 无障碍访问按钮 -->\r\n        <div\r\n          v-if=\"onMaskClick\"\r\n          :class=\"`${classPrefix}-aria-button`\"\r\n          role=\"button\"\r\n          :aria-label=\"maskAriaLabel\"\r\n          @click=\"onMaskClick\"\r\n        />\r\n        <!-- 内容区域 -->\r\n        <div :class=\"`${classPrefix}-content`\">\r\n          <slot />\r\n        </div>\r\n      </div>\r\n    </teleport>\r\n  </transition>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch, onUnmounted } from 'vue'\r\n\r\n// 接口定义\r\ninterface MaskProps {\r\n  visible?: boolean\r\n  destroyOnClose?: boolean\r\n  forceRender?: boolean\r\n  disableBodyScroll?: boolean\r\n  color?: 'white' | 'black' | string\r\n  opacity?: 'default' | 'thin' | 'thick' | number\r\n  getContainer?: string | HTMLElement | null\r\n  afterShow?: () => void\r\n  afterClose?: () => void\r\n  stopPropagation?: string[]\r\n  classList?: string[]\r\n  zIndex?: number\r\n  onMaskClick?: (event: MouseEvent) => void\r\n}\r\n\r\ninterface MaskEmits {\r\n  (e: 'mask-click', event: MouseEvent): void\r\n  (e: 'update:visible', visible: boolean): void\r\n}\r\n\r\n// Props 定义\r\nconst props = withDefaults(defineProps<MaskProps>(), {\r\n  visible: true,\r\n  destroyOnClose: false,\r\n  forceRender: false,\r\n  color: 'black',\r\n  opacity: 'default',\r\n  disableBodyScroll: true,\r\n  getContainer: null,\r\n  stopPropagation: () => ['click'],\r\n  classList: () => [],\r\n})\r\n\r\n// Emits 定义\r\nconst emit = defineEmits<MaskEmits>()\r\n\r\n// 常量\r\nconst classPrefix = 'adm-mask'\r\n\r\nconst opacityRecord = {\r\n  default: 0.55,\r\n  thin: 0.35,\r\n  thick: 0.75,\r\n} as const\r\n\r\nconst colorRecord: Record<string, string> = {\r\n  black: '0, 0, 0',\r\n  white: '255, 255, 255',\r\n}\r\n\r\n// 响应式数据\r\nconst maskRef = ref<HTMLDivElement>()\r\nconst isTransitioning = ref(false)\r\n\r\n// 计算属性\r\nconst background = computed(() => {\r\n  const opacity =\r\n    typeof props.opacity === 'number'\r\n      ? props.opacity\r\n      : (opacityRecord[props.opacity as keyof typeof opacityRecord] ?? props.opacity)\r\n  const rgb = colorRecord[props.color]\r\n  return rgb ? `rgba(${rgb}, ${opacity})` : props.color\r\n})\r\n\r\nconst maskClasses = computed(() => [classPrefix, ...props.classList])\r\n\r\nconst maskStyle = computed(() => ({\r\n  background: background.value,\r\n  zIndex: props.zIndex,\r\n  position: 'fixed' as const,\r\n  top: 0,\r\n  left: 0,\r\n  width: '100%',\r\n  height: '100%',\r\n}))\r\n\r\nconst maskAriaLabel = computed(() => '遮罩层') // 实际项目中应该从 i18n 获取\r\n\r\n// 滚动锁定功能\r\nconst lockScroll = () => {\r\n  if (props.disableBodyScroll) {\r\n    document.body.style.overflow = 'hidden'\r\n  }\r\n}\r\n\r\nconst unlockScroll = () => {\r\n  if (props.disableBodyScroll) {\r\n    document.body.style.overflow = ''\r\n  }\r\n}\r\n\r\n// 事件处理\r\nconst handleMaskClick = (e: MouseEvent) => {\r\n  if (e.target === e.currentTarget) {\r\n    emit('mask-click', e)\r\n    props.onMaskClick?.(e)\r\n  }\r\n}\r\n\r\n// 动画生命周期处理\r\nconst handleEnter = () => {\r\n  isTransitioning.value = true\r\n  lockScroll()\r\n}\r\n\r\nconst handleLeave = () => {\r\n  isTransitioning.value = true\r\n}\r\n\r\nconst handleAfterEnter = () => {\r\n  isTransitioning.value = false\r\n  props.afterShow?.()\r\n}\r\n\r\nconst handleAfterLeave = () => {\r\n  isTransitioning.value = false\r\n  unlockScroll()\r\n  props.afterClose?.()\r\n}\r\n\r\n// 监听器\r\nwatch(\r\n  () => props.visible,\r\n  (newVisible) => {\r\n    if (newVisible) {\r\n      lockScroll()\r\n    } else {\r\n      unlockScroll()\r\n    }\r\n  },\r\n)\r\n\r\n// 生命周期\r\nonUnmounted(() => {\r\n  unlockScroll()\r\n})\r\n\r\n// 暴露给模板的方法和数据\r\ndefineExpose({\r\n  maskRef,\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n\r\n.mask-fade-enter-active {\r\n  transition: opacity 0.2s ease-out;\r\n}\r\n\r\n.mask-fade-leave-active {\r\n  transition: opacity 0.2s ease-in;\r\n}\r\n\r\n.mask-fade-enter-from,\r\n.mask-fade-leave-to {\r\n  opacity: 0;\r\n}\r\n\r\n.mask-fade-enter-to,\r\n.mask-fade-leave-from {\r\n  opacity: 1;\r\n}\r\n</style>\r\n\r\n<!-- \r\n使用示例:\r\n\r\n<template>\r\n  <div>\r\n    <button @click=\"showMask = true\">显示遮罩</button>\r\n    \r\n    <Mask \r\n      v-model:visible=\"showMask\"\r\n      :disable-body-scroll=\"true\"\r\n      color=\"black\"\r\n      opacity=\"default\"\r\n      @mask-click=\"handleMaskClick\"\r\n    >\r\n      <div class=\"modal-content\">\r\n        <h2>这是模态框内容</h2>\r\n        <button @click=\"showMask = false\">关闭</button>\r\n      </div>\r\n    </Mask>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref } from 'vue'\r\nimport Mask from './components/Mask.vue'\r\n\r\nconst showMask = ref(false)\r\n\r\nconst handleMaskClick = () => {\r\n  showMask.value = false\r\n}\r\n</script>\r\n-->\r\n","import type { CSSProperties, Component } from 'vue'\r\nimport { CloseOutline } from 'ant-mobile-icons-vue3'\r\n\r\n// 内容类型定义\r\n// 获取容器类型定义\r\nexport type GetContainer = string | HTMLElement | (() => HTMLElement) | null\r\n\r\n// 事件传播类型定义\r\nexport type PropagationEvent = 'click' | 'touchstart' | 'touchend' | 'touchmove'\r\n\r\nexport interface PopupBaseProps {\r\n  afterClose?: () => void\r\n  afterShow?: () => void\r\n  bodyClassName?: string\r\n  bodyStyle?: CSSProperties | undefined\r\n  closeOnMaskClick?: boolean\r\n  closeIcon?: Component\r\n  destroyOnClose?: boolean\r\n  disableBodyScroll?: boolean\r\n  forceRender?: boolean\r\n  getContainer?: GetContainer\r\n  mask?: boolean\r\n  maskClassName?: string\r\n  maskStyle?: CSSProperties\r\n  onClick?: () => void\r\n  onClose?: () => void\r\n  onMaskClick?: () => void\r\n  showCloseButton?: boolean\r\n  stopPropagation?: PropagationEvent[]\r\n  visible?: boolean\r\n}\r\n\r\nexport const defaultPopupBaseProps = {\r\n  visible: false,\r\n  closeOnMaskClick: true, // 修改为 true，默认点击遮罩关闭\r\n  destroyOnClose: false,\r\n  disableBodyScroll: true,\r\n  forceRender: false,\r\n  getContainer: null,\r\n  mask: true,\r\n  showCloseButton: false,\r\n  stopPropagation: () => ['click'] as PropagationEvent[],\r\n  bodyStyle: () => ({}) as CSSProperties,\r\n  maskStyle: () => ({}) as CSSProperties,\r\n  bodyClassName: '',\r\n  maskClassName: '',\r\n  closeIcon: CloseOutline, // 设置默认的关闭图标为 CloseOutline\r\n}\r\n","<template>\r\n  <Teleport :to=\"containerElement\" :disabled=\"!containerElement\">\r\n    <div v-if=\"shouldRender\" :class=\"classPrefix\" :style=\"wrapperStyle\" @click=\"handleClick\">\r\n      <!-- 遮罩 -->\r\n      <Mask\r\n        v-if=\"mask\"\r\n        :visible=\"maskVisible\"\r\n        :force-render=\"forceRender\"\r\n        :destroy-on-close=\"destroyOnClose\"\r\n        @mask-click=\"handleMaskClick\"\r\n        :style=\"maskStyle\"\r\n        :class=\"maskClassName\"\r\n        :disable-body-scroll=\"false\"\r\n        :stop-propagation=\"stopPropagation\"\r\n      />\r\n\r\n      <!-- 弹窗主体 -->\r\n      <div ref=\"popupRef\" :class=\"bodyClass\" :style=\"animatedBodyStyle\" v-touch:swipe=\"handleSwipe\">\r\n        <!-- 关闭按钮 -->\r\n        <a\r\n          v-if=\"showCloseButton\"\r\n          :class=\"closeButtonClass\"\r\n          @click=\"handleCloseClick\"\r\n          role=\"button\"\r\n          :aria-label=\"locale.common.close\"\r\n        >\r\n          <component :is=\"closeIcon\" />\r\n        </a>\r\n\r\n        <!-- 内容插槽 -->\r\n        <slot />\r\n      </div>\r\n    </div>\r\n  </Teleport>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, nextTick, ref, watch, type CSSProperties } from 'vue'\r\nimport { CloseOutline } from 'ant-mobile-icons-vue3'\r\nimport Mask from '../mask/index.vue'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport { defaultPopupBaseProps, type PopupBaseProps } from './popup-base-props.ts'\r\n\r\nconst classPrefix = 'adm-popup'\r\n\r\nexport interface PopupProps extends PopupBaseProps {\r\n  // Popup 特有属性\r\n  position?: 'bottom' | 'top' | 'left' | 'right'\r\n  closeOnSwipe?: boolean\r\n  // NativeProps\r\n  style?: CSSProperties\r\n  className?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<PopupProps>(), {\r\n  // 现在可以正常使用 defaultPopupBaseProps\r\n  ...defaultPopupBaseProps,\r\n  position: 'bottom',\r\n  closeOnSwipe: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  close: []\r\n  maskClick: [event: MouseEvent]\r\n  click: [event: MouseEvent]\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  [key: string]: any\r\n}>()\r\n\r\n// 获取配置\r\nconst { locale, popup: componentConfig = {} } = useConfig()\r\n\r\n// 容器元素和关闭图标\r\nconst containerElement = computed(() => {\r\n  if (!props.getContainer) return document.body\r\n  if (typeof props.getContainer === 'string') {\r\n    return document.querySelector(props.getContainer) || document.body\r\n  }\r\n  if (typeof props.getContainer === 'function') {\r\n    return props.getContainer()\r\n  }\r\n  return props.getContainer\r\n})\r\n\r\nconst closeIcon = computed(() => {\r\n  return props.closeIcon || componentConfig.closeIcon || CloseOutline\r\n})\r\n\r\n// 动画状态\r\nconst percent = ref(100)\r\nconst active = ref(false)\r\nconst maskVisible = ref(false) // 改为独立的 ref 状态\r\n\r\n// DOM 引用\r\nconst popupRef = ref<HTMLDivElement | null>(null)\r\n\r\n// 是否应该渲染\r\nconst shouldRender = computed(() => {\r\n  return active.value || props.forceRender\r\n})\r\n\r\n// 样式类名\r\nconst bodyClass = computed(() => {\r\n  const classes = [`${classPrefix}-body`, `${classPrefix}-body-position-${props.position}`]\r\n  if (props.bodyClassName) classes.push(props.bodyClassName)\r\n  return classes\r\n})\r\n\r\nconst closeButtonClass = computed(() => {\r\n  return `${classPrefix}-close-icon adm-plain-anchor`\r\n})\r\n\r\n// 包装器样式\r\nconst wrapperStyle = computed((): CSSProperties => {\r\n  return {\r\n    display: active.value ? undefined : 'none',\r\n    touchAction: ['top', 'bottom'].includes(props.position) ? 'none' : 'auto',\r\n    ...props.style,\r\n  }\r\n})\r\n\r\n// 动画主体样式\r\nconst animatedBodyStyle = computed((): CSSProperties => {\r\n  const baseStyle: CSSProperties = {\r\n    ...props.bodyStyle,\r\n    pointerEvents: percent.value === 0 ? 'unset' : 'none',\r\n  }\r\n\r\n  // 根据位置计算变换\r\n  let transform = 'none'\r\n  if (props.position === 'bottom') {\r\n    transform = `translate(0, ${percent.value}%)`\r\n  } else if (props.position === 'top') {\r\n    transform = `translate(0, -${percent.value}%)`\r\n  } else if (props.position === 'left') {\r\n    transform = `translate(-${percent.value}%, 0)`\r\n  } else if (props.position === 'right') {\r\n    transform = `translate(${percent.value}%, 0)`\r\n  }\r\n\r\n  baseStyle.transform = transform\r\n  baseStyle.transition = 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)'\r\n\r\n  return baseStyle\r\n})\r\n\r\n// 动画控制\r\nconst startAnimation = () => {\r\n  if (props.visible) {\r\n    percent.value = 0\r\n  } else {\r\n    percent.value = 100\r\n  }\r\n}\r\n\r\n// 监听 visible 变化 - 修复动画触发\r\nwatch(\r\n  () => props.visible,\r\n  (newVisible) => {\r\n    if (newVisible) {\r\n      // 显示时先显示容器，设置初始动画状态\r\n      active.value = true\r\n      maskVisible.value = false\r\n      percent.value = 100 // 确保初始状态是隐藏的\r\n\r\n      // DOM 更新后再显示 mask 和执行动画\r\n      nextTick(() => {\r\n        maskVisible.value = true\r\n        // 延迟执行动画确保DOM更新完成\r\n        setTimeout(() => {\r\n          startAnimation()\r\n        }, 10)\r\n      })\r\n    } else {\r\n      // 关闭时先隐藏遮罩，执行内容关闭动画\r\n      maskVisible.value = false\r\n      startAnimation()\r\n\r\n      // 等待动画完成后再卸载组件\r\n      setTimeout(() => {\r\n        active.value = false\r\n        props.afterClose?.()\r\n      }, 300)\r\n    }\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\n// 动画完成回调\r\nwatch(\r\n  () => percent.value,\r\n  (newPercent) => {\r\n    if (newPercent === 0 && props.visible) {\r\n      props.afterShow?.()\r\n    }\r\n  },\r\n)\r\n\r\n// 事件处理\r\nconst handleClick = (event: MouseEvent) => {\r\n  emit('click', event)\r\n  props.onClick?.()\r\n}\r\n\r\nconst handleMaskClick = (event: MouseEvent) => {\r\n  emit('maskClick', event)\r\n  props.onMaskClick?.()\r\n  if (props.closeOnMaskClick) {\r\n    emit('close')\r\n    props.onClose?.()\r\n  }\r\n}\r\n\r\nconst handleCloseClick = () => {\r\n  emit('close')\r\n  props.onClose?.()\r\n}\r\n\r\n// 滑动手势处理\r\nconst handleSwipe = (direction: string) => {\r\n  if (!props.closeOnSwipe) return\r\n\r\n  const shouldClose =\r\n    (direction === 'down' && props.position === 'bottom') ||\r\n    (direction === 'up' && props.position === 'top')\r\n\r\n  if (shouldClose) {\r\n    emit('close')\r\n    props.onClose?.()\r\n  }\r\n}\r\n\r\n// 简化的触摸指令\r\nconst vTouch = {\r\n  mounted(el: HTMLElement, binding: { value: (direction: string) => void }) {\r\n    let startY = 0\r\n    let startX = 0\r\n\r\n    const handleTouchStart = (e: TouchEvent) => {\r\n      startY = e.touches[0].clientY\r\n      startX = e.touches[0].clientX\r\n    }\r\n\r\n    const handleTouchEnd = (e: TouchEvent) => {\r\n      const endY = e.changedTouches[0].clientY\r\n      const endX = e.changedTouches[0].clientX\r\n      const deltaY = endY - startY\r\n      const deltaX = endX - startX\r\n\r\n      // 判断滑动方向\r\n      if (Math.abs(deltaY) > Math.abs(deltaX) && Math.abs(deltaY) > 50) {\r\n        if (deltaY > 0) {\r\n          binding.value('down')\r\n        } else {\r\n          binding.value('up')\r\n        }\r\n      }\r\n    }\r\n\r\n    el.addEventListener('touchstart', handleTouchStart)\r\n    el.addEventListener('touchend', handleTouchEnd)\r\n\r\n    // 保存清理函数\r\n    ;(el as HTMLElement & { _touchCleanup?: () => void })._touchCleanup = () => {\r\n      el.removeEventListener('touchstart', handleTouchStart)\r\n      el.removeEventListener('touchend', handleTouchEnd)\r\n    }\r\n  },\r\n\r\n  beforeUnmount(el: HTMLElement) {\r\n    const elementWithCleanup = el as HTMLElement & { _touchCleanup?: () => void }\r\n    if (elementWithCleanup._touchCleanup) {\r\n      elementWithCleanup._touchCleanup()\r\n    }\r\n  },\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n@import './popup.less';\r\n</style>\r\n","<template>\r\n  <div\r\n    :class=\"[classPrefix, `${classPrefix}-position-${position}`, $attrs.class]\"\r\n    v-bind=\"$attrs\"\r\n  />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nconst classPrefix = 'adm-safe-area'\r\n\r\ninterface SafeAreaProps {\r\n  position: 'top' | 'bottom'\r\n}\r\n\r\ndefineProps<SafeAreaProps>()\r\n</script>\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n</style>\r\n","<template>\r\n  <Popup\r\n    :style=\"props.popupStyle\"\r\n    :className=\"classNames(`${classPrefix}-popup`, props.popupClassName)\"\r\n    :visible=\"currentVisible\"\r\n    position=\"bottom\"\r\n    :onMaskClick=\"handleMaskClick\"\r\n    :getContainer=\"props.getContainer\"\r\n    :destroyOnClose=\"props.destroyOnClose\"\r\n    :afterShow=\"props.afterShow\"\r\n    :afterClose=\"props.afterClose\"\r\n    :onClick=\"props.onClick\"\r\n    :forceRender=\"props.forceRender\"\r\n    :stopPropagation=\"props.stopPropagation\"\r\n  >\r\n    <div :class=\"[classPrefix, props.className]\" :style=\"mergedStyle\">\r\n      <div :class=\"`${classPrefix}-top`\" v-if=\"$slots.top\">\r\n        <slot name=\"top\"></slot>\r\n      </div>\r\n      <div :class=\"`${classPrefix}-header`\">\r\n        <a role=\"button\" :class=\"`${classPrefix}-header-button`\" @click=\"handleCancel\">\r\n          <slot name=\"cancelText\" :text=\"currentCancelText\">\r\n            {{ currentCancelText }}\r\n          </slot>\r\n        </a>\r\n        <div :class=\"`${classPrefix}-header-title`\">\r\n          <slot name=\"title\" :title=\"props.title\">\r\n            <component v-if=\"isVNode(props.title)\" :is=\"props.title\" />\r\n            <template v-else>{{ props.title }}</template>\r\n          </slot>\r\n        </div>\r\n        <a\r\n          role=\"button\"\r\n          :class=\"\r\n            classNames(\r\n              `${classPrefix}-header-button`,\r\n              props.loading && `${classPrefix}-header-button-disabled`,\r\n            )\r\n          \"\r\n          @click=\"handleConfirm\"\r\n          :aria-disabled=\"props.loading\"\r\n        >\r\n          <slot name=\"confirmText\" :text=\"currentConfirmText\">\r\n            {{ currentConfirmText }}\r\n          </slot>\r\n        </a>\r\n      </div>\r\n      <div :class=\"`${classPrefix}-body`\">\r\n        <PickerView\r\n          :loading=\"props.loading\"\r\n          :loadingContent=\"props.loadingContent\"\r\n          :columns=\"props.columns\"\r\n          :renderLabel=\"props.renderLabel\"\r\n          :value=\"innerPickerValue\"\r\n          :mouseWheel=\"props.mouseWheel\"\r\n          :units=\"props.units\"\r\n          @change=\"handlePickerChange\"\r\n        >\r\n          <template v-slot:empty v-if=\"$slots.empty\">\r\n            <slot name=\"empty\"></slot>\r\n          </template>\r\n        </PickerView>\r\n      </div>\r\n    </div>\r\n    <SafeArea position=\"bottom\" />\r\n  </Popup>\r\n\r\n  <!-- 渲染 children slot -->\r\n  <slot :items=\"extend.items\" :actions=\"actions\" />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport classNames from 'classnames'\r\nimport { computed, ref, watch, type CSSProperties, type VNode } from 'vue'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport type {\r\n  PickerColumn,\r\n  PickerColumnItem,\r\n  PickerValue,\r\n  PickerValueExtend,\r\n} from '../picker-view/index'\r\nimport { PickerView, defaultRenderLabel, useColumnsExtend } from '../picker-view/index'\r\nimport { generateColumnsExtend } from '../picker-view/columns-extend'\r\nimport Popup from '../popup/popup.vue'\r\nimport type { PopupProps } from '../popup/popup.vue'\r\nimport SafeArea from '../safe-area/index.vue'\r\n\r\nconst classPrefix = 'adm-picker'\r\n\r\nexport interface PickerActions {\r\n  open: () => void\r\n  close: () => void\r\n  toggle: () => void\r\n}\r\n\r\nexport interface PickerProps {\r\n  columns: PickerColumn[] | ((value: PickerValue[]) => PickerColumn[])\r\n  value?: PickerValue[]\r\n  defaultValue?: PickerValue[]\r\n  loading?: boolean\r\n  loadingContent?: VNode | string\r\n  onSelect?: (value: PickerValue[], extend: PickerValueExtend) => void\r\n  onConfirm?: (value: PickerValue[], extend: PickerValueExtend) => void\r\n  onCancel?: () => void\r\n  onClose?: () => void\r\n  closeOnMaskClick?: boolean\r\n  visible?: boolean\r\n  title?: VNode | string\r\n  confirmText?: VNode | string\r\n  cancelText?: VNode | string\r\n  renderLabel?: (item: PickerColumnItem) => VNode | string | number\r\n  mouseWheel?: boolean\r\n  popupClassName?: string\r\n  popupStyle?: CSSProperties\r\n  // 从 PopupProps 继承的属性\r\n  getContainer?: PopupProps['getContainer']\r\n  afterShow?: PopupProps['afterShow']\r\n  afterClose?: PopupProps['afterClose']\r\n  onClick?: PopupProps['onClick']\r\n  stopPropagation?: PopupProps['stopPropagation']\r\n  forceRender?: PopupProps['forceRender']\r\n  destroyOnClose?: PopupProps['destroyOnClose']\r\n  // NativeProps\r\n  className?: string\r\n  style?: CSSProperties\r\n  units?: string[]\r\n}\r\n\r\nconst props = withDefaults(defineProps<PickerProps>(), {\r\n  columns: () => [],\r\n  defaultValue: () => [],\r\n  value: undefined,\r\n  closeOnMaskClick: true,\r\n  renderLabel: defaultRenderLabel,\r\n  destroyOnClose: false,\r\n  forceRender: false,\r\n  loading: false,\r\n  mouseWheel: false,\r\n  visible: undefined,\r\n  className: '',\r\n  style: () => ({}),\r\n  popupClassName: '',\r\n  popupStyle: () => ({}),\r\n  stopPropagation: () => ['click'],\r\n  units: undefined,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:visible': [visible: boolean]\r\n  'update:value': [value: PickerValue[]]\r\n  select: [value: PickerValue[], extend: PickerValueExtend]\r\n  confirm: [value: PickerValue[], extend: PickerValueExtend]\r\n  cancel: []\r\n  close: []\r\n}>()\r\n\r\n// 使用 config\r\nconst { locale } = useConfig()\r\n\r\n// 计算 confirm 和 cancel 文本\r\nconst currentConfirmText = computed(() => props.confirmText ?? locale.common.confirm)\r\nconst currentCancelText = computed(() => props.cancelText ?? locale.common.cancel)\r\n\r\n// 可见性状态管理\r\nconst innerVisible = ref(props.visible ?? false)\r\nconst isControlled = computed(() => props.visible !== undefined)\r\n\r\nconst currentVisible = computed(() => (isControlled.value ? props.visible! : innerVisible.value))\r\n\r\nconst setVisible = (visible: boolean) => {\r\n  if (!isControlled.value) {\r\n    innerVisible.value = visible\r\n  }\r\n  emit('update:visible', visible)\r\n\r\n  if (visible === false) {\r\n    emit('close')\r\n    props.onClose?.()\r\n  }\r\n}\r\n\r\nconst tempValue = props.value ? props.value : props.defaultValue\r\n// 值状态管理\r\nconst innerValue = ref<PickerValue[]>([...tempValue])\r\nconst innerPickerValue = ref<PickerValue[]>([...tempValue])\r\nconst isValueControlled = computed(() => props.value !== undefined)\r\n\r\nconst currentValue = computed(() => (isValueControlled.value ? props.value! : innerValue.value))\r\n\r\nconst setValue = (value: PickerValue[], emitConfirm = false) => {\r\n  if (!isValueControlled.value) {\r\n    innerValue.value = [...value]\r\n  }\r\n\r\n  // 处理默认值\r\n  let defValue: PickerValue[] = value\r\n  if (defValue.length === 0 && props.columns.length) {\r\n    const columns = typeof props.columns === 'function' ? props.columns([]) : props.columns\r\n    defValue = columns.map((column: PickerColumn) => {\r\n      const target = column[0] as PickerColumnItem\r\n      if (typeof target === 'object') {\r\n        return target.value\r\n      } else {\r\n        return target as PickerValue\r\n      }\r\n    })\r\n  }\r\n\r\n  emit('update:value', defValue)\r\n\r\n  if (emitConfirm) {\r\n    const extend = generateColumnsExtend(props.columns, defValue)\r\n    emit('confirm', defValue, extend)\r\n    // props.onConfirm?.(value, extend)\r\n  }\r\n}\r\n\r\n// 监听 visible 变化，重置内部选择值\r\nwatch(\r\n  () => currentVisible.value,\r\n  (visible) => {\r\n    if (visible) {\r\n      if (currentValue.value.length) {\r\n        innerPickerValue.value = [...currentValue.value]\r\n      } else {\r\n        const first = props.columns.length ? (props.columns as PickerColumn[])[0] : []\r\n        const value = first?.length ? (first[0] as PickerColumnItem).value : null\r\n        innerPickerValue.value = value ? [value] : []\r\n      }\r\n    }\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\n// 监听 value 变化\r\nwatch(\r\n  () => currentValue.value,\r\n  (newValue) => {\r\n    innerPickerValue.value = [...newValue]\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\n// 使用 columns extend\r\nconst extend = useColumnsExtend(\r\n  computed(() => props.columns),\r\n  computed(() => currentValue.value),\r\n)\r\n\r\n// Actions\r\nconst actions: PickerActions = {\r\n  toggle: () => setVisible(!currentVisible.value),\r\n  open: () => {\r\n    setVisible(true)\r\n  },\r\n  close: () => setVisible(false),\r\n}\r\n\r\n// 事件处理\r\nconst handleMaskClick = () => {\r\n  if (!props.closeOnMaskClick) return\r\n  handleCancel()\r\n}\r\n\r\nconst handleCancel = () => {\r\n  emit('cancel')\r\n  props.onCancel?.()\r\n  setVisible(false)\r\n}\r\n\r\nconst judgeValueIsExist = () => {\r\n  if (!Array.isArray(props.columns)) return false\r\n  if (props.columns.length === 0) return false\r\n  if (innerPickerValue.value.length !== 1) return false\r\n  const primarys = props.columns[0]\r\n  let target = primarys.find(\r\n    (item) => (typeof item === 'object' ? item.value : item) === innerPickerValue.value[0],\r\n  ) as PickerColumnItem\r\n  if (target) return false\r\n  target = primarys[0] as PickerColumnItem\r\n  return [typeof target === 'object' ? target.value : target]\r\n}\r\n\r\nconst handleConfirm = () => {\r\n  if (props.loading) return\r\n  const jv = judgeValueIsExist()\r\n  const value = !!jv ? jv : innerPickerValue.value\r\n  setValue(value, true)\r\n  setVisible(false)\r\n}\r\n\r\nconst handlePickerChange = (value: PickerValue[], extend: PickerValueExtend) => {\r\n  innerPickerValue.value = value\r\n  if (currentVisible.value) {\r\n    emit('select', value, extend)\r\n    // props.onSelect?.(value, extend)\r\n  }\r\n}\r\n\r\n// 合并样式\r\nconst mergedStyle = computed(() => {\r\n  const baseStyle: Record<string, string | number> = {}\r\n\r\n  // 处理 CSS 变量\r\n  if (props.style) {\r\n    Object.assign(baseStyle, props.style)\r\n  }\r\n\r\n  return baseStyle\r\n})\r\n\r\n// 工具函数\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction isVNode(value: any): value is VNode {\r\n  return value && typeof value === 'object' && typeof value.type !== 'undefined'\r\n}\r\n\r\n// 暴露 actions 给父组件\r\ndefineExpose({\r\n  actions,\r\n  open: actions.open,\r\n  close: actions.close,\r\n  toggle: actions.toggle,\r\n})\r\n\r\ndefineOptions({\r\n  name: 'Picker',\r\n  inheritAttrs: false,\r\n})\r\n</script>\r\n\r\n<style>\r\n@import './picker.less';\r\n</style>\r\n","import { computed } from 'vue'\r\nimport type { PickerColumn, PickerValue } from '../picker-view'\r\n\r\nexport interface CascadePickerOption {\r\n  label: string\r\n  value: string\r\n  children?: CascadePickerOption[]\r\n}\r\n\r\nexport function useColumnsFn(options: CascadePickerOption[]) {\r\n  // 计算最大深度\r\n  const depth = computed(() => {\r\n    let maxDepth = 0\r\n    function traverse(options: CascadePickerOption[], currentDepth: number) {\r\n      if (currentDepth > maxDepth) maxDepth = currentDepth\r\n      const nextDepth = currentDepth + 1\r\n      options.forEach((option) => {\r\n        if (option.children) {\r\n          traverse(option.children, nextDepth)\r\n        }\r\n      })\r\n    }\r\n    traverse(options, 1)\r\n    return maxDepth\r\n  })\r\n\r\n  // 返回列生成函数\r\n  return (selected: PickerValue[]) => {\r\n    const columns: PickerColumn[] = []\r\n    let currentOptions = options\r\n    let i = 0\r\n\r\n    while (true) {\r\n      columns.push(\r\n        currentOptions.map((option) => ({\r\n          label: option.label,\r\n          value: option.value,\r\n        })),\r\n      )\r\n\r\n      const selectedValue = selected[i]\r\n      const targetOption = currentOptions.find((option) => option.value === selectedValue)\r\n\r\n      if (!targetOption || !targetOption.children) break\r\n\r\n      currentOptions = targetOption.children\r\n      i++\r\n    }\r\n\r\n    // 填充空列直到达到最大深度\r\n    while (i < depth.value - 1) {\r\n      columns.push([])\r\n      i++\r\n    }\r\n\r\n    return columns\r\n  }\r\n}\r\n\r\n// 计算级联选择器的最大深度\r\nexport function getOptionsDepth(options: CascadePickerOption[]): number {\r\n  let maxDepth = 0\r\n\r\n  function traverse(options: CascadePickerOption[], currentDepth: number) {\r\n    if (currentDepth > maxDepth) maxDepth = currentDepth\r\n    const nextDepth = currentDepth + 1\r\n    options.forEach((option) => {\r\n      if (option.children) {\r\n        traverse(option.children, nextDepth)\r\n      }\r\n    })\r\n  }\r\n\r\n  traverse(options, 1)\r\n  return maxDepth\r\n}\r\n\r\n// 根据值路径查找对应的选项\r\nexport function findOptionsByValues(\r\n  options: CascadePickerOption[],\r\n  values: PickerValue[],\r\n): (CascadePickerOption | null)[] {\r\n  const result: (CascadePickerOption | null)[] = []\r\n  let currentOptions = options\r\n\r\n  for (let i = 0; i < values.length; i++) {\r\n    const value = values[i]\r\n    const option = currentOptions.find((opt) => opt.value === value)\r\n\r\n    if (option) {\r\n      result.push(option)\r\n      if (option.children) {\r\n        currentOptions = option.children\r\n      } else {\r\n        break\r\n      }\r\n    } else {\r\n      result.push(null)\r\n      break\r\n    }\r\n  }\r\n\r\n  return result\r\n}\r\n\r\n// 获取某个选项的完整路径\r\nexport function getOptionPath(\r\n  options: CascadePickerOption[],\r\n  targetValue: string,\r\n): CascadePickerOption[] {\r\n  const path: CascadePickerOption[] = []\r\n\r\n  function traverse(options: CascadePickerOption[]): boolean {\r\n    for (const option of options) {\r\n      path.push(option)\r\n\r\n      if (option.value === targetValue) {\r\n        return true\r\n      }\r\n\r\n      if (option.children && traverse(option.children)) {\r\n        return true\r\n      }\r\n\r\n      path.pop()\r\n    }\r\n    return false\r\n  }\r\n\r\n  traverse(options)\r\n  return path\r\n}\r\n","<template>\r\n  <Picker ref=\"pickerRef\" v-bind=\"pickerProps\" :columns=\"columnsFn\" />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref } from 'vue'\r\nimport Picker from '../picker/picker.vue'\r\nimport type { PickerProps, PickerActions } from '../picker'\r\nimport { useColumnsFn, type CascadePickerOption } from './cascade-picker-utils'\r\n// import type { PickerValue, PickerValueExtend } from '../picker-view/index'\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\r\nexport interface CascadePickerActions extends PickerActions {}\r\n\r\nexport interface CascadePickerProps extends Omit<PickerProps, 'columns'> {\r\n  options: CascadePickerOption[]\r\n}\r\n\r\n// const emit = defineEmits<{\r\n//   'update:visible': [visible: boolean]\r\n//   'update:value': [value: PickerValue[]]\r\n//   select: [value: PickerValue[], extend: PickerValueExtend]\r\n//   confirm: [value: PickerValue[], extend: PickerValueExtend]\r\n//   cancel: []\r\n//   close: []\r\n// }>()\r\n\r\nconst props = defineProps<CascadePickerProps>()\r\n\r\n// 提取除了 options 之外的所有属性，传递给 Picker\r\nconst pickerProps = computed(() => {\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n  const { options, ...rest } = props\r\n  return rest\r\n})\r\n\r\n// 生成列函数\r\nconst columnsFn = computed(() => useColumnsFn(props.options))\r\n\r\n// Picker 组件引用\r\nconst pickerRef = ref<{ actions: PickerActions }>()\r\n\r\n// 暴露 actions 给父组件\r\nconst actions = computed<CascadePickerActions>(() => ({\r\n  open: () => pickerRef.value?.actions.open(),\r\n  close: () => pickerRef.value?.actions.close(),\r\n  toggle: () => pickerRef.value?.actions.toggle(),\r\n}))\r\n\r\ndefineExpose({\r\n  actions: actions.value,\r\n  open: actions.value.open,\r\n  close: actions.value.close,\r\n  toggle: actions.value.toggle,\r\n})\r\n</script>\r\n\r\n<style>\r\n/* CascadePicker 直接使用 Picker 的样式，无需额外样式 */\r\n</style>\r\n","import { createApp, h, type App } from 'vue'\r\nimport type { CascadePickerProps } from './cascade-picker.vue'\r\nimport type { PickerValue } from '../picker-view'\r\nimport CascadePicker from './cascade-picker.vue'\r\n\r\nexport function prompt(\r\n  props: Omit<CascadePickerProps, 'value' | 'visible'>,\r\n): Promise<PickerValue[] | null> {\r\n  return new Promise<PickerValue[] | null>((resolve) => {\r\n    // 创建容器元素\r\n    const container = document.createElement('div')\r\n    document.body.appendChild(container)\r\n\r\n    // 创建 Vue 应用实例\r\n    const app: App = createApp({\r\n      setup() {\r\n        return {\r\n          visible: true,\r\n          handleConfirm: (val: PickerValue[]) => {\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            props.onConfirm?.(val, {} as any)\r\n            resolve(val)\r\n            cleanup()\r\n          },\r\n          handleClose: () => {\r\n            props.onClose?.()\r\n            resolve(null)\r\n            cleanup()\r\n          },\r\n          handleAfterClose: () => {\r\n            props.afterClose?.()\r\n            cleanup()\r\n          },\r\n        }\r\n      },\r\n      render() {\r\n        return h(CascadePicker, {\r\n          ...props,\r\n          visible: this.visible,\r\n          onConfirm: this.handleConfirm,\r\n          onClose: this.handleClose,\r\n          afterClose: this.handleAfterClose,\r\n        })\r\n      },\r\n    })\r\n\r\n    // 清理函数\r\n    const cleanup = () => {\r\n      app.unmount()\r\n      if (container.parentNode) {\r\n        container.parentNode.removeChild(container)\r\n      }\r\n    }\r\n\r\n    // 挂载应用\r\n    app.mount(container)\r\n  })\r\n}\r\n","<template>\r\n  <PickerView v-bind=\"pickerProps\" :columns=\"columnFn\" />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport PickerView from '../picker-view/picker-view.vue'\r\nimport type { PickerViewProps } from '../picker-view/types'\r\nimport { useColumnsFn, type CascadePickerOption } from '../cascade-picker/cascade-picker-utils'\r\n\r\nexport interface CascadePickerViewProps extends Omit<PickerViewProps, 'columns'> {\r\n  options: CascadePickerOption[]\r\n}\r\n\r\nconst props = defineProps<CascadePickerViewProps>()\r\n\r\n// 提取除了 options 之外的所有属性，传递给 PickerView\r\nconst pickerProps = computed(() => {\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n  const { options, ...rest } = props\r\n  return rest\r\n})\r\n\r\n// 生成列函数 - 直接传入响应式的 props.options\r\nconst columnFn = computed(() => useColumnsFn(props.options))\r\n</script>\r\n\r\n<style>\r\n/* CascadePickerView 直接使用 PickerView 的样式，无需额外样式 */\r\n</style>\r\n","<template>\r\n  <div :class=\"[classPrefix, `${classPrefix}-${mode}`]\" ref=\"nativeElementRef\" :style=\"cssVars\">\r\n    <div v-if=\"header || $slots.header\" :class=\"`${classPrefix}-header`\">\r\n      <slot name=\"header\">\r\n        <component :is=\"renderHeader\" v-if=\"header\" />\r\n      </slot>\r\n    </div>\r\n    <div :class=\"`${classPrefix}-body`\">\r\n      <div :class=\"`${classPrefix}-body-inner`\">\r\n        <slot />\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, h, type CSSProperties, type VNode } from 'vue'\r\n\r\nconst classPrefix = 'adm-list'\r\n\r\nexport interface ListProps {\r\n  header?: string | VNode | (() => VNode)\r\n  mode?: 'default' | 'card'\r\n  // CSS 变量支持\r\n  activeBackgroundColor?: string\r\n  alignItems?: string\r\n  borderBottom?: string\r\n  borderInner?: string\r\n  borderTop?: string\r\n  extraMaxWidth?: string\r\n  fontSize?: string\r\n  headerFontSize?: string\r\n  paddingLeft?: string\r\n  paddingRight?: string\r\n  prefixPaddingRight?: string\r\n  prefixWidth?: string\r\n}\r\n\r\nexport interface ListRef {\r\n  nativeElement: HTMLDivElement | null\r\n}\r\n\r\nconst props = withDefaults(defineProps<ListProps>(), {\r\n  mode: 'default',\r\n})\r\n\r\n// 模板引用\r\nconst nativeElementRef = ref<HTMLDivElement>()\r\n\r\n// 渲染 header 内容\r\nconst renderHeader = computed(() => {\r\n  if (!props.header) return null\r\n\r\n  if (typeof props.header === 'function') {\r\n    return props.header()\r\n  }\r\n\r\n  if (typeof props.header === 'string') {\r\n    return h('span', props.header)\r\n  }\r\n\r\n  return props.header\r\n})\r\n\r\n// CSS 变量计算\r\nconst cssVars = computed<CSSProperties>(() => {\r\n  const vars: Record<string, string> = {}\r\n\r\n  if (props.activeBackgroundColor) {\r\n    vars['--active-background-color'] = props.activeBackgroundColor\r\n  }\r\n  if (props.alignItems) {\r\n    vars['--align-items'] = props.alignItems\r\n  }\r\n  if (props.borderBottom) {\r\n    vars['--border-bottom'] = props.borderBottom\r\n  }\r\n  if (props.borderInner) {\r\n    vars['--border-inner'] = props.borderInner\r\n  }\r\n  if (props.borderTop) {\r\n    vars['--border-top'] = props.borderTop\r\n  }\r\n  if (props.extraMaxWidth) {\r\n    vars['--extra-max-width'] = props.extraMaxWidth\r\n  }\r\n  if (props.fontSize) {\r\n    vars['--font-size'] = props.fontSize\r\n  }\r\n  if (props.headerFontSize) {\r\n    vars['--header-font-size'] = props.headerFontSize\r\n  }\r\n  if (props.paddingLeft) {\r\n    vars['--padding-left'] = props.paddingLeft\r\n  }\r\n  if (props.paddingRight) {\r\n    vars['--padding-right'] = props.paddingRight\r\n  }\r\n  if (props.prefixPaddingRight) {\r\n    vars['--prefix-padding-right'] = props.prefixPaddingRight\r\n  }\r\n  if (props.prefixWidth) {\r\n    vars['--prefix-width'] = props.prefixWidth\r\n  }\r\n\r\n  return vars\r\n})\r\n\r\n// 暴露实例方法和属性\r\ndefineExpose<ListRef>({\r\n  get nativeElement() {\r\n    return nativeElementRef.value || null\r\n  },\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.adm-list {\r\n  --header-font-size: var(--adm-font-size-7);\r\n  --prefix-width: 'auto';\r\n  --prefix-padding-right: 12px;\r\n  --align-items: center;\r\n  --active-background-color: var(--adm-color-border);\r\n  --border-inner: solid 1px var(--adm-color-border);\r\n  --border-top: solid 1px var(--adm-color-border);\r\n  --border-bottom: solid 1px var(--adm-color-border);\r\n  --padding-left: 12px;\r\n  --padding-right: 12px;\r\n  --font-size: var(--adm-font-size-9);\r\n  --extra-max-width: 70%;\r\n\r\n  &-header {\r\n    color: var(--adm-color-weak);\r\n    font-size: var(--header-font-size);\r\n    padding: 8px var(--padding-right) 8px var(--padding-left);\r\n  }\r\n  &-body {\r\n    background-color: var(--adm-color-background);\r\n    overflow: hidden;\r\n    font-size: var(--font-size);\r\n  }\r\n  &-body-inner {\r\n    margin-top: -1px;\r\n  }\r\n  &-default {\r\n    .adm-list-body {\r\n      border-top: var(--border-top);\r\n      border-bottom: var(--border-bottom);\r\n    }\r\n  }\r\n  &-card {\r\n    margin: 12px;\r\n    .adm-list-body {\r\n      border-radius: 8px;\r\n    }\r\n    .adm-list-header {\r\n      padding-left: 0;\r\n    }\r\n  }\r\n}\r\n</style>\r\n","import type { Ref } from 'vue'\r\nimport type { Component, InjectionKey } from 'vue'\r\n\r\nexport type CheckListValue = string | number\r\n\r\nexport type CheckListContext = {\r\n  value: Ref<CheckListValue[]>\r\n  check: (val: CheckListValue) => void\r\n  uncheck: (val: CheckListValue) => void\r\n  activeIcon?: Component\r\n  extra?: (active: boolean) => Component | string | number\r\n  disabled?: boolean\r\n  readOnly?: boolean\r\n}\r\n\r\nexport const CheckListContextKey: InjectionKey<CheckListContext> = Symbol('adm-check-list')\r\n","<template>\r\n  <List :mode=\"listMode\" :class=\"classPrefix\">\r\n    <slot />\r\n  </List>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { CheckOutline } from 'ant-mobile-icons-vue3'\r\nimport { computed, provide, ref } from 'vue'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport List from '../list/list.vue'\r\nimport { CheckListContextKey } from './context'\r\nimport type { CheckListProps } from './types'\r\n\r\nconst classPrefix = 'adm-check-list'\r\n\r\nconst props = withDefaults(defineProps<CheckListProps>(), {\r\n  multiple: false,\r\n  defaultValue: undefined,\r\n  activeIcon: CheckOutline,\r\n  value: undefined,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:value': [(string | number)[]]\r\n  change: [(string | number)[]]\r\n}>()\r\n\r\n// useConfig 支持\r\nconst { checkList: componentConfig = {} } = useConfig()\r\n\r\nconst mergedProps = computed(() => ({ ...componentConfig, ...props }))\r\n\r\nconst listMode = computed(() => mergedProps.value.mode as 'default' | 'card' | undefined)\r\n\r\n// Vue implementation of controlled/uncontrolled value\r\nconst innerValue = ref<(string | number)[]>(props.defaultValue ?? [])\r\nconst isControlled = computed(() => props.value !== undefined)\r\nconst value = computed({\r\n  get() {\r\n    return isControlled.value ? (props.value as (string | number)[]) : innerValue.value\r\n  },\r\n  set(v: (string | number)[]) {\r\n    if (!isControlled.value) innerValue.value = v\r\n    emit('update:value', v)\r\n    emit('change', v)\r\n    props.onChange?.(v)\r\n  },\r\n})\r\n\r\nfunction setValue(v: (string | number)[]) {\r\n  value.value = v\r\n}\r\n\r\nfunction check(val: string | number) {\r\n  if (mergedProps.value.multiple) {\r\n    setValue([...value.value, val])\r\n  } else {\r\n    setValue([val])\r\n  }\r\n}\r\n\r\nfunction uncheck(val: string | number) {\r\n  setValue(value.value.filter((item) => item !== val))\r\n}\r\n\r\n// Provide context to children\r\nprovide(CheckListContextKey, {\r\n  value,\r\n  check,\r\n  uncheck,\r\n  activeIcon: mergedProps.value.activeIcon,\r\n  extra: mergedProps.value.extra,\r\n  disabled: mergedProps.value.disabled,\r\n  readOnly: mergedProps.value.readOnly,\r\n})\r\n</script>\r\n","<template>\r\n  <component\r\n    :is=\"clickable ? 'a' : 'div'\"\r\n    :class=\"listItemClass\"\r\n    :style=\"nativeStyle\"\r\n    @click=\"onClick\"\r\n  >\r\n    <div :class=\"`${classPrefix}-content`\">\r\n      <div v-if=\"hasPrefix\" :class=\"`${classPrefix}-content-prefix`\">\r\n        <slot name=\"prefix\" v-if=\"$slots.prefix\">{{ props.prefix }}</slot>\r\n        <component\r\n          :is=\"props.prefix\"\r\n          v-else-if=\"props.prefix && typeof props.prefix === 'object'\"\r\n          :class=\"`${classPrefix}-prefix-icon`\"\r\n        />\r\n      </div>\r\n\r\n      <div :class=\"`${classPrefix}-content-main`\">\r\n        <div v-if=\"hasTitle\" :class=\"`${classPrefix}-title`\">\r\n          <slot name=\"title\" v-if=\"$slots.title\">{{ props.title }}</slot>\r\n          <span v-else-if=\"props.title && typeof props.title === 'string'\">{{ props.title }}</span>\r\n        </div>\r\n\r\n        <slot />\r\n\r\n        <div v-if=\"hasDescription\" :class=\"`${classPrefix}-description`\">\r\n          <slot name=\"description\" v-if=\"$slots.description\">{{ props.description }}</slot>\r\n          <div v-else-if=\"props.description && typeof props.description === 'string'\">\r\n            {{ props.description }}\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <div v-if=\"hasExtra\" :class=\"`${classPrefix}-content-extra`\">\r\n        <slot name=\"extra\">{{ props.extra }}</slot>\r\n      </div>\r\n\r\n      <div v-if=\"showArrow\" :class=\"`${classPrefix}-content-arrow`\">\r\n        <component\r\n          :is=\"mergedArrowIcon || RightOutline\"\r\n          v-if=\"mergedArrowIcon || !slots.arrowIcon\"\r\n        />\r\n        <slot v-else name=\"arrowIcon\" />\r\n      </div>\r\n    </div>\r\n  </component>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, useSlots, type Component } from 'vue'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport { RightOutline } from 'ant-mobile-icons-vue3'\r\n\r\nconst classPrefix = 'adm-list-item'\r\n\r\nexport interface ListItemProps {\r\n  title?: string | number\r\n  description?: string | Component\r\n  prefix?: string | number | Component\r\n  extra?: string | number | Component | null\r\n  clickable?: boolean\r\n  arrowIcon?: boolean | Component\r\n  disabled?: boolean\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  onClick?: (e: any) => void\r\n  /**\r\n   * @deprecated use `arrowIcon` instead\r\n   */\r\n  arrow?: boolean | Component\r\n  // CSS Variables\r\n  '--prefix-width'?: string\r\n  '--align-items'?: string\r\n  '--active-background-color'?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<ListItemProps>(), {\r\n  disabled: false,\r\n  clickable: undefined,\r\n  arrowIcon: undefined,\r\n  arrow: undefined,\r\n})\r\n\r\nconst slots = useSlots()\r\nconst { list: componentConfig = {} } = useConfig()\r\n\r\nconst clickable = computed(() => props.clickable ?? !!props.onClick)\r\n\r\nconst onClick = (e: MouseEvent) => {\r\n  if (props.disabled || !clickable.value) return\r\n  if (props.onClick) {\r\n    props.onClick(e)\r\n  }\r\n}\r\n\r\nconst showArrow = computed(() => props.arrow ?? props.arrowIcon ?? clickable.value)\r\n\r\nconst mergedArrowIcon = computed(() => {\r\n  // 优先级：arrowIcon > arrow > componentConfig.arrowIcon\r\n  if (props.arrowIcon !== undefined && props.arrowIcon !== true) {\r\n    return props.arrowIcon\r\n  }\r\n  if (props.arrow !== undefined && props.arrow !== true) {\r\n    return props.arrow\r\n  }\r\n  return componentConfig.arrowIcon || null\r\n})\r\n\r\n// 直接检查内容是否存在，无需单独的工具函数\r\nconst hasPrefix = computed(\r\n  () =>\r\n    !!slots.prefix?.().length ||\r\n    (props.prefix !== undefined && props.prefix !== null && props.prefix !== ''),\r\n)\r\n\r\nconst hasTitle = computed(\r\n  () =>\r\n    !!slots.title?.().length ||\r\n    (props.title !== undefined && props.title !== null && props.title !== ''),\r\n)\r\n\r\nconst hasDescription = computed(\r\n  () =>\r\n    !!slots.description?.().length ||\r\n    (props.description !== undefined && props.description !== null && props.description !== ''),\r\n)\r\n\r\nconst hasExtra = computed(\r\n  () =>\r\n    !!slots.extra?.().length ||\r\n    (props.extra !== undefined && props.extra !== null && props.extra !== ''),\r\n)\r\n\r\nconst listItemClass = computed(() => {\r\n  const classes = [classPrefix]\r\n\r\n  if (clickable.value) {\r\n    classes.push('adm-plain-anchor')\r\n  }\r\n\r\n  if (props.disabled) {\r\n    classes.push(`${classPrefix}-disabled`)\r\n  }\r\n\r\n  return classes\r\n})\r\n\r\nconst nativeStyle = computed(() => {\r\n  const style: Record<string, string> = {}\r\n\r\n  if (props['--prefix-width']) {\r\n    style['--prefix-width'] = props['--prefix-width']\r\n  }\r\n  if (props['--align-items']) {\r\n    style['--align-items'] = props['--align-items']\r\n  }\r\n  if (props['--active-background-color']) {\r\n    style['--active-background-color'] = props['--active-background-color']\r\n  }\r\n\r\n  return style\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.adm-list-item {\r\n  display: block;\r\n  padding-left: var(--padding-left);\r\n  position: relative;\r\n  background-color: var(--adm-color-background);\r\n  line-height: 1.5;\r\n  &-title,\r\n  &-description {\r\n    color: var(--adm-color-weak);\r\n    font-size: var(--adm-font-size-main);\r\n  }\r\n  &-content {\r\n    display: flex;\r\n    align-items: var(--align-items);\r\n    justify-content: flex-start;\r\n    border-top: var(--border-inner);\r\n    padding-right: var(--padding-right);\r\n    &-prefix {\r\n      width: var(--prefix-width);\r\n      flex: none;\r\n      padding-right: var(--prefix-padding-right);\r\n    }\r\n    &-main {\r\n      flex: auto;\r\n      padding: 12px 0;\r\n    }\r\n    &-extra {\r\n      flex: none;\r\n      padding-left: 12px;\r\n      font-size: var(--adm-font-size-7);\r\n      color: var(--adm-color-weak);\r\n      max-width: var(--extra-max-width);\r\n    }\r\n    &-arrow {\r\n      flex: none;\r\n      display: flex;\r\n      align-items: center;\r\n      margin-left: 4px;\r\n      color: var(--adm-color-light);\r\n      font-size: 19px;\r\n    }\r\n  }\r\n  &-disabled {\r\n    cursor: not-allowed;\r\n    && > .adm-list-item-content > * {\r\n      opacity: 0.4;\r\n      pointer-events: none;\r\n    }\r\n  }\r\n}\r\n\r\na.adm-list-item {\r\n  &:active:not(.adm-list-item-disabled) {\r\n    background-color: var(--active-background-color);\r\n    &::after {\r\n      content: ' ';\r\n      display: block;\r\n      position: absolute;\r\n      width: 100%;\r\n      bottom: -1px;\r\n      left: 0;\r\n      border-bottom: var(--border-inner);\r\n    }\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <ListItem\r\n    :title=\"title\"\r\n    :class=\"itemClasses\"\r\n    :description=\"description\"\r\n    :prefix=\"prefix\"\r\n    :onClick=\"handleClick\"\r\n    :arrow=\"false\"\r\n    :clickable=\"!finalReadOnly\"\r\n    :disabled=\"!!(disabled || (context && context.disabled))\"\r\n  >\r\n    <slot />\r\n    <template #extra>\r\n      <div :class=\"`${classPrefix}-extra`\" v-if=\"active && context?.activeIcon\">\r\n        <component :className=\"`${classPrefix}-extra`\" :is=\"context?.activeIcon\" />\r\n      </div>\r\n    </template>\r\n  </ListItem>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport classNames from 'classnames'\r\nimport { computed, inject } from 'vue'\r\nimport { devWarning } from '../../utils/dev-log'\r\nimport ListItem from '../list/item.vue'\r\nimport { CheckListContextKey } from './context'\r\nimport type { CheckListItemProps } from './types'\r\n\r\nconst classPrefix = 'adm-check-list-item'\r\n\r\nconst props = withDefaults(defineProps<CheckListItemProps>(), {\r\n  className: undefined,\r\n  value: undefined,\r\n  disabled: false,\r\n  readOnly: false,\r\n  onClick: () => {},\r\n})\r\n\r\n// inject context provided by CheckList\r\nconst context = inject(CheckListContextKey, null)\r\nif (context === null) {\r\n  devWarning('CheckList.Item', 'CheckList.Item can only be used inside CheckList.')\r\n}\r\n\r\nconst active = computed(() => {\r\n  if (!context) return false\r\n  return context.value.value.includes(props.value)\r\n})\r\n\r\nconst finalReadOnly = computed(() => props.readOnly || !!context?.readOnly)\r\n\r\nconst itemClasses = computed(() =>\r\n  classNames(\r\n    classPrefix,\r\n    finalReadOnly.value && `${classPrefix}-readonly`,\r\n    active.value && `${classPrefix}-active`,\r\n    props.className,\r\n  ),\r\n)\r\n\r\nfunction handleClick(e: MouseEvent) {\r\n  if (finalReadOnly.value) return\r\n  if (active.value) {\r\n    context?.uncheck(props.value)\r\n  } else {\r\n    context?.check(props.value)\r\n  }\r\n  props.onClick?.(e)\r\n}\r\n</script>\r\n\r\n<style lang=\"less\"></style>\r\n","export function generateIntArray(from: number, to: number) {\n  const array: number[] = []\n  for (let i = from; i <= to; i++) {\n    array.push(i)\n  }\n  return array\n}\n","<template>\r\n  <div :class=\"[classPrefix, $props.class]\">\r\n    <div\r\n      v-for=\"i in lineCountArr\"\r\n      :key=\"i\"\r\n      :class=\"`adm-skeleton ${classPrefix}-line ${props.animated ? 'adm-skeleton-animated' : ''}`\"\r\n      :style=\"getlineCountStyle(i - 1)\"\r\n    />\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { generateIntArray } from '../../utils/generate-int-array'\r\n\r\nconst classPrefix = 'adm-skeleton-paragraph'\r\n\r\nconst props = defineProps<{\r\n  lineCount?: number\r\n  width?: string | number | (string | number)[]\r\n  class?: string\r\n  animated?: boolean\r\n}>()\r\n\r\nconst lineCount = computed(() => props.lineCount ?? 3)\r\nconst lineCountArr = computed(() => generateIntArray(1, lineCount.value))\r\n\r\nconst getlineCountStyle = (idx: number) => {\r\n  if (!props.width) return undefined\r\n  if (Array.isArray(props.width)) {\r\n    return { width: props.width[idx] }\r\n  }\r\n  if (typeof props.width === 'string' || typeof props.width === 'number') {\r\n    if (idx === lineCount.value - 1) {\r\n      return { width: props.width }\r\n    }\r\n  }\r\n  return undefined\r\n}\r\n</script>\r\n","<template>\r\n  <div\r\n    :class=\"[\r\n      'adm-skeleton',\r\n      classPrefix,\r\n      $props.class,\r\n      props.animated ? `adm-skeleton-animated` : '',\r\n    ]\"\r\n    :style=\"titleStyle\"\r\n  />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport type { SkeletonTitleProps } from './types'\r\n\r\nconst classPrefix = 'adm-skeleton-title'\r\nconst props = defineProps<SkeletonTitleProps>()\r\n\r\nconst titleStyle = computed(() => ({\r\n  ...props.style,\r\n  width: props.width,\r\n}))\r\n</script>\r\n","<template>\r\n  <div :class=\"rootClass\" :style=\"rootStyle\">\r\n    <template v-if=\"showTitle\">\r\n      <SkeletonTitle\r\n        :animated=\"props.animated\"\r\n        :width=\"titleWidth\"\r\n        :class=\"`${classPrefix}-title`\"\r\n      />\r\n    </template>\r\n    <template v-if=\"showParagraph\">\r\n      <SkeletonParagraph\r\n        :animated=\"props.animated\"\r\n        :line-count=\"paragraphRows\"\r\n        :width=\"paragraphWidth\"\r\n        :class=\"`${classPrefix}-paragraph`\"\r\n      />\r\n    </template>\r\n    <template v-if=\"!showTitle && !showParagraph\">\r\n      <div :class=\"`${classPrefix}-content`\" :style=\"contentStyle\" />\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport SkeletonParagraph from './skeletonParagraph.vue'\r\nimport SkeletonTitle from './skeletonTitle.vue'\r\nimport type { SkeletonProps } from './types'\r\n\r\nconst classPrefix = 'adm-skeleton'\r\n\r\nconst props = defineProps<SkeletonProps>()\r\n\r\nconst rootClass = computed(() => [\r\n  classPrefix,\r\n  props.animated || props.active ? `${classPrefix}-animated` : '',\r\n  props.round ? `${classPrefix}-round` : '',\r\n  props.class,\r\n])\r\n\r\nconst rootStyle = computed(() => ({\r\n  ...props.style,\r\n  width: props.width,\r\n  height: props.height,\r\n}))\r\n\r\nconst showTitle = computed(() => props.title)\r\nconst showParagraph = computed(() => !!props.paragraph)\r\n\r\nconst titleWidth = computed(() => {\r\n  if (typeof props.title === 'object' && props.title && 'width' in props.title) {\r\n    return props.title.width\r\n  }\r\n  return undefined\r\n})\r\n\r\nconst paragraphRows = computed(() => {\r\n  if (typeof props.paragraph === 'object' && props.paragraph && 'rows' in props.paragraph) {\r\n    return props.paragraph.rows ?? 3\r\n  }\r\n  return 3\r\n})\r\n\r\nconst paragraphWidth = computed(() => {\r\n  if (typeof props.paragraph === 'object' && props.paragraph && 'width' in props.paragraph) {\r\n    return props.paragraph.width\r\n  }\r\n  return undefined\r\n})\r\n\r\nconst contentStyle = computed(() => ({\r\n  width: props.width,\r\n  height: props.height,\r\n  borderRadius: props.round ? '999px' : undefined,\r\n}))\r\n</script>\r\n","<template>\n  <div>\n    <slot v-bind=\"props\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nexport interface TabProps {\n  title?: string\n  disabled?: boolean\n  forceRender?: boolean\n  destroyOnClose?: boolean\n  wrapperClass?: string\n  wrapperStyle?: Record<string, string | number>\n  tabClass?: string\n  tabStyle?: Record<string, string | number>\n}\n\nconst props = defineProps<TabProps>()\n\n// Tab 组件主要用于类型定义和 slot 内容，实际渲染由 Tabs 组件处理\n</script>\n\n<script lang=\"ts\">\nexport default {\n  name: 'Tab'\n}\n</script>\n","/**\n * 工具函数集合\n * 为 Vue 3 Tabs 组件提供必要的工具函数\n */\n\n/**\n * 节流函数\n * @param func 要节流的函数\n * @param wait 等待时间（毫秒）\n * @returns 节流后的函数\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function throttle<T extends (...args: any[]) => any>(func: T, wait: number): T {\n  let timeoutId: number | undefined\n  let lastCallTime = 0\n\n  return ((...args: Parameters<T>) => {\n    const now = Date.now()\n\n    if (now - lastCallTime >= wait) {\n      func(...args)\n      lastCallTime = now\n    } else {\n      clearTimeout(timeoutId)\n      timeoutId = setTimeout(\n        () => {\n          func(...args)\n          lastCallTime = Date.now()\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        },\n        wait - (now - lastCallTime),\n      ) as any\n    }\n  }) as T\n}\n\n/**\n * 防抖函数\n * @param func 要防抖的函数\n * @param wait 等待时间（毫秒）\n * @returns 防抖后的函数\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function debounce<T extends (...args: any[]) => any>(func: T, wait: number): T {\n  let timeoutId: number | undefined\n\n  return ((...args: Parameters<T>) => {\n    clearTimeout(timeoutId)\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    timeoutId = setTimeout(() => func(...args), wait) as any\n  }) as T\n}\n\n/**\n * 检查元素是否在可视区域内\n * @param element 要检查的元素\n * @param container 容器元素\n * @returns 是否在可视区域内\n */\nexport function isElementInView(element: HTMLElement, container: HTMLElement): boolean {\n  const elementRect = element.getBoundingClientRect()\n  const containerRect = container.getBoundingClientRect()\n\n  return (\n    elementRect.left >= containerRect.left &&\n    elementRect.right <= containerRect.right &&\n    elementRect.top >= containerRect.top &&\n    elementRect.bottom <= containerRect.bottom\n  )\n}\n\n/**\n * 获取元素相对于容器的位置\n * @param element 子元素\n * @param container 容器元素\n * @returns 相对位置信息\n */\nexport function getElementOffset(element: HTMLElement, container: HTMLElement) {\n  const elementRect = element.getBoundingClientRect()\n  const containerRect = container.getBoundingClientRect()\n\n  return {\n    left: elementRect.left - containerRect.left,\n    top: elementRect.top - containerRect.top,\n    width: elementRect.width,\n    height: elementRect.height,\n  }\n}\n\n/**\n * 深度合并对象\n * @param target 目标对象\n * @param sources 源对象\n * @returns 合并后的对象\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function deepMerge<T extends Record<string, any>>(target: T, ...sources: Partial<T>[]): T {\n  if (!sources.length) return target\n  const source = sources.shift()\n\n  if (isObject(target) && isObject(source)) {\n    for (const key in source) {\n      if (isObject(source[key])) {\n        if (!target[key]) {\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n          ;(target as any)[key] = {}\n        }\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        deepMerge(target[key], source[key] as any)\n      } else {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        ;(target as any)[key] = source[key]\n      }\n    }\n  }\n\n  return deepMerge(target, ...sources)\n}\n\n/**\n * 检查是否为对象\n * @param item 要检查的项目\n * @returns 是否为对象\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isObject(item: any): boolean {\n  return item && typeof item === 'object' && !Array.isArray(item)\n}\n","<template>\n  <div :class=\"[classPrefix, props.class]\" :style=\"{ direction: props.direction, ...props.style }\">\n    <div :class=\"`${classPrefix}-header`\">\n      <div\n        :class=\"[`${classPrefix}-header-mask`, `${classPrefix}-header-mask-left`]\"\n        :style=\"{ opacity: leftMaskOpacity }\"\n      />\n      <div\n        :class=\"[`${classPrefix}-header-mask`, `${classPrefix}-header-mask-right`]\"\n        :style=\"{ opacity: rightMaskOpacity }\"\n      />\n      <div\n        ref=\"tabListContainerRef\"\n        :class=\"`${classPrefix}-tab-list`\"\n        @scroll=\"updateMask\"\n        @keydown=\"handleKeyDown\"\n        role=\"tablist\"\n      >\n        <div\n          ref=\"activeLineRef\"\n          :class=\"`${classPrefix}-tab-line`\"\n          :style=\"{\n            width:\n              props.activeLineMode === 'fixed'\n                ? 'var(--fixed-active-line-width, 30px)'\n                : `${lineWidth}px`,\n            transform: `translateX(${lineX}px)`,\n            transition: animating ? 'transform 0.3s ease, width 0.3s ease' : 'none',\n          }\"\n        />\n        <div\n          v-for=\"pane in panes\"\n          :key=\"pane.key\"\n          :class=\"[\n            `${classPrefix}-tab-wrapper`,\n            {\n              [`${classPrefix}-tab-wrapper-stretch`]: props.stretch,\n            },\n            pane.wrapperClass,\n          ]\"\n          :style=\"pane.wrapperStyle\"\n        >\n          <div\n            role=\"tab\"\n            :aria-selected=\"pane.key === activeKey\"\n            :tabindex=\"pane.key === activeKey ? 0 : -1\"\n            :ref=\"(el: any) => setTabRef(pane.key, el)\"\n            @click=\"handleTabClick(pane)\"\n            :class=\"[\n              `${classPrefix}-tab`,\n              {\n                [`${classPrefix}-tab-active`]: pane.key === activeKey,\n                [`${classPrefix}-tab-disabled`]: !!pane.disabled,\n              },\n              pane.tabClass,\n            ]\"\n            :style=\"pane.tabStyle\"\n          >\n            <slot :name=\"`title-${pane.key}`\" :title=\"pane.title\">\n              <component v-if=\"pane.titleSlot\" :is=\"pane.titleSlot\" />\n              <template v-else>{{ pane.title }}</template>\n            </slot>\n          </div>\n        </div>\n      </div>\n    </div>\n    <template v-for=\"pane in panes\" :key=\"pane.key\">\n      <div\n        v-if=\"\n          shouldRender(pane.key === activeKey, pane.forceRender, pane.destroyOnClose) &&\n          hasActiveContent\n        \"\n        :class=\"`${classPrefix}-content`\"\n        :style=\"{ display: pane.key === activeKey ? 'block' : 'none' }\"\n      >\n        <slot :name=\"`content-${pane.key}`\">\n          <slot :name=\"pane.key\" v-if=\"$slots[pane.key]\" />\n          <component v-else-if=\"pane.content\" :is=\"pane.content\" />\n        </slot>\n      </div>\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, ref, useSlots, watch, type VNode } from 'vue'\nimport { throttle } from './utils'\nimport { bound } from '../../utils/bound'\n\nexport interface TabProps {\n  title?: string\n  disabled?: boolean | string\n  forceRender?: boolean\n  destroyOnClose?: boolean\n  wrapperClass?: string\n  wrapperStyle?: Record<string, string | number>\n  tabClass?: string\n  tabStyle?: Record<string, string | number>\n}\n\nexport interface TabsProps {\n  activeKey?: string | null\n  defaultActiveKey?: string | null\n  activeLineMode?: 'auto' | 'full' | 'fixed'\n  stretch?: boolean\n  direction?: 'ltr' | 'rtl'\n  autoScroll?: boolean\n  class?: string\n  style?: Record<string, string | number>\n}\n\ninterface EmitsType {\n  (e: 'change', key: string): void\n  (e: 'update:activeKey', key: string): void\n}\n\nconst props = withDefaults(defineProps<TabsProps>(), {\n  activeLineMode: 'auto',\n  stretch: true,\n  direction: 'ltr',\n  autoScroll: true,\n  forceRender: undefined,\n  destroyOnClose: undefined,\n})\n\nconst emit = defineEmits<EmitsType>()\nconst slots = useSlots()\n\nconst classPrefix = 'adm-tabs'\n\n// Refs\nconst tabListContainerRef = ref<HTMLDivElement>()\nconst activeLineRef = ref<HTMLDivElement>()\nconst tabRefs = ref<Record<string, HTMLDivElement | null>>({})\n\n// State\nconst internalActiveKey = ref<string | null>(null)\nconst lineX = ref(0)\nconst lineWidth = ref(0)\n// const scrollLeft = ref(0)\nconst leftMaskOpacity = ref(0)\nconst rightMaskOpacity = ref(0)\nconst animating = ref(false)\nconst initialized = ref(false)\n\n// Computed\nconst activeKey = computed({\n  get: () => props.activeKey ?? internalActiveKey.value,\n  set: (value: string | null) => {\n    if (props.activeKey === undefined) {\n      internalActiveKey.value = value\n    }\n    if (value !== null) {\n      emit('update:activeKey', value)\n      emit('change', value)\n    }\n  },\n})\n\nconst isRTL = computed(() => props.direction === 'rtl')\n\nconst panes = computed(() => {\n  const result: Array<{\n    key: string\n    title: string\n    disabled?: boolean\n    forceRender?: boolean\n    destroyOnClose?: boolean\n    wrapperClass?: string\n    wrapperStyle?: Record<string, string | number>\n    tabClass?: string\n    tabStyle?: Record<string, string | number>\n    content?: VNode\n    titleSlot?: () => VNode | VNode[] | undefined\n  }> = []\n\n  const defaultSlot = slots.default?.()\n  if (defaultSlot) {\n    traverseVNode(defaultSlot, (vnode: VNode, index: number) => {\n      const type = vnode.type\n      const isTab =\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        (typeof type === 'object' && (type as any).name === 'Tab') ||\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        (typeof type === 'object' && (type as any).__name === 'Tab')\n      if (isTab) {\n        const key = (vnode.key as string) || String(index)\n        const tabProps = (vnode.props as TabProps) || {}\n\n        // Extract title slot from Tab VNode\n        let titleSlot: (() => VNode | VNode[] | undefined) | undefined\n        if (vnode.children && typeof vnode.children === 'object' && 'title' in vnode.children) {\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n          titleSlot = (vnode.children as any).title\n        }\n\n        result.push({\n          key,\n          title: tabProps.title || key,\n          disabled: tabProps.disabled === '' || tabProps.disabled === true,\n          forceRender: tabProps.forceRender,\n          destroyOnClose: tabProps.destroyOnClose,\n          wrapperClass: tabProps.wrapperClass,\n          wrapperStyle: tabProps.wrapperStyle,\n          tabClass: tabProps.tabClass,\n          tabStyle: tabProps.tabStyle,\n          content: vnode,\n          titleSlot: titleSlot,\n        })\n      }\n    })\n  }\n\n  return result\n})\n\nconst keyToIndexRecord = computed(() => {\n  const record: Record<string, number> = {}\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  panes.value.forEach((pane: any, index: number) => {\n    record[pane.key] = index\n  })\n  return record\n})\n\nconst firstActiveKey = computed(() => panes.value[0]?.key || null)\n\n// Check if current active pane has content\nconst hasActiveContent = computed(() => {\n  const activePane = panes.value.find((pane) => pane.key === activeKey.value)\n  if (!activePane) return false\n\n  // Check if there are named slots for this pane\n  if (slots[`content-${activePane.key}`] || slots[activePane.key]) {\n    return true\n  }\n\n  // Check if the Tab VNode has content\n  if (activePane.content) {\n    const vnode = activePane.content\n    // Check if VNode has children (content)\n    if (vnode.children) {\n      if (typeof vnode.children === 'object' && 'default' in vnode.children) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const defaultFn = (vnode.children as any).default\n        if (typeof defaultFn === 'function') {\n          try {\n            const result = defaultFn()\n            // Check if result has meaningful content\n            if (Array.isArray(result)) {\n              return result.some((item) =>\n                typeof item === 'string' ? item.trim().length > 0 : true,\n              )\n            }\n            return typeof result === 'string' ? result.trim().length > 0 : Boolean(result)\n          } catch {\n            return false\n          }\n        }\n      }\n      // If children is direct content\n      if (Array.isArray(vnode.children)) {\n        return vnode.children.some((child) =>\n          typeof child === 'string' ? child.trim().length > 0 : true,\n        )\n      }\n      return typeof vnode.children === 'string'\n        ? vnode.children.trim().length > 0\n        : Boolean(vnode.children)\n    }\n  }\n\n  return false\n})\n\n// Utility functions\nfunction traverseVNode(vnodes: VNode[], fn: (vnode: VNode, index: number) => void) {\n  let index = 0\n  function traverse(nodes: VNode[]) {\n    nodes.forEach((vnode) => {\n      if (vnode.type === Symbol.for('v-fgt')) {\n        // Fragment\n        if (Array.isArray(vnode.children)) {\n          traverse(vnode.children as VNode[])\n        }\n      } else {\n        fn(vnode, index)\n        index++\n      }\n    })\n  }\n  traverse(vnodes)\n}\n\nfunction useShouldRender(active: boolean, forceRender?: boolean, destroyOnClose?: boolean) {\n  const initialized = ref(active)\n\n  if (active && !initialized.value) {\n    initialized.value = true\n  }\n\n  if (forceRender) return true\n  if (active) return true\n  if (!initialized.value) return false\n  return !destroyOnClose\n}\n\nfunction shouldRender(active: boolean, forceRender?: boolean, destroyOnClose?: boolean) {\n  return useShouldRender(active, forceRender, destroyOnClose)\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setTabRef(key: string, el: any) {\n  if (el) {\n    tabRefs.value[key] = el\n  }\n}\n\nfunction animate(immediate = false, fromMutation = false) {\n  const container = tabListContainerRef.value\n  if (!container) return\n\n  const activeIndex = keyToIndexRecord.value[activeKey.value as string]\n  if (activeIndex === undefined) {\n    lineX.value = 0\n    lineWidth.value = 0\n    return\n  }\n\n  const activeLine = activeLineRef.value\n  if (!activeLine) return\n\n  const activeTabWrapper = container.children.item(activeIndex + 1) as HTMLDivElement\n  const activeTab = activeTabWrapper.children.item(0) as HTMLDivElement\n  const activeTabLeft = activeTab.offsetLeft\n  const activeTabWidth = activeTab.offsetWidth\n  const activeTabWrapperLeft = activeTabWrapper.offsetLeft\n  const activeTabWrapperWidth = activeTabWrapper.offsetWidth\n\n  const containerWidth = container.offsetWidth\n  const containerScrollWidth = container.scrollWidth\n  // const containerScrollLeft = container.scrollLeft\n\n  const activeLineWidth = activeLine.offsetWidth\n\n  let x = 0\n  let width = 0\n  if (props.activeLineMode === 'auto') {\n    x = activeTabLeft\n    width = activeTabWidth\n  } else if (props.activeLineMode === 'full') {\n    x = activeTabWrapperLeft\n    width = activeTabWrapperWidth\n  } else {\n    x = activeTabLeft + (activeTabWidth - activeLineWidth) / 2\n  }\n\n  if (isRTL.value) {\n    const w = ['auto', 'full'].includes(props.activeLineMode) ? width : activeLineWidth\n    x = -(containerWidth - x - w)\n  }\n\n  if (!immediate) {\n    animating.value = true\n    setTimeout(() => {\n      animating.value = false\n    }, 300)\n  }\n\n  lineX.value = x\n  lineWidth.value = width\n\n  const maxScrollDistance = containerScrollWidth - containerWidth\n  if (maxScrollDistance <= 0) return\n\n  let nextScrollLeft = 0\n\n  if (isRTL.value) {\n    nextScrollLeft = -bound(\n      containerWidth / 2 - activeTabLeft + activeTabWidth / 2 - activeLineWidth,\n      0,\n      maxScrollDistance,\n    )\n  } else {\n    nextScrollLeft = bound(\n      activeTabLeft - (containerWidth - activeTabWidth) / 2,\n      0,\n      maxScrollDistance,\n    )\n  }\n\n  if (!fromMutation || props.autoScroll !== false) {\n    if (immediate) {\n      container.scrollLeft = nextScrollLeft\n    } else {\n      container.scrollTo({\n        left: nextScrollLeft,\n        behavior: 'smooth',\n      })\n    }\n  }\n}\n\nconst updateMask = throttle((immediate = false) => {\n  const container = tabListContainerRef.value\n  if (!container) return\n\n  const scrollLeft = container.scrollLeft\n  let showLeftMask = false\n  let showRightMask = false\n\n  if (isRTL.value) {\n    showLeftMask = Math.round(-scrollLeft) + container.offsetWidth < container.scrollWidth\n    showRightMask = scrollLeft < 0\n  } else {\n    showLeftMask = scrollLeft > 0\n    showRightMask = scrollLeft + container.offsetWidth < container.scrollWidth\n  }\n\n  if (immediate) {\n    leftMaskOpacity.value = showLeftMask ? 1 : 0\n    rightMaskOpacity.value = showRightMask ? 1 : 0\n  } else {\n    // Add transition effect\n    leftMaskOpacity.value = showLeftMask ? 1 : 0\n    rightMaskOpacity.value = showRightMask ? 1 : 0\n  }\n}, 100)\n\nfunction handleKeyDown(e: KeyboardEvent) {\n  const keys = Object.keys(keyToIndexRecord.value)\n  const currentIndex = keyToIndexRecord.value[activeKey.value as string]\n  const isNext = isRTL.value ? e.key === 'ArrowLeft' : e.key === 'ArrowRight'\n  const isPrev = isRTL.value ? e.key === 'ArrowRight' : e.key === 'ArrowLeft'\n  const offsetDirection = isNext ? 1 : -1\n\n  const findNextEnabledTab = (startIndex: number, direction: 1 | -1) => {\n    const length = keys.length\n    for (let i = 0; i < length; i++) {\n      const index = (startIndex + direction * (i + 1) + length) % length\n      const key = keys[index]\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const pane = panes.value.find((p: any) => p.key === key)\n      if (!pane?.disabled) return key\n    }\n    return keys[startIndex]\n  }\n\n  const currentKey = findNextEnabledTab(currentIndex, offsetDirection)\n  if (isNext || isPrev) {\n    e.preventDefault()\n    activeKey.value = currentKey\n  }\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction handleTabClick(pane: any) {\n  if (pane.disabled) return\n  if (pane.key === undefined || pane.key === null) return\n  activeKey.value = pane.key\n}\n\n// Initialize\nonMounted(async () => {\n  if (!activeKey.value && firstActiveKey.value) {\n    if (props.defaultActiveKey) {\n      activeKey.value = props.defaultActiveKey\n    } else {\n      activeKey.value = firstActiveKey.value\n    }\n  }\n\n  await nextTick()\n  animate(true)\n  updateMask(true)\n  initialized.value = true\n})\n\n// Watchers\nwatch(activeKey, async () => {\n  if (initialized.value) {\n    await nextTick()\n    animate()\n  }\n\n  // Focus management\n  if (activeKey.value && tabRefs.value[activeKey.value]) {\n    tabRefs.value[activeKey.value]?.focus()\n  }\n})\n\nwatch([() => isRTL.value, () => props.activeLineMode], async () => {\n  if (initialized.value) {\n    await nextTick()\n    animate()\n  }\n})\n\n// ResizeObserver for responsive updates\nonMounted(() => {\n  if (typeof ResizeObserver !== 'undefined' && tabListContainerRef.value) {\n    const resizeObserver = new ResizeObserver(() => {\n      if (initialized.value) {\n        animate(true)\n      }\n    })\n    resizeObserver.observe(tabListContainerRef.value)\n\n    // Mutation observer for content changes\n    const mutationObserver = new MutationObserver(() => {\n      if (initialized.value) {\n        animate(true, true)\n      }\n    })\n\n    mutationObserver.observe(tabListContainerRef.value, {\n      subtree: true,\n      childList: true,\n      characterData: true,\n    })\n  }\n})\n</script>\n","import type { CascaderOption } from './types'\r\n\r\nexport const optionSkeleton: CascaderOption[] = []\r\n","import type { CascaderOption, CascaderViewConfig } from './types'\r\n\r\nexport function useCascaderValueExtend(options: CascaderOption[], names: CascaderViewConfig) {\r\n  const valueName = names.valueName || 'value'\r\n  const childrenName = names.childrenName || 'children'\r\n  return (val: (string | number)[], nptions?: CascaderOption[]) => {\r\n    const items: (CascaderOption | null)[] = []\r\n    let currentOptions = nptions ?? options\r\n    for (const v of val) {\r\n      const target = currentOptions.find((option) => option[valueName] === v) || null\r\n      items.push(target)\r\n      if (!target || !target[childrenName]) {\r\n        return { items, isLeaf: !target || !target[childrenName] }\r\n      }\r\n      currentOptions = target[childrenName] as CascaderOption[]\r\n    }\r\n    return { items, isLeaf: false }\r\n  }\r\n}\r\n","export type FieldNamesType = {\r\n  label?: string\r\n  value?: string\r\n  disabled?: string\r\n  children?: string\r\n}\r\n\r\nexport function useFieldNames(fieldNames: FieldNamesType = {}) {\r\n  const {\r\n    label = 'label',\r\n    value = 'value',\r\n    disabled = 'disabled',\r\n    children = 'children',\r\n  } = fieldNames\r\n\r\n  return [label, value, children, disabled] as const\r\n}\r\n","<template>\r\n  <div class=\"adm-cascader-view\" :style=\"props.style || {}\">\r\n    <Tabs\r\n      :activeKey=\"tabActiveIndex\"\r\n      @change=\"onTabsChange\"\r\n      :stretch=\"false\"\r\n      class=\"adm-cascader-view-tabs\"\r\n    >\r\n      <Tab v-for=\"(level, index) in levels\" :key=\"`${index}`\">\r\n        <template #title>\r\n          <div class=\"adm-cascader-view-header-title\">\r\n            <template v-if=\"level.selected\">\r\n              {{ level.selected[labelName] }}\r\n            </template>\r\n            <template v-else>\r\n              {{ typeof placeholder === 'function' ? placeholder(index) : placeholder }}\r\n            </template>\r\n          </div>\r\n        </template>\r\n        <div class=\"adm-cascader-view-content\">\r\n          <div v-if=\"whetherLoading(level.options)\" class=\"adm-cascader-view-skeleton\">\r\n            <Skeleton class=\"adm-cascader-view-skeleton-line-1\" animated />\r\n            <Skeleton class=\"adm-cascader-view-skeleton-line-2\" animated />\r\n            <Skeleton class=\"adm-cascader-view-skeleton-line-3\" animated />\r\n            <Skeleton class=\"adm-cascader-view-skeleton-line-4\" animated />\r\n          </div>\r\n          <div v-else>\r\n            <CheckList\r\n              :value=\"[value[index]]\"\r\n              @update:value=\"(select) => onItemSelect(select[0], index)\"\r\n              :activeIcon=\"activeIcon\"\r\n            >\r\n              <template\r\n                v-for=\"(option, _index) in level.options\"\r\n                :key=\"option[valueName] || _index\"\r\n              >\r\n                <CheckListItem\r\n                  :value=\"(option[valueName] as CheckListValue) || _index\"\r\n                  :disabled=\"(option[disabledName] as boolean) || false\"\r\n                  :className=\"[\r\n                    'adm-cascader-view-item',\r\n                    {\r\n                      'adm-cascader-view-item-active': value[index] === option[valueName],\r\n                    },\r\n                  ]\"\r\n                >\r\n                  {{ option[labelName] }}\r\n                </CheckListItem>\r\n              </template>\r\n            </CheckList>\r\n          </div>\r\n        </div>\r\n      </Tab>\r\n    </Tabs>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { Component, CSSProperties } from 'vue'\r\nimport { computed, ref, watch } from 'vue'\r\nimport { CheckList, CheckListItem, type CheckListValue } from '../check-list/index'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport Skeleton from '../skeleton/skeleton.vue'\r\nimport { Tabs, Tab } from '../tabs/index'\r\nimport { optionSkeleton } from './option-skeleton'\r\nimport type { CascaderOption, CascaderValue } from './types'\r\nimport { useCascaderValueExtend } from './use-cascader-value-extend'\r\nimport { useFieldNames } from './use-field-names'\r\n\r\nexport interface CascaderViewProps {\r\n  options: CascaderOption[]\r\n  value?: CascaderValue[]\r\n  defaultValue?: CascaderValue[]\r\n  onChange?: (\r\n    value: CascaderValue[],\r\n    extend: { items: (CascaderOption | null)[]; isLeaf: boolean },\r\n  ) => void\r\n  placeholder?: string | ((index: number) => string)\r\n  onTabsChange?: (index: number | string) => void\r\n  activeIcon?: Component\r\n  loading?: boolean\r\n  fieldNames?: Record<string, string>\r\n  style?: CSSProperties\r\n}\r\n\r\nconst props = withDefaults(defineProps<CascaderViewProps>(), {\r\n  defaultValue: () => [],\r\n  value: undefined,\r\n  placeholder: undefined,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:value': [CascaderValue[]]\r\n  change: [CascaderValue[], { items: (CascaderOption | null)[]; isLeaf: boolean }]\r\n  select: [CascaderValue[], { items: (CascaderOption | null)[]; isLeaf: boolean }]\r\n  display: [CascaderValue[], { items: (CascaderOption | null)[]; isLeaf: boolean }]\r\n}>()\r\n\r\nconst { locale } = useConfig()\r\n\r\nconst [labelName, valueName, childrenName, disabledName] = useFieldNames(props.fieldNames)\r\n\r\nconst generateValueExtend = useCascaderValueExtend(props.options, {\r\n  valueName,\r\n  childrenName,\r\n})\r\n\r\n// controlled / uncontrolled\r\nconst innerValue = ref<CascaderValue[]>([...props.defaultValue])\r\nconst isControlled = computed(() => props.value !== undefined)\r\nconst value = computed<CascaderValue[]>({\r\n  get() {\r\n    return isControlled.value ? (props.value as CascaderValue[]) : innerValue.value\r\n  },\r\n  set(v: CascaderValue[]) {\r\n    if (!isControlled.value) innerValue.value = [...v]\r\n    emit('update:value', v)\r\n    emit('change', v, generateValueExtend(v, props.options))\r\n    emit('select', v, generateValueExtend(v, props.options))\r\n  },\r\n})\r\n\r\nconst tabActiveIndex = ref(props.value?.length ? `${props.value.length - 1}` : '0')\r\n\r\nconst levels = computed(() => {\r\n  const ret: {\r\n    selected: CascaderOption | undefined\r\n    options: CascaderOption[]\r\n  }[] = []\r\n  let currentOptions = props.options ?? []\r\n  let reachedEnd = false\r\n  for (const v of value.value) {\r\n    const target = currentOptions.find((option) => option[valueName] === v)\r\n    ret.push({ selected: target, options: currentOptions })\r\n    if (!target || !target[childrenName]) {\r\n      reachedEnd = true\r\n      break\r\n    }\r\n    currentOptions = target[childrenName] as CascaderOption[]\r\n  }\r\n  if (!reachedEnd) {\r\n    ret.push({ selected: undefined, options: currentOptions })\r\n  }\r\n  return ret\r\n})\r\n\r\nwatch(\r\n  levels,\r\n  (newVal) => {\r\n    tabActiveIndex.value = `${newVal.length - 1}`\r\n  },\r\n  {\r\n    deep: true,\r\n  },\r\n)\r\n\r\nwatch(\r\n  () => tabActiveIndex.value,\r\n  (v) => {\r\n    props.onTabsChange?.(v)\r\n  },\r\n)\r\n\r\nfunction onItemSelect(selectValue: CascaderValue | undefined, depth: number) {\r\n  const next = value.value.slice(0, depth)\r\n  if (selectValue !== undefined) next[depth] = selectValue\r\n  value.value = next\r\n}\r\n\r\nfunction whetherLoading(options: CascaderOption[]) {\r\n  return props.loading || options === optionSkeleton\r\n}\r\n\r\nconst placeholder = computed(() => props.placeholder ?? locale.Cascader.placeholder)\r\n\r\n// eslint-disable-next-line vue/no-dupe-keys\r\nfunction onTabsChange(key: string | number) {\r\n  tabActiveIndex.value = `${key}`\r\n}\r\n\r\ndefineExpose({\r\n  getDisplayItems: () => {\r\n    generateValueExtend(value.value, props.options)\r\n  },\r\n})\r\n</script>\r\n","<template>\r\n  <Popup\r\n    ref=\"popRef\"\r\n    :visible=\"visibleRef\"\r\n    position=\"bottom\"\r\n    :onClose=\"handleClose\"\r\n    :getContainer=\"getContainer\"\r\n  >\r\n    <div class=\"adm-cascader\">\r\n      <div class=\"adm-cascader-header\">\r\n        <a class=\"adm-cascader-action\" @click=\"handleCancel\">{{\r\n          props.cancelText || locale.common.cancel\r\n        }}</a>\r\n        <div class=\"adm-cascader-title\">{{ title }}</div>\r\n        <a class=\"adm-cascader-action\" @click=\"handleConfirm\">{{\r\n          props.confirmText || locale.common.confirm\r\n        }}</a>\r\n      </div>\r\n\r\n      <div class=\"adm-cascader-body\">\r\n        <CascaderView ref=\"cascaderViewRef\" v-bind=\"viewProps\" v-model:value=\"innerValue\" />\r\n      </div>\r\n    </div>\r\n  </Popup>\r\n  <slot :items=\"displayItems\" :actions=\"actions\" />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, toRef, watch } from 'vue'\r\nimport CascaderView from '../cascader-view/cascader-view.vue'\r\nimport { optionSkeleton } from '../cascader-view/option-skeleton'\r\nimport type { CascaderOption, CascaderValue } from '../cascader-view/types'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport Popup from '../popup/popup.vue'\r\nimport { useCascaderValueExtend } from '../cascader-view/use-cascader-value-extend'\r\n\r\nexport type CascaderGenerateItems = { items: (CascaderOption | null)[]; isLeaf: boolean }\r\n\r\nconst popRef = ref(null)\r\nconst cascaderViewRef = ref<typeof CascaderView | null>(null)\r\nconst props = withDefaults(\r\n  defineProps<{\r\n    options?: CascaderOption[]\r\n    value?: CascaderValue[]\r\n    defaultValue?: CascaderValue[]\r\n    visible?: boolean\r\n    defaultVisible?: boolean\r\n    title?: string\r\n    placeholder?: string | ((index: number) => string)\r\n    onChange?: (value: CascaderValue[], extend?: CascaderGenerateItems) => void\r\n    onVisibleChange?: (visible: boolean) => void\r\n    getContainer?: HTMLElement | string | (() => HTMLElement)\r\n    style?: Record<string, string | number>\r\n    confirmText?: string\r\n    cancelText?: string\r\n  }>(),\r\n  {\r\n    options: () => optionSkeleton,\r\n    defaultValue: () => [],\r\n    value: undefined,\r\n    defaultVisible: false,\r\n    title: '',\r\n    placeholder: undefined,\r\n    style: () => ({}),\r\n  },\r\n)\r\n\r\nconst generateItems = ref<(CascaderOption | null)[]>([])\r\nconst displayItems = ref<(CascaderOption | null)[]>([])\r\n\r\nconst emit = defineEmits<{\r\n  (e: 'update:value', v: CascaderValue[]): void\r\n  (e: 'update:visible', v: boolean): void\r\n  (e: 'change', v: CascaderValue[], extend?: CascaderGenerateItems): void\r\n  (e: 'confirm', v: CascaderValue[], extend?: CascaderGenerateItems): void\r\n  (e: 'select', v: CascaderValue[], extend?: CascaderGenerateItems): void\r\n  (e: 'visibleChange', v: boolean): void\r\n  (e: 'close'): void\r\n}>()\r\n\r\nconst { locale } = useConfig()\r\n\r\n// controlled / uncontrolled value (array)\r\nconst innerValue = ref<CascaderValue[]>([...(props.value ?? props.defaultValue ?? [])])\r\nconst valueRef = toRef(props, 'value')\r\nconst visibleRef = ref<boolean>(props.visible ?? props.defaultVisible ?? false)\r\nconst visibleProp = toRef(props, 'visible')\r\nconst generateValueExtend = useCascaderValueExtend(props.options, {\r\n  valueName: 'value',\r\n  childrenName: 'children',\r\n})\r\nwatch(\r\n  () => props.options,\r\n  () => {\r\n    if (\r\n      props.value !== undefined &&\r\n      props.options?.length &&\r\n      displayItems.value.length !== props.value.length\r\n    ) {\r\n      // do something with props.value and props.options\r\n      const extend = generateValueExtend(props.value, props.options)\r\n      generateItems.value = extend.items || []\r\n      displayItems.value = extend?.items || []\r\n    }\r\n  },\r\n  {\r\n    deep: true,\r\n  },\r\n)\r\n\r\nwatch(valueRef, (v) => {\r\n  if (v !== undefined) innerValue.value = v\r\n})\r\n\r\nwatch(visibleProp, (v) => {\r\n  if (v !== undefined) visibleRef.value = v\r\n})\r\n\r\n// expose view props (CascaderView v-model will bind the value)\r\nconst viewProps = computed(() => ({\r\n  options: props.options,\r\n  placeholder: props.placeholder,\r\n  onChange: (v: CascaderValue[], extend: CascaderGenerateItems) => {\r\n    console.log('Cascader selected value:', v, extend)\r\n    generateItems.value = extend.items\r\n    innerValue.value = v\r\n    // emit('update:value', v)\r\n    // props.onChange?.(v, extend)\r\n    emit('change', v, extend)\r\n    emit('select', v, extend)\r\n  },\r\n  onDisplay: (v: CascaderValue[], extend: CascaderGenerateItems) => {\r\n    generateItems.value = extend.items\r\n  },\r\n}))\r\n\r\nfunction handleCancel() {\r\n  // close popup and notify\r\n  visibleRef.value = false\r\n  displayItems.value = generateItems.value\r\n  emit('update:visible', false)\r\n  props.onVisibleChange?.(false)\r\n  emit('visibleChange', false)\r\n  emit('close')\r\n}\r\n\r\nfunction handleConfirm() {\r\n  emit('update:value', innerValue.value)\r\n  // props.onChange?.(innerValue.value)\r\n  emit('confirm', innerValue.value)\r\n  handleCancel()\r\n}\r\n\r\nfunction handleClose() {\r\n  handleCancel()\r\n}\r\n\r\n// keep locale and title accessible\r\nconst title = props.title\r\n\r\n// update innerValue when prop initial value present\r\nif (props.value !== undefined) innerValue.value = props.value\r\n\r\nconst actions = {\r\n  open: () => {\r\n    visibleRef.value = true\r\n  },\r\n  close: () => {\r\n    visibleRef.value = false\r\n  },\r\n  toggle: () => {\r\n    visibleRef.value = !visibleRef.value\r\n  },\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './cascader.less';\r\n</style>\r\n","import { createApp, h } from 'vue'\r\nimport type { CascaderOption, CascaderValue } from '../cascader-view/types'\r\nimport Cascader from './cascader.vue'\r\n\r\nexport interface PromptProps {\r\n  options?: CascaderOption[]\r\n  title?: string\r\n  defaultValue?: CascaderValue[]\r\n  placeholder?: string | ((index: number) => string)\r\n}\r\n\r\nexport function prompt(props: PromptProps) {\r\n  return new Promise<CascaderValue[] | null>((resolve) => {\r\n    const container = document.createElement('div')\r\n    document.body.appendChild(container)\r\n\r\n    const handleResolve = (value: CascaderValue[] | null) => {\r\n      app.unmount()\r\n      container.remove()\r\n      resolve(value)\r\n    }\r\n\r\n    const app = createApp({\r\n      render() {\r\n        return h(Cascader, {\r\n          placeholder: props.placeholder,\r\n          options: props.options,\r\n          defaultValue: props.defaultValue,\r\n          title: props.title,\r\n          visible: true,\r\n          onVisibleChange: (v: boolean) => {\r\n            if (!v) handleResolve(null)\r\n          },\r\n          onChange: (v: CascaderValue[]) => {\r\n            handleResolve(v)\r\n          },\r\n        })\r\n      },\r\n    })\r\n\r\n    app.mount(container)\r\n  })\r\n}\r\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function attachPropertiesToComponent<C, P extends Record<string, any>>(\n  component: C,\n  properties: P,\n): C & P {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const ret = component as any\n  for (const key in properties) {\n    if (properties.hasOwnProperty(key)) {\n      ret[key] = properties[key]\n    }\n  }\n  return ret\n}\n","import Cascader from './cascader.vue'\r\nimport { prompt } from './prompt'\r\nimport { attachPropertiesToComponent } from '../../utils/attach-properties-to-component'\r\nimport { optionSkeleton } from '../cascader-view/option-skeleton'\r\nexport default attachPropertiesToComponent(Cascader, {\r\n  prompt,\r\n  optionSkeleton,\r\n})\r\n","import { ref, watch } from 'vue'\r\n\r\n// 定义基本的 Ref 类型\r\ntype Ref<T> = { value: T }\r\n\r\nlet totalLockCount = 0\r\n\r\nconst BODY_LOCK_CLASS = 'adm-overflow-hidden'\r\n\r\n// 触摸相关状态管理\r\ninterface TouchState {\r\n  startX: number\r\n  startY: number\r\n  deltaX: number\r\n  deltaY: number\r\n  offsetX: number\r\n  offsetY: number\r\n  direction: string\r\n}\r\n\r\nfunction createTouch() {\r\n  const state = ref<TouchState>({\r\n    startX: 0,\r\n    startY: 0,\r\n    deltaX: 0,\r\n    deltaY: 0,\r\n    offsetX: 0,\r\n    offsetY: 0,\r\n    direction: '',\r\n  })\r\n\r\n  const isVertical = () => state.value.direction === 'vertical'\r\n\r\n  const start = (event: TouchEvent) => {\r\n    const touch = event.touches[0]\r\n    state.value.startX = touch.clientX\r\n    state.value.startY = touch.clientY\r\n    state.value.deltaX = 0\r\n    state.value.deltaY = 0\r\n    state.value.offsetX = 0\r\n    state.value.offsetY = 0\r\n    state.value.direction = ''\r\n  }\r\n\r\n  const move = (event: TouchEvent) => {\r\n    const touch = event.touches[0]\r\n    state.value.deltaX = touch.clientX < 0 ? 0 : touch.clientX - state.value.startX\r\n    state.value.deltaY = touch.clientY < 0 ? 0 : touch.clientY - state.value.startY\r\n    state.value.offsetX = Math.abs(state.value.deltaX)\r\n    state.value.offsetY = Math.abs(state.value.deltaY)\r\n\r\n    // 确定滑动方向\r\n    const LOCK_DIRECTION_DISTANCE = 10\r\n    if (\r\n      !state.value.direction &&\r\n      (state.value.offsetX > LOCK_DIRECTION_DISTANCE ||\r\n        state.value.offsetY > LOCK_DIRECTION_DISTANCE)\r\n    ) {\r\n      state.value.direction = state.value.offsetX > state.value.offsetY ? 'horizontal' : 'vertical'\r\n    }\r\n  }\r\n\r\n  return {\r\n    state,\r\n    start,\r\n    move,\r\n    isVertical,\r\n  }\r\n}\r\n\r\nfunction getScrollParent(element: Element | null, root?: HTMLElement | null): Element | null {\r\n  if (!element) return null\r\n\r\n  const overflowScrollReg = /scroll|auto|overlay/i\r\n  const defaultRoot = root || document.body\r\n\r\n  let node = element.parentNode as Element\r\n\r\n  while (node && node !== defaultRoot && node.nodeType === Node.ELEMENT_NODE) {\r\n    const { overflowY, overflow } = window.getComputedStyle(node)\r\n    if (overflowScrollReg.test(overflowY) || overflowScrollReg.test(overflow)) {\r\n      return node\r\n    }\r\n    node = node.parentNode as Element\r\n  }\r\n\r\n  return defaultRoot\r\n}\r\n\r\nfunction getScrollableElement(el: HTMLElement | null): HTMLElement | null {\r\n  let current = el?.parentElement\r\n\r\n  while (current) {\r\n    if (current.clientHeight < current.scrollHeight) {\r\n      return current\r\n    }\r\n    current = current.parentElement\r\n  }\r\n\r\n  return null\r\n}\r\n\r\n// 检测是否支持 passive 事件监听器\r\nfunction checkSupportsPassive(): boolean {\r\n  let supportsPassive = false\r\n  try {\r\n    const opts = Object.defineProperty({}, 'passive', {\r\n      get() {\r\n        supportsPassive = true\r\n        return false\r\n      },\r\n    })\r\n    window.addEventListener('testPassive', () => {}, opts)\r\n    window.removeEventListener('testPassive', () => {}, opts)\r\n  } catch (e) {\r\n    // ignore\r\n  }\r\n  return supportsPassive\r\n}\r\n\r\nconst supportsPassive = checkSupportsPassive()\r\n\r\n// Vue 3 Composition API 版本的 useLockScroll\r\nexport function useLockScroll(\r\n  rootRef: Ref<HTMLElement | null>,\r\n  shouldLock: Ref<boolean | 'strict'> | boolean | 'strict',\r\n) {\r\n  const touch = createTouch()\r\n  let isLocked = false\r\n\r\n  const onTouchMove = (event: TouchEvent) => {\r\n    touch.move(event)\r\n\r\n    const direction = touch.state.value.deltaY > 0 ? '10' : '01'\r\n    const el = getScrollParent(event.target as Element, rootRef.value) as HTMLElement\r\n\r\n    if (!el) return\r\n\r\n    // 获取当前的 shouldLock 值\r\n    const currentShouldLock = typeof shouldLock === 'object' ? shouldLock.value : shouldLock\r\n\r\n    // 严格模式下的处理\r\n    if (currentShouldLock === 'strict') {\r\n      const scrollableParent = getScrollableElement(event.target as HTMLElement)\r\n      if (scrollableParent === document.body || scrollableParent === document.documentElement) {\r\n        event.preventDefault()\r\n        return\r\n      }\r\n    }\r\n\r\n    const { scrollHeight, offsetHeight, scrollTop } = el\r\n    const { height } = el.getBoundingClientRect()\r\n    let status = '11'\r\n\r\n    if (scrollTop === 0) {\r\n      status = offsetHeight >= scrollHeight ? '00' : '01'\r\n    } else if (scrollHeight <= Math.round(height + scrollTop)) {\r\n      status = '10'\r\n    }\r\n\r\n    if (status !== '11' && touch.isVertical() && !(parseInt(status, 2) & parseInt(direction, 2))) {\r\n      if (event.cancelable && supportsPassive) {\r\n        event.preventDefault()\r\n      }\r\n    }\r\n  }\r\n\r\n  const lock = () => {\r\n    if (isLocked) return\r\n\r\n    document.addEventListener('touchstart', touch.start)\r\n    document.addEventListener(\r\n      'touchmove',\r\n      onTouchMove,\r\n      supportsPassive ? { passive: false } : false,\r\n    )\r\n\r\n    if (!totalLockCount) {\r\n      document.body.classList.add(BODY_LOCK_CLASS)\r\n    }\r\n\r\n    totalLockCount++\r\n    isLocked = true\r\n  }\r\n\r\n  const unlock = () => {\r\n    if (!isLocked) return\r\n\r\n    document.removeEventListener('touchstart', touch.start)\r\n    document.removeEventListener('touchmove', onTouchMove)\r\n\r\n    totalLockCount--\r\n    isLocked = false\r\n\r\n    if (!totalLockCount) {\r\n      document.body.classList.remove(BODY_LOCK_CLASS)\r\n    }\r\n  }\r\n\r\n  // 监听 shouldLock 的变化\r\n  watch(\r\n    () => (typeof shouldLock === 'object' ? shouldLock.value : shouldLock),\r\n    (newValue) => {\r\n      if (newValue) {\r\n        lock()\r\n      } else {\r\n        unlock()\r\n      }\r\n    },\r\n    { immediate: true },\r\n  )\r\n\r\n  return {\r\n    lock,\r\n    unlock,\r\n    // 提供清理函数供外部调用\r\n    cleanup: unlock,\r\n  }\r\n}\r\n","<template>\r\n  <Teleport :to=\"containerElement\" :disabled=\"!containerElement\">\r\n    <div v-if=\"shouldRender\" :class=\"wrapperClass\" :style=\"wrapperStyle\">\r\n      <!-- 遮罩 -->\r\n      <Mask\r\n        v-if=\"mask\"\r\n        :visible=\"maskVisible\"\r\n        :force-render=\"forceRender\"\r\n        :destroy-on-close=\"destroyOnClose\"\r\n        @mask-click=\"handleMaskClick\"\r\n        :style=\"maskStyle\"\r\n        :class=\"maskClass\"\r\n        :disable-body-scroll=\"false\"\r\n        :stop-propagation=\"stopPropagation\"\r\n      />\r\n\r\n      <!-- 弹窗包装器 -->\r\n      <div :class=\"`${classPrefix}-wrap`\" :role=\"role\" :aria-label=\"ariaLabel\">\r\n        <div ref=\"popupRef\" :style=\"animatedStyle\" @click.stop>\r\n          <!-- 关闭按钮 -->\r\n          <a v-if=\"showCloseButton\" :class=\"closeButtonClass\" @click=\"handleCloseClick\">\r\n            <component v-if=\"closeIcon\" :is=\"closeIcon\" />\r\n          </a>\r\n\r\n          <!-- 弹窗内容 -->\r\n          <div :class=\"bodyClass\" :style=\"bodyStyle\">\r\n            <slot />\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </Teleport>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport interface CenterPopupProps {\r\n  visible?: boolean\r\n  onClose?: () => void\r\n  afterClose?: () => void\r\n  afterShow?: () => void\r\n  bodyClassName?: string\r\n  bodyStyle?: CSSProperties\r\n  closeOnMaskClick?: boolean\r\n  closeIcon?: Component\r\n  destroyOnClose?: boolean\r\n  disableBodyScroll?: boolean\r\n  forceRender?: boolean\r\n  getContainer?: string | HTMLElement | (() => HTMLElement) | null\r\n  mask?: boolean\r\n  maskClassName?: string\r\n  maskStyle?: CSSProperties\r\n  onMaskClick?: (event: MouseEvent) => void\r\n  showCloseButton?: boolean\r\n  stopPropagation?: string[]\r\n  role?: string\r\n  ariaLabel?: string\r\n  className?: string\r\n  style?: CSSProperties\r\n}\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, nextTick, ref, watch, type CSSProperties, type Component } from 'vue'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport Mask from '../mask/index.vue'\r\nimport { defaultPopupBaseProps } from '../popup/popup-base-props.ts'\r\nimport { useLockScroll } from '../../utils/use-lock-scroll.ts'\r\n\r\nconst classPrefix = 'adm-center-popup'\r\n\r\nconst props = withDefaults(defineProps<CenterPopupProps>(), {\r\n  ...defaultPopupBaseProps,\r\n  visible: false,\r\n  closeOnMaskClick: false,\r\n  destroyOnClose: false,\r\n  disableBodyScroll: true,\r\n  forceRender: false,\r\n  getContainer: null,\r\n  mask: true,\r\n  showCloseButton: false,\r\n  stopPropagation: () => ['click'],\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  close: []\r\n  maskClick: [event: MouseEvent]\r\n}>()\r\n\r\n// 获取配置\r\nconst { popup: componentConfig = {} } = useConfig()\r\n\r\n// 容器元素\r\nconst containerElement = computed(() => {\r\n  if (!props.getContainer) return document.body\r\n  if (typeof props.getContainer === 'string') {\r\n    return document.querySelector(props.getContainer) || document.body\r\n  }\r\n  if (typeof props.getContainer === 'function') {\r\n    return props.getContainer()\r\n  }\r\n  return props.getContainer\r\n})\r\n\r\nconst closeIcon = computed(() => {\r\n  return props.closeIcon || componentConfig.closeIcon\r\n})\r\n\r\n// 动画状态 - 确保初始状态正确\r\nconst scale = ref(0.8)\r\nconst opacity = ref(0)\r\nconst active = ref(false)\r\nconst maskVisible = ref(false) // 改为独立的 ref 状态\r\n\r\n// DOM 引用\r\nconst popupRef = ref<HTMLDivElement | null>(null)\r\n\r\n// 是否应该渲染\r\nconst shouldRender = computed(() => {\r\n  return active.value || props.forceRender\r\n})\r\n\r\n// 样式类名\r\nconst wrapperClass = computed(() => {\r\n  const classes = [classPrefix]\r\n  if (props.className) classes.push(props.className)\r\n  return classes.join(' ')\r\n})\r\n\r\nconst wrapperStyle = computed((): CSSProperties => {\r\n  return {\r\n    display: active.value ? undefined : 'none',\r\n    pointerEvents: active.value ? undefined : 'none',\r\n    ...props.style,\r\n  }\r\n})\r\n\r\nconst maskClass = computed(() => {\r\n  const classes = [`${classPrefix}-mask`]\r\n  if (props.maskClassName) classes.push(props.maskClassName)\r\n  return classes.join(' ')\r\n})\r\n\r\nconst closeButtonClass = computed(() => {\r\n  return `${classPrefix}-close adm-plain-anchor`\r\n})\r\n\r\nconst bodyClass = computed(() => {\r\n  const classes = [`${classPrefix}-body`]\r\n  if (props.bodyClassName) classes.push(props.bodyClassName)\r\n  return classes.join(' ')\r\n})\r\n\r\n// 动画样式 - 确保动画生效\r\nconst animatedStyle = computed((): CSSProperties => {\r\n  return {\r\n    transform: `scale(${scale.value})`,\r\n    opacity: opacity.value,\r\n    transition: 'transform 0.3s ease-out, opacity 0.3s ease-out',\r\n    transformOrigin: 'center center',\r\n    willChange: 'transform, opacity', // 优化动画性能\r\n  }\r\n})\r\n\r\n// 动画控制 - 确保状态变化\r\nconst showAnimation = () => {\r\n  scale.value = 1\r\n  opacity.value = 1\r\n}\r\n\r\nconst hideAnimation = () => {\r\n  scale.value = 0.8\r\n  opacity.value = 0\r\n}\r\n\r\nif (props.disableBodyScroll) {\r\n  useLockScroll(\r\n    ref(document.body),\r\n    computed(() => props.visible),\r\n  )\r\n}\r\n\r\n// 监听 visible 变化 - 修复 Mask 开始动画\r\nwatch(\r\n  () => props.visible,\r\n  (newVisible) => {\r\n    if (newVisible) {\r\n      // 显示时先显示容器，但 mask 延迟显示以触发动画\r\n      active.value = true\r\n      maskVisible.value = false // 先设为 false\r\n      scale.value = 0.8\r\n      opacity.value = 0\r\n\r\n      // DOM 更新后再显示 mask 和执行动画\r\n      nextTick(() => {\r\n        maskVisible.value = true // 延迟设为 true 触发 mask 开始动画\r\n        setTimeout(() => {\r\n          showAnimation()\r\n        }, 10)\r\n      })\r\n    } else {\r\n      // 关闭时先隐藏遮罩，执行内容关闭动画\r\n      maskVisible.value = false\r\n      hideAnimation()\r\n\r\n      // 等待动画完成后再卸载组件\r\n      setTimeout(() => {\r\n        active.value = false\r\n        props.afterClose?.()\r\n      }, 300)\r\n    }\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\n// 遮罩点击处理\r\nconst handleMaskClick = (event: MouseEvent) => {\r\n  emit('maskClick', event)\r\n  props.onMaskClick?.(event)\r\n  if (props.closeOnMaskClick) {\r\n    emit('close')\r\n    props.onClose?.()\r\n  }\r\n}\r\n\r\n// 关闭按钮点击处理\r\nconst handleCloseClick = () => {\r\n  emit('close')\r\n  props.onClose?.()\r\n}\r\n\r\n// 添加 inheritAttrs: false\r\ndefineOptions({\r\n  inheritAttrs: false,\r\n})\r\n</script>\r\n\r\n<style lang=\"less\">\r\n@import './center-popup.less';\r\n</style>\r\n","<template>\r\n  <svg viewBox=\"0 0 40 40\" :style=\"props.style\" :class=\"props.class\">\r\n    <path\r\n      d=\"M31.5541766,15 L28.0892433,15 L28.0892434,15 C27.971052,15 27.8576674,15.044522 27.7740471,15.1239792 L18.2724722,24.1625319 L13.2248725,19.3630279 L13.2248725,19.3630279 C13.1417074,19.2834412 13.0287551,19.2384807 12.9107898,19.2380079 L9.44474455,19.2380079 L9.44474454,19.2380079 C9.19869815,19.2384085 8.99957935,19.4284738 9,19.66253 C9,19.7747587 9.04719253,19.8823283 9.13066188,19.9616418 L17.0907466,27.5338228 C17.4170809,27.8442545 17.8447695,28 18.2713393,28 L18.2980697,28 C18.7168464,27.993643 19.133396,27.8378975 19.4530492,27.5338228 L31.8693384,15.7236361 L31.8693384,15.7236361 C32.0434167,15.5582251 32.0435739,15.2898919 31.8696892,15.1242941 C31.7860402,15.0446329 31.6725052,15 31.5541421,15 L31.5541766,15 Z\"\r\n      fill=\"currentColor\"\r\n    />\r\n  </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { CSSProperties } from 'vue'\r\n\r\nexport interface CheckIconProps {\r\n  style?: CSSProperties\r\n  class?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<CheckIconProps>(), {})\r\n</script>\r\n\r\n<style scoped>\r\nsvg {\r\n  display: block;\r\n  width: 100%;\r\n  height: 100%;\r\n}\r\n</style>\r\n","<template>\r\n  <svg viewBox=\"0 0 40 40\" :style=\"props.style\" :class=\"props.class\">\r\n    <path\r\n      d=\"M20,9 C26.0752953,9 31,13.9247047 31,20 C31,26.0752953 26.0752953,31 20,31 C13.9247047,31 9,26.0752953 9,20 C9,13.9247047 13.9247047,9 20,9 Z\"\r\n      fill=\"currentColor\"\r\n    />\r\n  </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { CSSProperties } from 'vue'\r\n\r\nexport interface IndeterminateIconProps {\r\n  style?: CSSProperties\r\n  class?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<IndeterminateIconProps>(), {})\r\n</script>\r\n\r\n<style scoped>\r\nsvg {\r\n  display: block;\r\n  width: 100%;\r\n  height: 100%;\r\n}\r\n</style>\r\n","<template>\r\n  <label :class=\"labelClasses\" @click=\"handleClick\" :style=\"props.style || {}\">\r\n    <input\r\n      type=\"checkbox\"\r\n      :checked=\"finalChecked\"\r\n      :disabled=\"finalDisabled\"\r\n      :id=\"id\"\r\n      @change=\"handleChange\"\r\n      class=\"adm-checkbox-nativeInput\"\r\n    />\r\n\r\n    <!-- 自定义图标渲染 -->\r\n    <div v-if=\"icon\" :class=\"`${classPrefix}-custom-icon`\">\r\n      <component :is=\"icon(!!finalChecked, indeterminate)\" />\r\n    </div>\r\n\r\n    <!-- 默认图标渲染 -->\r\n    <div v-else :class=\"`${classPrefix}-icon`\">\r\n      <IndeterminateIcon v-if=\"indeterminate\" />\r\n      <CheckIcon v-else-if=\"finalChecked\" />\r\n    </div>\r\n\r\n    <!-- 内容区域 -->\r\n    <div v-if=\"$slots.default\" :class=\"`${classPrefix}-content`\">\r\n      <slot />\r\n    </div>\r\n  </label>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { CSSProperties, Component, Ref } from 'vue'\r\nimport { computed, ref, inject } from 'vue'\r\nimport CheckIcon from './check-icon.vue'\r\nimport IndeterminateIcon from './indeterminate-icon.vue'\r\nimport type { CheckboxGroupContext } from './types'\r\n\r\nconst classPrefix = 'adm-checkbox'\r\n\r\nexport interface CheckboxProps {\r\n  checked?: boolean\r\n  defaultChecked?: boolean\r\n  disabled?: boolean\r\n  onChange?: (checked: boolean) => void\r\n  value?: string | number\r\n  indeterminate?: boolean\r\n  block?: boolean\r\n  id?: string\r\n  icon?: (checked: boolean, indeterminate: boolean) => Component\r\n  onClick?: (event: MouseEvent) => void\r\n  // CSS 变量支持Component\r\n  style?: CSSProperties & {\r\n    '--icon-size'?: string\r\n    '--font-size'?: string\r\n    '--gap'?: string\r\n  }\r\n  class?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<CheckboxProps>(), {\r\n  defaultChecked: false,\r\n  checked: undefined,\r\n  indeterminate: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:checked': [value: boolean]\r\n  change: [value: boolean]\r\n}>()\r\n\r\n// 注入 group context\r\nconst groupContext = inject<Ref<CheckboxGroupContext | undefined> | undefined>(\r\n  'adm-checkbox-group',\r\n  undefined,\r\n)\r\n\r\n// 简化实现，专注于单个复选框功能\r\n// 在真实Vue环境中可以添加inject来支持group功能\r\n\r\n// 内部状态管理\r\nconst innerChecked = ref(props.defaultChecked)\r\nconst isControlled = computed(() => props.checked !== undefined)\r\n\r\n// 受控/非受控状态计算\r\nconst finalChecked = computed(() => {\r\n  // 如果在 group 中，根据 group 的 value 和当前的 value 确定状态\r\n  if (groupContext && props.value !== undefined) {\r\n    return (groupContext.value?.value?.value || []).includes(props.value)\r\n  }\r\n  // 如果传入了 checked 属性，则为受控模式\r\n  if (isControlled.value) {\r\n    return props.checked\r\n  }\r\n  // 否则为非受控模式，使用内部状态\r\n  return innerChecked.value\r\n})\r\n\r\nconst setChecked = (newValue: boolean) => {\r\n  // 如果在 group 中，使用 group 的方法\r\n  if (groupContext && props.value !== undefined) {\r\n    if (newValue) {\r\n      groupContext.value?.check(props.value)\r\n    } else {\r\n      groupContext.value?.uncheck(props.value)\r\n    }\r\n    return\r\n  }\r\n\r\n  // 非受控模式下更新内部状态\r\n  if (props.checked === undefined) {\r\n    innerChecked.value = newValue\r\n  }\r\n\r\n  // 总是发出事件\r\n  emit('update:checked', newValue)\r\n  emit('change', newValue)\r\n\r\n  if (props.onChange) {\r\n    props.onChange(newValue)\r\n  }\r\n}\r\n\r\n// 当前版本的最终状态（不考虑group）\r\nconst finalDisabled = computed(() => {\r\n  return (groupContext?.value?.disabled || props.disabled) ?? false\r\n})\r\n\r\nconst finalSetChecked = (newChecked: boolean) => {\r\n  setChecked(newChecked)\r\n}\r\n\r\n// 事件处理\r\nconst handleChange = (e: Event) => {\r\n  if (finalDisabled.value) return\r\n\r\n  const target = e.target as HTMLInputElement\r\n  finalSetChecked(target.checked)\r\n}\r\n\r\nconst handleClick = (e: MouseEvent) => {\r\n  if (finalDisabled.value) {\r\n    e.preventDefault()\r\n    return\r\n  }\r\n  props.onClick?.(e)\r\n}\r\n\r\n// 样式类计算\r\nconst labelClasses = computed(() => {\r\n  const classes = [classPrefix]\r\n\r\n  if (finalChecked.value && !props.indeterminate) {\r\n    classes.push(`${classPrefix}-checked`)\r\n  }\r\n\r\n  if (props.indeterminate) {\r\n    classes.push(`${classPrefix}-indeterminate`)\r\n  }\r\n\r\n  if (finalDisabled.value) {\r\n    classes.push(`${classPrefix}-disabled`)\r\n  }\r\n\r\n  if (props.block) {\r\n    classes.push(`${classPrefix}-block`)\r\n  }\r\n\r\n  if (props.class) {\r\n    classes.push(props.class)\r\n  }\r\n\r\n  return classes\r\n})\r\n\r\n// 暴露给父组件的ref方法\r\ndefineExpose({\r\n  check: () => finalSetChecked(true),\r\n  uncheck: () => finalSetChecked(false),\r\n  toggle: () => finalSetChecked(!finalChecked.value),\r\n})\r\n</script>\r\n\r\n<style lang=\"less\">\r\n@import './checkbox.less';\r\n\r\n.adm-checkbox-nativeInput {\r\n  position: absolute;\r\n  left: 0;\r\n  top: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n  opacity: 0;\r\n  border: 0;\r\n  margin: 0;\r\n  padding: 0;\r\n  cursor: pointer;\r\n  z-index: 1;\r\n}\r\n</style>\r\n","<template>\r\n  <div :class=\"classPrefix\">\r\n    <slot />\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, provide } from 'vue'\r\nimport type { CheckboxGroupContext, CheckboxGroupProps, CheckboxValue } from './types'\r\n\r\nconst classPrefix = 'adm-checkbox-group'\r\n\r\nconst props = withDefaults(defineProps<CheckboxGroupProps>(), {\r\n  defaultValue: () => [],\r\n  disabled: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:value': [value: CheckboxValue[]]\r\n  change: [value: CheckboxValue[]]\r\n}>()\r\n\r\n// 状态管理 - 仿照React usePropsValue模式\r\nconst innerValue = ref<CheckboxValue[]>([...props.defaultValue])\r\nconst isControlled = computed(() => props.value !== undefined)\r\n\r\nconst currentValue = computed(() => {\r\n  return isControlled.value ? props.value || [] : innerValue.value\r\n})\r\n\r\nconst setValue = (newValue: CheckboxValue[]) => {\r\n  if (!isControlled.value) {\r\n    innerValue.value = [...newValue]\r\n  }\r\n  emit('update:value', newValue)\r\n  emit('change', newValue)\r\n\r\n  if (props.onChange) {\r\n    props.onChange(newValue)\r\n  }\r\n}\r\n\r\n// Group context methods\r\nconst check = (value: CheckboxValue) => {\r\n  const current = [...currentValue.value]\r\n  if (!current.includes(value)) {\r\n    current.push(value)\r\n    setValue(current)\r\n  }\r\n}\r\n\r\nconst uncheck = (value: CheckboxValue) => {\r\n  const current = currentValue.value.filter((item) => item !== value)\r\n  setValue(current)\r\n}\r\n\r\n// 创建context并提供给子组件\r\nconst groupContext = computed<CheckboxGroupContext>(() => ({\r\n  value: currentValue,\r\n  disabled: props.disabled,\r\n  check,\r\n  uncheck,\r\n}))\r\n\r\n// 使用 provide 而不是 props 传递\r\nprovide('adm-checkbox-group', groupContext)\r\n\r\n// 暴露给父组件的方法\r\ndefineExpose({\r\n  check,\r\n  uncheck,\r\n  value: currentValue,\r\n  disabled: computed(() => props.disabled),\r\n})\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.adm-checkbox-group {\r\n  .adm-checkbox {\r\n    margin-bottom: 12px;\r\n\r\n    &:last-child {\r\n      margin-bottom: 0;\r\n    }\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <div class=\"adm-collapse\">\r\n    <List>\r\n      <template v-for=\"panel in panels\" :key=\"panel.key\">\r\n        <ListItem\r\n          class=\"adm-collapse-panel-header\"\r\n          @click=\"handleClick(panel.key, panel.onClick)\"\r\n          :disabled=\"panel.disabled\"\r\n          :arrowIcon=\"getArrowIcon(panel, isActive(panel.key))\"\r\n        >\r\n          {{ panel.title }}\r\n        </ListItem>\r\n        <div\r\n          class=\"adm-collapse-panel-content\"\r\n          :class=\"{ 'adm-collapse-panel-content-active': isActive(panel.key) }\"\r\n          :style=\"getPanelStyle(panel.key)\"\r\n        >\r\n          <div\r\n            class=\"adm-collapse-panel-content-inner\"\r\n            :ref=\"(el) => setPanelRef(panel.key, el as HTMLElement)\"\r\n          >\r\n            <ListItem v-if=\"shouldRender(panel)\">\r\n              <component :is=\"panel.content\" />\r\n            </ListItem>\r\n          </div>\r\n        </div>\r\n      </template>\r\n    </List>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { DownOutline } from 'ant-mobile-icons-vue3'\r\nimport classNames from 'classnames'\r\nimport { computed, h, nextTick, ref, useSlots, watch, type Component, type VNode } from 'vue'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport List from '../list/list.vue'\r\nimport ListItem from '../list/item.vue'\r\n\r\n// 定义箭头图标类型\r\ntype ArrowIcon = VNode | Component | ((active: boolean) => Component)\r\n\r\n// 面板数据类型\r\ninterface PanelData {\r\n  key: string\r\n  title: string\r\n  content: VNode\r\n  disabled?: boolean\r\n  forceRender?: boolean\r\n  destroyOnClose?: boolean\r\n  onClick?: (event: MouseEvent) => void\r\n  arrowIcon?: ArrowIcon\r\n  arrow?: ArrowIcon // deprecated\r\n}\r\n\r\ninterface CollapseProps {\r\n  accordion?: boolean\r\n  activeKey?: string | string[] | null\r\n  defaultActiveKey?: string | string[] | null\r\n  arrowIcon?: ArrowIcon\r\n  arrow?: ArrowIcon // deprecated\r\n}\r\n\r\ninterface CollapseEmits {\r\n  (e: 'update:activeKey', value: string | string[] | null): void\r\n  (e: 'change', value: string | string[] | null): void\r\n}\r\n\r\nconst props = withDefaults(defineProps<CollapseProps>(), {\r\n  accordion: false,\r\n  defaultActiveKey: () => [],\r\n})\r\n\r\nconst emit = defineEmits<CollapseEmits>()\r\n\r\nconst { collapse: componentConfig = {} } = useConfig()\r\nconst slots = useSlots()\r\n\r\n// 面板引用\r\nconst panelRefs = ref<Record<string, HTMLElement>>({})\r\nconst panelHeights = ref<Record<string, number>>({})\r\n\r\n// 内部状态值\r\nconst innerValue = ref<string[]>(\r\n  props.accordion\r\n    ? props.defaultActiveKey\r\n      ? [props.defaultActiveKey as string]\r\n      : []\r\n    : Array.isArray(props.defaultActiveKey)\r\n      ? props.defaultActiveKey\r\n      : props.defaultActiveKey\r\n        ? [props.defaultActiveKey]\r\n        : [],\r\n)\r\n\r\n// 是否受控\r\nconst isControlled = computed(() => props.activeKey !== undefined)\r\n\r\n// 当前激活的 key 列表\r\nconst currentActiveKey = computed(() => {\r\n  if (isControlled.value) {\r\n    if (props.accordion) {\r\n      return props.activeKey ? [props.activeKey as string] : []\r\n    } else {\r\n      return Array.isArray(props.activeKey)\r\n        ? props.activeKey\r\n        : props.activeKey\r\n          ? [props.activeKey]\r\n          : []\r\n    }\r\n  }\r\n  return innerValue.value\r\n})\r\n\r\n// 设置激活状态\r\nconst setActiveKey = (newValue: string[]) => {\r\n  if (!isControlled.value) {\r\n    innerValue.value = newValue\r\n  }\r\n\r\n  const emitValue = props.accordion ? newValue[0] || null : newValue\r\n  emit('update:activeKey', emitValue)\r\n  emit('change', emitValue)\r\n}\r\n\r\n// 解析面板数据\r\nconst panels = computed((): PanelData[] => {\r\n  const result: PanelData[] = []\r\n  const defaultSlot = slots.default?.()\r\n\r\n  if (!defaultSlot) return result\r\n\r\n  defaultSlot.forEach((vnode, index) => {\r\n    const panelProps = vnode.props || {}\r\n    const key = (panelProps.key as string) || `panel-${index}`\r\n\r\n    result.push({\r\n      key,\r\n      title: panelProps.title || '',\r\n      content: vnode,\r\n      disabled: panelProps.disabled,\r\n      forceRender: panelProps.forceRender,\r\n      destroyOnClose: panelProps.destroyOnClose,\r\n      onClick: panelProps.onClick,\r\n      arrowIcon: panelProps.arrowIcon,\r\n      arrow: panelProps.arrow,\r\n    })\r\n  })\r\n\r\n  return result\r\n})\r\n\r\n// 检查面板是否激活\r\nconst isActive = (key: string): boolean => {\r\n  return currentActiveKey.value.includes(key)\r\n}\r\n\r\n// 处理点击事件\r\nconst handleClick = (key: string, onClick?: (event: MouseEvent) => void) => {\r\n  if (props.accordion) {\r\n    if (isActive(key)) {\r\n      setActiveKey([])\r\n    } else {\r\n      setActiveKey([key])\r\n    }\r\n  } else {\r\n    if (isActive(key)) {\r\n      setActiveKey(currentActiveKey.value.filter((v) => v !== key))\r\n    } else {\r\n      setActiveKey([...currentActiveKey.value, key])\r\n    }\r\n  }\r\n\r\n  // 执行传入的 onClick 回调\r\n  if (onClick) {\r\n    // 这里需要创建一个模拟的 MouseEvent，或者重新设计 API\r\n    const mockEvent = new MouseEvent('click')\r\n    onClick(mockEvent)\r\n  }\r\n}\r\n\r\n// 获取箭头图标\r\nconst getArrowIcon = (panel: PanelData, active: boolean) => {\r\n  const arrow =\r\n    panel.arrowIcon ||\r\n    panel.arrow ||\r\n    props.arrowIcon ||\r\n    props.arrow ||\r\n    componentConfig.arrowIcon ||\r\n    DownOutline\r\n  if (typeof arrow === 'function') {\r\n    return (arrow as (active: boolean) => Component)(active)\r\n  }\r\n  return h(\r\n    'div',\r\n    {\r\n      class: classNames('adm-collapse-arrow', {\r\n        'adm-collapse-arrow-active': active,\r\n      }),\r\n      style: {\r\n        transition: 'transform 0.3s ease',\r\n        transform: active ? 'rotate(180deg)' : 'rotate(0deg)',\r\n      },\r\n    },\r\n    [h(arrow as Component)],\r\n  )\r\n}\r\n\r\n// 设置面板引用\r\nconst setPanelRef = (key: string, el: HTMLElement | null) => {\r\n  if (el) {\r\n    panelRefs.value[key] = el\r\n  }\r\n}\r\n\r\n// 获取面板样式\r\nconst getPanelStyle = (key: string) => {\r\n  const height = panelHeights.value[key] || 0\r\n  const active = isActive(key)\r\n\r\n  return {\r\n    height: active ? `${height}px` : '0px',\r\n    transition: 'height 0.3s ease',\r\n    overflow: 'hidden',\r\n  }\r\n}\r\n\r\n// 判断是否应该渲染\r\nconst shouldRender = (panel: PanelData): boolean => {\r\n  const active = isActive(panel.key)\r\n  if (panel.forceRender) return true\r\n  if (panel.destroyOnClose) return active\r\n  return active || panelHeights.value[panel.key] > 0\r\n}\r\n\r\n// 更新面板高度\r\nconst updatePanelHeight = async (key: string) => {\r\n  await nextTick()\r\n  const el = panelRefs.value[key]\r\n  if (el) {\r\n    panelHeights.value[key] = el.scrollHeight\r\n  }\r\n}\r\n\r\n// 监听激活状态变化\r\nwatch(\r\n  currentActiveKey,\r\n  async (newKeys, oldKeys) => {\r\n    const allKeys = [...new Set([...newKeys, ...(oldKeys || [])])]\r\n    for (const key of allKeys) {\r\n      await updatePanelHeight(key)\r\n    }\r\n  },\r\n  { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped>\r\n.adm-collapse-arrow {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n}\r\n.adm-collapse-panel-content {\r\n  overflow: hidden;\r\n}\r\n.adm-collapse-panel-content-inner {\r\n  padding: 0;\r\n}\r\n.adm-collapse-panel-header {\r\n  cursor: pointer;\r\n}\r\n.adm-collapse-panel-header:hover {\r\n  background-color: var(--adm-color-background);\r\n}\r\n</style>\r\n","<template>\r\n  <!-- CollapsePanel 是一个虚拟组件，实际渲染由父组件 Collapse 处理 -->\r\n  <slot />\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport type { Component, VNode } from 'vue'\r\n\r\n// 定义箭头图标类型\r\ntype ArrowIcon = VNode | Component | (() => VNode) | ((active: boolean) => Component)\r\n\r\nexport interface CollapsePanelProps {\r\n  // key?: string\r\n  title?: string\r\n  disabled?: boolean\r\n  forceRender?: boolean\r\n  destroyOnClose?: boolean\r\n  arrowIcon?: ArrowIcon\r\n  arrow?: ArrowIcon // deprecated\r\n  loading?: boolean\r\n}\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\ndefineProps<CollapsePanelProps>()\r\n</script>\r\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isLeapYear=t()}(this,(function(){\"use strict\";return function(e,t){t.prototype.isLeapYear=function(){return this.$y%4==0&&this.$y%100!=0||this.$y%400==0}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeek=t()}(this,(function(){\"use strict\";var e=\"day\";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf(\"year\"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,\"week\")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return\"isoweek\"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf(\"day\"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf(\"day\"):n.bind(this)(e,t)}}}));","!function(e,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeeksInYear=n()}(this,(function(){\"use strict\";return function(e,n){n.prototype.isoWeeksInYear=function(){var e=this.isLeapYear(),n=this.endOf(\"y\").day();return 4===n||e&&5===n?53:52}}}));","export const TILL_NOW = 'TILL_NOW'\n\nexport type PickerDate = Date & {\n  tillNow?: boolean\n}\n","import dayjs from 'dayjs'\nimport isLeapYear from 'dayjs/plugin/isLeapYear'\nimport isoWeek from 'dayjs/plugin/isoWeek'\nimport isoWeeksInYear from 'dayjs/plugin/isoWeeksInYear'\nimport type { RenderLabel } from '../date-picker-view/date-picker-view.vue'\nimport type { PickerColumn } from '../picker-view/index'\nimport type { DatePickerFilter } from './date-picker-utils'\nimport { TILL_NOW } from './util'\n\ndayjs.extend(isoWeek)\ndayjs.extend(isoWeeksInYear)\ndayjs.extend(isLeapYear)\n\nexport type DatePrecision = 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second'\n\nconst precisionRankRecord: Record<DatePrecision, number> = {\n  year: 0,\n  month: 1,\n  day: 2,\n  hour: 3,\n  minute: 4,\n  second: 5,\n}\n\nexport function generateDatePickerColumns(\n  selected: string[],\n  min: Date,\n  max: Date,\n  precision: DatePrecision,\n  renderLabel: RenderLabel,\n  filter: DatePickerFilter | undefined,\n  tillNow?: boolean,\n) {\n  const ret: PickerColumn[] = []\n\n  const minYear = min.getFullYear()\n  const minMonth = min.getMonth() + 1\n  const minDay = min.getDate()\n  const minHour = min.getHours()\n  const minMinute = min.getMinutes()\n  const minSecond = min.getSeconds()\n\n  const maxYear = max.getFullYear()\n  const maxMonth = max.getMonth() + 1\n  const maxDay = max.getDate()\n  const maxHour = max.getHours()\n  const maxMinute = max.getMinutes()\n  const maxSecond = max.getSeconds()\n\n  const rank = precisionRankRecord[precision]\n\n  const selectedYear = parseInt(selected[0])\n  const firstDayInSelectedMonth = dayjs(convertStringArrayToDate([selected[0], selected[1], '1']))\n  const selectedMonth = parseInt(selected[1])\n  const selectedDay = parseInt(selected[2])\n  const selectedHour = parseInt(selected[3])\n  const selectedMinute = parseInt(selected[4])\n  const selectedSecond = parseInt(selected[5])\n\n  const isInMinYear = selectedYear === minYear\n  const isInMaxYear = selectedYear === maxYear\n  const isInMinMonth = isInMinYear && selectedMonth === minMonth\n  const isInMaxMonth = isInMaxYear && selectedMonth === maxMonth\n  const isInMinDay = isInMinMonth && selectedDay === minDay\n  const isInMaxDay = isInMaxMonth && selectedDay === maxDay\n  const isInMinHour = isInMinDay && selectedHour === minHour\n  const isInMaxHour = isInMaxDay && selectedHour === maxHour\n  const isInMinMinute = isInMinHour && selectedMinute === minMinute\n  const isInMaxMinute = isInMaxHour && selectedMinute === maxMinute\n\n  const generateColumn = (from: number, to: number, precision: DatePrecision) => {\n    let column: number[] = []\n    for (let i = from; i <= to; i++) {\n      column.push(i)\n    }\n    const prefix = selected.slice(0, precisionRankRecord[precision])\n    const currentFilter = filter?.[precision]\n    if (currentFilter && typeof currentFilter === 'function') {\n      column = column.filter((i) =>\n        currentFilter(i, {\n          get date() {\n            const stringArray = [...prefix, i.toString()]\n            return convertStringArrayToDate(stringArray)\n          },\n        }),\n      )\n    }\n    return column\n  }\n\n  if (rank >= precisionRankRecord.year) {\n    const lower = minYear\n    const upper = maxYear\n    const years = generateColumn(lower, upper, 'year')\n    ret.push(\n      years.map((v) => ({\n        label: renderLabel('year', v, { selected: selectedYear === v }),\n        value: v.toString(),\n      })),\n    )\n  }\n\n  if (rank >= precisionRankRecord.month) {\n    const lower = isInMinYear ? minMonth : 1\n    const upper = isInMaxYear ? maxMonth : 12\n    const months = generateColumn(lower, upper, 'month')\n    ret.push(\n      months.map((v) => ({\n        label: renderLabel('month', v, { selected: selectedMonth === v }),\n        value: v.toString(),\n      })),\n    )\n  }\n  if (rank >= precisionRankRecord.day) {\n    const lower = isInMinMonth ? minDay : 1\n    const upper = isInMaxMonth ? maxDay : firstDayInSelectedMonth.daysInMonth()\n    const days = generateColumn(lower, upper, 'day')\n    ret.push(\n      days.map((v) => ({\n        label: renderLabel('day', v, { selected: selectedDay === v }),\n        value: v.toString(),\n      })),\n    )\n  }\n  if (rank >= precisionRankRecord.hour) {\n    const lower = isInMinDay ? minHour : 0\n    const upper = isInMaxDay ? maxHour : 23\n    const hours = generateColumn(lower, upper, 'hour')\n    ret.push(\n      hours.map((v) => ({\n        label: renderLabel('hour', v, { selected: selectedHour === v }),\n        value: v.toString(),\n      })),\n    )\n  }\n  if (rank >= precisionRankRecord.minute) {\n    const lower = isInMinHour ? minMinute : 0\n    const upper = isInMaxHour ? maxMinute : 59\n    const minutes = generateColumn(lower, upper, 'minute')\n    ret.push(\n      minutes.map((v) => ({\n        label: renderLabel('minute', v, { selected: selectedMinute === v }),\n        value: v.toString(),\n      })),\n    )\n  }\n  if (rank >= precisionRankRecord.second) {\n    const lower = isInMinMinute ? minSecond : 0\n    const upper = isInMaxMinute ? maxSecond : 59\n    const seconds = generateColumn(lower, upper, 'second')\n    ret.push(\n      seconds.map((v) => ({\n        label: renderLabel('second', v, { selected: selectedSecond === v }),\n        value: v.toString(),\n      })),\n    )\n  }\n\n  // Till Now\n  if (tillNow) {\n    ret[0].push({\n      label: renderLabel('now', null!, { selected: selected[0] === TILL_NOW }),\n      value: TILL_NOW,\n    })\n\n    if (TILL_NOW === selected?.[0]) {\n      for (let i = 1; i < ret.length; i += 1) {\n        ret[i] = []\n      }\n    }\n  }\n\n  return ret\n}\n\nexport function convertDateToStringArray(date: Date | undefined | null): string[] {\n  if (!date) return []\n  return [\n    date.getFullYear().toString(),\n    (date.getMonth() + 1).toString(),\n    date.getDate().toString(),\n    date.getHours().toString(),\n    date.getMinutes().toString(),\n    date.getSeconds().toString(),\n  ]\n}\n\nexport function convertStringArrayToDate<T extends string | number | null | undefined>(\n  value: T[],\n): Date {\n  const yearString = value[0] ?? '1900'\n  const monthString = value[1] ?? '1'\n  const dateString = value[2] ?? '1'\n  const hourString = value[3] ?? '0'\n  const minuteString = value[4] ?? '0'\n  const secondString = value[5] ?? '0'\n  return new Date(\n    parseInt(yearString as string),\n    parseInt(monthString as string) - 1,\n    parseInt(dateString as string),\n    parseInt(hourString as string),\n    parseInt(minuteString as string),\n    parseInt(secondString as string),\n  )\n}\n","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_quarterOfYear=n()}(this,(function(){\"use strict\";var t=\"month\",n=\"quarter\";return function(e,i){var r=i.prototype;r.quarter=function(t){return this.$utils().u(t)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(t-1))};var s=r.add;r.add=function(e,i){return e=Number(e),this.$utils().p(i)===n?this.add(3*e,t):s.bind(this)(e,i)};var u=r.startOf;r.startOf=function(e,i){var r=this.$utils(),s=!!r.u(i)||i;if(r.p(e)===n){var o=this.quarter()-1;return s?this.month(3*o).startOf(t).startOf(\"day\"):this.month(3*o+2).endOf(t).endOf(\"day\")}return u.bind(this)(e,i)}}}));","import dayjs from 'dayjs'\nimport quarterOfYear from 'dayjs/plugin/quarterOfYear'\nimport type { PickerColumn } from '../picker-view'\nimport type { DatePickerFilter } from './date-picker-utils'\n\ndayjs.extend(quarterOfYear)\n\nexport type QuarterPrecision = 'year' | 'quarter'\n\nconst precisionRankRecord: Record<QuarterPrecision, number> = {\n  year: 0,\n  quarter: 1,\n}\n\nexport function generateDatePickerColumns(\n  selected: string[],\n  min: Date,\n  max: Date,\n  precision: QuarterPrecision,\n  renderLabel: (\n    type: QuarterPrecision,\n    data: number,\n    info: {\n      selected: boolean\n    },\n  ) => string,\n  filter: DatePickerFilter | undefined,\n) {\n  const ret: PickerColumn[] = []\n\n  const minYear = min.getFullYear()\n  const maxYear = max.getFullYear()\n\n  const rank = precisionRankRecord[precision]\n\n  const selectedYear = parseInt(selected[0])\n  const isInMinYear = selectedYear === minYear\n  const isInMaxYear = selectedYear === maxYear\n\n  const minDay = dayjs(min)\n  const maxDay = dayjs(max)\n  const minQuarter = minDay.quarter()\n  const maxQuarter = maxDay.quarter()\n  const selectedQuarter = parseInt(selected[1])\n\n  const generateColumn = (from: number, to: number, precision: QuarterPrecision) => {\n    let column: number[] = []\n    for (let i = from; i <= to; i++) {\n      column.push(i)\n    }\n    const prefix = selected.slice(0, precisionRankRecord[precision])\n    const currentFilter = filter?.[precision]\n    if (currentFilter && typeof currentFilter === 'function') {\n      column = column.filter((i) =>\n        currentFilter(i, {\n          get date() {\n            const stringArray = [...prefix, i.toString()]\n            return convertStringArrayToDate(stringArray)\n          },\n        }),\n      )\n    }\n    return column\n  }\n\n  if (rank >= precisionRankRecord.year) {\n    const lower = minYear\n    const upper = maxYear\n    const years = generateColumn(lower, upper, 'year')\n    ret.push(\n      years.map((v) => ({\n        label: renderLabel('year', v, { selected: selectedYear === v }),\n        value: v.toString(),\n      })),\n    )\n  }\n\n  if (rank >= precisionRankRecord.quarter) {\n    const lower = isInMinYear ? minQuarter : 1\n    const upper = isInMaxYear ? maxQuarter : 4\n    const quarters = generateColumn(lower, upper, 'quarter')\n    ret.push(\n      quarters.map((v) => ({\n        label: renderLabel('quarter', v, { selected: selectedQuarter === v }),\n        value: v.toString(),\n      })),\n    )\n  }\n\n  return ret\n}\n\nexport function convertDateToStringArray(date: Date | undefined | null): string[] {\n  if (!date) return []\n  const day = dayjs(date)\n  return [day.year().toString(), day.quarter().toString()]\n}\n\nexport function convertStringArrayToDate<T extends string | number | null | undefined>(\n  value: T[],\n): Date {\n  const yearString = value[0] ?? '1900'\n  const quarterString = value[1] ?? '1'\n  const day = dayjs()\n    .year(parseInt(yearString as string))\n    .quarter(parseInt(quarterString as string))\n    .hour(0)\n    .minute(0)\n    .second(0)\n  return day.toDate()\n}\n","import dayjs from 'dayjs'\nimport isLeapYear from 'dayjs/plugin/isLeapYear'\nimport isoWeek from 'dayjs/plugin/isoWeek'\nimport isoWeeksInYear from 'dayjs/plugin/isoWeeksInYear'\nimport type { PickerColumn } from '../picker-view'\nimport type { DatePickerFilter } from './date-picker-utils'\n\ndayjs.extend(isoWeek)\ndayjs.extend(isoWeeksInYear)\ndayjs.extend(isLeapYear)\n\nexport type WeekPrecision = 'year' | 'week' | 'week-day'\n\nconst precisionRankRecord: Record<WeekPrecision, number> = {\n  year: 0,\n  week: 1,\n  'week-day': 2,\n}\n\nexport function generateDatePickerColumns(\n  selected: string[],\n  min: Date,\n  max: Date,\n  precision: WeekPrecision,\n  renderLabel: (\n    type: WeekPrecision,\n    data: number,\n    info: {\n      selected: boolean\n    },\n  ) => string,\n  filter: DatePickerFilter | undefined,\n) {\n  const ret: PickerColumn[] = []\n\n  const minYear = min.getFullYear()\n  const maxYear = max.getFullYear()\n\n  const rank = precisionRankRecord[precision]\n\n  const selectedYear = parseInt(selected[0])\n  const isInMinYear = selectedYear === minYear\n  const isInMaxYear = selectedYear === maxYear\n\n  const minDay = dayjs(min)\n  const maxDay = dayjs(max)\n  const minWeek = minDay.isoWeek()\n  const maxWeek = maxDay.isoWeek()\n  const minWeekday = minDay.isoWeekday()\n  const maxWeekday = maxDay.isoWeekday()\n  const selectedWeek = parseInt(selected[1])\n  const selectedWeekday = parseInt(selected[2])\n  const isInMinWeek = isInMinYear && selectedWeek === minWeek\n  const isInMaxWeek = isInMaxYear && selectedWeek === maxWeek\n  const selectedYearWeeks = dayjs(`${selectedYear}-01-01`).isoWeeksInYear()\n\n  const generateColumn = (from: number, to: number, precision: WeekPrecision) => {\n    let column: number[] = []\n    for (let i = from; i <= to; i++) {\n      column.push(i)\n    }\n    const prefix = selected.slice(0, precisionRankRecord[precision])\n    const currentFilter = filter?.[precision]\n    if (currentFilter && typeof currentFilter === 'function') {\n      column = column.filter((i) =>\n        currentFilter(i, {\n          get date() {\n            const stringArray = [...prefix, i.toString()]\n            return convertStringArrayToDate(stringArray)\n          },\n        }),\n      )\n    }\n    return column\n  }\n\n  if (rank >= precisionRankRecord.year) {\n    const lower = minYear\n    const upper = maxYear\n    const years = generateColumn(lower, upper, 'year')\n    ret.push(\n      years.map((v) => ({\n        label: renderLabel('year', v, { selected: selectedYear === v }),\n        value: v.toString(),\n      })),\n    )\n  }\n\n  if (rank >= precisionRankRecord.week) {\n    const lower = isInMinYear ? minWeek : 1\n    const upper = isInMaxYear ? maxWeek : selectedYearWeeks\n    const weeks = generateColumn(lower, upper, 'week')\n    ret.push(\n      weeks.map((v) => ({\n        label: renderLabel('week', v, { selected: selectedWeek === v }),\n        value: v.toString(),\n      })),\n    )\n  }\n  if (rank >= precisionRankRecord['week-day']) {\n    const lower = isInMinWeek ? minWeekday : 1\n    const upper = isInMaxWeek ? maxWeekday : 7\n    const weeks = generateColumn(lower, upper, 'week-day')\n    ret.push(\n      weeks.map((v) => ({\n        label: renderLabel('week-day', v, { selected: selectedWeekday === v }),\n        value: v.toString(),\n      })),\n    )\n  }\n\n  return ret\n}\n\nexport function convertDateToStringArray(date: Date | undefined | null): string[] {\n  if (!date) return []\n  const day = dayjs(date)\n  return [day.isoWeekYear().toString(), day.isoWeek().toString(), day.isoWeekday().toString()]\n}\n\nexport function convertStringArrayToDate<T extends string | number | null | undefined>(\n  value: T[],\n): Date {\n  const yearString = value[0] ?? '1900'\n  const weekString = value[1] ?? '1'\n  const weekdayString = value[2] ?? '1'\n  // See https://github.com/ant-design/ant-design-mobile/issues/6905\n  const day = dayjs(`${parseInt(yearString as string)}-01-04`)\n    .isoWeek(parseInt(weekString as string))\n    .isoWeekday(parseInt(weekdayString as string))\n    .hour(0)\n    .minute(0)\n    .second(0)\n  return day.toDate()\n}\n","import type { RenderLabel } from '../date-picker-view/date-picker-view.vue'\nimport type { DatePrecision } from './date-picker-date-utils'\nimport * as dateUtils from './date-picker-date-utils'\nimport type { QuarterPrecision } from './date-picker-quarter-utils'\nimport * as quarterUtils from './date-picker-quarter-utils'\nimport type { WeekPrecision } from './date-picker-week-utils'\nimport * as weekUtils from './date-picker-week-utils'\nimport type { PickerDate } from './util'\nimport { TILL_NOW } from './util'\n\nexport type Precision = DatePrecision | WeekPrecision | QuarterPrecision\n\nexport type DatePickerFilter = Partial<\n  Record<\n    Precision,\n    (\n      val: number,\n      extend: {\n        date: Date\n      },\n    ) => boolean\n  >\n>\n\nconst precisionLengthRecord: Record<DatePrecision, number> = {\n  year: 1,\n  month: 2,\n  day: 3,\n  hour: 4,\n  minute: 5,\n  second: 6,\n}\n\nexport const convertDateToStringArray = (date: Date | undefined | null, precision: Precision) => {\n  if (precision.includes('week')) {\n    return weekUtils.convertDateToStringArray(date)\n  } else if (precision.includes('quarter')) {\n    return quarterUtils.convertDateToStringArray(date)\n  } else {\n    const datePrecision = precision as DatePrecision\n    const stringArray = dateUtils.convertDateToStringArray(date)\n    return stringArray.slice(0, precisionLengthRecord[datePrecision])\n  }\n}\n\nexport const convertStringArrayToDate = <T extends string | number | null | undefined>(\n  value: T[],\n  precision: Precision,\n) => {\n  // Special case for DATE_NOW\n  if (value?.[0] === TILL_NOW) {\n    const now: PickerDate = new Date()\n    now.tillNow = true\n    return now\n  }\n\n  if (precision.includes('week')) {\n    return weekUtils.convertStringArrayToDate(value)\n  } else if (precision.includes('quarter')) {\n    return quarterUtils.convertStringArrayToDate(value)\n  } else {\n    return dateUtils.convertStringArrayToDate(value)\n  }\n}\n\nexport const generateDatePickerColumns = (\n  selected: string[],\n  min: Date,\n  max: Date,\n  precision: Precision,\n  renderLabel: RenderLabel,\n  filter: DatePickerFilter | undefined,\n  tillNow?: boolean,\n) => {\n  if (precision.startsWith('week')) {\n    return weekUtils.generateDatePickerColumns(\n      selected,\n      min,\n      max,\n      precision as WeekPrecision,\n      renderLabel,\n      filter,\n    )\n  } else if (precision.startsWith('quarter')) {\n    return quarterUtils.generateDatePickerColumns(\n      selected,\n      min,\n      max,\n      precision as QuarterPrecision,\n      renderLabel,\n      filter,\n    )\n  } else {\n    return dateUtils.generateDatePickerColumns(\n      selected,\n      min,\n      max,\n      precision as DatePrecision,\n      renderLabel,\n      filter,\n      tillNow,\n    )\n  }\n}\n","import { createApp, h, type App } from 'vue'\r\nimport type { PickerValue } from '../picker-view'\r\nimport type { PickerProps } from './picker.vue'\r\nimport Picker from './picker.vue'\r\n\r\nexport function prompt(\r\n  props: Omit<PickerProps, 'value' | 'visible'>,\r\n): Promise<PickerValue[] | null> {\r\n  return new Promise<PickerValue[] | null>((resolve) => {\r\n    // 创建容器元素\r\n    const container = document.createElement('div')\r\n    document.body.appendChild(container)\r\n\r\n    // 创建 Vue 应用实例\r\n    const app: App = createApp({\r\n      setup() {\r\n        return {\r\n          visible: true,\r\n          handleConfirm: (val: PickerValue[]) => {\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            props.onConfirm?.(val, {} as any)\r\n            resolve(val)\r\n            cleanup()\r\n          },\r\n          handleClose: () => {\r\n            props.onClose?.()\r\n            resolve(null)\r\n            cleanup()\r\n          },\r\n          handleAfterClose: () => {\r\n            props.afterClose?.()\r\n            cleanup()\r\n          },\r\n        }\r\n      },\r\n      render() {\r\n        return h(Picker, {\r\n          ...props,\r\n          visible: this.visible,\r\n          onConfirm: this.handleConfirm,\r\n          onClose: this.handleClose,\r\n          afterClose: this.handleAfterClose,\r\n        })\r\n      },\r\n    })\r\n\r\n    // 清理函数\r\n    const cleanup = () => {\r\n      app.unmount()\r\n      if (container.parentNode) {\r\n        container.parentNode.removeChild(container)\r\n      }\r\n    }\r\n\r\n    // 挂载应用\r\n    app.mount(container)\r\n  })\r\n}\r\n","<template>\r\n  <Picker\r\n    ref=\"pickerRef\"\r\n    :columns=\"columns\"\r\n    :value=\"pickerValue\"\r\n    @confirm=\"onConfirm\"\r\n    @select=\"onSelect\"\r\n    @cancel=\"handleCancel\"\r\n    @close=\"handleClose\"\r\n    :close-on-mask-click=\"closeOnMaskClick\"\r\n    :visible=\"visible\"\r\n    :confirm-text=\"confirmText\"\r\n    :cancel-text=\"cancelText\"\r\n    :get-container=\"getContainer\"\r\n    :loading=\"loading\"\r\n    :loading-content=\"loadingContent\"\r\n    @after-show=\"handleAfterShow\"\r\n    @after-close=\"handleAfterClose\"\r\n    @click=\"handleClick\"\r\n    :title=\"title\"\r\n    :stop-propagation=\"stopPropagation\"\r\n    :mouse-wheel=\"mouseWheel\"\r\n    :destroy-on-close=\"destroyOnClose\"\r\n    :force-render=\"forceRender\"\r\n  >\r\n    <template #default=\"{ actions }\">\r\n      <slot :value=\"currentValue || null\" :actions=\"actions\">\r\n        <span v-if=\"children\">{{ children(currentValue || null, actions) }}</span>\r\n      </slot>\r\n    </template>\r\n  </Picker>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { VNode } from 'vue'\r\nimport { computed, ref, watch } from 'vue'\r\nimport {\r\n  convertDateToStringArray,\r\n  convertStringArrayToDate,\r\n  generateDatePickerColumns,\r\n  type DatePickerFilter,\r\n  type Precision,\r\n} from './date-picker-utils'\r\nimport { TILL_NOW, type PickerDate } from './util'\r\nimport type { PickerColumn as ReactPickerColumn } from '../picker-view'\r\nimport { bound } from '../../utils/bound'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport type { RenderLabel } from '../date-picker-view/useRenderLabel'\r\nimport { Picker, type PickerActions } from '../picker/index'\r\nimport type {\r\n  PickerValue,\r\n  PickerColumn as VuePickerColumn,\r\n  PickerColumnItem as VuePickerColumnItem,\r\n} from '../picker-view/types.ts'\r\n\r\nimport { type Ref } from 'vue'\r\n\r\nexport type DatePickerRef = {\r\n  getActions: () => PickerActions\r\n  pickerRef: Ref<InstanceType<typeof Picker>>\r\n}\r\n\r\nexport interface DatePickerProps {\r\n  value?: PickerDate | null\r\n  defaultValue?: PickerDate | null\r\n  onSelect?: (value: PickerDate) => void\r\n  onConfirm?: (value: PickerDate) => void\r\n  onCancel?: () => void\r\n  onClose?: () => void\r\n  closeOnMaskClick?: boolean\r\n  visible?: boolean\r\n  confirmText?: string\r\n  cancelText?: string\r\n  getContainer?: () => HTMLElement\r\n  loading?: boolean\r\n  loadingContent?: VNode | string\r\n  afterShow?: () => void\r\n  afterClose?: () => void\r\n  onClick?: () => void\r\n  title?: string\r\n  stopPropagation?: Array<'click'>\r\n  mouseWheel?: boolean\r\n  forceRender?: boolean\r\n  destroyOnClose?: boolean\r\n  min?: PickerDate\r\n  max?: PickerDate\r\n  precision?: Precision\r\n  children?: (value: PickerDate | null, actions: PickerActions) => VNode | string\r\n  renderLabel?: RenderLabel\r\n  filter?: DatePickerFilter\r\n  tillNow?: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<DatePickerProps>(), {\r\n  min: () => new Date(new Date().getFullYear() - 10, 0, 1),\r\n  max: () => new Date(new Date().getFullYear() + 10, 11, 31),\r\n  precision: 'day' as Precision,\r\n  defaultValue: undefined,\r\n  value: undefined,\r\n  closeOnMaskClick: true,\r\n  visible: undefined,\r\n  loading: false,\r\n  mouseWheel: false,\r\n  forceRender: false,\r\n  destroyOnClose: false,\r\n  tillNow: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:value': [value: PickerDate | null]\r\n  'update:visible': [visible: boolean]\r\n  confirm: [value: PickerDate]\r\n  select: [value: PickerDate]\r\n  cancel: []\r\n  close: []\r\n  'after-show': []\r\n  'after-close': []\r\n  click: []\r\n}>()\r\n\r\n// Ref to picker instance\r\nconst pickerRef = ref<InstanceType<typeof Picker>>()\r\n\r\n// State management\r\nconst innerValue = ref<PickerDate | null>(props.value ?? props.defaultValue ?? null)\r\nconst isControlled = computed(() => props.value !== undefined)\r\nconsole.log(props.value)\r\nconst currentValue = computed(() => (isControlled.value ? props.value : innerValue.value))\r\n\r\n// Get locale and config\r\nconst { locale } = useConfig()\r\n\r\n// Current date for default\r\nconst now = computed<PickerDate>(() => new Date())\r\n\r\n// Merged render label\r\nconst mergedRenderLabel = computed(() => {\r\n  if (props.renderLabel) {\r\n    return props.renderLabel\r\n  }\r\n\r\n  // Default render label based on locale\r\n  if (locale.locale.startsWith('zh')) {\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    return (type: Precision | 'now', data: number, info: { selected: boolean }) => {\r\n      switch (type) {\r\n        case 'year':\r\n          return data + '年'\r\n        case 'month':\r\n          return data + '月'\r\n        case 'day':\r\n          return data + '日'\r\n        case 'hour':\r\n          return data + '时'\r\n        case 'minute':\r\n          return data + '分'\r\n        case 'second':\r\n          return data + '秒'\r\n        case 'now':\r\n          return '至今'\r\n        default:\r\n          return data.toString()\r\n      }\r\n    }\r\n  }\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n  return (type: Precision | 'now', data: number, info: { selected: boolean }) => {\r\n    if (type === 'now') {\r\n      return 'Now'\r\n    }\r\n    return data.toString()\r\n  }\r\n})\r\n\r\n// Convert current value to picker value\r\nconst pickerValue = computed(() => {\r\n  let date = currentValue.value ?? now.value\r\n\r\n  if (date.tillNow) {\r\n    return [TILL_NOW]\r\n  }\r\n  date = new Date(bound(date.getTime(), props.min!.getTime(), props.max!.getTime()))\r\n  return convertDateToStringArray(date, props.precision!)\r\n})\r\n\r\n// Generate columns function with type adaptation\r\nconst adaptColumns = (reactColumns: ReactPickerColumn[]): VuePickerColumn[] => {\r\n  return reactColumns.map((column) =>\r\n    column.map((item) => {\r\n      if (typeof item === 'string') {\r\n        return item\r\n      }\r\n      // Convert ReactPickerColumnItem to VuePickerColumnItem\r\n      const vueItem: VuePickerColumnItem = {\r\n        value: item.value,\r\n        label:\r\n          typeof item.label === 'string' || typeof item.label === 'number'\r\n            ? item.label\r\n            : String(item.value), // Fallback for ReactNode\r\n        key: item.key,\r\n      }\r\n      return vueItem\r\n    }),\r\n  )\r\n}\r\n\r\nconst columns = computed(() => {\r\n  return (selected: PickerValue[]) => {\r\n    const reactColumns = generateDatePickerColumns(\r\n      selected as string[],\r\n      props.min!,\r\n      props.max!,\r\n      props.precision!,\r\n      mergedRenderLabel.value,\r\n      props.filter,\r\n      props.tillNow,\r\n    )\r\n    return adaptColumns(reactColumns)\r\n  }\r\n})\r\n\r\n// Event handlers\r\nconst onConfirm = (val: PickerValue[]) => {\r\n  const date = convertStringArrayToDate(val, props.precision!)\r\n  setValue(date)\r\n  emit('confirm', date)\r\n}\r\n\r\nconst onSelect = (val: PickerValue[]) => {\r\n  const date = convertStringArrayToDate(val, props.precision!)\r\n  emit('select', date)\r\n  props.onSelect?.(date)\r\n}\r\n\r\nconst handleCancel = () => {\r\n  emit('cancel')\r\n  props.onCancel?.()\r\n}\r\n\r\nconst handleClose = () => {\r\n  emit('close')\r\n  props.onClose?.()\r\n}\r\n\r\nconst handleAfterShow = () => {\r\n  emit('after-show')\r\n  props.afterShow?.()\r\n}\r\n\r\nconst handleAfterClose = () => {\r\n  emit('after-close')\r\n  props.afterClose?.()\r\n}\r\n\r\nconst handleClick = () => {\r\n  emit('click')\r\n  props.onClick?.()\r\n}\r\n\r\n// Set value helper\r\nconst setValue = (newValue: PickerDate | null) => {\r\n  if (!isControlled.value) {\r\n    innerValue.value = newValue\r\n  }\r\n  emit('update:value', newValue)\r\n  if (newValue !== null) {\r\n    props.onConfirm?.(newValue)\r\n  }\r\n}\r\n\r\n// Expose picker actions\r\nconst getActions = (): PickerActions => {\r\n  return (\r\n    pickerRef.value?.actions || {\r\n      close: () => {},\r\n      open: () => {},\r\n      toggle: () => {},\r\n    }\r\n  )\r\n}\r\n\r\n// Watch for external value changes\r\nwatch(\r\n  () => props.value,\r\n  (newValue) => {\r\n    if (isControlled.value && newValue !== currentValue.value) {\r\n      // Value changed externally, no need to emit\r\n    }\r\n  },\r\n)\r\n\r\n// Expose methods for template refs\r\ndefineExpose({\r\n  getActions,\r\n  pickerRef,\r\n})\r\n</script>\r\n","<template>\r\n  <DatePicker\r\n    v-model:value=\"currentValue\"\r\n    v-model:visible=\"visible\"\r\n    @confirm=\"handleConfirm\"\r\n    @cancel=\"handleCancel\"\r\n    @close=\"handleClose\"\r\n    @after-close=\"handleAfterClose\"\r\n    v-bind=\"pickerProps\"\r\n  />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, onMounted } from 'vue'\r\nimport DatePicker from './date-picker.vue'\r\nimport type { DatePickerProps } from './date-picker.vue'\r\nimport type { PickerDate } from './util'\r\n\r\ninterface PromptComponentProps extends Omit<DatePickerProps, 'visible' | 'value'> {\r\n  defaultValue?: PickerDate | null\r\n  onResolve?: (value: PickerDate) => void\r\n  onReject?: (error: Error) => void\r\n}\r\n\r\nconst props = withDefaults(defineProps<PromptComponentProps>(), {\r\n  defaultValue: null,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  resolve: [value: PickerDate]\r\n  reject: [error: Error]\r\n}>()\r\n\r\n// 状态\r\nconst visible = ref(true)\r\nconst currentValue = ref<PickerDate | null>(props.defaultValue)\r\n\r\n// 计算属性，过滤掉 prompt 特有的属性\r\nconst pickerProps = computed(() => {\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n  const { defaultValue, onResolve, onReject, ...rest } = props\r\n  return rest\r\n})\r\n\r\n// 事件处理\r\nconst handleConfirm = (value: PickerDate) => {\r\n  visible.value = false\r\n  emit('resolve', value)\r\n  props.onResolve?.(value)\r\n  // 延迟处理，等待动画完成\r\n  setTimeout(() => {}, 300)\r\n}\r\n\r\nconst handleCancel = () => {\r\n  visible.value = false\r\n  const error = new Error('User cancelled')\r\n  emit('reject', error)\r\n  props.onReject?.(error)\r\n  // 延迟处理，等待动画完成\r\n  setTimeout(() => {}, 300)\r\n}\r\n\r\nconst handleClose = () => {\r\n  visible.value = false\r\n  const error = new Error('User cancelled')\r\n  emit('reject', error)\r\n  props.onReject?.(error)\r\n  // 延迟处理，等待动画完成\r\n  setTimeout(() => {}, 300)\r\n}\r\n\r\nconst handleAfterClose = () => {\r\n  // 动画完成后可以进行清理\r\n}\r\n\r\n// 自动显示\r\nonMounted(() => {\r\n  visible.value = true\r\n})\r\n</script>\r\n","import { createApp, type App } from 'vue'\r\nimport PromptComponent from './prompt.vue'\r\nimport type { DatePickerProps } from './date-picker.vue'\r\nimport type { PickerDate } from './util'\r\n\r\nexport interface DatePickerPromptOptions\r\n  extends Omit<DatePickerProps, 'visible' | 'value' | 'defaultValue'> {\r\n  defaultValue?: PickerDate | null\r\n}\r\n\r\nexport interface DatePickerPromptResult {\r\n  confirm: (value: PickerDate | null) => Promise<PickerDate>\r\n  close: () => void\r\n}\r\n\r\nlet currentApp: App | null = null\r\n\r\nexport function showDatePicker(options: DatePickerPromptOptions = {}): Promise<PickerDate> {\r\n  return new Promise((resolve, reject) => {\r\n    // 如果已有实例，先清理\r\n    if (currentApp) {\r\n      currentApp.unmount()\r\n      currentApp = null\r\n    }\r\n\r\n    // 创建容器\r\n    const container = document.createElement('div')\r\n    document.body.appendChild(container)\r\n\r\n    // 清理函数\r\n    const cleanup = () => {\r\n      if (currentApp) {\r\n        currentApp.unmount()\r\n        currentApp = null\r\n      }\r\n      if (container.parentNode) {\r\n        container.parentNode.removeChild(container)\r\n      }\r\n    }\r\n\r\n    // 事件处理\r\n    const handleResolve = (value: PickerDate) => {\r\n      resolve(value)\r\n      setTimeout(cleanup, 300) // 延迟清理，等待动画\r\n    }\r\n\r\n    const handleReject = (error: Error) => {\r\n      reject(error)\r\n      setTimeout(cleanup, 300) // 延迟清理，等待动画\r\n    }\r\n\r\n    // 创建 Vue 应用实例，传入完整的 props\r\n    currentApp = createApp(PromptComponent, {\r\n      ...options,\r\n      onResolve: handleResolve,\r\n      onReject: handleReject,\r\n    })\r\n\r\n    currentApp.mount(container)\r\n  })\r\n}\r\n\r\n// 便捷方法：显示日期选择器\r\nexport const datePicker = showDatePicker\r\n\r\n// 便捷方法：显示年份选择器\r\nexport function showYearPicker(\r\n  options: Omit<DatePickerPromptOptions, 'precision'> = {},\r\n): Promise<PickerDate> {\r\n  return showDatePicker({\r\n    ...options,\r\n    precision: 'year',\r\n  })\r\n}\r\n\r\n// 便捷方法：显示月份选择器\r\nexport function showMonthPicker(\r\n  options: Omit<DatePickerPromptOptions, 'precision'> = {},\r\n): Promise<PickerDate> {\r\n  return showDatePicker({\r\n    ...options,\r\n    precision: 'month',\r\n  })\r\n}\r\n\r\n// 便捷方法：显示时间选择器\r\nexport function showTimePicker(\r\n  options: Omit<DatePickerPromptOptions, 'precision'> = {},\r\n): Promise<PickerDate> {\r\n  return showDatePicker({\r\n    ...options,\r\n    precision: 'minute',\r\n  })\r\n}\r\n\r\n// 便捷方法：显示日期时间选择器\r\nexport function showDateTimePicker(\r\n  options: Omit<DatePickerPromptOptions, 'precision'> = {},\r\n): Promise<PickerDate> {\r\n  return showDatePicker({\r\n    ...options,\r\n    precision: 'minute',\r\n  })\r\n}\r\n\r\n// 命名空间导出\r\nexport const DatePickerPrompt = {\r\n  show: showDatePicker,\r\n  showYear: showYearPicker,\r\n  showMonth: showMonthPicker,\r\n  showTime: showTimePicker,\r\n  showDateTime: showDateTimePicker,\r\n}\r\n\r\n// 默认导出\r\nexport default DatePickerPrompt\r\n","<template>\r\n  <PickerView\r\n    :columns=\"columns\"\r\n    :value=\"pickerValue\"\r\n    @change=\"handlePickerChange\"\r\n    :mouse-wheel=\"props.mouseWheel\"\r\n    :className=\"props.className\"\r\n    :style=\"props.style\"\r\n  />\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport type { CSSProperties } from 'vue'\r\nexport type RenderLabel = (\r\n  type: Precision | 'now',\r\n  data: number,\r\n  info: {\r\n    selected: boolean\r\n  },\r\n) => string\r\n\r\nexport interface DatePickerViewProps {\r\n  value?: Date | null\r\n  defaultValue?: Date | null\r\n  precision?: Precision\r\n  min?: Date\r\n  max?: Date\r\n  renderLabel?: RenderLabel\r\n  filter?: DatePickerFilter\r\n  mouseWheel?: boolean\r\n  tillNow?: boolean\r\n  className?: string\r\n  style?: CSSProperties\r\n}\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport {\r\n  convertDateToStringArray,\r\n  convertStringArrayToDate,\r\n  generateDatePickerColumns,\r\n  type DatePickerFilter,\r\n  type Precision,\r\n} from '../date-picker/date-picker-utils'\r\nimport type { PickerColumn as ReactPickerColumn } from '../picker-view/index'\r\nimport type { Locale } from '../../locales/base'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport PickerView from '../picker-view/picker-view.vue'\r\nimport type {\r\n  PickerValue,\r\n  PickerValueExtend,\r\n  PickerColumn as VuePickerColumn,\r\n  PickerColumnItem as VuePickerColumnItem,\r\n} from '../picker-view/types'\r\nimport { TILL_NOW, type PickerDate } from '../date-picker/util'\r\n\r\n// Inline useRenderLabel functionality\r\nconst zhCNRenderLabel = (type: Precision | 'now', data: number, info: { selected: boolean }) => {\r\n  switch (type) {\r\n    case 'year':\r\n      return data + '年'\r\n    case 'month':\r\n      return data + '月'\r\n    case 'day':\r\n      return data + '日'\r\n    case 'hour':\r\n      return data + '时'\r\n    case 'minute':\r\n      return data + '分'\r\n    case 'second':\r\n      return data + '秒'\r\n    case 'now':\r\n      return '至今'\r\n    default:\r\n      return data.toString()\r\n  }\r\n}\r\n\r\nconst enUSRenderLabel = (type: Precision | 'now', data: number, info: { selected: boolean }) => {\r\n  if (type === 'now') {\r\n    return 'Now'\r\n  }\r\n  return data.toString()\r\n}\r\n\r\nconst createRenderLabel = (\r\n  customRenderLabel: RenderLabel | undefined,\r\n  locale: Locale,\r\n): RenderLabel => {\r\n  if (customRenderLabel) {\r\n    return customRenderLabel\r\n  }\r\n\r\n  // Default render label based on locale\r\n  if (locale.locale.startsWith('zh')) {\r\n    return zhCNRenderLabel\r\n  }\r\n  return enUSRenderLabel\r\n}\r\n\r\nconst props = withDefaults(defineProps<DatePickerViewProps>(), {\r\n  precision: 'day' as Precision,\r\n  mouseWheel: false,\r\n  tillNow: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:value': [value: Date | null]\r\n  change: [value: PickerDate | null]\r\n}>()\r\n\r\n// State management\r\nconst innerValue = ref(props.defaultValue ?? null)\r\nconst isControlled = computed(() => props.value !== undefined)\r\n\r\nconst currentValue = computed(() => (isControlled.value ? props.value : innerValue.value))\r\n\r\n// Get locale and config\r\nconst { locale } = useConfig()\r\n\r\n// Render label functionality\r\nconst renderLabel = computed(() => createRenderLabel(props.renderLabel, locale))\r\n\r\n// Min/max dates with defaults\r\nconst minDate = computed(() => props.min ?? new Date(1900, 0, 1, 0, 0, 0))\r\nconst maxDate = computed(() => props.max ?? new Date(2100, 11, 31, 23, 59, 59))\r\n\r\n// Convert date to picker value - 处理 tillNow 的情况\r\nconst pickerValue = computed(() => {\r\n  // 如果 tillNow 为 true 且当前值为 null，表示选择了 \"至今\"\r\n  if (props.tillNow && currentValue.value === null) {\r\n    // 返回一个全部为 TILL_NOW 的数组\r\n    const precisionLevels = {\r\n      year: 1,\r\n      month: 2,\r\n      day: 3,\r\n      hour: 4,\r\n      minute: 5,\r\n      second: 6,\r\n    }\r\n    const levels = precisionLevels[props.precision as keyof typeof precisionLevels] || 3\r\n    return Array(levels).fill(TILL_NOW)\r\n  }\r\n  return convertDateToStringArray(currentValue.value, props.precision)\r\n})\r\n\r\n// Adapter function to convert React PickerColumn to Vue PickerColumn\r\nconst adaptColumns = (reactColumns: ReactPickerColumn[]): VuePickerColumn[] => {\r\n  return reactColumns.map((column) =>\r\n    column.map((item) => {\r\n      if (typeof item === 'string') {\r\n        return item\r\n      }\r\n      // Convert ReactPickerColumnItem to VuePickerColumnItem\r\n      const vueItem: VuePickerColumnItem = {\r\n        value: item.value,\r\n        label:\r\n          typeof item.label === 'string' || typeof item.label === 'number'\r\n            ? item.label\r\n            : String(item.value), // Fallback for ReactNode\r\n        key: item.key,\r\n      }\r\n      return vueItem\r\n    }),\r\n  )\r\n}\r\n\r\n// Generate picker columns\r\nconst columns = computed(() => {\r\n  // 确保传入的值是有效的\r\n  let validPickerValue = [...pickerValue.value]\r\n\r\n  // 如果有年月日，检查日期是否有效\r\n  if (validPickerValue.length >= 3) {\r\n    const year = parseInt(validPickerValue[0])\r\n    const month = parseInt(validPickerValue[1])\r\n    const day = parseInt(validPickerValue[2])\r\n\r\n    // 获取当前月份的最大天数\r\n    const maxDayInMonth = new Date(year, month, 0).getDate()\r\n\r\n    // 如果日期无效，调整为该月最后一天\r\n    if (day > maxDayInMonth) {\r\n      validPickerValue = [...validPickerValue]\r\n      validPickerValue[2] = maxDayInMonth.toString()\r\n    }\r\n  }\r\n\r\n  const reactColumns = generateDatePickerColumns(\r\n    validPickerValue,\r\n    minDate.value,\r\n    maxDate.value,\r\n    props.precision,\r\n    renderLabel.value,\r\n    props.filter,\r\n    props.tillNow,\r\n  )\r\n  const adapted = adaptColumns(reactColumns)\r\n  return adapted\r\n})\r\n\r\n// Handle picker change - 修改 tillNow 的检测逻辑\r\nconst handlePickerChange = (value: PickerValue[], extend: PickerValueExtend) => {\r\n  if (!value || value.length === 0) {\r\n    return\r\n  }\r\n\r\n  const stringValues = value.map((v) => {\r\n    if (v === null || v === undefined) return null\r\n    return typeof v === 'string' ? v : (v?.toString() ?? null)\r\n  })\r\n\r\n  // 检查是否选择了 \"至今\" 选项 - 检查任意位置是否有 TILL_NOW\r\n  if (props.tillNow && stringValues.includes(TILL_NOW)) {\r\n    setValue(null)\r\n    return\r\n  }\r\n\r\n  // 先检查并调整日期值\r\n  if (stringValues.length >= 3) {\r\n    const year = parseInt(stringValues[0] || '2024')\r\n    const month = parseInt(stringValues[1] || '1')\r\n    const day = parseInt(stringValues[2] || '1')\r\n\r\n    // 获取当前月份的最大天数\r\n    const maxDayInMonth = new Date(year, month, 0).getDate()\r\n\r\n    // 如果日期超出范围，调整为最大值\r\n    if (day > maxDayInMonth) {\r\n      stringValues[2] = maxDayInMonth.toString()\r\n    }\r\n  }\r\n\r\n  const date = convertStringArrayToDate(stringValues, props.precision)\r\n\r\n  if (date && !isNaN(date.getTime())) {\r\n    // 检查新日期是否与当前日期相同，避免重复设置\r\n    if (!currentValue.value || date.getTime() !== currentValue.value.getTime()) {\r\n      setValue(date)\r\n    }\r\n  }\r\n}\r\n\r\n// Set value helper - 简化逻辑\r\nconst setValue = (newValue: Date | null) => {\r\n  if (!isControlled.value) {\r\n    innerValue.value = newValue\r\n  }\r\n  const valueToEmit: PickerDate = newValue ? newValue : new Date()\r\n  valueToEmit.tillNow = !newValue\r\n  emit('update:value', valueToEmit)\r\n  emit('change', valueToEmit)\r\n}\r\n\r\n// Watch for external value changes\r\nwatch(\r\n  () => props.value,\r\n  (newValue) => {\r\n    if (isControlled.value && newValue !== currentValue.value) {\r\n      // Value changed externally, no need to emit\r\n    }\r\n  },\r\n)\r\n</script>\r\n","import type { ComputedRef, Ref } from 'vue'\r\nimport { computed } from 'vue'\r\nimport type { Precision } from '../date-picker/date-picker-utils'\r\nimport type { Locale } from '../../locales/base'\r\n\r\nexport type RenderLabel = (\r\n  type: Precision | 'now',\r\n  data: number,\r\n  info: {\r\n    selected: boolean\r\n  },\r\n) => string\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nconst zhCNRenderLabel = (type: Precision | 'now', data: number, info: { selected: boolean }) => {\r\n  switch (type) {\r\n    case 'year':\r\n      return data + '年'\r\n    case 'month':\r\n      return data + '月'\r\n    case 'day':\r\n      return data + '日'\r\n    case 'hour':\r\n      return data + '时'\r\n    case 'minute':\r\n      return data + '分'\r\n    case 'second':\r\n      return data + '秒'\r\n    case 'now':\r\n      return '至今'\r\n    default:\r\n      return data.toString()\r\n  }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nconst enUSRenderLabel = (type: Precision | 'now', data: number, info: { selected: boolean }) => {\r\n  if (type === 'now') {\r\n    return 'Now'\r\n  }\r\n  return data.toString()\r\n}\r\n\r\nexport function useRenderLabel(\r\n  customRenderLabel: ComputedRef<RenderLabel | undefined>,\r\n  locale: Ref<Locale>,\r\n): ComputedRef<RenderLabel> {\r\n  return computed(() => {\r\n    if (customRenderLabel.value) {\r\n      return customRenderLabel.value\r\n    }\r\n\r\n    // Default render label based on locale\r\n    if (locale.value.locale.startsWith('zh')) {\r\n      return zhCNRenderLabel\r\n    }\r\n    return enUSRenderLabel\r\n  })\r\n}\r\n","<template>\r\n  <div class=\"demoBlock\">\r\n    <div class=\"demoTitle\">{{ title }}</div>\r\n    <div class=\"demoMain\" :style=\"{ padding, background }\">\r\n      <slot />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\ninterface Props {\r\n  title: string\r\n  padding?: string\r\n  background?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n  padding: '12px 12px',\r\n  background: 'var(--adm-color-background)',\r\n})\r\n\r\nconst { title, padding, background } = props\r\n</script>\r\n\r\n<style lang=\"less\">\r\n@import './index.less';\r\n</style>\r\n","<template>\r\n  <Button\r\n    :key=\"action.key\"\r\n    :class=\"buttonClasses\"\r\n    :disabled=\"action.disabled || loading\"\r\n    :loading=\"loading\"\r\n    :style=\"nativeStyle\"\r\n    fill=\"none\"\r\n    shape=\"rectangular\"\r\n    block\r\n    :color=\"action.danger ? 'danger' : 'primary'\"\r\n    @click=\"handleClick\"\r\n    v-bind=\"ariaProps\"\r\n  >\r\n    <slot v-if=\"$slots.default\" />\r\n    <template v-else>{{ action.text }}</template>\r\n  </Button>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, type CSSProperties, type VNode } from 'vue'\r\nimport Button from '../button/index.vue'\r\n\r\n// Types\r\nexport interface Action {\r\n  key: string | number\r\n  text: string | VNode // Vue equivalent of ReactNode\r\n  disabled?: boolean\r\n  danger?: boolean\r\n  bold?: boolean\r\n  onClick?: () => void | Promise<void>\r\n  // Native props\r\n  className?: string\r\n  style?: CSSProperties\r\n  tabIndex?: number\r\n  [key: `data-${string}`]: string | number\r\n  [key: `aria-${string}`]: string | number\r\n}\r\n\r\nexport interface DialogActionButtonProps {\r\n  action: Action\r\n  loading?: boolean\r\n}\r\n\r\nexport interface DialogActionButtonEmits {\r\n  (e: 'action'): void | Promise<void>\r\n}\r\n\r\n// Props\r\nconst props = withDefaults(defineProps<DialogActionButtonProps>(), {\r\n  loading: false,\r\n})\r\n\r\n// Emits\r\nconst emit = defineEmits<DialogActionButtonEmits>()\r\n\r\n// Computed\r\nconst buttonClasses = computed(() => {\r\n  const baseClass = 'adm-dialog-button'\r\n  const classes = [baseClass]\r\n\r\n  if (props.action.bold) {\r\n    classes.push('adm-dialog-button-bold')\r\n  }\r\n\r\n  if (props.action.className) {\r\n    classes.push(props.action.className)\r\n  }\r\n\r\n  return classes\r\n})\r\n\r\nconst nativeStyle = computed(() => {\r\n  return props.action.style || {}\r\n})\r\n\r\nconst ariaProps = computed(() => {\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  const result: Record<string, any> = {}\r\n\r\n  // Add tabIndex\r\n  if (props.action.tabIndex !== undefined) {\r\n    result.tabIndex = props.action.tabIndex\r\n  }\r\n\r\n  // Add data-* and aria-* attributes\r\n  Object.keys(props.action).forEach((key) => {\r\n    if (key.startsWith('data-') || key.startsWith('aria-')) {\r\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n      result[key] = (props.action as any)[key]\r\n    }\r\n  })\r\n\r\n  return result\r\n})\r\n\r\n// Methods\r\nconst handleClick = () => {\r\n  emit('action')\r\n}\r\n</script>\r\n","<template>\r\n  <CenterPopup\r\n    :className=\"popupClasses.join(' ')\"\r\n    :style=\"nativeStyle\"\r\n    :after-close=\"afterClose\"\r\n    :after-show=\"afterShow\"\r\n    :visible=\"visible\"\r\n    :get-container=\"getContainer\"\r\n    :body-style=\"bodyStyle\"\r\n    :body-class=\"bodyClasses\"\r\n    :mask-style=\"maskStyle\"\r\n    :mask-class=\"maskClassName\"\r\n    :stop-propagation=\"stopPropagation\"\r\n    :disable-body-scroll=\"disableBodyScroll\"\r\n    :destroy-on-close=\"destroyOnClose\"\r\n    :force-render=\"forceRender\"\r\n    role=\"dialog\"\r\n    :aria-label=\"ariaLabel\"\r\n    @mask-click=\"handleMaskClick\"\r\n  >\r\n    <!-- Image -->\r\n    <div v-if=\"image\" :class=\"cls('image-container')\">\r\n      <Image :src=\"image\" alt=\"dialog header image\" width=\"100%\" />\r\n    </div>\r\n\r\n    <!-- Header -->\r\n    <div v-if=\"$slots.header || header\" :class=\"cls('header')\">\r\n      <AutoCenter>\r\n        <slot name=\"header\" v-if=\"$slots.header\" />\r\n        <template v-else>{{ header }}</template>\r\n      </AutoCenter>\r\n    </div>\r\n\r\n    <!-- Title -->\r\n    <div v-if=\"$slots.title || title\" :class=\"cls('title')\">\r\n      <slot name=\"title\" v-if=\"$slots.title\" />\r\n      <template v-else>{{ title }}</template>\r\n    </div>\r\n\r\n    <!-- Content -->\r\n    <div :class=\"contentClasses\">\r\n      <slot v-if=\"$slots.default\" />\r\n      <template v-else-if=\"typeof content === 'string'\">\r\n        <AutoCenter>{{ content }}</AutoCenter>\r\n      </template>\r\n      <template v-else>\r\n        {{ content }}\r\n      </template>\r\n    </div>\r\n\r\n    <!-- Footer -->\r\n    <slot name=\"footer\">\r\n      <div :class=\"cls('footer')\">\r\n        <div\r\n          v-for=\"(row, rowIndex) in normalizedActions\"\r\n          :key=\"rowIndex\"\r\n          :class=\"cls('action-row')\"\r\n        >\r\n          <DialogActionButton\r\n            v-for=\"(action, actionIndex) in row\"\r\n            :key=\"action.key\"\r\n            :action=\"action\"\r\n            :loading=\"loadingStates[action.key || actionIndex] || false\"\r\n            @action=\"handleActionClick(action, actionIndex)\"\r\n          />\r\n        </div>\r\n      </div>\r\n    </slot>\r\n  </CenterPopup>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, useSlots, type CSSProperties, type VNode } from 'vue'\r\nimport AutoCenter from '../auto-center/index.vue'\r\nimport type { CenterPopupProps } from '../center-popup/center-popup.vue'\r\nimport CenterPopup from '../center-popup/center-popup.vue'\r\nimport type { Action } from './dialog-action-button.vue'\r\nimport DialogActionButton from './dialog-action-button.vue'\r\nimport Image from '../image/index.vue'\r\n\r\n// Types\r\nexport interface DialogProps\r\n  extends Pick<\r\n    CenterPopupProps,\r\n    | 'afterClose'\r\n    | 'afterShow'\r\n    | 'bodyClassName'\r\n    | 'bodyStyle'\r\n    | 'destroyOnClose'\r\n    | 'disableBodyScroll'\r\n    | 'forceRender'\r\n    | 'getContainer'\r\n    | 'maskClassName'\r\n    | 'maskStyle'\r\n    | 'stopPropagation'\r\n    | 'visible'\r\n  > {\r\n  image?: string\r\n  header?: string | VNode\r\n  title?: string | VNode\r\n  content?: string | VNode\r\n  actions?: (Action | Action[])[]\r\n  closeOnAction?: boolean\r\n  closeOnMaskClick?: boolean\r\n  onAction?: (action: Action, index: number) => void | Promise<void>\r\n  onClose?: () => void\r\n  // Native props\r\n  className?: string\r\n  style?: CSSProperties\r\n  ariaLabel?: string\r\n}\r\n\r\nexport interface DialogEmits {\r\n  (e: 'action', action: Action, index: number): void | Promise<void>\r\n  (e: 'close'): void\r\n  (e: 'update:visible', value: boolean): void\r\n}\r\n\r\n// Props with defaults\r\nconst props = withDefaults(defineProps<DialogProps>(), {\r\n  actions: () => [],\r\n  closeOnAction: false,\r\n  closeOnMaskClick: false,\r\n  getContainer: null,\r\n})\r\n\r\n// Emits\r\nconst emit = defineEmits<DialogEmits>()\r\n\r\n// Track loading state for each action\r\nconst loadingStates = reactive<Record<string, boolean>>({})\r\n\r\n// Computed\r\nconst popupClasses = computed(() => {\r\n  const classes = [cls()]\r\n  if (props.className) {\r\n    classes.push(props.className)\r\n  }\r\n  return classes\r\n})\r\n\r\nconst nativeStyle = computed(() => {\r\n  return props.style || {}\r\n})\r\n\r\nconst bodyClasses = computed(() => {\r\n  const classes = [cls('body')]\r\n  if (props.image) {\r\n    classes.push(cls('with-image'))\r\n  }\r\n  if (props.bodyClassName) {\r\n    classes.push(props.bodyClassName)\r\n  }\r\n  return classes\r\n})\r\n\r\nconst contentClasses = computed(() => {\r\n  const classes = [cls('content')]\r\n  if (!props.content && !slots.default) {\r\n    classes.push(cls('content-empty'))\r\n  }\r\n  return classes\r\n})\r\n\r\nconst normalizedActions = computed(() => {\r\n  return props.actions.map((row) => (Array.isArray(row) ? row : [row]))\r\n})\r\n\r\n// Methods\r\nconst handleMaskClick = () => {\r\n  if (props.closeOnMaskClick) {\r\n    emit('close')\r\n  }\r\n}\r\n\r\nconst handleActionClick = async (action: Action, index: number) => {\r\n  if (!action.onClick) {\r\n    emit('action', action, index)\r\n    if (props.closeOnAction) {\r\n      emit('close')\r\n    }\r\n    return\r\n  }\r\n\r\n  // Set loading state\r\n  const loadingKey = `${action.key || index}`\r\n  loadingStates[loadingKey] = true\r\n\r\n  try {\r\n    await Promise.all([action.onClick?.(), emit('action', action, index)])\r\n    if (props.closeOnAction) {\r\n      emit('close')\r\n    }\r\n  } finally {\r\n    // Clear loading state\r\n    loadingStates[loadingKey] = false\r\n  }\r\n}\r\n\r\n// Utils\r\nfunction cls(name: string = '') {\r\n  return 'adm-dialog' + (name ? '-' + name : '')\r\n}\r\n\r\n// Slots\r\nconst slots = useSlots()\r\n</script>\r\n","import { createApp, type App } from 'vue'\r\nimport type { DialogProps } from './dialog.vue'\r\nimport Dialog from './dialog.vue'\r\n\r\nexport type DialogShowProps = Omit<DialogProps, 'visible' | 'destroyOnClose' | 'forceRender'>\r\n\r\nexport interface DialogShowHandler {\r\n  close: () => void\r\n}\r\n\r\nexport const closeFnSet = new Set<() => void>()\r\n\r\nexport function show(props: DialogShowProps): DialogShowHandler {\r\n  const container = document.createElement('div')\r\n  document.body.appendChild(container)\r\n\r\n  let app: App | null = null\r\n  let isDestroyed = false\r\n\r\n  const close = () => {\r\n    if (isDestroyed) return\r\n    isDestroyed = true\r\n\r\n    closeFnSet.delete(close)\r\n\r\n    if (app) {\r\n      app.unmount()\r\n      app = null\r\n    }\r\n\r\n    if (container.parentNode) {\r\n      container.parentNode.removeChild(container)\r\n    }\r\n  }\r\n\r\n  const afterClose = () => {\r\n    props.afterClose?.()\r\n    close()\r\n  }\r\n\r\n  app = createApp(Dialog, {\r\n    ...props,\r\n    visible: true,\r\n    destroyOnClose: true,\r\n    afterClose,\r\n    onClose: close,\r\n  })\r\n\r\n  app.mount(container)\r\n  closeFnSet.add(close)\r\n\r\n  return {\r\n    close,\r\n  }\r\n}\r\n","import type { VNode } from 'vue'\r\nimport { getDefaultConfig } from '../config-provider/types'\r\nimport type { DialogProps } from './dialog.vue'\r\nimport { show } from './show'\r\n\r\nexport type DialogAlertProps = Omit<DialogProps, 'visible' | 'closeOnAction' | 'actions'> & {\r\n  confirmText?: string | VNode\r\n  onConfirm?: () => void | Promise<void>\r\n  onClose?: () => void\r\n}\r\n\r\nexport function alert(props: DialogAlertProps): Promise<void> {\r\n  const config = getDefaultConfig()\r\n  const confirmText = props.confirmText ?? config.locale.Dialog.ok\r\n\r\n  return new Promise<void>((resolve) => {\r\n    show({\r\n      ...props,\r\n      closeOnAction: true,\r\n      actions: [\r\n        {\r\n          key: 'confirm',\r\n          text: confirmText,\r\n          onClick: async () => {\r\n            await props.onConfirm?.()\r\n            resolve()\r\n          },\r\n        },\r\n      ],\r\n      onClose: () => {\r\n        props.onClose?.()\r\n        resolve()\r\n      },\r\n    })\r\n  })\r\n}\r\n","import { closeFnSet } from './show'\r\n\r\nexport function clear() {\r\n  closeFnSet.forEach((close) => {\r\n    close()\r\n  })\r\n}\r\n","import type { VNode } from 'vue'\r\nimport { getDefaultConfig } from '../config-provider/types'\r\nimport type { DialogProps } from './dialog.vue'\r\nimport { show } from './show'\r\n\r\nexport type DialogConfirmProps = Omit<DialogProps, 'visible' | 'closeOnAction' | 'actions'> & {\r\n  confirmText?: string | VNode\r\n  cancelText?: string | VNode\r\n  onConfirm?: () => void | Promise<void>\r\n  onCancel?: () => void | Promise<void>\r\n  onClose?: () => void\r\n}\r\n\r\nexport function confirm(props: DialogConfirmProps): Promise<boolean> {\r\n  const config = getDefaultConfig()\r\n  const confirmText = props.confirmText ?? config.locale.common.confirm\r\n  const cancelText = props.cancelText ?? config.locale.common.cancel\r\n\r\n  return new Promise<boolean>((resolve) => {\r\n    show({\r\n      ...props,\r\n      closeOnAction: true,\r\n      onClose: () => {\r\n        props.onClose?.()\r\n        resolve(false)\r\n      },\r\n      actions: [\r\n        [\r\n          {\r\n            key: 'cancel',\r\n            text: cancelText,\r\n            onClick: async () => {\r\n              await props.onCancel?.()\r\n              resolve(false)\r\n            },\r\n          },\r\n          {\r\n            key: 'confirm',\r\n            text: confirmText,\r\n            bold: true,\r\n            onClick: async () => {\r\n              await props.onConfirm?.()\r\n              resolve(true)\r\n            },\r\n          },\r\n        ],\r\n      ],\r\n    })\r\n  })\r\n}\r\n","import './dialog.less'\r\n\r\nimport Dialog from './dialog.vue'\r\nimport { alert } from './alert'\r\nimport { clear } from './clear'\r\nimport { confirm } from './confirm'\r\nimport { show } from './show'\r\n\r\nimport { attachPropertiesToComponent } from '../../utils/attach-properties-to-component'\r\nexport type { DialogShowHandler } from './show'\r\nexport default attachPropertiesToComponent(Dialog, {\r\n  alert,\r\n  clear,\r\n  confirm,\r\n  show,\r\n})\r\n","<script setup lang=\"ts\">\r\nimport { provide } from 'vue'\r\nimport { CONFIG_INJECTION_KEY, type Config, type ConfigProviderProps } from './types'\r\nimport { useConfig } from './useConfig'\r\n\r\nconst props = defineProps<ConfigProviderProps>()\r\n\r\n// 获取父级配置（如果存在）\r\nconst parentConfig = useConfig()\r\n\r\n// 合并配置：确保类型兼容\r\nconst mergedConfig: Config = {\r\n  ...(parentConfig || ({} as Config)),\r\n  ...props,\r\n} as Config\r\n\r\n// 提供配置给子组件\r\nprovide(CONFIG_INJECTION_KEY, mergedConfig)\r\n</script>\r\n\r\n<template>\r\n  <slot />\r\n</template>\r\n","<template>\r\n  <div\r\n    :class=\"[\r\n      classPrefix,\r\n      `${classPrefix}-${direction}`,\r\n      `${classPrefix}-${contentPosition}`,\r\n      $attrs.class,\r\n    ]\"\r\n    v-bind=\"$attrs\"\r\n  >\r\n    <div v-if=\"$slots.default\" :class=\"`${classPrefix}-content`\">\r\n      <slot />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\nconst classPrefix = 'adm-divider'\r\n\r\ninterface DividerProps {\r\n  contentPosition?: 'left' | 'right' | 'center'\r\n  direction?: 'horizontal' | 'vertical'\r\n}\r\n\r\nconst props = withDefaults(defineProps<DividerProps>(), {\r\n  contentPosition: 'center',\r\n  direction: 'horizontal',\r\n})\r\n\r\nconst contentPosition = computed(() => props.contentPosition)\r\nconst direction = computed(() => props.direction)\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n</style>\r\n","import { ref, computed, nextTick, onMounted, watch, type Ref, type VNode, h } from 'vue'\r\nimport runes2 from 'runes2'\r\n\r\nconst ELLIPSIS_TEXT = '...'\r\n\r\nexport const measureStyle: Record<string, string> = {\r\n  visibility: 'hidden',\r\n  whiteSpace: 'inherit',\r\n  lineHeight: 'inherit',\r\n  fontSize: 'inherit',\r\n}\r\n\r\ntype MeasureStatus = 'PREPARE' | 'MEASURE_WALKING' | 'STABLE_ELLIPSIS' | 'STABLE_NO_ELLIPSIS'\r\n\r\nexport const useMeasure = (\r\n  content: string,\r\n  rows: number,\r\n  direction: 'start' | 'end' | 'middle',\r\n  expanded: Ref<boolean>,\r\n  expandNode: VNode | null,\r\n  collapseNode: VNode | null,\r\n  fullMeasureRef: Ref<HTMLElement | undefined>,\r\n  singleRowMeasureRef: Ref<HTMLElement | undefined>,\r\n  midMeasureRef: Ref<HTMLElement | undefined>,\r\n  runes: typeof runes2 = runes2,\r\n) => {\r\n  const contentChars = computed(() => runes(content))\r\n  const maxHeight = ref(0)\r\n  const walkingIndexes = ref<[number, number]>([0, 0])\r\n  const status = ref<MeasureStatus>('STABLE_NO_ELLIPSIS')\r\n\r\n  function startMeasure() {\r\n    status.value = 'PREPARE'\r\n    walkingIndexes.value = [\r\n      0,\r\n      direction === 'middle' ? Math.ceil(contentChars.value.length / 2) : contentChars.value.length,\r\n    ]\r\n  }\r\n\r\n  onMounted(() => {\r\n    startMeasure()\r\n  })\r\n\r\n  watch([contentChars, () => rows], () => {\r\n    startMeasure()\r\n  })\r\n\r\n  const midIndex = computed(() =>\r\n    Math.ceil((walkingIndexes.value[0] + walkingIndexes.value[1]) / 2),\r\n  )\r\n\r\n  watch([status, walkingIndexes], () => {\r\n    nextTick(() => {\r\n      if (status.value === 'PREPARE') {\r\n        const fullMeasureHeight = fullMeasureRef.value?.offsetHeight || 0\r\n        const singleRowMeasureHeight = singleRowMeasureRef.value?.offsetHeight || 0\r\n        const rowMeasureHeight = singleRowMeasureHeight * (rows + 0.5)\r\n        if (fullMeasureHeight <= rowMeasureHeight) {\r\n          status.value = 'STABLE_NO_ELLIPSIS'\r\n        } else {\r\n          maxHeight.value = rowMeasureHeight\r\n          status.value = 'MEASURE_WALKING'\r\n        }\r\n      }\r\n      if (status.value === 'MEASURE_WALKING') {\r\n        // 修复：midMeasureRef 还未挂载时，等待下一轮\r\n        if (!midMeasureRef.value) return\r\n        const diff = walkingIndexes.value[1] - walkingIndexes.value[0]\r\n        const midHeight = midMeasureRef.value?.offsetHeight || 0\r\n        const mid = midIndex.value\r\n        if (diff > 1) {\r\n          if (midHeight > maxHeight.value) {\r\n            walkingIndexes.value = [walkingIndexes.value[0], mid]\r\n          } else {\r\n            walkingIndexes.value = [mid, walkingIndexes.value[1]]\r\n          }\r\n        } else {\r\n          if (midHeight > maxHeight.value) {\r\n            walkingIndexes.value = [walkingIndexes.value[0], walkingIndexes.value[0]]\r\n          } else {\r\n            walkingIndexes.value = [walkingIndexes.value[1], walkingIndexes.value[1]]\r\n          }\r\n          status.value = 'STABLE_ELLIPSIS'\r\n        }\r\n      }\r\n    })\r\n  })\r\n\r\n  function renderContent(index: number): VNode[] {\r\n    const prefixContent = contentChars.value.slice(0, index)\r\n    const suffixContent = contentChars.value.slice(contentChars.value.length - index)\r\n    const nodes: VNode[] = []\r\n    if (direction === 'start') {\r\n      if (expandNode) nodes.push(expandNode)\r\n      nodes.push(h('span', ELLIPSIS_TEXT))\r\n      nodes.push(h('span', prefixContent.join('')))\r\n    } else if (direction === 'middle') {\r\n      nodes.push(h('span', prefixContent.join('')))\r\n      nodes.push(h('span', ELLIPSIS_TEXT))\r\n      if (expandNode) nodes.push(expandNode)\r\n      nodes.push(h('span', ELLIPSIS_TEXT))\r\n      nodes.push(h('span', suffixContent.join('')))\r\n    } else if (direction === 'end') {\r\n      nodes.push(h('span', prefixContent.join('')))\r\n      nodes.push(h('span', ELLIPSIS_TEXT))\r\n      if (expandNode) nodes.push(expandNode)\r\n    }\r\n    return nodes\r\n  }\r\n\r\n  const finalContent = computed(() => {\r\n    if (expanded.value || status.value === 'STABLE_NO_ELLIPSIS') {\r\n      const nodes: VNode[] = [h('span', content)]\r\n      if (status.value === 'STABLE_ELLIPSIS' && collapseNode) nodes.push(collapseNode)\r\n      return nodes\r\n    }\r\n    if (status.value === 'STABLE_ELLIPSIS') {\r\n      return renderContent(midIndex.value)\r\n    }\r\n    return []\r\n  })\r\n\r\n  // 不再有 allNodes 和 updateNodes\r\n\r\n  return [finalContent, startMeasure, status, midIndex, renderContent] as const\r\n}\r\n","<template>\r\n  <div ref=\"rootRef\" :class=\"classPrefix\" @click=\"handleContentClick\">\r\n    <!-- 测量节点 -->\r\n    <div v-if=\"status === 'PREPARE'\" ref=\"fullMeasureRef\" aria-hidden=\"true\" :style=\"measureStyle\">\r\n      {{ content }}<component v-if=\"expandNode\" :is=\"expandNode\" />\r\n    </div>\r\n    <div\r\n      v-if=\"status === 'PREPARE'\"\r\n      key=\"stable\"\r\n      ref=\"singleRowMeasureRef\"\r\n      aria-hidden=\"true\"\r\n      :style=\"measureStyle\"\r\n    >\r\n      &#160;\r\n    </div>\r\n    <div\r\n      v-if=\"status === 'MEASURE_WALKING'\"\r\n      key=\"walking-mid\"\r\n      ref=\"midMeasureRef\"\r\n      aria-hidden=\"true\"\r\n      :style=\"measureStyle\"\r\n    >\r\n      <template v-for=\"node in renderContent(midIndex)\">\r\n        <component v-if=\"isVNode(node)\" :is=\"node\" :key=\"node.key\" />\r\n        <span v-else :key=\"node\">{{ node }}</span>\r\n      </template>\r\n    </div>\r\n    <!-- 实际内容 -->\r\n    <template v-for=\"(node, idx) in finalContent\" :key=\"idx\">\r\n      <component v-if=\"isVNode(node)\" :is=\"node\" />\r\n      <span v-else>{{ node }}</span>\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { h, ref, computed, watch, onMounted, nextTick, isVNode, onUnmounted } from 'vue'\r\nimport type { VNode, Ref } from 'vue'\r\nimport { measureStyle, useMeasure } from './useMeasure'\r\nimport runes2 from 'runes2'\r\n\r\nconst classPrefix = 'adm-ellipsis'\r\n\r\nexport type PropagationEvent = 'click' | 'mousedown' | 'touchstart'\r\n\r\nexport interface EllipsisProps {\r\n  content: string\r\n  direction?: 'start' | 'end' | 'middle'\r\n  rows?: number\r\n  expandText?: string | VNodeDesc | VNode\r\n  collapseText?: string | VNodeDesc | VNode\r\n  stopPropagationForActionButtons?: PropagationEvent[]\r\n  onContentClick?: (e: MouseEvent) => void\r\n  defaultExpanded?: boolean\r\n  onExpand?: (expanded: boolean, info: { event: MouseEvent }) => void\r\n  style?: Record<string, string>\r\n}\r\n\r\nexport interface VNodeDesc {\r\n  type: string | object\r\n  key?: string | number\r\n  ref?: string | Ref<unknown> | ((el: Element | null) => void)\r\n  style?: Record<string, string | number>\r\n  children?: (string | VNode)[]\r\n}\r\n\r\nconst props = withDefaults(defineProps<EllipsisProps>(), {\r\n  direction: 'end',\r\n  rows: 1,\r\n  expandText: '',\r\n  content: '',\r\n  collapseText: '',\r\n  stopPropagationForActionButtons: () => [],\r\n  onContentClick: () => {},\r\n  defaultExpanded: false,\r\n})\r\n\r\nconst rootRef = ref<HTMLElement>()\r\nconst expanded = ref(props.defaultExpanded)\r\n\r\nfunction withStopPropagation(events: PropagationEvent[], handler: (e: MouseEvent) => void) {\r\n  return (e: MouseEvent) => {\r\n    if (events && events.length) {\r\n      for (const evt of events) {\r\n        if (e.type === evt) {\r\n          e.stopPropagation()\r\n        }\r\n      }\r\n    }\r\n    handler(e)\r\n  }\r\n}\r\n\r\nconst expandNode = computed<VNode | null>(() =>\r\n  props.expandText\r\n    ? h(\r\n        'a',\r\n        {\r\n          onClick: withStopPropagation(props.stopPropagationForActionButtons, handleExpand),\r\n          onMousedown: withStopPropagation(props.stopPropagationForActionButtons, () => {}),\r\n          onTouchstart: withStopPropagation(props.stopPropagationForActionButtons, () => {}),\r\n        },\r\n        props.expandText as string,\r\n      )\r\n    : null,\r\n)\r\nconst collapseNode = computed<VNode | null>(() =>\r\n  props.collapseText\r\n    ? h(\r\n        'a',\r\n        {\r\n          onClick: withStopPropagation(props.stopPropagationForActionButtons, handleCollapse),\r\n          onMousedown: withStopPropagation(props.stopPropagationForActionButtons, () => {}),\r\n          onTouchstart: withStopPropagation(props.stopPropagationForActionButtons, () => {}),\r\n        },\r\n        props.collapseText as string,\r\n      )\r\n    : null,\r\n)\r\n\r\nfunction handleExpand(e: MouseEvent) {\r\n  expanded.value = true\r\n  props.onExpand?.(true, { event: e })\r\n}\r\nfunction handleCollapse(e: MouseEvent) {\r\n  expanded.value = false\r\n  props.onExpand?.(false, { event: e })\r\n}\r\n\r\nconst showExpand = computed(() => !!props.expandText)\r\nconst showCollapse = computed(() => !!props.collapseText)\r\n\r\nconst fullMeasureRef = ref<HTMLElement>()\r\nconst singleRowMeasureRef = ref<HTMLElement>()\r\nconst midMeasureRef = ref<HTMLElement>()\r\n\r\nconst [finalContent, startMeasure, status, midIndex, renderContent] = useMeasure(\r\n  props.content,\r\n  props.rows,\r\n  props.direction,\r\n  expanded,\r\n  showExpand.value ? expandNode.value : null,\r\n  showCollapse.value ? collapseNode.value : null,\r\n  fullMeasureRef,\r\n  singleRowMeasureRef,\r\n  midMeasureRef,\r\n  runes2,\r\n)\r\n\r\nwatch(\r\n  [\r\n    () => props.content,\r\n    () => props.rows,\r\n    () => props.direction,\r\n    () => expanded.value,\r\n    () => props.expandText,\r\n    () => props.collapseText,\r\n  ],\r\n  () => {\r\n    nextTick(() => startMeasure())\r\n  },\r\n)\r\n\r\nfunction handleContentClick(e: MouseEvent) {\r\n  if (e.target === e.currentTarget) {\r\n    props.onContentClick?.(e)\r\n  }\r\n}\r\n\r\nonMounted(() => {\r\n  startMeasure()\r\n  window.addEventListener('resize', startMeasure)\r\n})\r\nonUnmounted(() => {\r\n  window.removeEventListener('resize', startMeasure)\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n</style>\r\n","<template>\r\n  <svg viewBox=\"0 0 64 41\">\r\n    <g transform=\"translate(0 1)\" fill=\"none\" fill-rule=\"evenodd\">\r\n      <ellipse fill=\"#f5f5f5\" cx=\"32\" cy=\"33\" rx=\"32\" ry=\"7\" />\r\n      <g stroke=\"#d9d9d9\">\r\n        <path\r\n          d=\"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z\"\r\n        />\r\n        <path\r\n          d=\"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z\"\r\n          fill=\"#fafafa\"\r\n        />\r\n      </g>\r\n    </g>\r\n  </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\"></script>\r\n","<template>\r\n  <div :class=\"['adm-empty', className]\" :style=\"mergedStyle\">\r\n    <div :class=\"`${classPrefix}-image-container`\">\r\n      <!-- 默认图标 -->\r\n      <EmptyIcon\r\n        v-if=\"!image && !$slots.image\"\r\n        :class=\"`${classPrefix}-image`\"\r\n        :style=\"imageStyle\"\r\n      />\r\n      <!-- 字符串图片 -->\r\n      <img\r\n        v-else-if=\"typeof image === 'string'\"\r\n        :class=\"`${classPrefix}-image`\"\r\n        :style=\"imageStyle\"\r\n        :src=\"image\"\r\n        alt=\"empty\"\r\n      />\r\n      <!-- VNode 组件 -->\r\n      <slot name=\"image\"></slot>\r\n    </div>\r\n    <!-- 描述文字 -->\r\n    <div v-if=\"description\" :class=\"`${classPrefix}-description`\">\r\n      <!-- 字符串描述 -->\r\n      <template v-if=\"typeof description === 'string'\">\r\n        {{ description }}\r\n      </template>\r\n      <!-- VNode 描述 -->\r\n      <component v-else :is=\"description\" />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, type VNode } from 'vue'\r\nimport EmptyIcon from './EmptyIcon.vue'\r\n\r\nconst classPrefix = 'adm-empty'\r\n\r\nexport interface EmptyProps {\r\n  image?: string | VNode\r\n  imageStyle?: Record<string, string | number>\r\n  description?: string | VNode\r\n  style?: Record<string, string | number>\r\n  className?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<EmptyProps>(), {\r\n  imageStyle: () => ({}),\r\n  style: () => ({}),\r\n  className: '',\r\n})\r\n\r\nconst mergedStyle = computed(() => {\r\n  return props.style || {}\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n</style>\r\n","<template>\r\n  <svg\r\n    viewBox=\"0 0 200 200\"\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n  >\r\n    <defs>\r\n      <linearGradient\r\n        x1=\"50%\"\r\n        y1=\"-116.862%\"\r\n        x2=\"50%\"\r\n        y2=\"90.764%\"\r\n        id=\"error-block-image-default-a\"\r\n      >\r\n        <stop stop-color=\"#72A7FD\" stop-opacity=\"0.207\" offset=\"0%\" />\r\n        <stop stop-color=\"#72A7FD\" stop-opacity=\"0.115\" offset=\"80.072%\" />\r\n        <stop stop-color=\"#72A7FD\" stop-opacity=\"0\" offset=\"100%\" />\r\n      </linearGradient>\r\n      <circle id=\"error-block-image-default-d\" :cx=\"18.823\" :cy=\"18.823\" :r=\"18.823\" />\r\n      <rect\r\n        id=\"error-block-image-default-b\"\r\n        :x=\"3.5\"\r\n        :y=\"9\"\r\n        :width=\"51.429\"\r\n        :height=\"88\"\r\n        :rx=\"4.571\"\r\n      />\r\n    </defs>\r\n    <g fill=\"none\" fill-rule=\"evenodd\">\r\n      <path\r\n        d=\"M73.557.004c19.435-.311 38.696 17.016 51.523 35.287 8.708-10.822 17.127-16.233 25.255-16.233 13.333 0 28.35 14.274 45.053 42.822 1.769 3.024-3.582 7.435-16.054 13.231l-41.322 1.37c-7.343 5.872-31.225.626-69.152 1.234-27.79.445-45.759-1.234-53.908-5.037C3.2 71.143-1.625 68.686.48 65.308 27.371 22.12 51.73.353 73.557.003Zm93.098 49.53a1.125 1.125 0 0 0-.401.072l-.058.023-.07.03-.028.014-.02.01c-.03.015-.059.032-.088.049a2.543 2.543 0 0 0-.568.477l-.067.074c-1.686 1.931-2.904 7.062-2.904 8.985 0 2.283 1.719 4.153 3.898 4.314l.026.001v3.805c0 .39.25.705.56.705.31 0 .56-.316.56-.705l.001-3.88c1.92-.402 3.363-2.148 3.363-4.24 0-2.39-1.882-9.734-4.204-9.734Zm-100-5a1.125 1.125 0 0 0-.331.05l-.035.01-.035.012-.058.023-.07.03-.028.014-.02.01c-.03.015-.059.032-.088.049a2.543 2.543 0 0 0-.568.477l-.067.074c-1.686 1.931-2.904 7.062-2.904 8.985 0 2.212 1.613 4.036 3.695 4.294l.203.02.026.001v3.805c0 .39.25.705.56.705.282 0 .515-.26.555-.6l.006-.105v-3.88c1.92-.402 3.363-2.148 3.363-4.24 0-2.39-1.882-9.734-4.204-9.734ZM52.64 38.348l-.15.008-.149.023-.032.007-.032.008-.078.022-.045.015-.045.016-.06.023-.038.017-.038.017-.058.028-.022.011a2.201 2.201 0 0 0-.323.204l-.05.038-.05.04-.025.02-.025.021a3.742 3.742 0 0 0-.31.294l-.036.04c-.035.037-.07.076-.105.116-.01.012-.02.025-.031.036a3.275 3.275 0 0 0-.081.098l-.063.078c-2.031 2.583-3.48 8.692-3.48 11.027 0 2.636 1.846 4.832 4.292 5.323l.224.04-.064-.012.105.018.103.014v4.618c0 .47.299.85.667.85.337 0 .615-.32.659-.735l.006-.115v-4.618c.18-.023.355-.054.527-.094l.256-.067.196-.06c2.136-.706 3.68-2.75 3.68-5.162 0-2.996-2.383-12.207-5.325-12.207Z\"\r\n        transform=\"translate(2.286 22.286)\"\r\n        fill=\"url(#error-block-image-default-a)\"\r\n      />\r\n      <g transform=\"rotate(-90 102.429 55.357)\">\r\n        <path\r\n          d=\"M6.857 0H52a6.857 6.857 0 0 1 6.857 6.857v92A6.857 6.857 0 0 1 52 105.714H6.857A6.857 6.857 0 0 1 0 98.857v-92A6.857 6.857 0 0 1 6.857 0Z\"\r\n          fill=\"#7EACFF\"\r\n        />\r\n        <mask id=\"error-block-image-default-c\" fill=\"#fff\">\r\n          <use xlink:href=\"#error-block-image-default-b\" />\r\n        </mask>\r\n        <use fill=\"#377EFF\" xlink:href=\"#error-block-image-default-b\" />\r\n        <path\r\n          d=\"M11.838 91.8a.64.64 0 0 1 .627.652.64.64 0 0 1-.627.652.64.64 0 0 1-.628-.652c0-.36.281-.651.628-.651Zm-2.858 0a.64.64 0 0 1 .628.652.64.64 0 0 1-.628.652.64.64 0 0 1-.627-.652c0-.36.281-.651.627-.651Zm2.16-2.305a.64.64 0 0 1 .628.652.64.64 0 0 1-.627.651.64.64 0 0 1-.627-.651c0-.36.28-.652.627-.652Zm-2.982-.04a.64.64 0 0 1 .627.651.64.64 0 0 1-.627.652.64.64 0 0 1-.627-.652c0-.36.28-.651.627-.651Zm5.268-.531a.64.64 0 0 1 .628.651.64.64 0 0 1-.628.652.64.64 0 0 1-.627-.652c0-.36.281-.651.627-.651Zm2.858-1.143a.64.64 0 0 1 .627.651.64.64 0 0 1-.627.652.64.64 0 0 1-.628-.652c0-.36.281-.651.628-.651Zm-6.37-.917c.209 0 .377.175.377.39a.384.384 0 0 1-.376.392.384.384 0 0 1-.376-.391c0-.216.168-.391.376-.391Zm3.512-.798.093.007a.644.644 0 0 1 .535.645.64.64 0 0 1-.628.652.64.64 0 0 1-.627-.652c0-.36.281-.652.627-.652Zm5.715 0a.64.64 0 0 1 .627.652.64.64 0 0 1-.627.652.64.64 0 0 1-.627-.652c0-.36.28-.652.627-.652Zm-11.429 0a.64.64 0 0 1 .627.652.64.64 0 0 1-.627.652.64.64 0 0 1-.627-.652c0-.36.28-.652.627-.652Zm-3.261.241c.208 0 .376.175.376.39a.384.384 0 0 1-.376.392.384.384 0 0 1-.377-.391c0-.216.169-.391.377-.391Zm11.833-.812a.64.64 0 0 1 .627.652.64.64 0 0 1-.627.651.64.64 0 0 1-.628-.651c0-.36.281-.652.628-.652Zm-4.851.399c.208 0 .376.175.376.39a.384.384 0 0 1-.376.392.384.384 0 0 1-.377-.391c0-.216.169-.391.377-.391Zm10.313-2.056a.64.64 0 0 1 .628.652.64.64 0 0 1-.628.651.64.64 0 0 1-.627-.651c0-.36.281-.652.627-.652Zm-2.354-.128a.64.64 0 0 1 .627.652.64.64 0 0 1-.627.652.64.64 0 0 1-.628-.652c0-.36.281-.652.628-.652Zm-13.798.311c.207 0 .376.175.376.391a.384.384 0 0 1-.376.391.384.384 0 0 1-.377-.39c0-.217.169-.392.377-.392Zm11.832-.812a.64.64 0 0 1 .628.652.64.64 0 0 1-.628.651.64.64 0 0 1-.627-.651c0-.36.281-.652.627-.652Zm-6.285 0a.64.64 0 0 1 .627.652.64.64 0 0 1-.627.651.64.64 0 0 1-.627-.651c0-.36.28-.652.627-.652Zm3.428 0a.64.64 0 0 1 .627.652.64.64 0 0 1-.627.651.64.64 0 0 1-.627-.651c0-.36.28-.652.627-.652Zm-6.118.24c.208 0 .376.176.376.392a.384.384 0 0 1-.376.39.384.384 0 0 1-.377-.39c0-.216.169-.391.377-.391Zm11.261-2.525a.64.64 0 0 1 .627.651.64.64 0 0 1-.627.652.64.64 0 0 1-.627-.652c0-.36.28-.651.627-.651Zm-3.557.484c.208 0 .376.175.376.391a.384.384 0 0 1-.376.391.384.384 0 0 1-.376-.391c0-.216.168-.391.376-.391Zm-2.478-.555a.64.64 0 0 1 .627.652.64.64 0 0 1-.627.652.64.64 0 0 1-.627-.652c0-.36.28-.652.627-.652Zm-3.512-.26c.208 0 .376.175.376.39a.384.384 0 0 1-.376.392.384.384 0 0 1-.376-.391c0-.216.168-.391.376-.391Zm-2.857 0c.208 0 .376.175.376.39a.384.384 0 0 1-.376.392.384.384 0 0 1-.376-.391c0-.216.168-.391.376-.391Zm-4.571 0c.207 0 .376.175.376.39a.384.384 0 0 1-.376.392.384.384 0 0 1-.377-.391c0-.216.169-.391.377-.391Zm14.898-1.835a.64.64 0 0 1 .628.652.64.64 0 0 1-.628.651.64.64 0 0 1-.627-.651c0-.36.281-.652.627-.652Zm-8.027-.245c.208 0 .377.175.377.39a.384.384 0 0 1-.377.392.384.384 0 0 1-.376-.391c0-.216.169-.391.376-.391Zm6.271-1.349c.208 0 .377.175.377.391a.384.384 0 0 1-.377.391.384.384 0 0 1-.376-.39c0-.217.169-.392.376-.392Zm-11.484-.481c.208 0 .376.175.376.39a.384.384 0 0 1-.376.392.384.384 0 0 1-.376-.391c0-.216.168-.391.376-.391Zm15.103-.972c.208 0 .376.175.376.391a.384.384 0 0 1-.376.391.384.384 0 0 1-.376-.39c0-.217.168-.392.376-.392Zm-9.333-1.404c.208 0 .376.175.376.39a.384.384 0 0 1-.376.392.384.384 0 0 1-.376-.391c0-.216.168-.391.376-.391Zm-6.819-.405c.208 0 .377.175.377.39a.384.384 0 0 1-.377.392.384.384 0 0 1-.376-.391c0-.216.168-.391.376-.391Z\"\r\n          fill=\"#003CFF\"\r\n          fill-rule=\"nonzero\"\r\n          mask=\"url(#error-block-image-default-c)\"\r\n          transform=\"rotate(116 12.367 83.503)\"\r\n        />\r\n        <path\r\n          stroke=\"#FFF\"\r\n          stroke-width=\"0.75\"\r\n          stroke-linecap=\"round\"\r\n          stroke-linejoin=\"round\"\r\n          d=\"M36.774 5.474H21.523\"\r\n        />\r\n        <path\r\n          d=\"m67.818 94.025-4.996 3.913m4.996 11.91-4.996-3.912m-1.142 9.145-1.143-6.288m10.71-6.768h-7.262\"\r\n          stroke=\"#4486FE\"\r\n          stroke-width=\"0.75\"\r\n          stroke-linecap=\"round\"\r\n          stroke-linejoin=\"round\"\r\n        />\r\n      </g>\r\n      <circle\r\n        :cx=\"8.571\"\r\n        :cy=\"8.571\"\r\n        :r=\"8.571\"\r\n        transform=\"translate(22.857 142)\"\r\n        fill=\"#FFCD6B\"\r\n        fill-rule=\"nonzero\"\r\n      />\r\n      <g transform=\"translate(132.857 124)\">\r\n        <mask id=\"error-block-image-default-e\" fill=\"#fff\">\r\n          <use xlink:href=\"#error-block-image-default-d\" />\r\n        </mask>\r\n        <use fill=\"#FBBE47\" fill-rule=\"nonzero\" xlink:href=\"#error-block-image-default-d\" />\r\n        <circle\r\n          fill=\"#FFCD6B\"\r\n          fill-rule=\"nonzero\"\r\n          mask=\"url(#error-block-image-default-e)\"\r\n          :cx=\"13.886\"\r\n          :cy=\"15.12\"\r\n          :r=\"18.823\"\r\n        />\r\n        <circle\r\n          fill=\"#FFB400\"\r\n          fill-rule=\"nonzero\"\r\n          mask=\"url(#error-block-image-default-e)\"\r\n          :cx=\"23.4\"\r\n          :cy=\"29.057\"\r\n          :r=\"1\"\r\n        />\r\n        <circle\r\n          fill=\"#FFB400\"\r\n          fill-rule=\"nonzero\"\r\n          mask=\"url(#error-block-image-default-e)\"\r\n          :cx=\"30.343\"\r\n          :cy=\"29.829\"\r\n          :r=\"1\"\r\n        />\r\n        <circle\r\n          fill=\"#FFB400\"\r\n          fill-rule=\"nonzero\"\r\n          mask=\"url(#error-block-image-default-e)\"\r\n          :cx=\"18.771\"\r\n          :cy=\"32.657\"\r\n          :r=\"1.286\"\r\n        />\r\n        <circle\r\n          fill=\"#FFB400\"\r\n          fill-rule=\"nonzero\"\r\n          mask=\"url(#error-block-image-default-e)\"\r\n          :cx=\"29.571\"\r\n          :cy=\"25.971\"\r\n          :r=\"1.286\"\r\n        />\r\n        <circle\r\n          fill=\"#FFB400\"\r\n          fill-rule=\"nonzero\"\r\n          mask=\"url(#error-block-image-default-e)\"\r\n          :cx=\"19.286\"\r\n          :cy=\"7.971\"\r\n          :r=\"1.286\"\r\n        />\r\n        <circle\r\n          fill=\"#FFB400\"\r\n          fill-rule=\"nonzero\"\r\n          mask=\"url(#error-block-image-default-e)\"\r\n          :cx=\"26.486\"\r\n          :cy=\"5.914\"\r\n          :r=\"1.286\"\r\n        />\r\n        <circle\r\n          fill=\"#FFB400\"\r\n          fill-rule=\"nonzero\"\r\n          mask=\"url(#error-block-image-default-e)\"\r\n          :cx=\"11.057\"\r\n          :cy=\"6.943\"\r\n          :r=\"1\"\r\n        />\r\n        <circle\r\n          fill=\"#FFB400\"\r\n          fill-rule=\"nonzero\"\r\n          mask=\"url(#error-block-image-default-e)\"\r\n          :cx=\"30.086\"\r\n          :cy=\"15.686\"\r\n          :r=\"1.286\"\r\n        />\r\n        <circle\r\n          fill=\"#FFB400\"\r\n          fill-rule=\"nonzero\"\r\n          mask=\"url(#error-block-image-default-e)\"\r\n          :cx=\"22.886\"\r\n          :cy=\"14.657\"\r\n          :r=\"1\"\r\n        />\r\n      </g>\r\n      <path\r\n        d=\"m87.429 135.123 6.591-9.378v-.08h-5.99v-2.559h10.038v1.787l-6.44 9.254v.082h6.56v2.557h-10.76v-1.663Zm12.185-5.889 4.948-7.047v-.056h-4.498v-1.917h7.536v1.34l-4.849 6.942v.059h4.923v1.92h-8.06v-1.24Zm10.345.702 3.708-5.274v-.045h-3.372v-1.437h5.648v1.003l-3.628 5.206v.045H116v1.438h-6.041v-.936Z\"\r\n        fill=\"#FFF\"\r\n        fill-rule=\"nonzero\"\r\n      />\r\n    </g>\r\n  </svg>\r\n</template>\r\n","<template>\r\n  <svg\r\n    viewBox=\"0 0 400 400\"\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n  >\r\n    <title>@反馈/异常/网络服务异常</title>\r\n    <defs>\r\n      <linearGradient\r\n        x1=\"50%\"\r\n        y1=\"-116.862%\"\r\n        x2=\"50%\"\r\n        y2=\"90.764%\"\r\n        id=\"error-block-image-disconnected-c\"\r\n      >\r\n        <stop stop-color=\"#72A7FD\" stop-opacity=\"0.207\" offset=\"0%\" />\r\n        <stop stop-color=\"#72A7FD\" stop-opacity=\"0.115\" offset=\"80.072%\" />\r\n        <stop stop-color=\"#72A7FD\" stop-opacity=\"0\" offset=\"100%\" />\r\n      </linearGradient>\r\n      <circle id=\"error-block-image-disconnected-d\" :cx=\"22.309\" :cy=\"22.309\" :r=\"22.309\" />\r\n      <path id=\"error-block-image-disconnected-a\" d=\"M0 0h400v400H0z\" />\r\n    </defs>\r\n    <g fill=\"none\" fill-rule=\"evenodd\">\r\n      <mask id=\"error-block-image-disconnected-b\" fill=\"#fff\">\r\n        <use xlink:href=\"#error-block-image-disconnected-a\" />\r\n      </mask>\r\n      <g\r\n        mask=\"url(#error-block-image-disconnected-b)\"\r\n        fill=\"url(#error-block-image-disconnected-c)\"\r\n      >\r\n        <path\r\n          d=\"M151.686 45.58c38.869-.623 77.391 34.03 103.046 70.573 17.416-21.644 34.253-32.465 50.51-32.465 26.666 0 56.701 28.548 90.105 85.643 3.539 6.05-7.164 14.87-32.107 26.462l-82.643 2.741c-14.686 11.745-62.45 1.252-138.305 2.467-55.58.89-91.518-2.468-107.816-10.074-23.505-3.07-33.154-7.983-28.946-14.74C59.313 89.813 108.03 46.278 151.686 45.58Zm186.195 99.06-.127.003-.126.01a2.32 2.32 0 0 0-.465.103l-.032.01-.031.01a2.364 2.364 0 0 0-.181.071 2.52 2.52 0 0 0-.116.054l-.133.067-.042.024-.036.02a2.946 2.946 0 0 0-.133.08l-.048.03a3.052 3.052 0 0 0-.126.087l-.047.033a3.274 3.274 0 0 0-.128.097c-.01.008-.02.017-.031.024a4.906 4.906 0 0 0-.31.27l-.036.032a6.654 6.654 0 0 0-.46.484l-.045.05c-3.344 3.91-5.755 14.083-5.755 17.908 0 4.547 3.409 8.275 7.74 8.625l.108.008v7.608c0 .779.502 1.41 1.121 1.41.62 0 1.121-.632 1.121-1.41v-7.762c3.838-.802 6.727-4.293 6.727-8.48 0-4.778-3.765-19.467-8.409-19.467Zm-200-10-.127.003-.126.01a2.32 2.32 0 0 0-.368.073l-.049.014-.048.016-.032.01-.031.01a2.364 2.364 0 0 0-.181.071l-.058.026-.058.028-.133.067-.042.024-.036.02-.066.039-.067.041-.048.03a3.052 3.052 0 0 0-.126.087l-.047.033a3.274 3.274 0 0 0-.128.097c-.01.008-.02.017-.031.024l-.156.13-.154.14-.036.032a6.654 6.654 0 0 0-.46.484l-.045.05c-3.344 3.91-5.755 14.083-5.755 17.908 0 4.547 3.409 8.275 7.74 8.625l.054.004.054.004v7.608c0 .779.502 1.41 1.121 1.41.58 0 1.058-.556 1.115-1.266l.006-.144v-7.762c3.838-.802 6.727-4.293 6.727-8.48 0-4.778-3.765-19.467-8.409-19.467Zm-28.029-12.373-.107.002-.106.006a2.978 2.978 0 0 0-.551.095 3.444 3.444 0 0 0-.323.104 3.962 3.962 0 0 0-.61.297c-.076.045-.15.092-.226.141-4.964 3.312-8.728 18.445-8.728 23.77 0 5.434 3.922 9.935 9.04 10.726l.28.04v9.236c0 .886.532 1.614 1.21 1.692l.121.007.122-.007c.638-.074 1.147-.723 1.204-1.538l.006-.155v-9.235c5.254-.668 9.32-5.234 9.32-10.767 0-5.993-4.77-24.414-10.652-24.414Z\"\r\n        />\r\n      </g>\r\n      <g mask=\"url(#error-block-image-disconnected-b)\">\r\n        <g transform=\"translate(85.858 150.644)\">\r\n          <path\r\n            d=\"M116.26 28.467c1.352 0 2.703.018 4.054.054 3.923.385 10.188 4.248 9.267 11.061-.878 6.496-5.836 9.089-8.962 9.529a130.762 130.762 0 0 0-4.36-.072c-28.567 0-60.654 10.149-96.22 30.676l-2.227 1.297c-.744.437-1.49.878-2.236 1.323-4.878 2.911-11.193 1.316-14.103-3.562C-1.438 73.894.157 67.58 5.035 64.67 45.34 40.62 82.4 28.467 116.26 28.467Zm22 11.63c1.03-5.942 6.376-8.618 11.084-8.08C172.14 36.91 194.83 46.86 217.37 61.794c4.735 3.138 6.03 9.52 2.893 14.255-3.138 4.736-9.52 6.031-14.256 2.893-20.111-13.325-40.075-22.165-59.935-26.584a9.974 9.974 0 0 0-.325-.088c-3.987-1.015-8.602-5.738-7.487-12.175ZM116.26 77.418c22.777 0 45.4 7.057 67.73 20.988 4.82 3.007 6.289 9.351 3.282 14.17-3.007 4.82-9.351 6.29-14.17 3.283-19.194-11.974-38.095-17.87-56.842-17.87s-37.648 5.896-56.842 17.87c-4.82 3.007-11.164 1.537-14.17-3.282-3.007-4.82-1.538-11.164 3.282-14.171 22.33-13.931 44.953-20.988 67.73-20.988ZM117.974 124.67c9.85 0 17.303 1.69 25.687 5.082l.82.337 2.9 1.231 3.008 1.252.77.305.107.04c5.326 1.976 8.042 7.895 6.066 13.221-1.976 5.326-7.895 8.042-13.221 6.067l-.713-.27-.726-.285-.763-.31-1.263-.527-2.944-1.26-1.125-.473c-6.393-2.648-11.433-3.838-18.603-3.838-8.223 0-16.532 2.126-25.028 6.475-5.056 2.588-11.254.587-13.842-4.47-2.589-5.056-.588-11.253 4.47-13.842 11.313-5.791 22.814-8.735 34.4-8.735ZM118.235 197.047c7.15 0 13.77-.897 19.841-2.721 5.44-1.635 8.526-7.37 6.892-12.81-1.635-5.44-7.37-8.526-12.81-6.892-4.072 1.224-8.707 1.851-13.923 1.851-4.36 0-8.79-1.045-13.373-3.21l-.626-.301c-5.095-2.512-11.262-.418-13.773 4.678-2.512 5.095-.418 11.261 4.678 13.773 7.559 3.727 15.288 5.632 23.094 5.632Z\"\r\n            fill=\"#377EFF\"\r\n            fill-rule=\"nonzero\"\r\n          />\r\n          <path\r\n            d=\"M198.35 62.413c2.755-4.967 9.016-6.76 13.984-4.004 13.068 7.25 19.124 18.535 17.615 30.952-1.157 9.515-6.83 18.757-14.096 24.352-13.364 10.29-34.915 9.401-49.363-1.91-4.472-3.502-5.26-9.967-1.758-14.44 3.436-4.388 9.724-5.229 14.185-1.952l.255.194c7.283 5.702 18.475 6.164 24.13 1.809 3.072-2.366 5.766-6.754 6.226-10.536.467-3.844-1.21-7.07-6.796-10.267l-.378-.213c-4.967-2.756-6.76-9.017-4.004-13.985ZM61.35 103.092c-2.84-4.92-9.13-6.607-14.05-3.768-20.662 11.922-21.772 35.751-6.018 51.69 13.752 13.914 33.192 13.447 50.507 1.158 4.633-3.288 5.723-9.708 2.436-14.34-3.288-4.633-9.709-5.724-14.341-2.436-9.763 6.928-18.07 7.128-23.97 1.158-6.761-6.84-6.498-14.501 1.35-19.225l.317-.187c4.92-2.84 6.608-9.13 3.769-14.05ZM129.103 135.702c1.688-5.424 7.454-8.453 12.878-6.764 14.776 4.599 23.437 13.727 25.259 25.58 1.316 8.561-1.228 17.533-5.58 24.052-3.132 4.688-7.388 8.287-12.504 11.112-3.03 1.673-5.75 2.811-9.37 4.066l-1.4.477c-5.387 1.806-11.217-1.097-13.022-6.484-1.805-5.386 1.098-11.216 6.484-13.02l1.09-.374c6.032-2.112 9.602-4.19 11.613-7.201 1.693-2.535 2.818-6.502 2.356-9.503-.564-3.673-3.432-6.696-11.04-9.063-5.424-1.689-8.452-7.454-6.764-12.878Z\"\r\n            fill=\"#377EFF\"\r\n            fill-rule=\"nonzero\"\r\n          />\r\n          <path\r\n            d=\"M148.072 181.58c3.718-7.98 4.172-14.9 1.36-20.76-2.81-5.86-6.236-9.096-10.275-9.707\"\r\n            stroke=\"#FFF\"\r\n            stroke-width=\"0.571\"\r\n            stroke-linecap=\"round\"\r\n          />\r\n          <ellipse\r\n            fill=\"#7EACFF\"\r\n            transform=\"rotate(10 147 41.933)\"\r\n            :cx=\"147\"\r\n            :cy=\"41.933\"\r\n            :rx=\"9.143\"\r\n            :ry=\"10.286\"\r\n          />\r\n          <path\r\n            d=\"M210.422 107.472c3.718-7.98 4.172-14.9 1.36-20.76-2.81-5.86-6.668-9.883-11.572-12.067M51.604 131.769c-3.15-6.8-3.537-12.694-1.161-17.685 2.376-4.99 5.57-8.136 9.583-9.438\"\r\n            stroke=\"#003CFF\"\r\n            stroke-width=\"0.75\"\r\n            stroke-linecap=\"round\"\r\n            stroke-linejoin=\"round\"\r\n          />\r\n          <path\r\n            d=\"M21.53 64.408c4.946-3.389 9.817-6.026 14.612-7.912\"\r\n            stroke=\"#FFF\"\r\n            stroke-width=\"0.75\"\r\n            stroke-linecap=\"round\"\r\n            stroke-linejoin=\"round\"\r\n          />\r\n          <path\r\n            d=\"m113.243 15.444 9.588 8.314M144.31 9.405l-5.775 11.3m18.389-1.246-11.907 4.643M127.64 5.66l2.77 14.255\"\r\n            stroke=\"#4486FE\"\r\n            stroke-width=\"0.75\"\r\n            stroke-linecap=\"round\"\r\n            stroke-linejoin=\"round\"\r\n          />\r\n        </g>\r\n      </g>\r\n      <g mask=\"url(#error-block-image-disconnected-b)\">\r\n        <g transform=\"translate(275.143 302.571)\">\r\n          <mask id=\"error-block-image-disconnected-e\" fill=\"#fff\">\r\n            <use xlink:href=\"#error-block-image-disconnected-d\" />\r\n          </mask>\r\n          <use fill=\"#FBBE47\" fill-rule=\"nonzero\" xlink:href=\"#error-block-image-disconnected-d\" />\r\n          <circle\r\n            fill=\"#FFCD6B\"\r\n            fill-rule=\"nonzero\"\r\n            mask=\"url(#error-block-image-disconnected-e)\"\r\n            :cx=\"16.457\"\r\n            :cy=\"17.92\"\r\n            :r=\"22.309\"\r\n          />\r\n          <circle\r\n            fill=\"#FFF\"\r\n            fill-rule=\"nonzero\"\r\n            mask=\"url(#error-block-image-disconnected-e)\"\r\n            :cx=\"14.263\"\r\n            :cy=\"12.069\"\r\n            :r=\"2.194\"\r\n          />\r\n        </g>\r\n      </g>\r\n      <g mask=\"url(#error-block-image-disconnected-b)\" fill=\"#FBBE47\" fill-rule=\"nonzero\">\r\n        <circle :cx=\"12\" :cy=\"12\" :r=\"12\" transform=\"translate(84 297.714)\" />\r\n      </g>\r\n    </g>\r\n  </svg>\r\n</template>\r\n","<template>\r\n  <svg\r\n    viewBox=\"0 0 400 400\"\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n  >\r\n    <defs>\r\n      <linearGradient x1=\"50%\" y1=\"-116.862%\" x2=\"50%\" y2=\"90.764%\" id=\"error-block-image-empty-a\">\r\n        <stop stop-color=\"#72A7FD\" stop-opacity=\"0.207\" offset=\"0%\" />\r\n        <stop stop-color=\"#72A7FD\" stop-opacity=\"0.115\" offset=\"80.072%\" />\r\n        <stop stop-color=\"#72A7FD\" stop-opacity=\"0\" offset=\"100%\" />\r\n      </linearGradient>\r\n      <path\r\n        d=\"M146.183 18.461c31.705 23.336 33.349 71.85 4.93 96.614-.252.22 6.172 5.602 13.577 11.414l.686.537.69.54.695.54.348.27.698.54a341.27 341.27 0 0 0 8.806 6.596c1.114.802 4.643-.853 10.587-4.965l-.532 12.218a1.2 1.2 0 0 1-.481.91l-10.868 8.111c-1.405 1.048-3.32 1.185-4.854.072l-35.578-25.834c-33.414 17.333-79.913 15-109.804-7-33.444-24.616-33.444-75.95 0-100.563 33.443-24.615 87.657-24.615 121.1 0Zm-60.469 7.653C51.63 26.114 24 44.534 24 67.257S51.63 108.4 85.714 108.4s61.715-18.42 61.715-41.143c0-22.722-27.63-41.143-61.715-41.143Z\"\r\n        id=\"error-block-image-empty-b\"\r\n      />\r\n    </defs>\r\n    <g fill=\"none\" fill-rule=\"evenodd\">\r\n      <path\r\n        d=\"M157.964 244.661H0L3.806 100.13a4.572 4.572 0 0 1 4.353-4.446l.217-.006h45.588V68.2a4.572 4.572 0 0 1 4.356-4.567l.216-.005h65.498l2.554-58.689a4.571 4.571 0 0 1 4.779-4.367l.214.015 87.79 8.222a4.572 4.572 0 0 1 4.126 4.133l.015.212 3.146 69.652L301.634 64.9a4.571 4.571 0 0 1 5.628 4.231l.005.215v43.955l56.162.001v130.264h-56.163v.001h-82.383v-.004h-66.919v1.098ZM89.503 160.03h-9.968v8.436h9.968v-8.436Zm0-14.507h-9.968v8.435h9.968v-8.435Zm197.985-5.15h-9.967v8.432h9.967v-8.431Zm-197.985-8.806h-9.968v8.436h9.968v-8.436Zm197.985-5.153h-9.967v8.432h9.967v-8.432Zm0-14.503h-9.967v8.432h9.967v-8.432Zm-84.643-.777h-30.8v8.436h30.8v-8.436Zm84.643-13.186h-9.967v8.436h9.967v-8.436Zm-84.643-3.29h-30.8v8.436h30.8v-8.436Zm0-15.912h-30.8v8.436h30.8v-8.436Z\"\r\n        transform=\"translate(18.286 50.286)\"\r\n        fill=\"url(#error-block-image-empty-a)\"\r\n      />\r\n      <g transform=\"translate(108.571 189.886)\">\r\n        <mask id=\"error-block-image-empty-c\" fill=\"#fff\">\r\n          <use xlink:href=\"#error-block-image-empty-b\" />\r\n        </mask>\r\n        <use fill=\"#377EFF\" xlink:href=\"#error-block-image-empty-b\" />\r\n        <path\r\n          d=\"M131.429 134.686a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285Zm5.714 0a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285ZM128 133.543a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-5.714 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm21.143-1.143a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm-9.143-1.143a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm12-1.143a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-6.857 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286ZM120 128.971a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm5.714 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm16-1.142.125.006a1.143 1.143 0 1 1-.125-.006Zm11.429 0a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285Zm-22.857 0a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285Zm17.143-1.143a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285ZM136 125.543a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-13.143 1.143a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm4.572-1.143a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm18.857-2.286a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-16-1.143.124.007a1.143 1.143 0 1 1-.124-.007Zm11.428 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-22.857 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm36.572 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-5.715 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-37.143 1.143a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm13.715-1.143a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm9.714-1.143a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm18.286-3.428a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-11.429 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-28 1.143a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm5.714-1.143a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm17.715-1.143a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-5.715 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-6.857 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm17.143-4.571a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285Zm-11.428 0a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285Zm-5.143 1.142a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm-8-1.142a.571.571 0 1 1 0 1.142.571.571 0 0 1 0-1.142Zm-9.143 0a.571.571 0 1 1 0 1.142.571.571 0 0 1 0-1.142Zm30.286-3.429a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286ZM124 109.543a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm5.714 0a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm5.715-4.572a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm-22.858-1.142a.571.571 0 1 1 0 1.142.571.571 0 0 1 0-1.142Zm-11.428-3.429a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143ZM124 99.257a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143ZM49.143 55.829a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285Zm5.714 0a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285Zm-9.143-1.143a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285Zm-5.714 0a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285Zm21.143-1.143a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143ZM52 52.4a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm12-1.143a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-6.857 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-19.429-1.143a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm5.715 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm16-1.143.124.007a1.143 1.143 0 1 1-.124-.007Zm11.428 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-22.857 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm17.143-1.142a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285Zm-11.429-1.143a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285Zm-13.143 1.143a.571.571 0 1 1 0 1.142.571.571 0 0 1 0-1.142Zm4.572-1.143a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143ZM64 44.4a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-16-1.143.125.007a1.143 1.143 0 1 1-.125-.007Zm11.429 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-22.858 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm36.572 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-5.714 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286ZM30.286 44.4a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143ZM44 43.257a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm9.714-1.143a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286ZM72 38.686a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285Zm-11.429 0a1.143 1.143 0 1 1 0 2.285 1.143 1.143 0 0 1 0-2.285Zm-28 1.143a.571.571 0 1 1 0 1.142.571.571 0 0 1 0-1.142Zm5.715-1.143a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143ZM56 37.543a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-5.714 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-6.857 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286ZM60.57 32.97a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-11.428 0a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286ZM44 34.114a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm-8-1.143a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm-9.143 0a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm30.286-3.428a1.143 1.143 0 1 1 0 2.286 1.143 1.143 0 0 1 0-2.286Zm-15.429 1.143a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm5.715 0a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm5.714-4.572a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm-22.857-1.143a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Zm-11.429-3.428a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143ZM41.714 20.4a.571.571 0 1 1 0 1.143.571.571 0 0 1 0-1.143Z\"\r\n          fill=\"#003CFF\"\r\n          fill-rule=\"nonzero\"\r\n          mask=\"url(#error-block-image-empty-c)\"\r\n        />\r\n      </g>\r\n      <path\r\n        d=\"M295.213 319.24c.744.546.745 1.433.002 1.98l-11.806 8.81c-1.069.799-3.326.474-4.853-.609l-35.622-25.241c-33.375 17.037-79.545 14.615-109.28-7.271-33.443-24.615-33.443-64.521 0-89.133 33.443-24.616 87.657-24.616 121.1 0 31.706 23.336 33.35 60.42 4.931 85.185-.543.473 35.528 26.278 35.528 26.278ZM148.06 220.015c-25.44 17.853-25.44 46.8 0 64.652 25.44 17.85 66.689 17.85 92.129 0 25.436-17.853 25.436-46.799 0-64.652-25.44-17.853-66.688-17.853-92.129 0Z\"\r\n        fill=\"#5D96FE\"\r\n      />\r\n      <path\r\n        d=\"M123.514 233.021c2.185-5.241 5.67-9.735 10.453-13.482M264.967 271.54c-2.185 5.24-5.67 9.734-10.453 13.481\"\r\n        stroke=\"#FFF\"\r\n        stroke-width=\"0.75\"\r\n        stroke-linecap=\"round\"\r\n        stroke-linejoin=\"round\"\r\n      />\r\n      <path\r\n        d=\"M81.143 252.571c7.574 0 13.714 23.88 13.714 31.649 0 6.97-4.942 12.755-11.429 13.871v11.672c0 1.235-.767 2.237-1.713 2.237-.904 0-1.644-.912-1.71-2.07l-.005-.167v-11.526c-7.04-.595-12.571-6.644-12.571-14.017 0-7.024 5.02-27.222 11.581-31.027l.096-.053c.027-.016.055-.03.082-.045l.067-.035.066-.033.1-.05.094-.041a3.34 3.34 0 0 1 .224-.093l.11-.042.097-.032c.038-.013.077-.025.115-.036l.053-.016.053-.014a3.351 3.351 0 0 1 .23-.055l.085-.016a3.95 3.95 0 0 1 .441-.054l.11-.005.11-.002Z\"\r\n        fill=\"#FFCD6B\"\r\n        fill-rule=\"nonzero\"\r\n      />\r\n      <g transform=\"translate(283.429 177.143)\" fill-rule=\"nonzero\">\r\n        <path\r\n          d=\"M22.475.847c12.34 0 22.345 37.935 22.345 50.276 0 11.395-8.53 20.798-19.552 22.172v19.019c0 1.932-1.25 3.5-2.792 3.5-1.49 0-2.707-1.46-2.79-3.301l-.004-.2-.001-19.018C8.659 71.92.13 62.518.13 51.123.13 40.071 8.154 8.49 18.694 2.015l.054-.031a5.94 5.94 0 0 1 .214-.128l.088-.048c.213-.12.427-.228.642-.326l.135-.06.18-.075.135-.053a5.796 5.796 0 0 1 .464-.16 4.44 4.44 0 0 1 .33-.092l.124-.03a7.122 7.122 0 0 1 .31-.065l.018-.003a6.305 6.305 0 0 1 .756-.088l.165-.007.166-.002Z\"\r\n          fill=\"#FFCD6B\"\r\n        />\r\n        <path\r\n          d=\"M22.475.847c12.34 0 22.345 37.935 22.345 50.276 0 11.395-8.53 20.798-19.552 22.172v19.019c0 1.932-1.25 3.5-2.792 3.5-1.543 0-2.794-1.566-2.794-3.5V73.295C8.659 71.921.13 62.518.13 51.123.13 38.783 10.134.847 22.475.847Z\"\r\n          fill=\"#FFCD6B\"\r\n        />\r\n        <circle fill=\"#FFB400\" :cx=\"26.4\" :cy=\"56.869\" :r=\"1.45\" />\r\n        <circle fill=\"#FFB400\" :cx=\"39.453\" :cy=\"58.319\" :r=\"1\" />\r\n        <circle fill=\"#FFB400\" :cx=\"17.698\" :cy=\"63.637\" :r=\"2.417\" />\r\n        <circle fill=\"#FFB400\" :cx=\"38.002\" :cy=\"51.068\" :r=\"2.417\" />\r\n        <circle fill=\"#FFB400\" :cx=\"18.665\" :cy=\"17.228\" :r=\"2.417\" />\r\n        <circle fill=\"#FFB400\" :cx=\"32.201\" :cy=\"13.36\" :r=\"2.417\" />\r\n        <circle fill=\"#FFB400\" :cx=\"26.83\" :cy=\"20.666\" :r=\"1.45\" />\r\n        <circle fill=\"#FFB400\" :cx=\"38.969\" :cy=\"31.731\" :r=\"2.417\" />\r\n        <circle fill=\"#FFB400\" :cx=\"25.433\" :cy=\"29.797\" :r=\"1.45\" />\r\n        <path\r\n          d=\"M34.197 53.033c0 9.825-6.934 18.017-16.172 19.987a22.44 22.44 0 0 0 4.45.448c12.34 0 22.344-10.004 22.344-22.345C44.82 38.783 34.815.847 22.475.847c8.947 14.03 11.722 40.891 11.722 52.186Z\"\r\n          fill=\"#FBBE47\"\r\n        />\r\n      </g>\r\n    </g>\r\n  </svg>\r\n</template>\r\n","<template>\r\n  <svg\r\n    viewBox=\"0 0 400 400\"\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n  >\r\n    <defs>\r\n      <linearGradient x1=\"50%\" y1=\"-116.862%\" x2=\"50%\" y2=\"90.764%\" id=\"error-block-image-busy-a\">\r\n        <stop stop-color=\"#72A7FD\" stop-opacity=\"0.207\" offset=\"0%\" />\r\n        <stop stop-color=\"#72A7FD\" stop-opacity=\"0.115\" offset=\"80.072%\" />\r\n        <stop stop-color=\"#72A7FD\" stop-opacity=\"0\" offset=\"100%\" />\r\n      </linearGradient>\r\n      <circle id=\"error-block-image-busy-b\" :cx=\"34.857\" :cy=\"34.857\" :r=\"34.857\" />\r\n    </defs>\r\n    <g fill=\"none\" fill-rule=\"evenodd\">\r\n      <path\r\n        d=\"M157.964 243.667H0L3.806 99.134a4.572 4.572 0 0 1 4.353-4.446l.217-.005h45.588V67.205a4.572 4.572 0 0 1 4.356-4.566l.216-.005 65.498-.001 2.554-58.688a4.571 4.571 0 0 1 4.779-4.368l.214.015 87.79 8.222a4.572 4.572 0 0 1 4.126 4.133l.015.213 3.146 69.652 74.976-17.906a4.571 4.571 0 0 1 5.628 4.23l.005.216v43.955h56.162v130.265l-56.163-.001v.002h-82.383v-.004h-66.919v1.098Zm-68.461-84.631h-9.968v8.435h9.968v-8.435Zm0-14.508h-9.968v8.436h9.968v-8.436Zm197.985-5.149h-9.967v8.432h9.967v-8.432Zm-197.985-8.806h-9.968v8.436h9.968v-8.436Zm197.985-5.153h-9.967v8.432h9.967v-8.432Zm0-14.503h-9.967v8.432h9.967v-8.432Zm-84.643-.777h-30.8v8.436h30.8v-8.436Zm84.643-13.186h-9.967v8.435h9.967v-8.435Zm-84.643-3.29h-30.8v8.435h30.8v-8.435Zm0-15.912h-30.8v8.436h30.8v-8.436Z\"\r\n        transform=\"translate(18.286 51.286)\"\r\n        fill=\"url(#error-block-image-busy-a)\"\r\n      />\r\n      <path\r\n        d=\"m250.934 176.555-101.963 1.038c-5.276.054-9.51 4.374-9.455 9.65.054 5.274 4.374 9.507 9.649 9.454l.958-.01c-.376 7.363 3.679 59.93 34.894 62.659 4.203.367 7.432.39 7.475 4.609.042 4.218-3.176 4.307-7.37 4.76-34.593 3.737-34.136 56.004-33.61 63.357l-.957.01c-5.276.053-9.51 4.373-9.455 9.649.053 5.275 4.374 9.508 9.649 9.454l101.963-1.039c5.275-.054 9.508-4.374 9.455-9.648-.055-5.276-4.374-9.51-9.65-9.455l-.958.01c.377-7.363-.729-59.672-34.894-62.66-4.202-.367-7.432-.39-7.474-4.608-.043-4.219 3.175-4.308 7.369-4.76 31.276-3.377 34.136-56.004 33.61-63.357l.958-.01c5.276-.053 9.508-4.373 9.455-9.649-.055-5.276-4.374-9.509-9.65-9.454Z\"\r\n        fill=\"#377EFF\"\r\n      />\r\n      <path\r\n        d=\"M233.524 314.422c.108.684.772 1.148 1.483 1.035.711-.112 1.2-.758 1.091-1.443-.108-.684-.772-1.147-1.483-1.035-.711.113-1.2.759-1.091 1.443Zm-.894-5.644c.108.684.772 1.148 1.483 1.035.711-.112 1.2-.758 1.091-1.443-.108-.684-.772-1.147-1.483-1.035-.711.113-1.2.759-1.091 1.443Zm-.149 17.865c.108.684.773 1.147 1.483 1.035.711-.113 1.2-.759 1.091-1.443-.108-.684-.772-1.148-1.483-1.035-.71.112-1.2.758-1.09 1.443Zm-2.144-8.182c.109.684.773 1.148 1.484 1.035.71-.113 1.199-.759 1.09-1.443-.108-.684-.772-1.148-1.483-1.035-.71.113-1.2.759-1.09 1.443Zm-1.586-4.694c.108.684.772 1.148 1.483 1.035.711-.113 1.2-.759 1.091-1.443-.108-.684-.772-1.147-1.483-1.035-.711.113-1.2.759-1.091 1.443Zm-1.013-5.88c.109.685.773 1.148 1.484 1.036.71-.113 1.2-.759 1.09-1.443-.107-.684-.772-1.148-1.483-1.035-.71.113-1.199.759-1.09 1.443Zm.236 15.575c.108.685.772 1.148 1.483 1.035.71-.112 1.2-.758 1.09-1.442-.107-.685-.772-1.148-1.483-1.035-.71.112-1.199.758-1.09 1.442Zm-.4 4.494c.108.684.772 1.147 1.483 1.035.71-.113 1.2-.759 1.091-1.443-.108-.684-.773-1.148-1.483-1.035-.711.113-1.2.759-1.091 1.443Zm-3.88-8.601c.108.684.772 1.147 1.483 1.035.71-.113 1.199-.759 1.09-1.443-.108-.684-.772-1.148-1.483-1.035-.71.113-1.2.759-1.09 1.443Zm-.524-7.186c.065.41.463.688.89.62.426-.067.72-.454.654-.865-.065-.41-.463-.688-.89-.62-.426.067-.72.454-.654.865Zm-2.265-4.102c.109.684.773 1.148 1.484 1.035.71-.113 1.2-.759 1.09-1.443-.108-.684-.772-1.147-1.483-1.035-.71.113-1.199.759-1.09 1.443Zm-.545-6.518c.065.41.464.689.89.621.427-.067.72-.455.655-.865-.065-.41-.464-.689-.89-.621-.427.067-.72.455-.655.865Zm2.098 23.629c.109.684.773 1.147 1.484 1.035.71-.113 1.2-.759 1.09-1.443-.108-.684-.772-1.148-1.483-1.035-.71.112-1.199.758-1.09 1.443Zm-.756-9.65c.043.274.309.46.593.414a.512.512 0 0 0 .437-.577.512.512 0 0 0-.594-.414.512.512 0 0 0-.436.577Zm-.808 20.96c.109.684.773 1.147 1.484 1.034.71-.112 1.2-.758 1.09-1.442-.108-.685-.772-1.148-1.483-1.036-.71.113-1.199.759-1.09 1.443Zm-4.691-31.966c.065.41.463.689.89.621.426-.068.72-.455.654-.866-.065-.41-.463-.688-.89-.62-.426.067-.72.454-.654.865Zm2.098 23.628c.108.684.772 1.148 1.483 1.035.711-.112 1.2-.758 1.091-1.443-.108-.684-.772-1.147-1.483-1.035-.711.113-1.2.759-1.091 1.443Zm-1.967-12.416c.109.684.773 1.147 1.484 1.035.71-.113 1.199-.759 1.09-1.443-.108-.684-.772-1.148-1.483-1.035-.71.112-1.2.758-1.09 1.443Zm1.073 6.772c.108.685.772 1.148 1.483 1.035.711-.112 1.2-.758 1.091-1.442-.108-.685-.772-1.148-1.483-1.036-.711.113-1.2.759-1.091 1.443Zm-.009-3.131c.065.41.464.689.89.621.427-.068.72-.455.655-.866-.065-.41-.464-.688-.89-.62-.427.067-.72.454-.655.865Zm-1.43-9.03c.065.41.463.688.89.62.426-.067.72-.454.655-.865-.065-.41-.464-.689-.89-.62-.427.067-.72.454-.655.865ZM214.5 333.38c.108.685.772 1.148 1.483 1.036.711-.113 1.2-.759 1.091-1.443-.108-.684-.772-1.148-1.483-1.035-.711.112-1.2.758-1.091 1.442Zm-.156-7.178c.065.41.464.689.89.621.427-.067.72-.455.655-.865-.065-.41-.464-.689-.89-.621-.427.067-.72.455-.655.865Zm-1.871-4.72c.108.684.773 1.147 1.483 1.034.711-.112 1.2-.758 1.091-1.442-.108-.685-.772-1.148-1.483-1.035-.71.112-1.2.758-1.091 1.442Zm-1.614-6.857c.065.41.464.689.89.621.427-.068.72-.455.655-.866-.065-.41-.464-.688-.89-.62-.427.067-.72.454-.655.865Zm-.894-5.644c.065.41.464.689.89.621.427-.067.72-.455.655-.866-.065-.41-.463-.688-.89-.62-.427.067-.72.455-.655.865Zm-1.43-9.03c.065.41.464.688.89.62.427-.067.72-.454.655-.865-.065-.41-.464-.688-.89-.62-.427.067-.72.454-.655.865Zm-1.958 14.225c.065.41.463.689.89.62.426-.067.72-.454.654-.865-.065-.41-.463-.688-.89-.62-.426.067-.72.454-.654.865Zm-.703 12.81c.065.41.464.688.89.62.427-.067.72-.455.655-.865-.065-.41-.463-.689-.89-.621-.427.067-.72.455-.655.866Zm-4.543-22.536c.065.41.463.689.89.621.426-.067.72-.455.654-.865-.065-.41-.463-.689-.89-.621-.426.067-.72.455-.654.865Zm2.806 30.138c.065.41.463.689.89.621.426-.067.72-.455.654-.865-.065-.41-.463-.689-.89-.621-.426.067-.72.455-.654.865Zm-5.694-17.996c.065.41.463.688.89.62.426-.067.72-.455.654-.865-.065-.41-.463-.689-.89-.621-.426.067-.72.455-.654.866Zm-2.935-13.343c.066.41.464.688.89.62.427-.067.72-.454.655-.865-.065-.41-.463-.689-.89-.621-.426.068-.72.455-.655.866Z\"\r\n        fill=\"#003CFF\"\r\n        fill-rule=\"nonzero\"\r\n      />\r\n      <path\r\n        d=\"m250.934 176.555-101.963 1.038c-5.276.054-9.51 4.374-9.455 9.65.054 5.274 4.374 9.507 9.649 9.454l101.963-1.04c5.276-.052 9.508-4.372 9.455-9.648-.055-5.276-4.374-9.509-9.65-9.454ZM252.64 331.241l-101.964 1.038c-5.275.054-9.508 4.374-9.454 9.65.054 5.275 4.374 9.508 9.649 9.454l101.963-1.039c5.275-.053 9.507-4.373 9.454-9.649-.054-5.275-4.374-9.508-9.649-9.454Z\"\r\n        fill=\"#7EACFF\"\r\n      />\r\n      <path\r\n        stroke=\"#003CFF\"\r\n        stroke-width=\"0.75\"\r\n        stroke-linecap=\"round\"\r\n        stroke-linejoin=\"round\"\r\n        d=\"m196.824 197.298 52.216-.506M193.329 330.5h52.215\"\r\n      />\r\n      <path\r\n        d=\"M167.367 228.041c-4.091-10.787-6.086-20.934-5.985-30.44\"\r\n        stroke=\"#FFF\"\r\n        stroke-width=\"0.75\"\r\n        stroke-linecap=\"round\"\r\n        stroke-linejoin=\"round\"\r\n      />\r\n      <circle\r\n        :cx=\"14.857\"\r\n        :cy=\"14.857\"\r\n        :r=\"14.857\"\r\n        transform=\"translate(106.857 248.571)\"\r\n        fill=\"#FFCD6B\"\r\n        fill-rule=\"nonzero\"\r\n      />\r\n      <g transform=\"translate(236.571 284.571)\">\r\n        <mask id=\"error-block-image-busy-c\" fill=\"#fff\">\r\n          <use xlink:href=\"#error-block-image-busy-b\" />\r\n        </mask>\r\n        <use fill=\"#FBBE47\" fill-rule=\"nonzero\" xlink:href=\"#error-block-image-busy-b\" />\r\n        <circle\r\n          fill=\"#FFCD6B\"\r\n          fill-rule=\"nonzero\"\r\n          mask=\"url(#error-block-image-busy-c)\"\r\n          :cx=\"25.714\"\r\n          :cy=\"28\"\r\n          :r=\"34.857\"\r\n        />\r\n        <circle\r\n          fill=\"#FFF\"\r\n          fill-rule=\"nonzero\"\r\n          mask=\"url(#error-block-image-busy-c)\"\r\n          :cx=\"22.286\"\r\n          :cy=\"18.857\"\r\n          :r=\"3.429\"\r\n        />\r\n      </g>\r\n    </g>\r\n  </svg>\r\n</template>\r\n","<template>\r\n  <div\r\n    :class=\"[\r\n      classPrefix,\r\n      {\r\n        [`${classPrefix}-full-page`]: fullPage,\r\n      },\r\n      className,\r\n    ]\"\r\n    :style=\"mergedStyle\"\r\n  >\r\n    <div :class=\"`${classPrefix}-image`\">\r\n      <component v-if=\"isComponent(imageNode)\" :is=\"imageNode\" />\r\n      <img v-else-if=\"typeof imageNode === 'string'\" :src=\"imageNode\" alt=\"error block image\" />\r\n      <component v-else :is=\"imageNode\" />\r\n    </div>\r\n\r\n    <div :class=\"`${classPrefix}-description`\">\r\n      <div v-if=\"displayTitle != null\" :class=\"`${classPrefix}-description-title`\">\r\n        <component v-if=\"isComponent(displayTitle)\" :is=\"displayTitle\" />\r\n        <span v-else>{{ displayTitle }}</span>\r\n      </div>\r\n\r\n      <div v-if=\"displayDescription != null\" :class=\"`${classPrefix}-description-subtitle`\">\r\n        <component v-if=\"isComponent(displayDescription)\" :is=\"displayDescription\" />\r\n        <span v-else>{{ displayDescription }}</span>\r\n      </div>\r\n    </div>\r\n\r\n    <div v-if=\"$slots.default\" :class=\"`${classPrefix}-content`\">\r\n      <slot />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport type { Component } from 'vue'\r\n\r\nexport type ErrorBlockStatus = 'default' | 'disconnected' | 'empty' | 'busy'\r\n\r\nexport type ImageRecord = Partial<Record<ErrorBlockStatus, string | Component>>\r\n\r\nexport interface ErrorBlockProps {\r\n  status?: ErrorBlockStatus\r\n  title?: string | Component\r\n  image?: string | Component\r\n  description?: string | Component\r\n  fullPage?: boolean\r\n\r\n  // CSS Variables\r\n  '--image-height'?: string\r\n  '--image-height-full-page'?: string\r\n  '--image-width'?: string\r\n  '--image-width-full-page'?: string\r\n\r\n  // Native props\r\n  className?: string\r\n}\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport { DefaultImage, DisconnectedImage, EmptyImage, BusyImage } from './images'\r\n\r\nconst classPrefix = 'adm-error-block'\r\n\r\nconst props = withDefaults(defineProps<ErrorBlockProps>(), {\r\n  status: 'default',\r\n})\r\n\r\n// Get config\r\nconst { locale } = useConfig()\r\n\r\n// Image record\r\nconst imageRecord = {\r\n  default: DefaultImage,\r\n  disconnected: DisconnectedImage,\r\n  empty: EmptyImage,\r\n  busy: BusyImage,\r\n}\r\n\r\n// Computed values\r\nconst contentPack = computed(() => locale.ErrorBlock[props.status])\r\n\r\nconst displayTitle = computed(() => {\r\n  return props.title !== undefined ? props.title : contentPack.value.title\r\n})\r\n\r\nconst displayDescription = computed(() => {\r\n  return props.description !== undefined ? props.description : contentPack.value.description\r\n})\r\n\r\nconst imageNode = computed(() => {\r\n  return props.image ?? imageRecord[props.status]\r\n})\r\n\r\n// Helper function to check if value is a component\r\nconst isComponent = (value: string | Component) => {\r\n  return value && typeof value === 'object' && (value.render || value.setup || value.__vccOpts)\r\n}\r\n\r\n// Merged styles for CSS variables\r\nconst mergedStyle = computed(() => {\r\n  const style: Record<string, string> = {}\r\n\r\n  if (props['--image-height']) style['--image-height'] = props['--image-height']\r\n  if (props['--image-height-full-page'])\r\n    style['--image-height-full-page'] = props['--image-height-full-page']\r\n  if (props['--image-width']) style['--image-width'] = props['--image-width']\r\n  if (props['--image-width-full-page'])\r\n    style['--image-width-full-page'] = props['--image-width-full-page']\r\n\r\n  return style\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n@import './error-block.less';\r\n</style>\r\n","export type FormLayout = 'vertical' | 'horizontal'\r\n\r\nexport type FieldValue = string | number | boolean | null | undefined | Date | Array<FieldValue>\r\n\r\nexport interface FormInstance {\r\n  getFieldValue: (name: string | (string | number)[]) => FieldValue\r\n  getFieldsValue: (nameList?: (string | (string | number))[]) => Record<string, FieldValue>\r\n  getFieldError: (name: string | (string | number)[]) => string[]\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  getFieldsError: (nameList?: (string | (string | number))[]) => any[]\r\n  isFieldTouched: (name: string | (string | number)[]) => boolean\r\n  isFieldsTouched: (nameList?: (string | (string | number))[]) => boolean\r\n  resetFields: (fields?: (string | (string | number))[]) => void\r\n  setFields: (fields: FieldData[]) => void\r\n  setFieldValue: (name: string | (string | number)[], value: FieldValue) => void\r\n  setArrayFieldValue: (\r\n    name: string | (string | number)[],\r\n    value: Array<Record<string, FieldValue>>,\r\n  ) => void\r\n  setFieldsValue: (values: Record<string, FieldValue>) => void\r\n  submit: () => void\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  validateFields: (nameList?: (string | (string | number))[]) => Promise<any>\r\n}\r\n\r\nexport interface Rule {\r\n  enum?: FieldValue[]\r\n  len?: number\r\n  max?: number\r\n  message?: string | ((value: FieldValue, rule: Rule) => string)\r\n  min?: number\r\n  pattern?: RegExp\r\n  required?: boolean\r\n  transform?: (value: FieldValue) => FieldValue\r\n  type?: string\r\n  whitespace?: boolean\r\n  validator?: (rule: Rule, value: FieldValue) => Promise<void> | void\r\n}\r\n\r\nexport interface ValidateMessages {\r\n  default?: string | (() => string)\r\n  required?: string | (() => string)\r\n  enum?: string | (() => string)\r\n  whitespace?: string | (() => string)\r\n  date?: {\r\n    format?: string | (() => string)\r\n    parse?: string | (() => string)\r\n    invalid?: string | (() => string)\r\n  }\r\n  types?: {\r\n    string?: string | (() => string)\r\n    method?: string | (() => string)\r\n    array?: string | (() => string)\r\n    object?: string | (() => string)\r\n    number?: string | (() => string)\r\n    date?: string | (() => string)\r\n    boolean?: string | (() => string)\r\n    integer?: string | (() => string)\r\n    float?: string | (() => string)\r\n    regexp?: string | (() => string)\r\n    email?: string | (() => string)\r\n    url?: string | (() => string)\r\n    hex?: string | (() => string)\r\n  }\r\n  string?: {\r\n    len?: string | (() => string)\r\n    min?: string | (() => string)\r\n    max?: string | (() => string)\r\n    range?: string | (() => string)\r\n  }\r\n  number?: {\r\n    len?: string | (() => string)\r\n    min?: string | (() => string)\r\n    max?: string | (() => string)\r\n    range?: string | (() => string)\r\n  }\r\n  array?: {\r\n    len?: string | (() => string)\r\n    min?: string | (() => string)\r\n    max?: string | (() => string)\r\n    range?: string | (() => string)\r\n  }\r\n  pattern?: {\r\n    mismatch?: string | (() => string)\r\n  }\r\n}\r\n\r\nexport interface FieldData {\r\n  name: string | number | (string | number)[]\r\n  value?: FieldValue\r\n  touched?: boolean\r\n  validating?: boolean\r\n  errors?: string[]\r\n}\r\n\r\nexport type NamePath = string | number | (string | number)[]\r\n\r\nexport interface Meta {\r\n  touched: boolean\r\n  validating: boolean\r\n  errors: string[]\r\n  warnings: string[]\r\n  name: (string | number)[]\r\n  hidden?: boolean\r\n}\r\n\r\nexport interface FormArrayField {\r\n  index: number\r\n  key: number\r\n}\r\n\r\nexport interface FormArrayOperation {\r\n  add: (defaultValue?: FieldValue, insertIndex?: number) => void\r\n  remove: (index: number | number[]) => void\r\n  move: (from: number, to: number) => void\r\n}\r\n\r\nexport interface FormContextType {\r\n  name?: string\r\n  hasFeedback: boolean\r\n  layout: FormLayout\r\n  requiredMarkStyle: 'asterisk' | 'text-required' | 'text-optional' | 'none'\r\n  optionalText?: string\r\n  disabled: boolean\r\n}\r\n\r\nexport const defaultFormContext: FormContextType = {\r\n  name: undefined,\r\n  hasFeedback: true,\r\n  layout: 'vertical',\r\n  requiredMarkStyle: 'asterisk',\r\n  optionalText: '',\r\n  disabled: false,\r\n}\r\n","import { inject, provide, type InjectionKey } from 'vue'\r\nimport type { FormContextType, Meta } from './types'\r\nimport { defaultFormContext } from './types'\r\n\r\nexport const FormContextKey: InjectionKey<FormContextType> = Symbol('FormContext')\r\nexport const NoStyleItemContextKey: InjectionKey<\r\n  (meta: Meta & { destroy?: boolean }, namePath: (string | number)[]) => void\r\n> = Symbol('NoStyleItemContext')\r\n\r\nexport function useFormContext(): FormContextType {\r\n  return inject(FormContextKey, defaultFormContext)\r\n}\r\n\r\nexport function provideFormContext(context: FormContextType) {\r\n  provide(FormContextKey, context)\r\n}\r\n\r\nexport function useNoStyleItemContext() {\r\n  return inject(NoStyleItemContextKey, null)\r\n}\r\n\r\nexport function provideNoStyleItemContext(\r\n  fn: (meta: Meta & { destroy?: boolean }, namePath: (string | number)[]) => void,\r\n) {\r\n  provide(NoStyleItemContextKey, fn)\r\n}\r\n","import type { VNode } from 'vue'\r\nimport type { Rule } from './types'\r\n\r\nexport function toArray<T>(candidate?: T | T[] | false): T[] {\r\n  if (candidate === undefined || candidate === false) return []\r\n  return Array.isArray(candidate) ? candidate : [candidate]\r\n}\r\n\r\n// Check if value is Promise\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function isPromise(value: any): value is Promise<any> {\r\n  return value && typeof value.then === 'function'\r\n}\r\n\r\n// Get component name for debugging\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function getComponentName(component: any): string {\r\n  if (!component) return 'Unknown'\r\n  if (typeof component === 'string') return component\r\n  if (component.name) return component.name\r\n  if (component.__name) return component.__name\r\n  if (component.displayName) return component.displayName\r\n  return 'Anonymous'\r\n}\r\n\r\n// Create a unique field ID\r\nexport function createFieldId(formName?: string, namePath?: (string | number)[]): string {\r\n  const nameList = toArray(namePath)\r\n  if (nameList.length === 0) return ''\r\n\r\n  const fullPath = formName ? [formName, ...nameList] : nameList\r\n  return fullPath.join('_')\r\n}\r\n\r\n// Check if the rule has required property\r\nexport function isRequired(rules?: Rule[]): boolean {\r\n  return !!(rules && rules.some((rule) => !!(rule && typeof rule === 'object' && rule.required)))\r\n}\r\n\r\n// Safe clone element with new props\r\nexport function cloneVNode(\r\n  vnode: VNode,\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  props: Record<string, any> = {},\r\n): VNode {\r\n  if (!vnode) return vnode\r\n\r\n  const cloned = { ...vnode }\r\n  cloned.props = { ...vnode.props, ...props }\r\n  return cloned\r\n}\r\n\r\n// Merge multiple classes\r\nexport function mergeClasses(\r\n  ...classes: (string | undefined | null | false | Record<string, boolean>)[]\r\n): string {\r\n  const result: string[] = []\r\n\r\n  classes.forEach((cls) => {\r\n    if (!cls) return\r\n\r\n    if (typeof cls === 'string') {\r\n      result.push(cls)\r\n    } else if (typeof cls === 'object') {\r\n      Object.keys(cls).forEach((key) => {\r\n        if (cls[key]) {\r\n          result.push(key)\r\n        }\r\n      })\r\n    }\r\n  })\r\n\r\n  return result.join(' ')\r\n}\r\n\r\n// Get value from event (commonly used for form controls)\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function getValueFromEvent(e: any): any {\r\n  if (!e || !e.target) return e\r\n\r\n  const { target } = e\r\n  return target.type === 'checkbox' ? target.checked : target.value\r\n}\r\n\r\n// Generate a unique key\r\nlet keyIndex = 0\r\nexport function generateKey(): number {\r\n  return ++keyIndex\r\n}\r\n","import type { Rule, ValidateMessages, FieldValue } from './types'\r\n\r\nexport class ValidateError extends Error {\r\n  field: string\r\n\r\n  constructor(message: string, field: string) {\r\n    super(message)\r\n    this.name = 'ValidateError'\r\n    this.field = field\r\n  }\r\n}\r\n\r\nexport class FormValidator {\r\n  private validateMessages: ValidateMessages\r\n\r\n  constructor(validateMessages: ValidateMessages = {}) {\r\n    this.validateMessages = validateMessages\r\n  }\r\n\r\n  async validateField(value: FieldValue, rules: Rule[], field: string): Promise<void> {\r\n    if (!rules || rules.length === 0) return\r\n\r\n    for (const rule of rules) {\r\n      try {\r\n        await this.validateRule(value, rule, field)\r\n      } catch (error) {\r\n        const message = error instanceof Error ? error.message : String(error)\r\n        throw new ValidateError(message, field)\r\n      }\r\n    }\r\n  }\r\n\r\n  private async validateRule(value: FieldValue, rule: Rule, field: string): Promise<void> {\r\n    // Transform value if needed\r\n    const finalValue = rule.transform ? rule.transform(value) : value\r\n\r\n    // Required validation\r\n    if (rule.required && this.isEmpty(finalValue)) {\r\n      throw new Error(this.getMessage(rule, 'required', field) || '此字段是必填的')\r\n    }\r\n\r\n    // Skip other validations if value is empty and not required\r\n    // if (this.isEmpty(finalValue) && !rule.required) {\r\n    //   return\r\n    // }\r\n\r\n    // Type validation\r\n    if (rule.type) {\r\n      await this.validateType(finalValue, rule.type, rule, field)\r\n    }\r\n\r\n    // Length validation\r\n    if (rule.len !== undefined) {\r\n      await this.validateLength(finalValue, rule.len, 'len', rule, field)\r\n    }\r\n\r\n    if (rule.min !== undefined) {\r\n      await this.validateLength(finalValue, rule.min, 'min', rule, field)\r\n    }\r\n\r\n    if (rule.max !== undefined) {\r\n      await this.validateLength(finalValue, rule.max, 'max', rule, field)\r\n    }\r\n\r\n    // Pattern validation\r\n    if (rule.pattern) {\r\n      if (!rule.pattern.test(String(finalValue))) {\r\n        throw new Error(this.getMessage(rule, 'pattern', field) || '格式不正确')\r\n      }\r\n    }\r\n\r\n    // Enum validation\r\n    if (rule.enum) {\r\n      if (!rule.enum.includes(finalValue)) {\r\n        throw new Error(this.getMessage(rule, 'enum', field) || '值不在允许的选项中')\r\n      }\r\n    }\r\n\r\n    // Whitespace validation\r\n    if (rule.whitespace && typeof finalValue === 'string') {\r\n      if (finalValue.trim() === '') {\r\n        throw new Error(this.getMessage(rule, 'whitespace', field) || '不能只包含空格')\r\n      }\r\n    }\r\n\r\n    // Custom validator\r\n    if (rule.validator) {\r\n      await rule.validator(rule, finalValue)\r\n    }\r\n  }\r\n\r\n  private isEmpty(value: FieldValue): boolean {\r\n    return value === undefined || value === null || value === ''\r\n  }\r\n\r\n  private async validateType(\r\n    value: FieldValue,\r\n    type: string,\r\n    rule: Rule,\r\n    field: string,\r\n  ): Promise<void> {\r\n    switch (type) {\r\n      case 'string':\r\n        if (typeof value !== 'string') {\r\n          throw new Error(this.getMessage(rule, 'types.string', field) || '必须是字符串')\r\n        }\r\n        break\r\n      case 'number':\r\n        if (typeof value !== 'number' || isNaN(value)) {\r\n          throw new Error(this.getMessage(rule, 'types.number', field) || '必须是数字')\r\n        }\r\n        break\r\n      case 'boolean':\r\n        if (typeof value !== 'boolean') {\r\n          throw new Error(this.getMessage(rule, 'types.boolean', field) || '必须是布尔值')\r\n        }\r\n        break\r\n      case 'array':\r\n        if (!Array.isArray(value)) {\r\n          throw new Error(this.getMessage(rule, 'types.array', field) || '必须是数组')\r\n        }\r\n        break\r\n      case 'object':\r\n        if (typeof value !== 'object' || Array.isArray(value) || value === null) {\r\n          throw new Error(this.getMessage(rule, 'types.object', field) || '必须是对象')\r\n        }\r\n        break\r\n      case 'email':\r\n        const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\r\n        if (!emailRegex.test(String(value))) {\r\n          throw new Error(this.getMessage(rule, 'types.email', field) || '邮箱格式不正确')\r\n        }\r\n        break\r\n      case 'url':\r\n        try {\r\n          new URL(String(value))\r\n        } catch {\r\n          throw new Error(this.getMessage(rule, 'types.url', field) || 'URL格式不正确')\r\n        }\r\n        break\r\n      case 'date':\r\n        const date = new Date(value as string | number)\r\n        if (isNaN(date.getTime())) {\r\n          throw new Error(this.getMessage(rule, 'types.date', field) || '日期格式不正确')\r\n        }\r\n        break\r\n      case 'integer':\r\n        if (!Number.isInteger(Number(value))) {\r\n          throw new Error(this.getMessage(rule, 'types.integer', field) || '必须是整数')\r\n        }\r\n        break\r\n      case 'float':\r\n        if (typeof value !== 'number' || isNaN(value)) {\r\n          throw new Error(this.getMessage(rule, 'types.float', field) || '必须是浮点数')\r\n        }\r\n        break\r\n      case 'regexp':\r\n        try {\r\n          new RegExp(String(value))\r\n        } catch {\r\n          throw new Error(this.getMessage(rule, 'types.regexp', field) || '正则表达式格式不正确')\r\n        }\r\n        break\r\n      case 'hex':\r\n        const hexRegex = /^#[0-9A-Fa-f]{6}$/\r\n        if (!hexRegex.test(String(value))) {\r\n          throw new Error(this.getMessage(rule, 'types.hex', field) || '十六进制颜色格式不正确')\r\n        }\r\n        break\r\n    }\r\n  }\r\n\r\n  private async validateLength(\r\n    value: FieldValue,\r\n    expectedLength: number,\r\n    type: 'len' | 'min' | 'max',\r\n    rule: Rule,\r\n    field: string,\r\n  ): Promise<void> {\r\n    let actualLength: number\r\n\r\n    if (typeof value === 'string' || Array.isArray(value)) {\r\n      actualLength = value.length\r\n    } else if (typeof value === 'number') {\r\n      actualLength = value\r\n    } else {\r\n      return\r\n    }\r\n\r\n    let valid = false\r\n    let messageKey = ''\r\n    let defaultMessage = ''\r\n\r\n    switch (type) {\r\n      case 'len':\r\n        valid = actualLength === expectedLength\r\n        messageKey = Array.isArray(value)\r\n          ? 'array.len'\r\n          : typeof value === 'string'\r\n            ? 'string.len'\r\n            : 'number.len'\r\n        defaultMessage = `长度必须是 ${expectedLength}`\r\n        break\r\n      case 'min':\r\n        valid = actualLength >= expectedLength\r\n        messageKey = Array.isArray(value)\r\n          ? 'array.min'\r\n          : typeof value === 'string'\r\n            ? 'string.min'\r\n            : 'number.min'\r\n        defaultMessage = `最小长度为 ${expectedLength}`\r\n        break\r\n      case 'max':\r\n        valid = actualLength <= expectedLength\r\n        messageKey = Array.isArray(value)\r\n          ? 'array.max'\r\n          : typeof value === 'string'\r\n            ? 'string.max'\r\n            : 'number.max'\r\n        defaultMessage = `最大长度为 ${expectedLength}`\r\n        break\r\n    }\r\n\r\n    if (!valid) {\r\n      throw new Error(this.getMessage(rule, messageKey, field) || defaultMessage)\r\n    }\r\n  }\r\n\r\n  private getMessage(\r\n    rule: Rule,\r\n    path: string,\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    field: string,\r\n  ): string | undefined {\r\n    // Rule message takes priority\r\n    if (rule.message) {\r\n      return typeof rule.message === 'function'\r\n        ? rule.message(rule.message as unknown as FieldValue, rule)\r\n        : rule.message\r\n    }\r\n\r\n    // Get message from validateMessages\r\n    const keys = path.split('.')\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    let message: any = this.validateMessages\r\n\r\n    for (const key of keys) {\r\n      if (message && typeof message === 'object') {\r\n        message = message[key as keyof typeof message]\r\n      } else {\r\n        message = undefined\r\n        break\r\n      }\r\n    }\r\n\r\n    if (message) {\r\n      return typeof message === 'function' ? message() : message\r\n    }\r\n\r\n    return undefined\r\n  }\r\n\r\n  setValidateMessages(messages: ValidateMessages) {\r\n    this.validateMessages = { ...this.validateMessages, ...messages }\r\n  }\r\n}\r\n\r\n// Default validate messages\r\nexport const defaultValidateMessages: ValidateMessages = {\r\n  default: '字段验证错误',\r\n  required: '此字段是必填的',\r\n  enum: '值不在允许的选项中',\r\n  whitespace: '不能只包含空格',\r\n  date: {\r\n    format: '日期格式不正确',\r\n    parse: '无法解析日期',\r\n    invalid: '无效的日期',\r\n  },\r\n  types: {\r\n    string: '必须是字符串',\r\n    method: '必须是函数',\r\n    array: '必须是数组',\r\n    object: '必须是对象',\r\n    number: '必须是数字',\r\n    date: '必须是有效日期',\r\n    boolean: '必须是布尔值',\r\n    integer: '必须是整数',\r\n    float: '必须是浮点数',\r\n    regexp: '正则表达式格式不正确',\r\n    email: '邮箱格式不正确',\r\n    url: 'URL格式不正确',\r\n    hex: '十六进制颜色格式不正确',\r\n  },\r\n  string: {\r\n    len: '长度必须是 ${len} 个字符',\r\n    min: '最少 ${min} 个字符',\r\n    max: '最多 ${max} 个字符',\r\n    range: '长度必须在 ${min}-${max} 个字符之间',\r\n  },\r\n  number: {\r\n    len: '必须等于 ${len}',\r\n    min: '不能小于 ${min}',\r\n    max: '不能大于 ${max}',\r\n    range: '必须在 ${min}-${max} 之间',\r\n  },\r\n  array: {\r\n    len: '长度必须是 ${len}',\r\n    min: '最少 ${min} 项',\r\n    max: '最多 ${max} 项',\r\n    range: '长度必须在 ${min}-${max} 之间',\r\n  },\r\n  pattern: {\r\n    mismatch: '格式不正确',\r\n  },\r\n}\r\n","import { computed, reactive, ref } from 'vue'\nimport type {\n  FieldValue,\n  FieldData,\n  FormInstance,\n  Meta,\n  NamePath,\n  Rule,\n  ValidateMessages,\n} from './types'\nimport { toArray } from './utils'\nimport { FormValidator, ValidateError, defaultValidateMessages } from './validator'\n\n// Simple form store implementation\nexport class FormStore {\n  private fields = reactive<Record<string, FieldValue>>({})\n  private fieldMetas = reactive<Record<string, Meta>>({})\n  private fieldRules = reactive<Record<string, Rule[]>>({})\n  private initialValues = reactive<Record<string, FieldValue>>({})\n  private callbacks: {\n    onFieldsChange?: (changedFields: FieldData[], allFields: FieldData[]) => void\n    onValuesChange?: (\n      changedValues: Record<string, FieldValue>,\n      allValues: Record<string, FieldValue>,\n    ) => void\n    onFinish?: (values: Record<string, FieldValue>) => void\n    onFinishFailed?: (errorInfo: {\n      values: Record<string, FieldValue>\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      errorFields: any[]\n      outOfDate: boolean\n    }) => void\n  } = {}\n\n  private validator: FormValidator\n  private preserve = true\n\n  constructor() {\n    this.validator = new FormValidator(defaultValidateMessages)\n  }\n\n  setCallbacks(callbacks: typeof this.callbacks) {\n    this.callbacks = { ...this.callbacks, ...callbacks }\n  }\n\n  setValidateMessages(messages: ValidateMessages) {\n    this.validator.setValidateMessages(messages)\n  }\n\n  setPreserve(preserve: boolean) {\n    this.preserve = preserve\n  }\n\n  // setInitialValues(values: Record<string, FieldValue>) {\n  //   Object.assign(this.initialValues, values)\n  //   // Set initial values to fields if not already set\n  //   Object.keys(values).forEach((key) => {\n  //     if (!(key in this.fields)) {\n  //       this.fields[key] = values[key]\n  //     }\n  //   })\n  //   console.log('this.fields :', this.fields)\n  // }\n\n  setInitialValues(values: Record<string, FieldValue | object>) {\n    // 扁平化处理嵌套对象/数组，例如 { a: { b: 1 }, arr: [ { x: 1 } ] }\n    const flat: Record<string, FieldValue> = {}\n    const flatten = (val: FieldValue, curKey: string) => {\n      if (val && typeof val === 'object') {\n        if (Array.isArray(val)) {\n          if (val.filter((i) => typeof i === 'object').length === 0) {\n            flat[curKey] = val\n          } else {\n            val.forEach((item, idx) => {\n              flatten(item, curKey ? `${curKey}.${idx}` : `${idx}`)\n            })\n          }\n        } else if (val instanceof Date) {\n          flat[curKey] = val\n        } else {\n          Object.keys(val as Record<string, FieldValue>).forEach((k) => {\n            flatten(val[k], curKey ? `${curKey}.${k}` : k)\n          })\n        }\n      } else {\n        flat[curKey] = val\n      }\n    }\n\n    Object.keys(values).forEach((key) => {\n      flatten(values[key] as FieldValue, key)\n    })\n\n    Object.assign(this.initialValues, flat)\n    Object.keys(flat).forEach((key) => {\n      this.fields[key] = flat[key]\n    })\n    console.log('setInitialValues:', this.fields)\n  }\n\n  private getNamePath(name: NamePath): string {\n    return toArray(name).join('.')\n  }\n\n  private setFieldMeta(name: NamePath, meta: Partial<Meta>) {\n    const key = this.getNamePath(name)\n    const currentMeta = this.fieldMetas[key] || {\n      touched: false,\n      validating: false,\n      errors: [],\n      warnings: [],\n      name: toArray(name),\n    }\n    this.fieldMetas[key] = { ...currentMeta, ...meta }\n  }\n\n  // Expose a method to mark a field as hidden or visible\n  setFieldHidden(name: NamePath, hidden: boolean) {\n    this.setFieldMeta(name, { hidden })\n  }\n\n  private getFieldMeta(name: NamePath): Meta {\n    const key = this.getNamePath(name)\n    return (\n      this.fieldMetas[key] || {\n        touched: false,\n        validating: false,\n        errors: [],\n        warnings: [],\n        name: toArray(name),\n        hidden: false,\n      }\n    )\n  }\n\n  getFieldValue(name: NamePath): FieldValue {\n    const key = this.getNamePath(name)\n    return this.fields[key]\n  }\n\n  getFieldsValue(nameList?: NamePath[]): Record<string, FieldValue> {\n    if (!nameList) {\n      return { ...this.fields }\n    }\n    const result: Record<string, FieldValue> = {}\n    nameList.forEach((name) => {\n      const key = this.getNamePath(name)\n      result[key] = this.fields[key]\n    })\n    return result\n  }\n\n  getFieldError(name: NamePath): string[] {\n    return this.getFieldMeta(name).errors\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  getFieldsError(nameList?: NamePath[]): any[] {\n    const names = nameList || Object.keys(this.fieldMetas)\n    return names.map((name) => ({\n      name: toArray(name),\n      errors: this.getFieldError(name),\n    }))\n  }\n\n  isFieldTouched(name: NamePath): boolean {\n    return this.getFieldMeta(name).touched\n  }\n\n  isFieldsTouched(nameList?: NamePath[]): boolean {\n    const names = nameList || Object.keys(this.fieldMetas)\n    return names.some((name) => this.isFieldTouched(name))\n  }\n\n  setFieldValue(name: NamePath, value: FieldValue) {\n    const key = this.getNamePath(name)\n    const oldValue = this.fields[key]\n    this.fields[key] = value\n\n    if (oldValue !== value) {\n      this.setFieldMeta(name, { touched: true })\n\n      const changedFields: FieldData[] = [\n        {\n          name: toArray(name),\n          value,\n          touched: true,\n        },\n      ]\n\n      const allFields = this.getAllFieldData()\n      this.callbacks.onFieldsChange?.(changedFields, allFields)\n      this.callbacks.onValuesChange?.({ [key]: value }, this.getFieldsValue())\n    }\n  }\n\n  setArrayFieldValue(name: NamePath, value: Array<Record<string, FieldValue>>) {\n    this.clearArrayFieldValue(name)\n    const names = name instanceof Array ? name : toArray(name)\n    const values: Record<string, FieldValue> = {}\n    value.forEach((item, index) => {\n      Object.keys(item).forEach((key) => {\n        values[`${names.join('.')}.${index}.${key}`] = item[key]\n      })\n    })\n    this.setFieldsValue(values)\n  }\n\n  clearArrayFieldValue(name: NamePath) {\n    const key = this.getNamePath(name)\n    const metaKeys = Object.keys(this.fieldMetas).filter((k) => k.startsWith(key + '.'))\n    metaKeys.forEach((k) => {\n      delete this.fieldMetas[k]\n    })\n    const fieldKeys = Object.keys(this.fields).filter((k) => k.startsWith(key + '.'))\n    fieldKeys.forEach((k) => {\n      delete this.fields[k]\n    })\n  }\n\n  setFieldsValue(values: Record<string, FieldValue>) {\n    Object.keys(values).forEach((key) => {\n      this.fields[key] = values[key]\n    })\n\n    const changedFields = Object.keys(values).map((key) => ({\n      name: key.split('.'),\n      value: values[key],\n      touched: true,\n    }))\n\n    const allFields = this.getAllFieldData()\n    this.callbacks.onFieldsChange?.(changedFields, allFields)\n    this.callbacks.onValuesChange?.(values, this.getFieldsValue())\n  }\n\n  setFields(fields: FieldData[]) {\n    fields.forEach((field) => {\n      const key = this.getNamePath(field.name)\n      if (field.value !== undefined) {\n        this.fields[key] = field.value\n      }\n      this.setFieldMeta(field.name, {\n        touched: field.touched,\n        errors: field.errors || [],\n        validating: field.validating,\n      })\n    })\n  }\n\n  resetFields(fields?: NamePath[]) {\n    const names = fields || Object.keys(this.fields)\n    names.forEach((name) => {\n      const key = this.getNamePath(name)\n      this.fields[key] = this.initialValues[key]\n      this.setFieldMeta(name, {\n        touched: false,\n        validating: false,\n        errors: [],\n        warnings: [],\n      })\n    })\n  }\n\n  private getAllFieldData(): FieldData[] {\n    return Object.keys(this.fields).map((key) => ({\n      name: key.split('.'),\n      value: this.fields[key],\n      touched: this.getFieldMeta(key).touched,\n      validating: this.getFieldMeta(key).validating,\n      errors: this.getFieldMeta(key).errors,\n    }))\n  }\n\n  async validateFields(nameList?: NamePath[]): Promise<Record<string, FieldValue>> {\n    // 默认只校验未被标记为 hidden 的字段\n    const defaultNames = Object.keys(this.fieldMetas).filter((k) => !this.fieldMetas[k]?.hidden)\n    const names = nameList || defaultNames\n    const errors: Record<string, string[]> = {}\n    let hasError = false\n\n    for (const name of names) {\n      const key = this.getNamePath(name)\n      const rules = this.fieldRules[key] || []\n      const value = this.fields[key]\n\n      this.setFieldMeta(name, { validating: true })\n\n      try {\n        await this.validator.validateField(value, rules, key)\n        this.setFieldMeta(name, { validating: false, errors: [] })\n      } catch (error) {\n        hasError = true\n        const errorMessages = error instanceof ValidateError ? [error.message] : [String(error)]\n        errors[key] = errorMessages\n        this.setFieldMeta(name, { validating: false, errors: errorMessages })\n      }\n    }\n\n    if (hasError) {\n      const errorInfo = {\n        values: this.getFieldsValue(),\n        errorFields: Object.keys(errors).map((key) => ({\n          name: key.split('.'),\n          errors: errors[key],\n        })),\n        outOfDate: false,\n      }\n      // this.callbacks.onFinishFailed?.(errorInfo)\n      throw errorInfo\n    }\n\n    const values = this.getFieldsValue()\n    // this.callbacks.onFinish?.(values)\n    return values\n  }\n\n  async submit() {\n    try {\n      const values = await this.validateFields()\n      this.callbacks.onFinish?.(values)\n    } catch (err) {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      this.callbacks.onFinishFailed?.(err as unknown as any)\n    }\n  }\n\n  registerField(name: NamePath, rules?: Rule[]) {\n    const key = this.getNamePath(name)\n\n    // Store rules\n    if (rules) {\n      this.fieldRules[key] = rules\n    }\n\n    // Initialize field if not exists\n    if (!(key in this.fields)) {\n      this.fields[key] = this.initialValues[key]\n    }\n\n    // Initialize meta\n    if (!this.fieldMetas[key]) {\n      this.setFieldMeta(name, {\n        touched: false,\n        validating: false,\n        errors: [],\n        warnings: [],\n        name: toArray(name),\n      })\n    }\n    return {\n      value: computed(() => this.fields[key]),\n      meta: computed(() => this.getFieldMeta(name)),\n      setValue: (value: FieldValue) => this.setFieldValue(name, value),\n    }\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function useForm(form?: FormInstance): [FormStore] {\n  const formStore = new FormStore()\n  return [formStore]\n}\n\nexport function useWatch(namePath: NamePath, form?: FormStore) {\n  if (!form) return ref(undefined)\n\n  const key = typeof namePath === 'string' ? namePath : toArray(namePath).join('.')\n  return computed(() => form.getFieldValue(key))\n}\n","<template>\n  <form :class=\"formClasses\" :style=\"style\" @submit.prevent=\"handleSubmit\">\n    <div class=\"adm-form-body\" ref=\"formRef\" :style=\"bodyStyle\">\n      <List v-if=\"!isIncludeArray\" :mode=\"props.mode\">\n        <template #header>\n          <slot name=\"header\" />\n        </template>\n        <slot />\n      </List>\n      <template v-else>\n        <slot />\n      </template>\n    </div>\n\n    <div v-if=\"footer || $slots.footer\" class=\"adm-form-footer\">\n      <slot name=\"footer\" :handleSubmit=\"handleSubmit\">\n        <component :is=\"footer\" v-if=\"footer\" />\n      </slot>\n    </div>\n  </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, provide, ref, useSlots, type Component } from 'vue'\nimport { useConfig } from '../config-provider/useConfig'\nimport { provideFormContext } from './context'\nimport { useForm } from './form-store'\nimport List from '../list/list.vue'\nimport type { FieldData, FormInstance, FormLayout, ValidateMessages } from './types'\nimport { defaultFormContext, type FieldValue } from './types'\nimport { mergeClasses } from './utils'\n\ninterface FormProps {\n  // Form control\n  form?: FormInstance\n  initialValues?: Record<string, FieldValue | object>\n  name?: string\n  preserve?: boolean\n  validateMessages?: ValidateMessages\n  validateTrigger?: string | string[]\n  fixedHeight?: boolean\n\n  // Events\n  onFieldsChange?: (changedFields: FieldData[], allFields: FieldData[]) => void\n  onFinish?: (values: Record<string, FieldValue>) => void\n  onFinishFailed?: (errorInfo: {\n    values: Record<string, FieldValue>\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    errorFields: any[]\n    outOfDate: boolean\n  }) => void\n  onValuesChange?: (\n    changedValues: Record<string, FieldValue>,\n    allValues: Record<string, FieldValue>,\n  ) => void\n\n  // Style\n  className?: string\n  style?: Record<string, string | number>\n\n  // Form context\n  hasFeedback?: boolean\n  layout?: FormLayout\n  disabled?: boolean\n  requiredMarkStyle?: 'asterisk' | 'text-required' | 'text-optional' | 'none'\n  optionalText?: string\n\n  // Layout\n  footer?: Component\n  mode?: 'default' | 'card'\n}\n\nconst props = withDefaults(defineProps<FormProps>(), {\n  hasFeedback: true,\n  layout: 'vertical',\n  requiredMarkStyle: 'asterisk',\n  optionalText: '',\n  disabled: false,\n  preserve: true,\n  mode: 'default',\n  fixedHeight: false,\n})\n\nconst bodyStyle = computed(() => {\n  return props.fixedHeight ? { height: `${window.innerHeight - 90}px` } : {}\n})\n\nconst emit = defineEmits<{\n  fieldsChange: [changedFields: FieldData[], allFields: FieldData[]]\n  finish: [values: Record<string, FieldValue>]\n  finishFailed: [\n    errorInfo: {\n      values: Record<string, FieldValue>\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      errorFields: any[]\n      outOfDate: boolean\n    },\n  ]\n  valuesChange: [changedValues: Record<string, FieldValue>, allValues: Record<string, FieldValue>]\n}>()\n\n// Get config\nconst { locale } = useConfig()\n\n// Create form store\nconst [formStore] = useForm()\n\n// Merged validate messages\nconst mergedValidateMessages = computed(() => {\n  const defaultMessages = locale.Form?.defaultValidateMessages || {}\n  return {\n    ...defaultMessages,\n    ...props.validateMessages,\n  }\n})\n\nconst slots = useSlots()\nconst isIncludeArray = computed(() => {\n  const defaultSlots = slots.default ? slots.default() : []\n  return defaultSlots.some((slot) => slot.type && (slot.type as Component).name === 'FormArray')\n})\n\n// Set up form store\nonMounted(() => {\n  if (props.initialValues) {\n    formStore.setInitialValues(props.initialValues)\n  }\n\n  // Set merged validate messages\n  formStore.setValidateMessages(mergedValidateMessages.value)\n\n  formStore.setPreserve(props.preserve)\n\n  // Set up callbacks\n  formStore.setCallbacks({\n    onFieldsChange: (changedFields, allFields) => {\n      props.onFieldsChange?.(changedFields, allFields)\n      emit('fieldsChange', changedFields, allFields)\n    },\n    onValuesChange: (changedValues, allValues) => {\n      props.onValuesChange?.(changedValues, allValues)\n      emit('valuesChange', changedValues, allValues)\n    },\n    onFinish: (values) => {\n      // props.onFinish?.(values)\n      emit('finish', values)\n    },\n    onFinishFailed: (errorInfo) => {\n      props.onFinishFailed?.(errorInfo)\n      emit('finishFailed', errorInfo)\n    },\n  })\n})\n\n// Provide contexts\nconst formContext = computed(() => ({\n  name: props.name,\n  hasFeedback: props.hasFeedback ?? defaultFormContext.hasFeedback,\n  layout: props.layout ?? defaultFormContext.layout,\n  requiredMarkStyle: props.requiredMarkStyle ?? defaultFormContext.requiredMarkStyle,\n  disabled: props.disabled ?? defaultFormContext.disabled,\n  optionalText: props.optionalText,\n}))\n\nprovideFormContext(formContext.value)\nprovide('formStore', formStore)\n\n// Expose form instance methods\nconst formInstance: FormInstance = {\n  getFieldValue: (name) => formStore.getFieldValue(name),\n  getFieldsValue: (nameList) => formStore.getFieldsValue(nameList),\n  getFieldError: (name) => formStore.getFieldError(name),\n  getFieldsError: (nameList) => formStore.getFieldsError(nameList),\n  isFieldTouched: (name) => formStore.isFieldTouched(name),\n  isFieldsTouched: (nameList) => formStore.isFieldsTouched(nameList),\n  resetFields: (fields) => formStore.resetFields(fields),\n  setFields: (fields) => formStore.setFields(fields),\n  setFieldValue: (name, value) => formStore.setFieldValue(name, value),\n  setArrayFieldValue: (name, arr) => formStore.setArrayFieldValue(name, arr),\n  setFieldsValue: (values) => formStore.setFieldsValue(values),\n  submit: () => formStore.submit(),\n  validateFields: (nameList) => formStore.validateFields(nameList),\n}\n\ndefineExpose(formInstance)\n\n// Process children slots to create lists\nconst formRef = ref<HTMLElement>()\n\n// CSS classes\nconst formClasses = computed(() => {\n  return mergeClasses('adm-form', props.className)\n})\n\n// Form submission\nconst handleSubmit = () => {\n  formStore.submit()\n}\n</script>\n","import { canUseDom } from './can-use-dom'\nimport { isDev } from './is-dev'\nimport { devError } from './dev-log'\n\nlet tenPxTester: HTMLDivElement | null = null\nlet tester: HTMLDivElement | null = null\n\nif (canUseDom) {\n  tenPxTester = document.createElement('div')\n  tenPxTester.className = 'adm-px-tester'\n  tenPxTester.style.setProperty('--size', '10')\n  document.body.appendChild(tenPxTester)\n  tester = document.createElement('div')\n  tester.className = 'adm-px-tester'\n  document.body.appendChild(tester)\n  if (isDev) {\n    if (window.getComputedStyle(tester).position !== 'fixed') {\n      devError(\n        'Global',\n        'The px tester is not rendering properly. Please make sure you have imported `ant-design-mobile-vue3/global`.'\n      )\n    }\n  }\n}\n\nexport function convertPx(px: number) {\n  if (tenPxTester === null || tester === null) return px\n  if (tenPxTester.getBoundingClientRect().height === 10) {\n    return px\n  }\n  tester.style.setProperty('--size', px.toString())\n  return tester.getBoundingClientRect().height\n}\n","export function mergeProps<A, B>(a: A, b: B): B & A\nexport function mergeProps<A, B, C>(a: A, b: B, c: C): C & B & A\nexport function mergeProps<A, B, C, D>(a: A, b: B, c: C, d: D): D & C & B & A\nexport function mergeProps(...items: any[]) {\n  const ret: any = {}\n  items.forEach(item => {\n    if (item) {\n      Object.keys(item).forEach(key => {\n        if (item[key] !== undefined) {\n          ret[key] = item[key]\n        }\n      })\n    }\n  })\n  return ret\n}\n\n/**\n * Merge props and return the first non-undefined value.\n * The later has higher priority. e.g. (10, 1, 5) => 5 wins.\n * This is useful with legacy props that have been deprecated.\n */\nexport function mergeProp<T, DefaultT extends T = T>(\n  defaultProp: DefaultT,\n  ...propList: T[]\n): T | undefined {\n  for (let i = propList.length - 1; i >= 0; i -= 1) {\n    if (propList[i] !== undefined) {\n      return propList[i]\n    }\n  }\n  return defaultProp\n}\n","<template>\r\n  <svg viewBox=\"0 0 30 16\" v-bind=\"$attrs\">\r\n    <g fill=\"currentColor\">\r\n      <path\r\n        d=\"M0,0 L30,0 L18.07289,14.312538 C16.65863,16.009645 14.13637,16.238942 12.43926,14.824685 C12.25341,14.669808 12.08199,14.49839 11.92711,14.312538 L0,0 L0,0 Z\"\r\n      />\r\n    </g>\r\n  </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\ndefineOptions({\r\n  name: 'Arrow',\r\n  inheritAttrs: false,\r\n})\r\n</script>\r\n","export type Placement =\r\n  | 'top'\r\n  | 'top-start'\r\n  | 'top-end'\r\n  | 'right'\r\n  | 'right-start'\r\n  | 'right-end'\r\n  | 'bottom'\r\n  | 'bottom-start'\r\n  | 'bottom-end'\r\n  | 'left'\r\n  | 'left-start'\r\n  | 'left-end'\r\n\r\nexport type DeprecatedPlacement =\r\n  | 'topLeft'\r\n  | 'topRight'\r\n  | 'bottomLeft'\r\n  | 'bottomRight'\r\n  | 'leftTop'\r\n  | 'leftBottom'\r\n  | 'rightTop'\r\n  | 'rightBottom'\r\n\r\nconst record: Record<DeprecatedPlacement, Placement> = {\r\n  'topLeft': 'top-start',\r\n  'topRight': 'top-end',\r\n  'bottomLeft': 'bottom-start',\r\n  'bottomRight': 'bottom-end',\r\n  'leftTop': 'left-start',\r\n  'leftBottom': 'left-end',\r\n  'rightTop': 'right-start',\r\n  'rightBottom': 'right-end',\r\n}\r\n\r\nexport function normalizePlacement(\r\n  placement: Placement | DeprecatedPlacement\r\n): Placement {\r\n  return record[placement as DeprecatedPlacement] ?? placement\r\n}\r\n","import { ref, watch, type Ref } from 'vue'\r\n\r\nexport function useShouldRender(\r\n  active: Ref<boolean>,\r\n  forceRender?: boolean,\r\n  destroyOnClose?: boolean,\r\n) {\r\n  const shouldRender = ref(forceRender || active.value || !destroyOnClose)\r\n\r\n  // 监听变化，immediate: true 会立即执行一次\r\n  watch(\r\n    () => active.value,\r\n    (newValue) => {\r\n      if (newValue) {\r\n        shouldRender.value = true\r\n      }\r\n    },\r\n    { immediate: true },\r\n  )\r\n\r\n  return { shouldRender }\r\n}\r\n","<template>\r\n  <div ref=\"elementRef\" style=\"display: contents\">\r\n    <slot></slot>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, onMounted, ref } from 'vue'\r\n\r\nexport interface WrapperRef {\r\n  element: HTMLElement\r\n}\r\n\r\ndefineOptions({\r\n  name: 'Wrapper',\r\n})\r\n\r\nconst elementRef = ref<HTMLElement | null>(null)\r\nconst actualElement = ref<HTMLElement | null>(null)\r\n\r\nonMounted(() => {\r\n  // 获取第一个子元素作为实际的触发元素\r\n  if (elementRef.value && elementRef.value.children.length > 0) {\r\n    actualElement.value = elementRef.value.children[0] as HTMLElement\r\n  }\r\n})\r\n\r\nconst getElement = (): HTMLElement | null => {\r\n  return actualElement.value || null\r\n}\r\n\r\ndefineExpose({\r\n  element: computed(() => getElement()),\r\n})\r\n</script>\r\n","<template>\r\n  <Wrapper ref=\"targetRef\">\r\n    <slot></slot>\r\n  </Wrapper>\r\n  <Teleport to=\"body\" v-if=\"shouldRender\">\r\n    <div\r\n      :class=\"\r\n        classNames(classPrefix, `${classPrefix}-${mode}`, {\r\n          [`${classPrefix}-hidden`]: !visible,\r\n        })\r\n      \"\r\n      :style=\"mergedStyle\"\r\n      ref=\"floatingRef\"\r\n      @click.stop\r\n    >\r\n      <div :class=\"`${classPrefix}-arrow`\" ref=\"arrowRef\">\r\n        <Arrow :class=\"`${classPrefix}-arrow-icon`\" />\r\n      </div>\r\n      <div :class=\"`${classPrefix}-inner`\">\r\n        <div :class=\"`${classPrefix}-inner-content`\">\r\n          <slot name=\"content\">{{ content }}</slot>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </Teleport>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport {\r\n  arrow,\r\n  autoUpdate,\r\n  computePosition,\r\n  flip,\r\n  hide,\r\n  limitShift,\r\n  offset,\r\n  shift,\r\n} from '@floating-ui/dom'\r\nimport classNames from 'classnames'\r\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch, type Component } from 'vue'\r\nimport { convertPx } from '../../utils/convert-px'\r\nimport { mergeProps } from '../../utils/with-default-props'\r\nimport Arrow from './arrow.vue'\r\nimport { normalizePlacement, type DeprecatedPlacement, type Placement } from './normalize-placement'\r\nimport { useShouldRender } from './should-render'\r\nimport Wrapper from './wrapper.vue'\r\n\r\nexport interface PopoverProps {\r\n  defaultVisible?: boolean\r\n  visible?: boolean\r\n  getContainer?: () => HTMLElement\r\n  destroyOnHide?: boolean\r\n  mode?: 'light' | 'dark'\r\n  trigger?: 'click'\r\n  placement?: Placement | DeprecatedPlacement\r\n  stopPropagation?: string[]\r\n  content?: string | Component | null\r\n  style?: Record<string, string | number>\r\n  className?: string\r\n}\r\n\r\nexport interface PopoverRef {\r\n  show: () => void\r\n  hide: () => void\r\n  visible: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<PopoverProps>(), {\r\n  placement: 'right',\r\n  defaultVisible: false,\r\n  visible: undefined,\r\n  mode: 'light',\r\n  stopPropagation: () => ['click'],\r\n  getContainer: () => document.body,\r\n  destroyOnHide: true,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:visible': [value: boolean]\r\n  visibleChange: [value: boolean]\r\n}>()\r\n\r\nconst classPrefix = 'adm-popover'\r\n\r\n// 合并默认props\r\nconst mergedProps = computed(() =>\r\n  mergeProps(\r\n    {\r\n      // placement: 'top' as Placement,\r\n      // defaultVisible: false,\r\n      // stopPropagation: ['click'],\r\n      // getContainer: () => document.body,\r\n      // mode: 'light',\r\n    },\r\n    props,\r\n  ),\r\n)\r\n\r\n// eslint-disable-next-line vue/no-dupe-keys\r\nconst placement = computed(() => normalizePlacement(mergedProps.value.placement))\r\n\r\n// 控制显示状态\r\nconst innerVisible = ref(mergedProps.value.defaultVisible)\r\nconst isControlled = computed(() => props.visible !== undefined)\r\n\r\nconst visible = computed(() => (isControlled.value ? props.visible! : innerVisible.value))\r\n\r\nconst setVisible = (value: boolean) => {\r\n  if (!isControlled.value) {\r\n    innerVisible.value = value\r\n  }\r\n  emit('update:visible', value)\r\n  emit('visibleChange', value)\r\n}\r\n\r\n// refs\r\nconst targetRef = ref<InstanceType<typeof Wrapper> | null>(null)\r\nconst floatingRef = ref<HTMLDivElement | null>(null)\r\nconst arrowRef = ref<HTMLDivElement | null>(null)\r\nconst cleanupFn = ref<(() => void) | null>(null)\r\n\r\n// 样式计算\r\nconst mergedStyle = computed(() => {\r\n  const style = props.style || {}\r\n  const cssVariables: Record<string, string | number> = {}\r\n\r\n  // 处理CSS变量\r\n  Object.keys(style).forEach((key) => {\r\n    if (key.startsWith('--')) {\r\n      cssVariables[key] = style[key]\r\n    }\r\n  })\r\n\r\n  return {\r\n    ...style,\r\n    ...cssVariables,\r\n  }\r\n})\r\n\r\n// 更新位置\r\nasync function update() {\r\n  const target = targetRef.value?.element ?? null\r\n  const floating = floatingRef.value\r\n  const arrowElement = arrowRef.value\r\n\r\n  if (!target || !floating || !arrowElement) return\r\n\r\n  const {\r\n    x,\r\n    y,\r\n    placement: realPlacement,\r\n    middlewareData,\r\n  } = await computePosition(target, floating, {\r\n    placement: placement.value,\r\n    middleware: [\r\n      offset(convertPx(12)),\r\n      shift({\r\n        padding: convertPx(4),\r\n        crossAxis: false,\r\n        limiter: limitShift(),\r\n      }),\r\n      flip(),\r\n      hide(),\r\n      arrow({\r\n        element: arrowElement,\r\n        padding: convertPx(12),\r\n      }),\r\n    ],\r\n  })\r\n\r\n  Object.assign(floating.style, {\r\n    left: `${x}px`,\r\n    top: `${y}px`,\r\n  })\r\n\r\n  const side = realPlacement.split('-')[0] as string\r\n  const arrowSide = {\r\n    top: 'bottom',\r\n    right: 'left',\r\n    bottom: 'top',\r\n    left: 'right',\r\n  }[side] as string\r\n\r\n  const { x: arrowX, y: arrowY } = middlewareData.arrow ?? {}\r\n\r\n  Object.assign(arrowElement.style, {\r\n    left: arrowX != null ? `${arrowX}px` : '',\r\n    top: arrowY != null ? `${arrowY}px` : '',\r\n    right: '',\r\n    bottom: '',\r\n    [arrowSide]: 'calc(var(--arrow-size) * -1)',\r\n  })\r\n\r\n  const arrowRotate = {\r\n    top: '0deg',\r\n    bottom: '180deg',\r\n    left: '270deg',\r\n    right: '90deg',\r\n  }[side] as string\r\n\r\n  arrowElement.style.setProperty('--arrow-icon-rotate', arrowRotate)\r\n}\r\n\r\n// 监听位置变化\r\nwatch(\r\n  () => visible.value,\r\n  () => {\r\n    nextTick(() => {\r\n      update()\r\n    })\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\n// 点击触发\r\nconst handleTargetClick = (event: Event) => {\r\n  event.stopPropagation()\r\n  if (props.trigger === 'click') {\r\n    setVisible(!visible.value)\r\n  }\r\n}\r\n\r\n// 点击外部关闭\r\nconst handleClickAway = (event: Event) => {\r\n  if (!props.trigger || !visible.value) return\r\n\r\n  const target = event.target as HTMLElement\r\n  const targetElement = targetRef.value?.element\r\n  const floatingElement = floatingRef.value\r\n\r\n  // 检查点击是否在目标元素或浮层元素内部\r\n  const isClickInsideTarget = targetElement?.contains(target)\r\n  const isClickInsideFloating = floatingElement?.contains(target)\r\n\r\n  if (!isClickInsideTarget && !isClickInsideFloating) {\r\n    setVisible(false)\r\n  }\r\n}\r\n\r\n// 存储事件清理函数\r\nconst eventCleanupFns = ref<(() => void)[]>([])\r\n\r\n// 绑定事件\r\nonMounted(() => {\r\n  const targetElement = targetRef.value?.element\r\n  // 点击事件\r\n  if (targetElement && props.trigger === 'click') {\r\n    targetElement.addEventListener('click', handleTargetClick)\r\n    eventCleanupFns.value.push(() => {\r\n      targetElement.removeEventListener('click', handleTargetClick)\r\n    })\r\n  }\r\n\r\n  // 点击外部事件\r\n  if (props.trigger) {\r\n    document.addEventListener('click', handleClickAway, true)\r\n    eventCleanupFns.value.push(() => {\r\n      document.removeEventListener('click', handleClickAway, true)\r\n    })\r\n  }\r\n})\r\n\r\n// 清理资源\r\nonUnmounted(() => {\r\n  // 清理事件监听器\r\n  eventCleanupFns.value.forEach((cleanup) => cleanup())\r\n  eventCleanupFns.value = []\r\n\r\n  // 清理位置更新\r\n  if (cleanupFn.value) {\r\n    cleanupFn.value()\r\n    cleanupFn.value = null\r\n  }\r\n})\r\n\r\n// 自动更新位置\r\nwatch(\r\n  () => visible.value,\r\n  () => {\r\n    if (cleanupFn.value) {\r\n      cleanupFn.value()\r\n      cleanupFn.value = null\r\n    }\r\n\r\n    if (visible.value) {\r\n      nextTick(() => {\r\n        const targetElement = targetRef.value?.element\r\n        const floatingElement = floatingRef.value\r\n\r\n        if (targetElement && floatingElement) {\r\n          cleanupFn.value = autoUpdate(targetElement, floatingElement, update, {\r\n            elementResize: typeof ResizeObserver !== 'undefined',\r\n          })\r\n        }\r\n      })\r\n    }\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\n// 控制渲染\r\nconst { shouldRender } = useShouldRender(visible, false, props.destroyOnHide)\r\n\r\n// 暴露方法\r\ndefineExpose({\r\n  show: () => setVisible(true),\r\n  hide: () => setVisible(false),\r\n  visible: computed(() => visible.value),\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './popover.less';\r\n</style>\r\n","export function undefinedFallback<T>(a: T | undefined, b: T): T\nexport function undefinedFallback<T>(a: T | undefined, b: T | undefined, c: T): T\nexport function undefinedFallback<T>(a: T | undefined, b: T | undefined, c: T | undefined, d: T): T\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function undefinedFallback(...items: any[]) {\n  let i: number\n  for (i = 0; i < items.length; i++) {\n    if (items[i] !== undefined) break\n  }\n  return items[i]\n}\n","<!-- eslint-disable vue/valid-v-model -->\r\n<template>\r\n  <div v-if=\"noStyle && !hidden\">\r\n    <slot v-if=\"isRenderFunction\" :form=\"formContext\" />\r\n    <component\r\n      v-else-if=\"childComponent\"\r\n      :is=\"childComponent\"\r\n      v-bind=\"childProps\"\r\n      v-model:value=\"fieldValue\"\r\n      @change=\"handleChange\"\r\n      @blur=\"handleBlur\"\r\n    />\r\n    <div v-else>\r\n      <!-- eslint-disable vue/valid-v-model -->\r\n      <slot v-bind=\"childProps\" :value=\"fieldValue\" @change=\"handleChange\" @blur=\"handleBlur\" />\r\n    </div>\r\n  </div>\r\n  <ListItem\r\n    v-else\r\n    :style=\"mergedProps.style\"\r\n    :class=\"itemClasses\"\r\n    :disabled=\"mergedDisabled\"\r\n    :clickable=\"mergedProps.clickable\"\r\n    :arrow=\"mergedProps.arrowIcon || mergedProps.arrow\"\r\n    @click=\"handleClick\"\r\n  >\r\n    <template #title v-if=\"mergedLayout === 'vertical' && labelElement\">\r\n      <component :is=\"labelElement\" />\r\n    </template>\r\n\r\n    <template #prefix v-if=\"mergedLayout === 'horizontal' && labelElement\">\r\n      <component :is=\"labelElement\" />\r\n    </template>\r\n    <template #extra v-if=\"mergedProps.extra || $slots.extra\">\r\n      <slot name=\"extra\">{{ mergedProps.extra }}</slot>\r\n    </template>\r\n\r\n    <template #description v-if=\"mergedDescription\">\r\n      <div>\r\n        <component v-if=\"mergedProps.description\" :is=\"mergedProps.description\" />\r\n        <div v-if=\"mergedHasFeedback\">\r\n          <div\r\n            v-for=\"(error, index) in errors\"\r\n            :key=\"`error-${index}`\"\r\n            class=\"adm-form-item-feedback-error\"\r\n          >\r\n            {{ error }}\r\n          </div>\r\n          <div\r\n            v-for=\"(warning, index) in warnings\"\r\n            :key=\"`warning-${index}`\"\r\n            class=\"adm-form-item-feedback-warning\"\r\n          >\r\n            {{ warning }}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </template>\r\n\r\n    <div :class=\"childClasses\" ref=\"widgetRef\">\r\n      <div class=\"adm-form-item-child-inner\">\r\n        <slot v-if=\"isRenderFunction\" :form=\"formContext\" />\r\n        <component\r\n          v-else-if=\"childComponent\"\r\n          :is=\"childComponent\"\r\n          v-bind=\"childProps\"\r\n          v-model:value=\"fieldValue\"\r\n          @change=\"handleChange\"\r\n          @blur=\"handleBlur\"\r\n        />\r\n        <div v-else>\r\n          <slot v-bind=\"childProps\" :value=\"fieldValue\" @change=\"handleChange\" @blur=\"handleBlur\" />\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </ListItem>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport {\r\n  computed,\r\n  h,\r\n  inject,\r\n  ref,\r\n  useSlots,\r\n  watchEffect,\r\n  type Component,\r\n  type Ref,\r\n  onUnmounted,\r\n} from 'vue'\r\n// Import the real components\r\nimport { QuestionCircleOutline } from 'ant-mobile-icons-vue3'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport ListItem from '../list/item.vue'\r\nimport Popover from '../popover/popover.vue'\r\nimport type { Placement } from '../popover/normalize-placement'\r\nimport { provideNoStyleItemContext, useFormContext, useNoStyleItemContext } from './context.ts'\r\nimport { FormStore } from './form-store'\r\nimport type { FieldValue, FormLayout, Meta, NamePath, Rule } from './types'\r\n// eslint-disable-next-line vue/no-dupe-keys\r\nimport { createFieldId, getValueFromEvent, isRequired, mergeClasses, toArray } from './utils'\r\nimport { devWarning } from '../../utils/dev-log.ts'\r\nimport { undefinedFallback } from '../../utils/undefined-fallback.ts'\r\n\r\ndefineOptions({\r\n  name: 'FormItem',\r\n})\r\n\r\ninterface FormItemProps {\r\n  // Field props\r\n  icon?: Component\r\n  name?: NamePath\r\n  rules?: Rule[]\r\n  dependencies?: NamePath[]\r\n  valuePropName?: string\r\n  trigger?: string\r\n  validateTrigger?: string | string[]\r\n  shouldUpdate?:\r\n    | boolean\r\n    | ((prevValues: FieldValue | FieldValue[], curValues: FieldValue | FieldValue[]) => boolean)\r\n  initialValue?: FieldValue\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  getValueFromEvent?: (event: any) => FieldValue\r\n  getValueProps?: (value: FieldValue) => Record<string, FieldValue>\r\n  normalize?: (\r\n    value: FieldValue,\r\n    prevValue: FieldValue,\r\n    allValues: Record<string, FieldValue>,\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  ) => any\r\n  preserve?: boolean\r\n  validateFirst?: boolean\r\n  messageVariables?: Record<string, string>\r\n\r\n  // Layout props\r\n  style?: Record<string, string | number>\r\n  className?: string\r\n  label?: string\r\n  help?: string\r\n  helpIcon?: string | Component\r\n  extra?: string\r\n  description?: string\r\n  required?: boolean\r\n  noStyle?: boolean\r\n  disabled?: boolean\r\n  hidden?: boolean\r\n  layout?: FormLayout\r\n  childElementPosition?: 'normal' | 'right'\r\n  hasFeedback?: boolean\r\n  clickable?: boolean\r\n  arrow?: boolean\r\n  arrowIcon?: Component\r\n  helpPlacement?: Placement | undefined\r\n  // Events\r\n  onClick?: (e: Event, widgetRef: Ref<HTMLElement>) => void\r\n  helpClick?: () => void\r\n}\r\n\r\nconst props = withDefaults(defineProps<FormItemProps>(), {\r\n  icon: undefined,\r\n  trigger: 'onChange, onBlur',\r\n  valuePropName: 'value',\r\n  childElementPosition: 'normal',\r\n  validateFirst: false,\r\n  validateTrigger: () => ['onChange', 'onBlur'],\r\n  preserve: true,\r\n  help: undefined,\r\n  required: undefined,\r\n  hasFeedback: undefined,\r\n  description: undefined,\r\n  layout: undefined,\r\n  helpPlacement: undefined,\r\n  helpClick: undefined,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  click: [e: Event, widgetRef: any]\r\n}>()\r\n\r\n// Get contexts\r\nconst formContext = useFormContext()\r\nconst formStore = inject<FormStore>('formStore')\r\nconst notifyParentMetaChange = useNoStyleItemContext()\r\nconst { locale, form: componentConfig = {} } = useConfig()\r\n\r\n// Merge props with config\r\nconst mergedProps = computed(() => ({\r\n  ...componentConfig,\r\n  ...props,\r\n}))\r\n\r\n// Widget ref\r\nconst widgetRef = ref<HTMLElement | null>(null)\r\n\r\n// Sub metas for nested fields\r\nconst subMetas = ref<Record<string, Meta>>({})\r\n\r\nconst onSubMetaChange = (meta: Meta & { destroy?: boolean }, namePath: (string | number)[]) => {\r\n  const nameKey = namePath.join('__SPLIT__')\r\n  if (meta.destroy) {\r\n    delete subMetas.value[nameKey]\r\n  } else {\r\n    subMetas.value[nameKey] = meta\r\n  }\r\n}\r\n\r\nprovideNoStyleItemContext(onSubMetaChange)\r\n\r\n// Field registration and control\r\nconst fieldControl = computed(() => {\r\n  if (!props.name || !formStore) return null\r\n  return formStore.registerField(props.name, props.rules)\r\n})\r\n\r\nconst fieldValue = computed({\r\n  get: () => {\r\n    if (!fieldControl.value) return undefined\r\n    return fieldControl.value.value.value\r\n  },\r\n  set: (value) => {\r\n    if (fieldControl.value) {\r\n      fieldControl.value.setValue(value)\r\n    }\r\n  },\r\n})\r\n\r\nconst fieldMeta = computed(() => {\r\n  if (!fieldControl.value) return null\r\n  return fieldControl.value.meta.value\r\n})\r\n\r\n// Notify store about hidden state so store can skip validation for hidden fields\r\nif (fieldControl.value && formStore) {\r\n  // on mount\r\n  formStore.setFieldHidden(props.name as NamePath, !!props.hidden)\r\n  // watch for hidden prop change\r\n  watchEffect(() => {\r\n    formStore.setFieldHidden(props.name as NamePath, !!props.hidden)\r\n  })\r\n}\r\n\r\nonUnmounted(() => {\r\n  if (formStore) formStore.setFieldHidden(props.name as NamePath, true)\r\n})\r\n\r\n// Computed properties\r\nconst mergedValidateTrigger = computed(() => {\r\n  return undefinedFallback(\r\n    props.validateTrigger,\r\n    formContext.name, // This would be from field context in original\r\n    props.trigger,\r\n  )\r\n})\r\n\r\nconst mergedDisabled = computed(() => {\r\n  return props.disabled ?? formContext.disabled\r\n})\r\n\r\nconst mergedHasFeedback = computed(() => {\r\n  return props.hasFeedback !== undefined ? props.hasFeedback : formContext.hasFeedback\r\n})\r\n\r\nconst mergedLayout = computed(() => {\r\n  return props.layout || formContext.layout\r\n})\r\n\r\nconst isRenderFunction = computed(() => {\r\n  // In Vue, we use slots instead of render functions\r\n  return false\r\n})\r\n\r\nconst isFieldRequired = computed(() => {\r\n  return props.required !== undefined ? props.required : isRequired(props.rules)\r\n})\r\n\r\nconst fieldId = computed(() => {\r\n  if (!props.name) return ''\r\n  const nameList = toArray(props.name)\r\n  return createFieldId(formContext.name, nameList)\r\n})\r\n\r\n// Error and warning handling\r\nconst errors = computed(() => {\r\n  const curErrors = fieldMeta.value?.errors ?? []\r\n  const subErrors = Object.keys(subMetas.value).reduce((acc: string[], key) => {\r\n    const errors = subMetas.value[key]?.errors ?? []\r\n    return [...acc, ...errors]\r\n  }, [])\r\n  return [...curErrors, ...subErrors]\r\n})\r\n\r\nconst warnings = computed(() => {\r\n  const curWarnings = fieldMeta.value?.warnings ?? []\r\n  const subWarnings = Object.keys(subMetas.value).reduce((acc: string[], key) => {\r\n    const warnings = subMetas.value[key]?.warnings ?? []\r\n    return [...acc, ...warnings]\r\n  }, [])\r\n  return [...curWarnings, ...subWarnings]\r\n})\r\n\r\n// Required mark\r\nconst requiredMark = computed(() => {\r\n  const { requiredMarkStyle, optionalText } = formContext\r\n  switch (requiredMarkStyle) {\r\n    case 'asterisk':\r\n      return isFieldRequired.value\r\n        ? h('span', { class: 'adm-form-item-required-asterisk' }, '*')\r\n        : null\r\n    case 'text-required':\r\n      return isFieldRequired.value\r\n        ? h('span', { class: 'adm-form-item-required-text' }, `(${locale.Form.required})`)\r\n        : null\r\n    case 'text-optional':\r\n      return !isFieldRequired.value\r\n        ? h(\r\n            'span',\r\n            { class: 'adm-form-item-required-text' },\r\n            `(${optionalText || locale.Form.optional})`,\r\n          )\r\n        : null\r\n    case 'none':\r\n    default:\r\n      return null\r\n  }\r\n})\r\n\r\nconst formatHelp = () => {\r\n  if (props.helpClick) {\r\n    return h(\r\n      'span',\r\n      {\r\n        class: 'adm-form-item-label-help',\r\n        onClick: (e: Event) => {\r\n          props.helpClick?.()\r\n          e.stopPropagation()\r\n          e.preventDefault()\r\n        },\r\n      },\r\n      [h((props.helpIcon as Component) || h(QuestionCircleOutline))],\r\n    )\r\n  } else {\r\n    return h(\r\n      Popover,\r\n      {\r\n        placement: props.helpPlacement,\r\n        content: props.help,\r\n        trigger: 'click',\r\n      },\r\n      {\r\n        default: () =>\r\n          h(\r\n            'span',\r\n            {\r\n              class: 'adm-form-item-label-help',\r\n              onClick: (e: Event) => {\r\n                props.helpClick?.()\r\n                e.stopPropagation()\r\n                e.preventDefault()\r\n              },\r\n            },\r\n            [h((props.helpIcon as Component) || h(QuestionCircleOutline))],\r\n          ),\r\n      },\r\n    )\r\n  }\r\n}\r\n\r\n// Label element\r\nconst labelElement = computed(() => {\r\n  if (!props.label) return null\r\n  return h(\r\n    'label',\r\n    {\r\n      class: 'adm-form-item-label',\r\n      for: fieldId.value,\r\n    },\r\n    [\r\n      props.icon && h(props.icon, { class: 'adm-form-item-label-icon' }),\r\n      props.label,\r\n      requiredMark.value,\r\n      props.help && formatHelp(),\r\n    ].filter(Boolean),\r\n  )\r\n})\r\n\r\n// Description\r\nconst mergedDescription = computed(() => {\r\n  return !!props.description || mergedHasFeedback.value\r\n})\r\n\r\n// CSS classes\r\nconst itemClasses = computed(() => {\r\n  return mergeClasses('adm-form-item', `adm-form-item-${mergedLayout.value}`, props.className, {\r\n    'adm-form-item-hidden': props.hidden,\r\n    'adm-form-item-has-error': errors.value.length > 0,\r\n  })\r\n})\r\n\r\nconst childClasses = computed(() => {\r\n  return mergeClasses(\r\n    'adm-form-item-child',\r\n    `adm-form-item-child-position-${props.childElementPosition}`,\r\n  )\r\n})\r\n\r\n// 将 useSlots 移到 setup 函数顶层\r\nconst slots = useSlots()\r\n\r\n// Child component handling\r\nconst childComponent = computed(() => {\r\n  // 直接使用已经获取的 slots，而不是在计算属性中调用 useSlots()\r\n  if (!slots.default) return null\r\n\r\n  const slotContent = slots.default()\r\n  if (!slotContent || slotContent.length !== 1) return null\r\n\r\n  const child = slotContent[0]\r\n\r\n  // 检查是否是组件（而不是文本节点或其他类型）\r\n  if (child && child.type && typeof child.type !== 'string' && child.type !== Text) {\r\n    // 返回子组件的类型，而不是整个 VNode\r\n    return child\r\n  }\r\n\r\n  return null\r\n})\r\n\r\nconst childProps = computed(() => {\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  const baseProps: Record<string, any> = {\r\n    // 传递表单字段相关的属性\r\n    value: fieldValue.value,\r\n    disabled: mergedDisabled.value,\r\n  }\r\n\r\n  if (fieldId.value) {\r\n    baseProps.id = fieldId.value\r\n  }\r\n\r\n  // 根据 valuePropName 设置正确的属性名\r\n  if (props.valuePropName !== 'value') {\r\n    baseProps[props.valuePropName] = fieldValue.value\r\n    delete baseProps.value\r\n  }\r\n\r\n  // 应用自定义的 getValueProps\r\n  if (props.getValueProps && fieldValue.value !== undefined) {\r\n    Object.assign(baseProps, props.getValueProps(fieldValue.value))\r\n  }\r\n\r\n  // 传递事件处理函数\r\n  baseProps[`on${props.trigger.charAt(0).toUpperCase()}${props.trigger.slice(1)}`] = handleChange\r\n\r\n  // 如果有 blur 触发器，也添加 onBlur\r\n  if (mergedValidateTrigger.value.includes('onBlur')) {\r\n    baseProps.onBlur = handleBlur\r\n  }\r\n\r\n  return baseProps\r\n})\r\n\r\n// Remove unused variables and fix prop usage\r\n// eslint-disable-next-line vue/no-dupe-keys\r\nconst { noStyle = false, hidden = false } = mergedProps.value\r\n\r\n// Event handlers - use mergedValidateTrigger\r\nconst handleChange = (value: FieldValue) => {\r\n  if (!fieldControl.value) return\r\n\r\n  const finalValue = props.getValueFromEvent\r\n    ? props.getValueFromEvent(value)\r\n    : getValueFromEvent(value)\r\n  const normalizedValue = props.normalize\r\n    ? props.normalize(finalValue, fieldValue.value, formStore?.getFieldsValue() || {})\r\n    : finalValue\r\n\r\n  fieldControl.value.setValue(normalizedValue)\r\n\r\n  // Trigger validation if needed\r\n  if (mergedValidateTrigger.value.includes('onChange') && formStore) {\r\n    formStore.validateFields([props.name!])\r\n  }\r\n}\r\n\r\nconst handleBlur = () => {\r\n  // Mark field as touched\r\n  if (fieldMeta.value && formStore) {\r\n    formStore.setFields([\r\n      {\r\n        name: props.name!,\r\n        touched: true,\r\n      },\r\n    ])\r\n  }\r\n  // Trigger validation if needed\r\n  if (mergedValidateTrigger.value.includes('onBlur') && formStore) {\r\n    formStore.validateFields([props.name!])\r\n  }\r\n}\r\n\r\nconst handleClick = (e: Event) => {\r\n  if (props.onClick) {\r\n    props.onClick(e, widgetRef as Ref<HTMLElement>)\r\n  }\r\n  emit('click', e, widgetRef.value)\r\n}\r\n\r\n// Meta change notification\r\nwatchEffect(() => {\r\n  if (props.noStyle && notifyParentMetaChange && fieldMeta.value) {\r\n    const namePath = fieldMeta.value.name\r\n    notifyParentMetaChange(fieldMeta.value, namePath)\r\n  }\r\n})\r\n\r\n// Validation warnings - fix the logic\r\nif (process.env.NODE_ENV !== 'production') {\r\n  watchEffect(() => {\r\n    if (props.shouldUpdate && props.dependencies) {\r\n      devWarning('FormItem', \"`shouldUpdate` and `dependencies` shouldn't be used together.\")\r\n    }\r\n\r\n    if (isRenderFunction.value) {\r\n      if (!(props.shouldUpdate || props.dependencies)) {\r\n        devWarning(\r\n          'FormItem',\r\n          '`children` of render props only work with `shouldUpdate` or `dependencies`.',\r\n        )\r\n      }\r\n      if (props.name) {\r\n        devWarning(\r\n          'FormItem',\r\n          \"Do not use `name` with `children` of render props since it's not a field.\",\r\n        )\r\n      }\r\n    } else if (props.dependencies && !props.name) {\r\n      devWarning('FormItem', 'Must set `name` or use render props when `dependencies` is set.')\r\n    }\r\n  })\r\n}\r\n</script>\r\n","<template>\r\n  <div :class=\"classes.join(' ')\">\r\n    <List v-for=\"(field, index) in fields\" :key=\"field.key\" mode=\"card\">\r\n      <!-- <template #header v-if=\"renderHeader\"> -->\r\n      <template #header v-if=\"$slots.header\">\r\n        <!-- <component :is=\"renderHeader\" :field=\"field\" :operation=\"operation\" /> -->\r\n        <slot name=\"header\" :field=\"field\" :operation=\"operation\"></slot>\r\n      </template>\r\n      <slot :fields=\"[field]\" :operation=\"operation\" :index=\"index\" />\r\n    </List>\r\n    <List v-if=\"renderAdd\" mode=\"card\">\r\n      <ListItem class=\"adm-form-list-operation\" :arrow=\"false\" @click=\"handleAdd\">\r\n        <component :is=\"renderAdd\" />\r\n      </ListItem>\r\n    </List>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { Component } from 'vue'\r\nimport { computed, inject, onMounted, ref } from 'vue'\r\nimport List from '../list/list.vue'\r\nimport ListItem from '../list/item.vue'\r\nimport { FormStore } from './form-store'\r\nimport type { FormArrayField, FormArrayOperation, NamePath, FieldValue } from './types'\r\nimport { generateKey } from './utils'\r\n\r\ndefineOptions({\r\n  name: 'FormArray',\r\n})\r\n\r\ninterface FormArrayProps {\r\n  className?: string | string[]\r\n  name: NamePath\r\n  initialValue?: FieldValue[]\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  renderHeader?: Component | ((field: FormArrayField, operation: FormArrayOperation) => any)\r\n  onAdd?: (operation: FormArrayOperation) => void\r\n  renderAdd?: Component | (() => FieldValue)\r\n}\r\n\r\nconst props = withDefaults(defineProps<FormArrayProps>(), {\r\n  initialValue: () => [],\r\n  renderHeader: undefined,\r\n  onAdd: undefined,\r\n  renderAdd: undefined,\r\n})\r\n\r\nconst classPrefix = 'adm-form-array'\r\nconst classes = computed(() => {\r\n  if (typeof props.className === 'string') {\r\n    return [classPrefix, props.className]\r\n  } else if (Array.isArray(props.className)) {\r\n    return [classPrefix, ...props.className]\r\n  } else {\r\n    return [classPrefix]\r\n  }\r\n})\r\n\r\nconst formStore = inject<FormStore>('formStore')\r\n\r\n// Internal array state\r\nconst internalArray = ref<FormArrayField[]>([])\r\n\r\n// Initialize from initial value or form value\r\nonMounted(() => {\r\n  if (formStore) {\r\n    const currentValue = formStore.getFieldValue(props.name) || props.initialValue || []\r\n    internalArray.value = [currentValue].map((item: FieldValue, index: number) => ({\r\n      index,\r\n      key: generateKey(),\r\n    }))\r\n\r\n    // Set the array value in form\r\n    formStore.setFieldValue(props.name, currentValue)\r\n  }\r\n})\r\n\r\nconst fields = computed(() => internalArray.value)\r\n\r\nconst operation: FormArrayOperation = {\r\n  add: (defaultValue?: FieldValue, insertIndex?: number) => {\r\n    const index = insertIndex !== undefined ? insertIndex : internalArray.value.length\r\n    const newField: FormArrayField = {\r\n      index,\r\n      key: generateKey(),\r\n    }\r\n\r\n    // Update internal array\r\n    if (insertIndex !== undefined) {\r\n      internalArray.value.splice(insertIndex, 0, newField)\r\n      // Update indices for fields after insertion point\r\n      internalArray.value.forEach((field, idx) => {\r\n        if (idx >= insertIndex) {\r\n          field.index = idx\r\n        }\r\n      })\r\n    } else {\r\n      internalArray.value.push(newField)\r\n    }\r\n\r\n    // Update form value\r\n    if (formStore) {\r\n      const currentValues = formStore.getFieldValue(props.name)\r\n        ? [formStore.getFieldValue(props.name)]\r\n        : []\r\n      if (insertIndex !== undefined) {\r\n        currentValues.splice(insertIndex, 0, defaultValue)\r\n      } else {\r\n        currentValues.push(defaultValue)\r\n      }\r\n      formStore.setFieldValue(props.name, currentValues)\r\n    }\r\n  },\r\n\r\n  remove: (index: number | number[]) => {\r\n    const indices = Array.isArray(index) ? index.sort((a, b) => b - a) : [index]\r\n\r\n    // Remove from internal array (reverse order to maintain indices)\r\n    indices.forEach((idx) => {\r\n      internalArray.value.splice(idx, 1)\r\n    })\r\n\r\n    // Update indices\r\n    internalArray.value.forEach((field, idx) => {\r\n      field.index = idx\r\n    })\r\n\r\n    // Update form value\r\n    if (formStore) {\r\n      const currentValues = formStore.getFieldValue(props.name)\r\n        ? [formStore.getFieldValue(props.name)]\r\n        : []\r\n      indices.forEach((idx) => {\r\n        currentValues.splice(idx, 1)\r\n      })\r\n      formStore.setFieldValue(props.name, currentValues)\r\n    }\r\n  },\r\n\r\n  move: (from: number, to: number) => {\r\n    if (from === to) return\r\n\r\n    const field = internalArray.value[from]\r\n    internalArray.value.splice(from, 1)\r\n    internalArray.value.splice(to, 0, field)\r\n\r\n    // Update indices\r\n    internalArray.value.forEach((field, idx) => {\r\n      field.index = idx\r\n    })\r\n\r\n    // Update form value\r\n    if (formStore) {\r\n      const currentValues = formStore.getFieldValue(props.name)\r\n        ? [formStore.getFieldValue(props.name)]\r\n        : []\r\n      const value = currentValues[from]\r\n      currentValues.splice(from, 1)\r\n      currentValues.splice(to, 0, value)\r\n      formStore.setFieldValue(props.name, currentValues)\r\n    }\r\n  },\r\n}\r\n\r\nconst handleAdd = () => {\r\n  if (props.onAdd) {\r\n    props.onAdd(operation)\r\n  } else {\r\n    operation.add()\r\n  }\r\n}\r\n</script>\r\n","<template>\r\n  <slot />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\ndefineOptions({\r\n  name: 'FormHeader',\r\n})\r\n\r\ninterface HeaderProps {\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  children?: any\r\n}\r\n\r\ndefineProps<HeaderProps>()\r\n</script>\r\n","<!-- eslint-disable vue/no-v-text-v-html-on-component -->\r\n<template>\r\n  <div>\r\n    <component\r\n      :is=\"'div'\"\r\n      v-if=\"childContent\"\r\n      v-html=\"typeof childContent === 'string' ? childContent : ''\"\r\n    />\r\n    <slot v-else :changed-values=\"watchedValues\" :form=\"formStore\" />\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, inject } from 'vue'\r\nimport { FormStore } from './form-store'\r\nimport type { FormInstance, NamePath, FieldValue } from './types'\r\n\r\ndefineOptions({\r\n  name: 'FormSubscribe',\r\n})\r\n\r\ninterface FormSubscribeProps {\r\n  to: NamePath[]\r\n  children?: (changedValues: Record<string, FieldValue>, form: FormInstance) => any\r\n}\r\n\r\nconst props = defineProps<FormSubscribeProps>()\r\n\r\n// Get form store from context - you'll need to implement form context\r\nconst formStore = inject<FormStore>('formStore')\r\n\r\nconst watchedValues = computed(() => {\r\n  if (!formStore) return {}\r\n\r\n  const values: Record<string, FieldValue> = {}\r\n  props.to.forEach((namePath) => {\r\n    const key = Array.isArray(namePath) ? namePath.join('.') : String(namePath)\r\n    values[key] = formStore.getFieldValue(namePath)\r\n  })\r\n  return values\r\n})\r\n\r\nconst childContent = computed(() => {\r\n  if (props.children && formStore) {\r\n    return props.children(watchedValues.value, formStore as FormInstance)\r\n  }\r\n  return null\r\n})\r\n</script>\r\n","<template>\r\n  <div ref=\"elementRef\" :class=\"[classPrefix, `${classPrefix}-${placement}`]\" :style=\"panelStyle\">\r\n    <div :class=\"`${classPrefix}-mask`\" :style=\"{ display: pulling ? 'block' : 'none' }\" />\r\n\r\n    <!-- Header for bottom placement -->\r\n    <div v-if=\"isBottomPlacement\" :class=\"`${classPrefix}-header`\" ref=\"headerRef\">\r\n      <div :class=\"`${classPrefix}-bar`\" />\r\n    </div>\r\n\r\n    <!-- Content -->\r\n    <div :class=\"`${classPrefix}-content`\" ref=\"contentRef\">\r\n      <slot />\r\n    </div>\r\n\r\n    <!-- Header for top placement -->\r\n    <div v-if=\"placement === 'top'\" :class=\"`${classPrefix}-header`\" ref=\"headerRef\">\r\n      <div :class=\"`${classPrefix}-bar`\" />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport interface FloatingPanelProps {\r\n  anchors: number[]\r\n  onHeightChange?: (height: number, animating: boolean) => void\r\n  handleDraggingOfContent?: boolean\r\n  placement?: 'bottom' | 'top'\r\n  // CSS Variables\r\n  '--border-radius'?: string\r\n  '--z-index'?: string | number\r\n  '--header-height'?: string\r\n}\r\n\r\nexport interface FloatingPanelRef {\r\n  setHeight: (\r\n    height: number,\r\n    options?: {\r\n      immediate?: boolean\r\n    },\r\n  ) => void\r\n}\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'\r\n\r\nconst classPrefix = 'adm-floating-panel'\r\n\r\nconst props = withDefaults(defineProps<FloatingPanelProps>(), {\r\n  handleDraggingOfContent: true,\r\n  placement: 'bottom',\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'height-change': [height: number, animating: boolean]\r\n}>()\r\n\r\n// Refs\r\nconst elementRef = ref<HTMLDivElement>()\r\nconst headerRef = ref<HTMLDivElement>()\r\nconst contentRef = ref<HTMLDivElement>()\r\n\r\n// State\r\nconst pulling = ref(false)\r\nconst pullingRef = ref(false)\r\nconst y = ref(0)\r\nconst animating = ref(false)\r\n\r\n// Computed\r\nconst maxHeight = computed(() => props.anchors[props.anchors.length - 1] ?? window.innerHeight)\r\n\r\nconst isBottomPlacement = computed(() => props.placement !== 'top')\r\n\r\nconst possibles = computed(() =>\r\n  isBottomPlacement.value ? props.anchors.map((x) => -x) : props.anchors,\r\n)\r\n\r\nconst bounds = computed(() => ({\r\n  top: Math.min(...possibles.value),\r\n  bottom: Math.max(...possibles.value),\r\n}))\r\n\r\nconst panelStyle = computed(() => {\r\n  const translateY = isBottomPlacement.value\r\n    ? `calc(100% + (${Math.round(y.value)}px))`\r\n    : props.placement === 'top'\r\n      ? `calc(-100% + (${Math.round(y.value)}px))`\r\n      : `${y.value}px`\r\n\r\n  return {\r\n    height: `${Math.round(maxHeight.value)}px`,\r\n    transform: `translateY(${translateY})`,\r\n    transition: animating.value ? 'transform 0.3s ease' : 'none',\r\n    '--border-radius': props['--border-radius'],\r\n    '--z-index': props['--z-index'],\r\n    '--header-height': props['--header-height'],\r\n  }\r\n})\r\n\r\n// Utility functions\r\nfunction nearest(arr: number[], target: number): number {\r\n  return arr.reduce((pre, cur) => {\r\n    return Math.abs(pre - target) < Math.abs(cur - target) ? pre : cur\r\n  })\r\n}\r\n\r\n// Animation functions\r\nfunction animateToY(targetY: number, immediate = false) {\r\n  if (immediate) {\r\n    y.value = targetY\r\n    animating.value = false\r\n  } else {\r\n    animating.value = true\r\n    y.value = targetY\r\n    setTimeout(() => {\r\n      animating.value = false\r\n    }, 300)\r\n  }\r\n\r\n  // Emit height change\r\n  const height = -targetY\r\n  emit('height-change', height, animating.value)\r\n  props.onHeightChange?.(height, animating.value)\r\n}\r\n\r\n// Touch handling\r\nlet startY = 0\r\nlet currentY = 0\r\nlet isDragging = false\r\n\r\nfunction handleTouchStart(event: TouchEvent) {\r\n  const touch = event.touches[0]\r\n  startY = touch.clientY\r\n  currentY = y.value\r\n  isDragging = false\r\n  pullingRef.value = false\r\n\r\n  const target = event.target as Element\r\n  const header = headerRef.value\r\n\r\n  // 检查是否点击在头部 - 头部始终可拖拽\r\n  if (header === target || header?.contains(target)) {\r\n    pullingRef.value = true\r\n    isDragging = true\r\n    pulling.value = true\r\n    return\r\n  }\r\n\r\n  // 对于内容区域，不在 touchstart 时立即判断，而是在 touchmove 时根据手势判断\r\n  if (props.handleDraggingOfContent) {\r\n    const content = contentRef.value\r\n    if (content && (content === target || content.contains(target))) {\r\n      // 标记为潜在的拖拽目标，但不立即开始拖拽\r\n      isDragging = true\r\n    }\r\n  }\r\n}\r\n\r\nfunction handleTouchMove(event: TouchEvent) {\r\n  if (!isDragging) return\r\n\r\n  const touch = event.touches[0]\r\n  const deltaY = touch.clientY - startY\r\n  const target = event.target as Element\r\n  const header = headerRef.value\r\n  const content = contentRef.value\r\n\r\n  // 如果是在头部拖拽，总是允许面板拖拽\r\n  if (header === target || header?.contains(target)) {\r\n    if (!pullingRef.value) {\r\n      pullingRef.value = true\r\n      pulling.value = true\r\n    }\r\n\r\n    const newY = Math.max(bounds.value.top, Math.min(bounds.value.bottom, currentY + deltaY))\r\n\r\n    if (event.cancelable) {\r\n      event.preventDefault()\r\n    }\r\n    event.stopPropagation()\r\n\r\n    y.value = newY\r\n\r\n    const height = -newY\r\n    emit('height-change', height, false)\r\n    props.onHeightChange?.(height, false)\r\n    return\r\n  }\r\n\r\n  // 如果是在内容区域\r\n  if (\r\n    props.handleDraggingOfContent &&\r\n    content &&\r\n    (content === target || content.contains(target))\r\n  ) {\r\n    const hasScrollableContent = content.scrollHeight > content.clientHeight\r\n\r\n    if (!hasScrollableContent) {\r\n      // 内容不可滚动时，允许拖拽面板\r\n      if (!pullingRef.value) {\r\n        pullingRef.value = true\r\n        pulling.value = true\r\n      }\r\n\r\n      const newY = Math.max(bounds.value.top, Math.min(bounds.value.bottom, currentY + deltaY))\r\n\r\n      if (event.cancelable) {\r\n        event.preventDefault()\r\n      }\r\n      event.stopPropagation()\r\n\r\n      y.value = newY\r\n\r\n      const height = -newY\r\n      emit('height-change', height, false)\r\n      props.onHeightChange?.(height, false)\r\n    } else {\r\n      // 内容可滚动时，需要判断边界条件 - 提高阈值降低灵敏度\r\n      const isAtTop = content.scrollTop <= 0\r\n      const isAtBottom = content.scrollTop >= content.scrollHeight - content.clientHeight - 1\r\n      const isDraggingDown = deltaY > 15 // 提高阈值从5到15，降低灵敏度\r\n      const isDraggingUp = deltaY < -15 // 提高阈值从-5到-15，降低灵敏度\r\n\r\n      let shouldDragPanel = false\r\n\r\n      // 只有在明确的边界条件下且达到足够的拖拽距离才拖拽面板\r\n      if (isAtTop && isDraggingDown) {\r\n        // 在顶部向下拖拽时，需要更大的拖拽距离才触发面板移动\r\n        shouldDragPanel = Math.abs(deltaY) > 20\r\n      } else if (isAtBottom && isDraggingUp) {\r\n        shouldDragPanel = true\r\n      }\r\n\r\n      if (shouldDragPanel) {\r\n        if (!pullingRef.value) {\r\n          pullingRef.value = true\r\n          pulling.value = true\r\n        }\r\n\r\n        const newY = Math.max(bounds.value.top, Math.min(bounds.value.bottom, currentY + deltaY))\r\n\r\n        if (event.cancelable) {\r\n          event.preventDefault()\r\n        }\r\n        event.stopPropagation()\r\n\r\n        y.value = newY\r\n\r\n        const height = -newY\r\n        emit('height-change', height, false)\r\n        props.onHeightChange?.(height, false)\r\n      }\r\n      // 其他情况下，不阻止事件，让内容正常滚动\r\n    }\r\n  }\r\n}\r\n\r\nfunction handleTouchEnd(event: TouchEvent) {\r\n  if (!isDragging) return\r\n\r\n  const wasPulling = pullingRef.value\r\n\r\n  pullingRef.value = false\r\n  pulling.value = false\r\n  isDragging = false\r\n\r\n  // 只有在实际拖拽了面板时才执行吸附\r\n  if (wasPulling) {\r\n    const targetY = nearest(possibles.value, y.value)\r\n    animateToY(targetY)\r\n  }\r\n}\r\n\r\n// Expose methods\r\nconst setHeight = (height: number, options?: { immediate?: boolean }) => {\r\n  animateToY(-height, options?.immediate)\r\n}\r\n\r\n// Lifecycle\r\nonMounted(() => {\r\n  // Initialize position\r\n  const initialY = isBottomPlacement.value ? bounds.value.bottom : bounds.value.top\r\n  y.value = initialY\r\n\r\n  // Add touch listeners to the entire panel for better interaction\r\n  const element = elementRef.value\r\n  if (element) {\r\n    element.addEventListener('touchstart', handleTouchStart, { passive: false })\r\n    element.addEventListener('touchmove', handleTouchMove, { passive: false })\r\n    element.addEventListener('touchend', handleTouchEnd, { passive: false })\r\n  }\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n  const element = elementRef.value\r\n  if (element) {\r\n    element.removeEventListener('touchstart', handleTouchStart)\r\n    element.removeEventListener('touchmove', handleTouchMove)\r\n    element.removeEventListener('touchend', handleTouchEnd)\r\n  }\r\n})\r\n\r\n// Watch for prop changes\r\nwatch(\r\n  () => props.anchors,\r\n  () => {\r\n    const initialY = isBottomPlacement.value ? bounds.value.bottom : bounds.value.top\r\n    animateToY(initialY, true)\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\n// Expose ref methods\r\ndefineExpose({\r\n  setHeight,\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.adm-floating-panel {\r\n  position: fixed;\r\n  z-index: var(--z-index, 1000);\r\n  box-sizing: border-box;\r\n  width: 100%;\r\n  border-radius: var(--border-radius, 8px);\r\n  background: #ffffff;\r\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\r\n  overflow: hidden;\r\n}\r\n\r\n.adm-floating-panel-bottom {\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  border-bottom-left-radius: 0;\r\n  border-bottom-right-radius: 0;\r\n}\r\n\r\n.adm-floating-panel-top {\r\n  left: 0;\r\n  right: 0;\r\n  top: 0;\r\n  border-top-left-radius: 0;\r\n  border-top-right-radius: 0;\r\n}\r\n\r\n.adm-floating-panel-mask {\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background: transparent;\r\n  z-index: 1;\r\n}\r\n\r\n.adm-floating-panel-header {\r\n  height: var(--header-height, 28px);\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  cursor: grab;\r\n}\r\n\r\n.adm-floating-panel-header:active {\r\n  cursor: grabbing;\r\n}\r\n\r\n.adm-floating-panel-bar {\r\n  width: 36px;\r\n  height: 5px;\r\n  background: #e5e5e5;\r\n  border-radius: 2.5px;\r\n}\r\n\r\n.adm-floating-panel-content {\r\n  height: calc(100% - var(--header-height, 28px));\r\n  overflow-y: auto;\r\n  overflow-x: hidden;\r\n  -webkit-overflow-scrolling: touch;\r\n  overscroll-behavior: contain;\r\n}\r\n\r\n.adm-floating-panel-top .adm-floating-panel-content {\r\n  height: calc(100% - var(--header-height, 28px));\r\n}\r\n</style>\r\n","<template>\r\n  <div :class=\"classPrefix\" :style=\"styleObject\">\r\n    <slot />\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { toCSSLength } from '../../utils/to-css-length'\r\n\r\nconst classPrefix = 'adm-grid'\r\n\r\ninterface GridProps {\r\n  columns: number\r\n  gap?: number | string | [number | string, number | string]\r\n}\r\n\r\nconst props = defineProps<GridProps>()\r\n\r\nconst styleObject = computed(() => {\r\n  const style: Record<string, string> = {\r\n    '--columns': props.columns.toString(),\r\n  }\r\n  if (props.gap !== undefined) {\r\n    if (Array.isArray(props.gap)) {\r\n      style['--gap-horizontal'] = toCSSLength(props.gap[0])\r\n      style['--gap-vertical'] = toCSSLength(props.gap[1])\r\n    } else {\r\n      style['--gap'] = toCSSLength(props.gap)\r\n    }\r\n  }\r\n  return style\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@class-prefix-grid: ~'adm-grid';\r\n\r\n.@{class-prefix-grid} {\r\n  --gap: 0;\r\n  --gap-horizontal: var(--gap);\r\n  --gap-vertical: var(--gap);\r\n\r\n  display: grid;\r\n  grid-gap: 10px;\r\n  column-gap: var(--gap-horizontal);\r\n  row-gap: var(--gap-vertical);\r\n  grid-template-columns: repeat(var(--columns), minmax(0, 1fr));\r\n  align-items: stretch;\r\n}\r\n</style>\r\n","<template>\r\n  <div :class=\"`${classPrefix}-item`\" :style=\"itemStyle\" @click=\"onItemClick\">\r\n    <slot />\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\nconst classPrefix = 'adm-grid'\r\n\r\ninterface GridItemProps {\r\n  span?: number\r\n  onClick?: (event: MouseEvent) => void\r\n}\r\n\r\nconst props = withDefaults(defineProps<GridItemProps>(), {\r\n  span: 1,\r\n})\r\n\r\nconst itemStyle = computed(() => ({\r\n  '--item-span': props.span,\r\n}))\r\n\r\nfunction onItemClick(event: MouseEvent) {\r\n  props.onClick?.(event)\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@class-prefix-grid: ~'adm-grid';\r\n\r\n.@{class-prefix-grid}-item {\r\n  grid-column-end: span var(--item-span);\r\n}\r\n</style>\r\n","<template>\r\n  <div ref=\"controlRef\" :class=\"`${classPrefix}-slide`\" @click=\"handleTap\">\r\n    <div ref=\"imageWrapperRef\" :class=\"`${classPrefix}-image-wrapper`\" :style=\"imageWrapperStyle\">\r\n      <component\r\n        v-if=\"props.imageRender\"\r\n        :is=\"props.imageRender(props.image, { index: props.index || 0 })\"\r\n      />\r\n      <img\r\n        v-else\r\n        ref=\"imgRef\"\r\n        :src=\"props.image\"\r\n        draggable=\"false\"\r\n        @load=\"handleImageLoad\"\r\n        @error=\"handleImageError\"\r\n      />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, onMounted, onUnmounted, type VNode, type CSSProperties } from 'vue'\r\n\r\nconst classPrefix = 'adm-image-viewer'\r\n\r\nexport interface SlideProps {\r\n  image: string\r\n  maxZoom: number | 'auto'\r\n  onTap?: () => void\r\n  onZoomChange?: (zoom: number) => void\r\n  imageRender?: (image: string, { index }: { index: number }) => VNode\r\n  index?: number\r\n}\r\n\r\nconst props = withDefaults(defineProps<SlideProps>(), {\r\n  maxZoom: 3,\r\n  index: 0,\r\n})\r\n\r\n// Refs\r\nconst controlRef = ref<HTMLDivElement | null>(null)\r\nconst imgRef = ref<HTMLImageElement | null>(null)\r\nconst imageWrapperRef = ref<HTMLDivElement | null>(null)\r\n\r\n// State\r\nconst matrix = ref({\r\n  a: 1, // scale x\r\n  b: 0, // skew x\r\n  c: 0, // skew y\r\n  d: 1, // scale y\r\n  e: 0, // translate x\r\n  f: 0, // translate y\r\n})\r\n\r\nconst imageLoaded = ref(false)\r\nconst imageSize = ref({ width: 0, height: 0 })\r\nconst controlSize = ref({ width: 0, height: 0 })\r\n\r\n// Computed\r\nconst currentZoom = computed(() => matrix.value.a)\r\n\r\nconst imageWrapperStyle = computed((): CSSProperties => {\r\n  // const { a, b, c, d, e, f } = matrix.value\r\n  // return {\r\n  //   transform: `matrix(${a}, ${b}, ${c}, ${d}, ${e}, ${f})`,\r\n  //   transformOrigin: 'center',\r\n  //   transition: 'transform 0.3s ease-out',\r\n  // }\r\n  return {}\r\n})\r\n\r\n// Methods\r\nconst handleTap = () => {\r\n  if (currentZoom.value <= 1) {\r\n    props.onTap?.()\r\n  } else {\r\n    // Reset zoom on tap when zoomed in\r\n    resetMatrix()\r\n  }\r\n}\r\n\r\nconst handleImageLoad = (event: Event) => {\r\n  const img = event.target as HTMLImageElement\r\n  imageSize.value = {\r\n    width: img.naturalWidth,\r\n    height: img.naturalHeight,\r\n  }\r\n  imageLoaded.value = true\r\n  fitImageToContainer()\r\n}\r\n\r\nconst handleImageError = () => {\r\n  console.error('Image failed to load:', props.image)\r\n}\r\n\r\nconst resetMatrix = () => {\r\n  matrix.value = {\r\n    a: 1,\r\n    b: 0,\r\n    c: 0,\r\n    d: 1,\r\n    e: 0,\r\n    f: 0,\r\n  }\r\n  props.onZoomChange?.(1)\r\n}\r\n\r\nconst fitImageToContainer = () => {\r\n  if (!imageLoaded.value || !controlRef.value) return\r\n\r\n  const container = controlRef.value\r\n  const containerRect = container.getBoundingClientRect()\r\n\r\n  controlSize.value = {\r\n    width: containerRect.width,\r\n    height: containerRect.height,\r\n  }\r\n\r\n  // Calculate scale to fit image in container\r\n  const scaleX = controlSize.value.width / imageSize.value.width\r\n  const scaleY = controlSize.value.height / imageSize.value.height\r\n  const scale = Math.min(scaleX, scaleY, 1) // Don't scale up\r\n\r\n  matrix.value = {\r\n    a: scale,\r\n    b: 0,\r\n    c: 0,\r\n    d: scale,\r\n    e: 0,\r\n    f: 0,\r\n  }\r\n}\r\n\r\n// Touch and drag handling (simplified)\r\nlet startDistance = 0\r\nlet startScale = 1\r\n// let startCenter = { x: 0, y: 0 }\r\n\r\nconst getDistance = (touches: TouchList) => {\r\n  if (touches.length < 2) return 0\r\n  const touch1 = touches[0]\r\n  const touch2 = touches[1]\r\n  return Math.sqrt(\r\n    Math.pow(touch2.clientX - touch1.clientX, 2) + Math.pow(touch2.clientY - touch1.clientY, 2),\r\n  )\r\n}\r\n\r\n// const getCenter = (touches: TouchList) => {\r\n//   if (touches.length === 1) {\r\n//     return { x: touches[0].clientX, y: touches[0].clientY }\r\n//   }\r\n//   if (touches.length === 2) {\r\n//     return {\r\n//       x: (touches[0].clientX + touches[1].clientX) / 2,\r\n//       y: (touches[0].clientY + touches[1].clientY) / 2,\r\n//     }\r\n//   }\r\n//   return { x: 0, y: 0 }\r\n// }\r\n\r\nconst handleTouchStart = (event: TouchEvent) => {\r\n  if (event.touches.length === 2) {\r\n    event.preventDefault()\r\n    startDistance = getDistance(event.touches)\r\n    startScale = currentZoom.value\r\n    // startCenter = getCenter(event.touches)\r\n  }\r\n}\r\n\r\nconst handleTouchMove = (event: TouchEvent) => {\r\n  if (event.touches.length === 2 && startDistance > 0) {\r\n    event.preventDefault()\r\n\r\n    const distance = getDistance(event.touches)\r\n    const scale = startScale * (distance / startDistance)\r\n\r\n    // Apply zoom limits\r\n    const maxZoom = props.maxZoom === 'auto' ? 3 : props.maxZoom\r\n    const clampedScale = Math.max(0.5, Math.min(scale, maxZoom))\r\n\r\n    matrix.value = {\r\n      ...matrix.value,\r\n      a: clampedScale,\r\n      d: clampedScale,\r\n    }\r\n\r\n    props.onZoomChange?.(clampedScale)\r\n  }\r\n}\r\n\r\nconst handleTouchEnd = () => {\r\n  startDistance = 0\r\n  startScale = 1\r\n}\r\n\r\n// Lifecycle\r\nonMounted(() => {\r\n  if (controlRef.value) {\r\n    controlRef.value.addEventListener('touchstart', handleTouchStart, { passive: false })\r\n    controlRef.value.addEventListener('touchmove', handleTouchMove, { passive: false })\r\n    controlRef.value.addEventListener('touchend', handleTouchEnd)\r\n\r\n    // Handle window resize\r\n    window.addEventListener('resize', fitImageToContainer)\r\n  }\r\n})\r\n\r\nonUnmounted(() => {\r\n  if (controlRef.value) {\r\n    controlRef.value.removeEventListener('touchstart', handleTouchStart)\r\n    controlRef.value.removeEventListener('touchmove', handleTouchMove)\r\n    controlRef.value.removeEventListener('touchend', handleTouchEnd)\r\n  }\r\n  window.removeEventListener('resize', fitImageToContainer)\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './image-viewer.less';\r\n</style>\r\n","<template>\r\n  <Teleport :to=\"containerElement\" v-if=\"containerElement\">\r\n    <Mask\r\n      :visible=\"props.visible\"\r\n      :disableBodyScroll=\"false\"\r\n      opacity=\"thick\"\r\n      :afterClose=\"props.afterClose\"\r\n      destroyOnClose\r\n      :class=\"props.classNames?.mask\"\r\n    >\r\n      <div :class=\"[`${classPrefix}-content`, props.classNames?.body]\">\r\n        <Slide\r\n          v-if=\"props.image || typeof props.imageRender === 'function'\"\r\n          :image=\"props.image\"\r\n          :onTap=\"props.onClose\"\r\n          :maxZoom=\"props.maxZoom\"\r\n          :imageRender=\"props.imageRender\"\r\n        />\r\n\r\n        <div v-if=\"props.image\" :class=\"`${classPrefix}-footer`\">\r\n          <slot name=\"footer\" :image=\"props.image\" />\r\n          <SafeArea position=\"bottom\" />\r\n        </div>\r\n      </div>\r\n    </Mask>\r\n  </Teleport>\r\n\r\n  <!-- Fallback for SSR or when no container -->\r\n  <Mask\r\n    v-else\r\n    :visible=\"props.visible\"\r\n    :disableBodyScroll=\"false\"\r\n    opacity=\"thick\"\r\n    :afterClose=\"props.afterClose\"\r\n    destroyOnClose\r\n    :class=\"props.classNames?.mask\"\r\n  >\r\n    <div :class=\"[`${classPrefix}-content`, props.classNames?.body]\">\r\n      <Slide\r\n        v-if=\"props.image || typeof props.imageRender === 'function'\"\r\n        :image=\"props.image\"\r\n        :onTap=\"props.onClose\"\r\n        :maxZoom=\"props.maxZoom\"\r\n        :imageRender=\"props.imageRender\"\r\n      />\r\n\r\n      <div v-if=\"props.image\" :class=\"`${classPrefix}-footer`\">\r\n        <slot name=\"footer\" :image=\"props.image\" />\r\n        <SafeArea position=\"bottom\" />\r\n      </div>\r\n    </div>\r\n  </Mask>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, type VNode } from 'vue'\r\nimport Mask from '../mask/index.vue'\r\nimport SafeArea from '../safe-area/index.vue'\r\nimport Slide from './slide.vue'\r\n\r\nconst classPrefix = 'adm-image-viewer'\r\n\r\nexport interface ImageViewerProps {\r\n  image: string\r\n  maxZoom?: number | 'auto'\r\n  getContainer?: HTMLElement | (() => HTMLElement) | null\r\n  visible?: boolean\r\n  onClose?: () => void\r\n  afterClose?: () => void\r\n  imageRender?: (image: string, { index }: { index: number }) => VNode\r\n  classNames?: {\r\n    mask?: string\r\n    body?: string\r\n  }\r\n}\r\n\r\n// Props with defaults\r\nconst props = withDefaults(defineProps<ImageViewerProps>(), {\r\n  maxZoom: 3,\r\n  getContainer: null,\r\n  visible: false,\r\n})\r\n\r\n// Helper function to resolve container\r\nconst resolveContainer = (getContainer: HTMLElement | (() => HTMLElement) | null): HTMLElement => {\r\n  if (typeof getContainer === 'function') {\r\n    return getContainer()\r\n  }\r\n  if (getContainer) {\r\n    return getContainer\r\n  }\r\n  return document.body\r\n}\r\n\r\n// Computed container element\r\nconst containerElement = computed(() => {\r\n  if (typeof window === 'undefined') return null\r\n  if (!props.getContainer) return null\r\n\r\n  try {\r\n    return resolveContainer(props.getContainer)\r\n  } catch {\r\n    return document.body\r\n  }\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './image-viewer.less';\r\n</style>\r\n","<template>\r\n  <div\r\n    ref=\"containerRef\"\r\n    :class=\"`${classPrefix}-slides`\"\r\n    @touchstart=\"handleTouchStart\"\r\n    @touchmove=\"handleTouchMove\"\r\n    @touchend=\"handleTouchEnd\"\r\n  >\r\n    <!-- 指示器 -->\r\n    <div :class=\"`${classPrefix}-indicator`\">{{ displayIndex }} / {{ props.images.length }}</div>\r\n\r\n    <!-- 滑动容器 -->\r\n    <div :class=\"`${classPrefix}-slides-inner`\" :style=\"slidesInnerStyle\">\r\n      <Slide\r\n        v-for=\"(image, index) in props.images\"\r\n        :key=\"index\"\r\n        :image=\"image\"\r\n        :index=\"index\"\r\n        :maxZoom=\"props.maxZoom\"\r\n        :onTap=\"props.onTap\"\r\n        :imageRender=\"props.imageRender\"\r\n        :onZoomChange=\"handleZoomChange\"\r\n        :dragLockRef=\"dragLockRef\"\r\n      />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, onMounted, watch, type VNode, type CSSProperties } from 'vue'\r\nimport Slide from './slide.vue'\r\n\r\nconst classPrefix = 'adm-image-viewer'\r\n\r\nexport interface SlidesProps {\r\n  images: string[]\r\n  onTap?: () => void\r\n  maxZoom: number | 'auto'\r\n  defaultIndex: number\r\n  onIndexChange?: (index: number) => void\r\n  imageRender?: (image: string, { index }: { index: number }) => VNode\r\n}\r\n\r\nexport interface SlidesRef {\r\n  swipeTo: (index: number, immediate?: boolean) => void\r\n}\r\n\r\nconst props = defineProps<SlidesProps>()\r\n\r\n// Refs\r\nconst containerRef = ref<HTMLDivElement | null>(null)\r\nconst dragLockRef = ref(false)\r\n\r\n// State for animation\r\nconst currentX = ref(0)\r\nconst isDragging = ref(false)\r\nconst slideWidth = ref(0)\r\n\r\n// Touch handling\r\nconst startX = ref(0)\r\nconst startOffsetX = ref(0)\r\nconst velocity = ref(0)\r\nconst lastTouchTime = ref(0)\r\n\r\n// Helper function: bound\r\nconst bound = (value: number, min: number, max: number): number => {\r\n  return Math.max(min, Math.min(max, value))\r\n}\r\n\r\n// Helper function: convertPx (simplified)\r\nconst convertPx = (px: number): number => {\r\n  return px\r\n}\r\n\r\n// Computed\r\nconst count = computed(() => props.images.length)\r\n\r\nconst displayIndex = computed(() => {\r\n  const index = bound(Math.round(currentX.value / slideWidth.value), 0, count.value - 1)\r\n  return index + 1\r\n})\r\n\r\nconst slidesInnerStyle = computed(\r\n  (): CSSProperties => ({\r\n    transform: `translateX(${-currentX.value}px)`,\r\n    transition: isDragging.value ? 'none' : 'transform 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\r\n  }),\r\n)\r\n\r\n// Methods\r\nconst updateSlideWidth = () => {\r\n  slideWidth.value = window.innerWidth + convertPx(16)\r\n  // Initialize position\r\n  currentX.value = props.defaultIndex * slideWidth.value\r\n}\r\n\r\nconst swipeTo = (index: number, immediate = false) => {\r\n  const boundedIndex = bound(index, 0, count.value - 1)\r\n  props.onIndexChange?.(boundedIndex)\r\n\r\n  const targetX = boundedIndex * slideWidth.value\r\n\r\n  if (immediate) {\r\n    isDragging.value = true\r\n    currentX.value = targetX\r\n    setTimeout(() => {\r\n      isDragging.value = false\r\n    }, 0)\r\n  } else {\r\n    isDragging.value = false\r\n    currentX.value = targetX\r\n  }\r\n}\r\n\r\nconst handleZoomChange = (zoom: number) => {\r\n  if (zoom !== 1) {\r\n    const index = Math.round(currentX.value / slideWidth.value)\r\n    currentX.value = index * slideWidth.value\r\n  }\r\n}\r\n\r\n// Touch events\r\nconst handleTouchStart = (event: TouchEvent) => {\r\n  if (dragLockRef.value || event.touches.length !== 1) return\r\n\r\n  isDragging.value = true\r\n  startX.value = event.touches[0].clientX\r\n  startOffsetX.value = currentX.value\r\n  lastTouchTime.value = Date.now()\r\n  velocity.value = 0\r\n}\r\n\r\nconst handleTouchMove = (event: TouchEvent) => {\r\n  if (!isDragging.value || dragLockRef.value || event.touches.length !== 1) return\r\n\r\n  const deltaX = startX.value - event.touches[0].clientX\r\n  const newOffsetX = startOffsetX.value + deltaX\r\n\r\n  // Calculate velocity\r\n  const now = Date.now()\r\n  const timeDelta = now - lastTouchTime.value\r\n  if (timeDelta > 0) {\r\n    velocity.value = deltaX / timeDelta\r\n  }\r\n  lastTouchTime.value = now\r\n\r\n  // Apply bounds with rubberband effect\r\n  const maxOffset = (count.value - 1) * slideWidth.value\r\n  let boundedOffsetX = newOffsetX\r\n\r\n  if (newOffsetX < 0) {\r\n    // Left rubberband\r\n    boundedOffsetX = newOffsetX * 0.3\r\n  } else if (newOffsetX > maxOffset) {\r\n    // Right rubberband\r\n    const excess = newOffsetX - maxOffset\r\n    boundedOffsetX = maxOffset + excess * 0.3\r\n  }\r\n\r\n  currentX.value = boundedOffsetX\r\n}\r\n\r\nconst handleTouchEnd = () => {\r\n  if (!isDragging.value || dragLockRef.value) return\r\n\r\n  const offsetX = currentX.value\r\n  const minIndex = Math.floor(offsetX / slideWidth.value)\r\n  const maxIndex = minIndex + 1\r\n\r\n  // Calculate velocity offset\r\n  const velocityOffset =\r\n    Math.min(Math.abs(velocity.value) * 2000, slideWidth.value) * (velocity.value > 0 ? 1 : -1)\r\n\r\n  const targetIndex = bound(\r\n    Math.round((offsetX + velocityOffset) / slideWidth.value),\r\n    minIndex,\r\n    maxIndex,\r\n  )\r\n\r\n  swipeTo(targetIndex)\r\n}\r\n\r\n// Watch for defaultIndex changes\r\nwatch(\r\n  () => props.defaultIndex,\r\n  (newIndex) => {\r\n    swipeTo(newIndex, true)\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\n// Lifecycle\r\nonMounted(() => {\r\n  updateSlideWidth()\r\n  window.addEventListener('resize', updateSlideWidth)\r\n})\r\n\r\n// Expose methods\r\ndefineExpose<SlidesRef>({\r\n  swipeTo,\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './image-viewer.less';\r\n</style>\r\n","<template>\r\n  <Teleport :to=\"containerElement\" v-if=\"containerElement\">\r\n    <Mask\r\n      :visible=\"props.visible\"\r\n      :disableBodyScroll=\"false\"\r\n      opacity=\"thick\"\r\n      :afterClose=\"props.afterClose\"\r\n      destroyOnClose\r\n      :class=\"props.classNames?.mask\"\r\n    >\r\n      <div :class=\"[`${classPrefix}-content`, props.classNames?.body]\">\r\n        <Slides\r\n          v-if=\"props.images\"\r\n          ref=\"slidesRef\"\r\n          :images=\"props.images\"\r\n          :defaultIndex=\"currentIndex\"\r\n          :onIndexChange=\"handleSlideChange\"\r\n          :onTap=\"props.onClose\"\r\n          :maxZoom=\"props.maxZoom\"\r\n          :imageRender=\"props.imageRender\"\r\n        />\r\n      </div>\r\n\r\n      <div v-if=\"props.images\" :class=\"`${classPrefix}-footer`\">\r\n        <slot name=\"foot\" :image=\"props.images[currentIndex]\" :index=\"currentIndex\" />\r\n        <SafeArea position=\"bottom\" />\r\n      </div>\r\n    </Mask>\r\n  </Teleport>\r\n\r\n  <!-- Fallback for SSR or when no container -->\r\n  <Mask\r\n    v-else\r\n    :visible=\"props.visible\"\r\n    :disableBodyScroll=\"false\"\r\n    opacity=\"thick\"\r\n    :afterClose=\"props.afterClose\"\r\n    destroyOnClose\r\n    :class=\"props.classNames?.mask\"\r\n  >\r\n    <div :class=\"[`${classPrefix}-content`, props.classNames?.body]\">\r\n      <Slides\r\n        v-if=\"props.images\"\r\n        ref=\"slidesRef\"\r\n        :images=\"props.images\"\r\n        :defaultIndex=\"currentIndex\"\r\n        :onIndexChange=\"handleSlideChange\"\r\n        :onTap=\"props.onClose\"\r\n        :maxZoom=\"props.maxZoom\"\r\n        :imageRender=\"props.imageRender\"\r\n      />\r\n    </div>\r\n\r\n    <div v-if=\"props.images\" :class=\"`${classPrefix}-footer`\">\r\n      <slot name=\"footer\" :image=\"props.images[currentIndex]\" :index=\"currentIndex\" />\r\n      <SafeArea position=\"bottom\" />\r\n    </div>\r\n  </Mask>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, watch, type VNode } from 'vue'\r\nimport Mask from '../mask/index.vue'\r\nimport SafeArea from '../safe-area/index.vue'\r\nimport Slides from './slides.vue'\r\n\r\nconst classPrefix = 'adm-image-viewer'\r\n\r\nexport interface MultiImageViewerProps {\r\n  images?: string[]\r\n  defaultIndex?: number\r\n  maxZoom?: number | 'auto'\r\n  getContainer?: HTMLElement | (() => HTMLElement) | null\r\n  visible?: boolean\r\n  onClose?: () => void\r\n  afterClose?: () => void\r\n  onIndexChange?: (index: number) => void\r\n  imageRender?: (image: string, { index }: { index: number }) => VNode\r\n  classNames?: {\r\n    mask?: string\r\n    body?: string\r\n  }\r\n}\r\n\r\nexport interface MultiImageViewerRef {\r\n  swipeTo: (index: number, immediate?: boolean) => void\r\n}\r\n\r\n// Props with defaults\r\nconst props = withDefaults(defineProps<MultiImageViewerProps>(), {\r\n  maxZoom: 3,\r\n  getContainer: null,\r\n  visible: false,\r\n  defaultIndex: 0,\r\n})\r\n\r\n// Refs\r\nconst slidesRef = ref<{ swipeTo: (index: number, immediate?: boolean) => void } | null>(null)\r\nconst currentIndex = ref(props.defaultIndex)\r\n\r\n// Watch for defaultIndex changes\r\nwatch(\r\n  () => props.defaultIndex,\r\n  (newIndex) => {\r\n    currentIndex.value = newIndex\r\n  },\r\n)\r\n\r\n// Helper function to resolve container\r\nconst resolveContainer = (getContainer: HTMLElement | (() => HTMLElement) | null): HTMLElement => {\r\n  if (typeof getContainer === 'function') {\r\n    return getContainer()\r\n  }\r\n  if (getContainer) {\r\n    return getContainer\r\n  }\r\n  return document.body\r\n}\r\n\r\n// Computed container element\r\nconst containerElement = computed(() => {\r\n  if (typeof window === 'undefined') return null\r\n  if (!props.getContainer) return null\r\n\r\n  try {\r\n    return resolveContainer(props.getContainer)\r\n  } catch {\r\n    return document.body\r\n  }\r\n})\r\n\r\n// Methods\r\nconst handleSlideChange = (newIndex: number) => {\r\n  if (newIndex === currentIndex.value) return\r\n  currentIndex.value = newIndex\r\n  props.onIndexChange?.(newIndex)\r\n}\r\n\r\nconst swipeTo = (index: number, immediate = false) => {\r\n  const images = props.images || []\r\n  const boundIndex = Math.max(0, Math.min(index, images.length - 1))\r\n  currentIndex.value = boundIndex\r\n  slidesRef.value?.swipeTo(boundIndex, immediate)\r\n}\r\n\r\n// Expose methods\r\ndefineExpose<MultiImageViewerRef>({\r\n  swipeTo,\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './image-viewer.less';\r\n</style>\r\n","import { createApp, h, type App, type VNode } from 'vue'\r\nimport ImageViewer from './image-viewer.vue'\r\nimport type { ImageViewerProps } from './image-viewer.vue'\r\nimport MultiImageViewer from './multi-image-viewer.vue'\r\nimport type { MultiImageViewerProps } from './multi-image-viewer.vue'\r\n\r\nexport interface ImageViewerShowHandler {\r\n  close: () => void\r\n  replace?: (props: Omit<ImageViewerProps, 'visible'>) => void\r\n}\r\n\r\nexport interface MultiImageViewerShowHandler {\r\n  close: () => void\r\n  replace?: (props: Omit<MultiImageViewerProps, 'visible'>) => void\r\n}\r\n\r\nconst handlerSet = new Set<ImageViewerShowHandler>()\r\n\r\n// 创建容器元素\r\nconst createContainer = (): HTMLDivElement => {\r\n  const container = document.createElement('div')\r\n  container.style.cssText = `\r\n    position: fixed;\r\n    top: 0;\r\n    left: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    z-index: 9999;\r\n  `\r\n  document.body.appendChild(container)\r\n  return container\r\n}\r\n\r\n// 渲染组件到容器\r\nconst renderComponent = (\r\n  component: VNode,\r\n  container: HTMLDivElement,\r\n): { app: App; unmount: () => void } => {\r\n  const app = createApp(component)\r\n\r\n  app.mount(container)\r\n\r\n  const unmount = () => {\r\n    app.unmount()\r\n    if (container.parentNode) {\r\n      container.parentNode.removeChild(container)\r\n    }\r\n  }\r\n\r\n  return { app, unmount }\r\n}\r\n\r\n/**\r\n * 显示单图预览器\r\n */\r\nexport function showImageViewer(props: Omit<ImageViewerProps, 'visible'>): ImageViewerShowHandler {\r\n  clearImageViewer()\r\n\r\n  const container = createContainer()\r\n  let isClosed = false\r\n\r\n  const handleClose = () => {\r\n    if (isClosed) return\r\n    isClosed = true\r\n\r\n    // 触发关闭动画\r\n    app.unmount()\r\n\r\n    // 清理容器\r\n    setTimeout(() => {\r\n      if (container.parentNode) {\r\n        container.parentNode.removeChild(container)\r\n      }\r\n    }, 300) // 等待动画完成\r\n\r\n    handlerSet.delete(handler)\r\n    props.afterClose?.()\r\n  }\r\n\r\n  const component = h(ImageViewer, {\r\n    ...props,\r\n    visible: true,\r\n    onClose: () => {\r\n      props.onClose?.()\r\n      handleClose()\r\n    },\r\n    afterClose: handleClose,\r\n  })\r\n\r\n  const { app, unmount } = renderComponent(component, container)\r\n\r\n  const handler: ImageViewerShowHandler = {\r\n    close: handleClose,\r\n    replace: (newProps: Omit<ImageViewerProps, 'visible'>) => {\r\n      if (isClosed) return\r\n\r\n      const newComponent = h(ImageViewer, {\r\n        ...newProps,\r\n        visible: true,\r\n        onClose: () => {\r\n          newProps.onClose?.()\r\n          handleClose()\r\n        },\r\n        afterClose: handleClose,\r\n      })\r\n\r\n      // 重新渲染组件\r\n      unmount()\r\n      renderComponent(newComponent, container)\r\n    },\r\n  }\r\n\r\n  handlerSet.add(handler)\r\n  return handler\r\n}\r\n\r\n/**\r\n * 显示多图预览器\r\n */\r\nexport function showMultiImageViewer(\r\n  props: Omit<MultiImageViewerProps, 'visible'>,\r\n): MultiImageViewerShowHandler {\r\n  clearImageViewer()\r\n\r\n  const container = createContainer()\r\n  let isClosed = false\r\n\r\n  const handleClose = () => {\r\n    if (isClosed) return\r\n    isClosed = true\r\n\r\n    // 触发关闭动画\r\n    app.unmount()\r\n\r\n    // 清理容器\r\n    setTimeout(() => {\r\n      if (container.parentNode) {\r\n        container.parentNode.removeChild(container)\r\n      }\r\n    }, 300) // 等待动画完成\r\n\r\n    handlerSet.delete(handler)\r\n    props.afterClose?.()\r\n  }\r\n\r\n  const component = h(MultiImageViewer, {\r\n    ...props,\r\n    visible: true,\r\n    onClose: () => {\r\n      props.onClose?.()\r\n      handleClose()\r\n    },\r\n    afterClose: handleClose,\r\n  })\r\n\r\n  const { app, unmount } = renderComponent(component, container)\r\n\r\n  const handler: MultiImageViewerShowHandler = {\r\n    close: handleClose,\r\n    replace: (newProps: Omit<MultiImageViewerProps, 'visible'>) => {\r\n      if (isClosed) return\r\n\r\n      const newComponent = h(MultiImageViewer, {\r\n        ...newProps,\r\n        visible: true,\r\n        onClose: () => {\r\n          newProps.onClose?.()\r\n          handleClose()\r\n        },\r\n        afterClose: handleClose,\r\n      })\r\n\r\n      // 重新渲染组件\r\n      unmount()\r\n      renderComponent(newComponent, container)\r\n    },\r\n  }\r\n\r\n  handlerSet.add(handler)\r\n  return handler\r\n}\r\n\r\n/**\r\n * 关闭所有图片预览器\r\n */\r\nexport function clearImageViewer(): void {\r\n  handlerSet.forEach((handler) => {\r\n    handler.close()\r\n  })\r\n  handlerSet.clear()\r\n}\r\n\r\n// 导出类型\r\nexport type { ImageViewerProps, MultiImageViewerProps }\r\n","import ImageViewer from './image-viewer.vue'\r\nimport MultiImageViewer from './multi-image-viewer.vue'\r\nimport { attachPropertiesToComponent } from '../../utils/attach-properties-to-component'\r\nimport { showImageViewer, clearImageViewer, showMultiImageViewer } from './methods'\r\n\r\nexport type { ImageViewerProps } from './image-viewer.vue'\r\nexport type { MultiImageViewerProps } from './multi-image-viewer.vue'\r\n\r\n// 命令式 API\r\nexport type { ImageViewerShowHandler, MultiImageViewerShowHandler } from './methods'\r\nconst Multi = attachPropertiesToComponent(MultiImageViewer, {\r\n  show: showMultiImageViewer,\r\n})\r\nexport default attachPropertiesToComponent(ImageViewer, {\r\n  Multi,\r\n  show: showImageViewer,\r\n  clear: clearImageViewer,\r\n})\r\n","<template>\r\n  <div :class=\"classes\" @click=\"onSpaceClick\">\r\n    <template v-for=\"(child, idx) in normalizedChildren\" :key=\"idx\">\r\n      <div :class=\"`${classPrefix}-item`\">\r\n        <!-- <slot :name=\"`item-${idx}`\">{{ child }}</slot> -->\r\n        <!-- 使用 component 渲染 VNode，而不是插值表达式 -->\r\n        <component :is=\"child\" />\r\n      </div>\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, useSlots, type VNode } from 'vue'\r\nimport classNames from 'classnames'\r\n\r\nconst classPrefix = 'adm-space'\r\n\r\ninterface SpaceProps {\r\n  direction?: 'horizontal' | 'vertical'\r\n  align?: 'start' | 'end' | 'center' | 'baseline'\r\n  justify?: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly' | 'stretch'\r\n  wrap?: boolean\r\n  block?: boolean\r\n  onClick?: (event: MouseEvent) => void\r\n}\r\n\r\nconst props = withDefaults(defineProps<SpaceProps>(), {\r\n  direction: 'horizontal',\r\n})\r\n\r\nconst slots = useSlots()\r\n\r\nconst classes = computed(() =>\r\n  classNames(classPrefix, {\r\n    [`${classPrefix}-wrap`]: props.wrap,\r\n    [`${classPrefix}-block`]: props.block,\r\n    [`${classPrefix}-${props.direction}`]: true,\r\n    [`${classPrefix}-align-${props.align}`]: !!props.align,\r\n    [`${classPrefix}-justify-${props.justify}`]: !!props.justify,\r\n  }),\r\n)\r\n\r\nconst normalizedChildren = computed(() => {\r\n  // 默认插槽内容转数组\r\n  const children = slots.default ? slots.default() : []\r\n\r\n  // 展开所有子元素，处理 v-for 生成的 Fragment\r\n  const flattenChildren = (vnodes: VNode[]): VNode[] => {\r\n    const result: VNode[] = []\r\n\r\n    vnodes.forEach((vnode) => {\r\n      if (vnode === null || vnode === undefined) return\r\n\r\n      // 如果是 Fragment，展开其子元素\r\n      if (\r\n        vnode.type === Symbol.for('v-fgt') ||\r\n        (vnode.type && vnode.type.toString() === 'Symbol(Fragment)')\r\n      ) {\r\n        if (vnode.children && Array.isArray(vnode.children)) {\r\n          result.push(...flattenChildren(vnode.children as VNode[]))\r\n        }\r\n      } else {\r\n        result.push(vnode)\r\n      }\r\n    })\r\n\r\n    return result\r\n  }\r\n\r\n  return flattenChildren(children).filter((child) => child !== null && child !== undefined)\r\n})\r\n\r\nfunction onSpaceClick(event: MouseEvent) {\r\n  props.onClick?.(event)\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n</style>\r\n","<template>\r\n  <div :class=\"[`${classPrefix}-cell`, status === 'fail' && `${classPrefix}-cell-fail`]\">\r\n    <Image :class=\"`${classPrefix}-cell-image`\" :src=\"src\" :fit=\"imageFit\" @click=\"handleClick\" />\r\n    <!-- Loading mask -->\r\n    <div v-if=\"status === 'pending'\" :class=\"`${classPrefix}-cell-mask`\">\r\n      <span :class=\"`${classPrefix}-cell-loading`\">\r\n        <SpinLoading color=\"white\" />\r\n        <span :class=\"`${classPrefix}-cell-mask-message`\">\r\n          {{ locale.ImageUploader.uploading }}\r\n        </span>\r\n      </span>\r\n    </div>\r\n    <!-- Delete button -->\r\n    <span v-if=\"deletable\" :class=\"`${classPrefix}-cell-delete`\" @click.stop=\"handleDelete\">\r\n      <component :is=\"deleteIcon\" />\r\n    </span>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, onUnmounted, type Component } from 'vue'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport SpinLoading from '../spin-loading/index.vue'\r\nimport Image from '../image/index.vue'\r\n\r\nexport type TaskStatus = 'pending' | 'fail' | 'success'\r\n\r\ninterface PreviewItemProps {\r\n  onClick?: () => void\r\n  onDelete?: () => void\r\n  deletable: boolean\r\n  deleteIcon: Component | string\r\n  url?: string\r\n  file?: File\r\n  status?: TaskStatus\r\n  imageFit: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down'\r\n}\r\n\r\nconst props = withDefaults(defineProps<PreviewItemProps>(), {\r\n  deletable: true,\r\n  imageFit: 'cover',\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  click: []\r\n  delete: []\r\n}>()\r\n\r\nconst { locale } = useConfig()\r\n\r\nconst classPrefix = 'adm-image-uploader'\r\n\r\n// Generate src from url or file\r\nconst src = computed(() => {\r\n  if (props.url) {\r\n    return props.url\r\n  }\r\n  if (props.file) {\r\n    return URL.createObjectURL(props.file)\r\n  }\r\n  return ''\r\n})\r\n\r\n// Cleanup object URL when file is used\r\nonUnmounted(() => {\r\n  if (props.file && src.value) {\r\n    URL.revokeObjectURL(src.value)\r\n  }\r\n})\r\n\r\nconst handleClick = () => {\r\n  props.onClick?.()\r\n  emit('click')\r\n}\r\n\r\nconst handleDelete = () => {\r\n  // props.onDelete?.()\r\n  emit('delete')\r\n}\r\n</script>\r\n","<template>\r\n  <div :class=\"classPrefix\" ref=\"containerRef\">\r\n    <template v-if=\"columns\">\r\n      <Grid :class=\"`${classPrefix}-grid`\" :columns=\"columns\" :style=\"gridStyle\">\r\n        <div :class=\"`${classPrefix}-gap-measure`\" ref=\"gapMeasureRef\" />\r\n\r\n        <!-- Render uploaded images -->\r\n        <PreviewItem\r\n          v-for=\"(fileItem, index) in currentValue\"\r\n          :key=\"fileItem.key ?? index\"\r\n          :url=\"fileItem.thumbnailUrl ?? fileItem.url\"\r\n          :deletable=\"deletable\"\r\n          :delete-icon=\"deleteIcon\"\r\n          :image-fit=\"imageFit\"\r\n          @click=\"handleImageClick(index, fileItem)\"\r\n          @delete=\"handleImageDelete(index, fileItem)\"\r\n        />\r\n\r\n        <!-- Render tasks -->\r\n        <PreviewItem\r\n          v-for=\"task in visibleTasks\"\r\n          :key=\"task.id\"\r\n          :file=\"task.file\"\r\n          :deletable=\"task.status !== 'pending'\"\r\n          :delete-icon=\"deleteIcon\"\r\n          :status=\"task.status\"\r\n          :image-fit=\"imageFit\"\r\n          @delete=\"handleTaskDelete(task.id)\"\r\n        />\r\n\r\n        <div\r\n          :class=\"`${classPrefix}-upload-button-wrap`\"\r\n          :style=\"showUpload ? undefined : { display: 'none' }\"\r\n        >\r\n          <slot v-if=\"$slots.default\" />\r\n          <span\r\n            v-else\r\n            :class=\"`${classPrefix}-cell ${classPrefix}-upload-button`\"\r\n            role=\"button\"\r\n            :aria-label=\"locale.ImageUploader.upload\"\r\n          >\r\n            <span :class=\"`${classPrefix}-upload-button-icon`\">\r\n              <AddOutline />\r\n            </span>\r\n          </span>\r\n          <input\r\n            v-if=\"!disableUpload\"\r\n            ref=\"inputRef\"\r\n            :aria-label=\"locale.ImageUploader.upload\"\r\n            :capture=\"capture\"\r\n            :accept=\"accept\"\r\n            :multiple=\"multiple\"\r\n            type=\"file\"\r\n            :class=\"`${classPrefix}-input`\"\r\n            @change=\"handleChange\"\r\n          />\r\n        </div>\r\n      </Grid>\r\n    </template>\r\n\r\n    <template v-else>\r\n      <Space :class=\"`${classPrefix}-space`\" wrap block>\r\n        <PreviewItem\r\n          v-for=\"(fileItem, index) in currentValue\"\r\n          :key=\"fileItem.key ?? index\"\r\n          :url=\"fileItem.thumbnailUrl ?? fileItem.url\"\r\n          :deletable=\"deletable\"\r\n          :delete-icon=\"deleteIcon\"\r\n          :image-fit=\"imageFit\"\r\n          @click=\"handleImageClick(index, fileItem)\"\r\n          @delete=\"handleImageDelete(index, fileItem)\"\r\n        />\r\n\r\n        <PreviewItem\r\n          v-for=\"task in visibleTasks\"\r\n          :key=\"task.id\"\r\n          :file=\"task.file\"\r\n          :deletable=\"task.status !== 'pending'\"\r\n          :delete-icon=\"deleteIcon\"\r\n          :status=\"task.status\"\r\n          :image-fit=\"imageFit\"\r\n          @delete=\"handleTaskDelete(task.id)\"\r\n        />\r\n\r\n        <div\r\n          :class=\"`${classPrefix}-upload-button-wrap`\"\r\n          :style=\"showUpload ? undefined : { display: 'none' }\"\r\n        >\r\n          <slot v-if=\"$slots.default\" />\r\n          <span\r\n            v-else\r\n            :class=\"`${classPrefix}-cell ${classPrefix}-upload-button`\"\r\n            role=\"button\"\r\n            :aria-label=\"locale.ImageUploader.upload\"\r\n          >\r\n            <span :class=\"`${classPrefix}-upload-button-icon`\">\r\n              <AddOutline />\r\n            </span>\r\n          </span>\r\n          <input\r\n            v-if=\"!disableUpload\"\r\n            ref=\"inputRef\"\r\n            :aria-label=\"locale.ImageUploader.upload\"\r\n            :capture=\"capture\"\r\n            :accept=\"accept\"\r\n            :multiple=\"multiple\"\r\n            type=\"file\"\r\n            :class=\"`${classPrefix}-input`\"\r\n            @change=\"handleChange\"\r\n          />\r\n        </div>\r\n      </Space>\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { AddOutline, CloseOutline } from 'ant-mobile-icons-vue3'\r\nimport { computed, h, nextTick, onUnmounted, ref, watch, type CSSProperties } from 'vue'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport Grid from '../grid/index.vue'\r\nimport ImageViewer from '../image-viewer'\r\nimport Space from '../space/index.vue'\r\nimport PreviewItem from './preview-item.vue'\r\n\r\n// Async import to avoid circular dependency issues\r\n\r\nexport type TaskStatus = 'pending' | 'fail' | 'success'\r\n\r\n// Define types locally since they may not be exported\r\ninterface ImageProps {\r\n  fit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down'\r\n}\r\n\r\ninterface GridProps {\r\n  columns: number\r\n  gap?: number | string | [number | string, number | string]\r\n}\r\n\r\nexport interface ImageUploadItem {\r\n  key?: string | number\r\n  url: string\r\n  thumbnailUrl?: string\r\n  extra?: unknown\r\n}\r\n\r\ninterface Task {\r\n  id: number\r\n  url?: string\r\n  file: File\r\n  status: TaskStatus\r\n}\r\n\r\nexport type UploadTask = Pick<Task, 'id' | 'status'>\r\n\r\nexport interface ImageUploaderProps {\r\n  defaultValue?: ImageUploadItem[]\r\n  value?: ImageUploadItem[]\r\n  columns?: GridProps['columns']\r\n  onChange?: (items: ImageUploadItem[]) => void\r\n  onUploadQueueChange?: (tasks: UploadTask[]) => void\r\n  accept?: string\r\n  multiple?: boolean\r\n  maxCount?: number\r\n  onCountExceed?: (exceed: number) => void\r\n  disableUpload?: boolean\r\n  showUpload?: boolean\r\n  deletable?: boolean\r\n  deleteIcon?: unknown\r\n  capture?: boolean | 'user' | 'environment'\r\n  onPreview?: (index: number, item: ImageUploadItem) => void\r\n  beforeUpload?: (file: File, files: File[]) => Promise<File | null> | File | null\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  upload: (file: File) => Promise<ImageUploadItem> | any\r\n  onDelete?: (item: ImageUploadItem) => boolean | Promise<boolean> | void\r\n  preview?: boolean\r\n  showFailed?: boolean\r\n  imageFit?: ImageProps['fit']\r\n  renderItem?: (originNode: unknown, file: ImageUploadItem, fileList: ImageUploadItem[]) => unknown\r\n}\r\n\r\nexport interface ImageUploaderRef {\r\n  nativeElement: HTMLInputElement | null\r\n}\r\n\r\nconst props = withDefaults(defineProps<ImageUploaderProps>(), {\r\n  disableUpload: false,\r\n  deletable: true,\r\n  showUpload: true,\r\n  multiple: false,\r\n  maxCount: 0,\r\n  defaultValue: () => [],\r\n  accept: 'image/*',\r\n  preview: true,\r\n  showFailed: true,\r\n  imageFit: 'cover',\r\n  value: undefined,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:value': [ImageUploadItem[]]\r\n  change: [ImageUploadItem[]]\r\n  uploadQueueChange: [UploadTask[]]\r\n  countExceed: [number]\r\n  preview: [number, ImageUploadItem]\r\n}>()\r\n\r\nconst { locale } = useConfig()\r\n\r\n// Refs\r\nconst containerRef = ref<HTMLDivElement>()\r\nconst gapMeasureRef = ref<HTMLDivElement>()\r\nconst inputRef = ref<HTMLInputElement>()\r\n\r\n// State\r\nconst tasks = ref<Task[]>([])\r\nconst cellSize = ref(80)\r\nconst idCountRef = ref(0)\r\nconst imageViewerHandlerRef = ref<{ close: () => void } | null>(null)\r\n\r\n// Computed\r\nconst classPrefix = 'adm-image-uploader'\r\n\r\n// Controlled/uncontrolled value handling\r\nconst innerValue = ref<ImageUploadItem[]>([...(props.defaultValue || [])])\r\nconst isControlled = computed(() => props.value !== undefined)\r\n\r\nconst currentValue = computed<ImageUploadItem[]>({\r\n  get() {\r\n    return isControlled.value ? (props.value as ImageUploadItem[]) : innerValue.value\r\n  },\r\n  set(v: ImageUploadItem[]) {\r\n    if (!isControlled.value) innerValue.value = v\r\n    emit('update:value', v)\r\n    // props.onChange?.(v)\r\n    emit('change', v)\r\n  },\r\n})\r\n\r\nconst deleteIcon = computed(() => {\r\n  return props.deleteIcon || h(CloseOutline, { class: `${classPrefix}-cell-delete-icon` })\r\n})\r\n\r\nconst gridStyle = computed<CSSProperties>(() => ({\r\n  '--cell-size': `${cellSize.value}px`,\r\n}))\r\n\r\nconst finalTasks = computed(() => {\r\n  return props.showFailed ? tasks.value : tasks.value.filter((task) => task.status !== 'fail')\r\n})\r\n\r\nconst showUpload = computed(() => {\r\n  return (\r\n    props.showUpload &&\r\n    (props.maxCount === 0 || currentValue.value.length + finalTasks.value.length < props.maxCount)\r\n  )\r\n})\r\n\r\nconst visibleTasks = computed(() => {\r\n  return tasks.value.filter((task) => props.showFailed || task.status !== 'fail')\r\n})\r\n\r\n// Container size measurement (simplified, using ResizeObserver)\r\nconst useContainerSize = () => {\r\n  const size = ref<{ width: number; height: number } | null>(null)\r\n  let resizeObserver: ResizeObserver | null = null\r\n\r\n  watch(containerRef, (container) => {\r\n    // 清理之前的 observer\r\n    if (resizeObserver) {\r\n      resizeObserver.disconnect()\r\n      resizeObserver = null\r\n    }\r\n\r\n    if (!container) return\r\n\r\n    resizeObserver = new ResizeObserver((entries) => {\r\n      const entry = entries[0]\r\n      if (entry) {\r\n        size.value = {\r\n          width: entry.contentRect.width,\r\n          height: entry.contentRect.height,\r\n        }\r\n      }\r\n    })\r\n\r\n    resizeObserver.observe(container)\r\n\r\n    // Initial measurement\r\n    const rect = container.getBoundingClientRect()\r\n    size.value = { width: rect.width, height: rect.height }\r\n  })\r\n  onUnmounted(() => {\r\n    if (resizeObserver) {\r\n      resizeObserver.disconnect()\r\n      resizeObserver = null\r\n    }\r\n  })\r\n  return size\r\n}\r\n\r\nconst containerSize = useContainerSize()\r\n\r\n// Cell size calculation\r\nwatch([containerSize, () => props.columns], () => {\r\n  nextTick(() => {\r\n    const gapMeasure = gapMeasureRef.value\r\n    if (props.columns && containerSize.value && gapMeasure) {\r\n      const width = containerSize.value.width\r\n      const computedStyle = window.getComputedStyle(gapMeasure)\r\n      const gapValue = parseFloat(computedStyle.height) || 10\r\n      console.log(gapValue)\r\n      cellSize.value = (width - gapValue * (props.columns - 1)) / props.columns\r\n    }\r\n  })\r\n})\r\n\r\n// Watch tasks for upload queue change\r\nwatch(\r\n  () => tasks.value,\r\n  (newTasks) => {\r\n    const taskList = newTasks.map((item) => ({\r\n      id: item.id,\r\n      status: item.status,\r\n    }))\r\n    props.onUploadQueueChange?.(taskList)\r\n    emit('uploadQueueChange', taskList)\r\n  },\r\n  { deep: true },\r\n)\r\n\r\n// Clean up tasks when value changes\r\nwatch(currentValue, () => {\r\n  tasks.value = tasks.value.filter((task) => {\r\n    if (task.url === undefined) return true\r\n    return !currentValue.value.some((fileItem) => fileItem.url === task.url)\r\n  })\r\n})\r\n\r\n// File processing\r\nconst processFile = async (file: File, fileList: File[]) => {\r\n  const { beforeUpload } = props\r\n  let transformedFile: File | null | undefined = file\r\n\r\n  if (beforeUpload) {\r\n    transformedFile = await beforeUpload(file, fileList)\r\n  }\r\n\r\n  return transformedFile\r\n}\r\n\r\nconst getFinalTasks = (taskList: Task[]) => {\r\n  return props.showFailed ? taskList : taskList.filter((task) => task.status !== 'fail')\r\n}\r\n\r\n// Change handler\r\nconst handleChange = async (e: Event) => {\r\n  const target = e.target as HTMLInputElement\r\n  const rawFiles = target.files\r\n  if (!rawFiles) return\r\n\r\n  let files = Array.from(rawFiles)\r\n  target.value = '' // Reset input\r\n\r\n  if (props.beforeUpload) {\r\n    const postFiles = files.map((file) => processFile(file, files))\r\n    const filesList = await Promise.all(postFiles)\r\n    files = filesList.filter(Boolean) as File[]\r\n  }\r\n\r\n  if (files.length === 0) return\r\n\r\n  // Check max count\r\n  if (props.maxCount > 0) {\r\n    const exceed = currentValue.value.length + files.length - props.maxCount\r\n    if (exceed > 0) {\r\n      files = files.slice(0, files.length - exceed)\r\n      props.onCountExceed?.(exceed)\r\n      emit('countExceed', exceed)\r\n    }\r\n  }\r\n\r\n  const newTasks = files.map((file) => ({\r\n    id: idCountRef.value++,\r\n    status: 'pending' as TaskStatus,\r\n    file,\r\n  }))\r\n\r\n  tasks.value = [...getFinalTasks(tasks.value), ...newTasks]\r\n\r\n  const newVal: ImageUploadItem[] = []\r\n  await Promise.all(\r\n    newTasks.map(async (currentTask, index) => {\r\n      try {\r\n        const result = await props.upload(currentTask.file)\r\n        newVal[index] = result\r\n\r\n        tasks.value = tasks.value.map((task) => {\r\n          if (task.id === currentTask.id) {\r\n            return {\r\n              ...task,\r\n              status: 'success' as TaskStatus,\r\n              url: result.url,\r\n            }\r\n          }\r\n          return task\r\n        })\r\n      } catch (e) {\r\n        tasks.value = tasks.value.map((task) => {\r\n          if (task.id === currentTask.id) {\r\n            return {\r\n              ...task,\r\n              status: 'fail' as TaskStatus,\r\n            }\r\n          }\r\n          return task\r\n        })\r\n        console.error(e)\r\n      }\r\n    }),\r\n  )\r\n\r\n  currentValue.value = currentValue.value.concat(newVal.filter(Boolean))\r\n}\r\n\r\n// Image preview\r\nconst previewImage = (index: number) => {\r\n  imageViewerHandlerRef.value = ImageViewer.Multi.show({\r\n    images: currentValue.value.map((fileItem) => fileItem.url),\r\n    defaultIndex: index,\r\n    onClose: () => {\r\n      imageViewerHandlerRef.value = null\r\n    },\r\n  })\r\n}\r\n\r\n// Event handlers\r\nconst handleImageClick = (index: number, fileItem: ImageUploadItem) => {\r\n  if (props.preview) {\r\n    previewImage(index)\r\n  }\r\n  props.onPreview?.(index, fileItem)\r\n  emit('preview', index, fileItem)\r\n}\r\n\r\nconst handleImageDelete = async (index: number, fileItem: ImageUploadItem) => {\r\n  const canDelete = await props.onDelete?.(fileItem)\r\n  if (canDelete === false) return\r\n  currentValue.value = currentValue.value.filter((_, i) => i !== index)\r\n}\r\n\r\nconst handleTaskDelete = (taskId: number) => {\r\n  tasks.value = tasks.value.filter((t) => t.id !== taskId)\r\n}\r\n\r\n// Cleanup\r\nonUnmounted(() => {\r\n  imageViewerHandlerRef.value?.close()\r\n})\r\n\r\n// Expose ref\r\ndefineExpose<ImageUploaderRef>({\r\n  get nativeElement() {\r\n    return inputRef.value || null\r\n  },\r\n})\r\n</script>\r\n","import { ref } from 'vue'\r\n\r\n// 自定义 useLockFn hook\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport const useLockFn = <T extends (...args: any[]) => Promise<any>>(fn: T) => {\r\n  const lockRef = ref(false)\r\n\r\n  const lockedFn = async (...args: Parameters<T>) => {\r\n    if (lockRef.value) return\r\n    lockRef.value = true\r\n    try {\r\n      return await fn(...args)\r\n    } finally {\r\n      lockRef.value = false\r\n    }\r\n  }\r\n\r\n  return lockedFn as T\r\n}\r\n\r\n// 自定义 useThrottleFn hook\r\nexport const useThrottleFn = (\r\n  fn: () => void,\r\n  options: { wait: number; leading: boolean; trailing: boolean },\r\n) => {\r\n  let lastCallTime = 0\r\n  let timer: number | null = null\r\n\r\n  const throttledFn = () => {\r\n    const now = Date.now()\r\n\r\n    if (options.leading && now - lastCallTime >= options.wait) {\r\n      lastCallTime = now\r\n      fn()\r\n      return\r\n    }\r\n\r\n    if (timer) {\r\n      clearTimeout(timer)\r\n    }\r\n\r\n    if (options.trailing) {\r\n      timer = setTimeout(\r\n        () => {\r\n          lastCallTime = Date.now()\r\n          fn()\r\n          timer = null\r\n        },\r\n        options.wait - (now - lastCallTime),\r\n      ) as unknown as number\r\n    }\r\n  }\r\n\r\n  return { run: throttledFn }\r\n}\r\n","import { canUseDom } from './can-use-dom'\n\ntype ScrollElement = HTMLElement | Window\n\nconst defaultRoot = canUseDom ? window : undefined\n\nconst overflowStylePatterns = ['scroll', 'auto', 'overlay']\n\nfunction isElement(node: Element) {\n  const ELEMENT_NODE_TYPE = 1\n  return node.nodeType === ELEMENT_NODE_TYPE\n}\nexport function getScrollParent(\n  el: Element,\n  root: ScrollElement | null | undefined = defaultRoot\n): Window | Element | null | undefined {\n  let node = el\n\n  while (node && node !== root && isElement(node)) {\n    if (node === document.body) {\n      return root\n    }\n    const { overflowY } = window.getComputedStyle(node)\n    if (\n      overflowStylePatterns.includes(overflowY) &&\n      node.scrollHeight > node.clientHeight\n    ) {\n      return node\n    }\n    node = node.parentNode as Element\n  }\n  return root\n}\n","<template>\r\n  <span v-if=\"!hasMore\">\r\n    {{ locale.InfiniteScroll.noMore }}\r\n  </span>\r\n\r\n  <span v-else-if=\"failed\">\r\n    <span :class=\"`${classPrefix}-failed-text`\">\r\n      {{ locale.InfiniteScroll.failedToLoad }}\r\n    </span>\r\n    <a @click=\"retry\">\r\n      {{ locale.InfiniteScroll.retry }}\r\n    </a>\r\n  </span>\r\n\r\n  <template v-else>\r\n    <span>{{ locale.common.loading }}</span>\r\n    <DotLoading />\r\n  </template>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport DotLoading from '../dot-loading/index.vue'\r\n\r\nconst classPrefix = 'adm-infinite-scroll'\r\n\r\ninterface Props {\r\n  hasMore: boolean\r\n  failed: boolean\r\n  retry: () => void\r\n}\r\n\r\ndefineProps<Props>()\r\n\r\nconst { locale } = useConfig()\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './infinite-scroll.less';\r\n</style>\r\n","<template>\r\n  <div :class=\"classPrefix\" ref=\"elementRef\">\r\n    <slot name=\"content\" :hasMore=\"hasMore\" :failed=\"failed\" :retry=\"retry\">\r\n      <InfiniteScrollContent :hasMore=\"hasMore\" :failed=\"failed\" :retry=\"retry\" />\r\n    </slot>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, watch, onMounted, onUnmounted, nextTick } from 'vue'\r\n\r\nimport { useLockFn, useThrottleFn } from '../../utils/ahooks'\r\nimport { getScrollParent } from '../../utils/get-scroll-parent'\r\nimport InfiniteScrollContent from './infinite-scroll-content.vue'\r\n\r\nfunction isWindow(element: HTMLElement | Element | Window): element is Window {\r\n  return element === window\r\n}\r\n\r\nconst classPrefix = 'adm-infinite-scroll'\r\n\r\nexport interface InfiniteScrollProps {\r\n  loadMore: (isRetry: boolean) => Promise<void>\r\n  hasMore: boolean\r\n  threshold?: number\r\n}\r\n\r\nconst props = withDefaults(defineProps<InfiniteScrollProps>(), {\r\n  threshold: 250,\r\n})\r\n\r\n// 响应式状态\r\nconst failed = ref(false)\r\nconst elementRef = ref<HTMLDivElement>()\r\nconst flag = ref({})\r\nconst nextFlagRef = ref(flag.value)\r\nconst scrollParent = ref<Window | Element | null>()\r\n\r\n// 使用 useLockFn 防止重复请求\r\nconst doLoadMore = useLockFn(async (isRetry: boolean) => {\r\n  try {\r\n    await props.loadMore(isRetry)\r\n  } catch (e) {\r\n    failed.value = true\r\n    throw e\r\n  }\r\n})\r\n\r\n// 检查是否需要加载更多\r\nconst checkLoadMore = async () => {\r\n  if (nextFlagRef.value !== flag.value) return\r\n  if (!props.hasMore) return\r\n\r\n  const element = elementRef.value\r\n  if (!element) return\r\n  if (!element.offsetParent) return\r\n\r\n  const parent = getScrollParent(element)\r\n  scrollParent.value = parent\r\n  if (!parent) return\r\n\r\n  const rect = element.getBoundingClientRect()\r\n  const elementTop = rect.top\r\n  const current = isWindow(parent) ? window.innerHeight : parent.getBoundingClientRect().bottom\r\n\r\n  if (current >= elementTop - props.threshold) {\r\n    const nextFlag = {}\r\n    nextFlagRef.value = nextFlag\r\n    try {\r\n      await doLoadMore(false)\r\n      flag.value = nextFlag\r\n    } catch (e) {\r\n      // 错误已在 doLoadMore 中处理\r\n      console.error('Load more failed:', e)\r\n    }\r\n  }\r\n}\r\n\r\n// 使用 useThrottleFn 节流\r\nconst { run: check } = useThrottleFn(checkLoadMore, {\r\n  wait: 100,\r\n  leading: true,\r\n  trailing: true,\r\n})\r\n\r\n// 重试函数\r\nconst retry = async () => {\r\n  failed.value = false\r\n  try {\r\n    await doLoadMore(true)\r\n    flag.value = nextFlagRef.value\r\n  } catch (e) {\r\n    console.error('Retry failed:', e)\r\n    // 错误已在 doLoadMore 中处理\r\n  }\r\n}\r\n\r\n// 监听内容变化触发检查\r\nwatch(\r\n  () => [props.hasMore, props.threshold],\r\n  () => {\r\n    nextTick(() => {\r\n      check()\r\n    })\r\n  },\r\n)\r\n\r\n// 监听滚动事件\r\nlet removeScrollListener: (() => void) | null = null\r\n\r\nwatch(scrollParent, (newParent) => {\r\n  // 移除旧的监听器\r\n  if (removeScrollListener) {\r\n    removeScrollListener()\r\n    removeScrollListener = null\r\n  }\r\n\r\n  // 添加新的监听器\r\n  if (newParent) {\r\n    const onScroll = () => {\r\n      check()\r\n    }\r\n    newParent.addEventListener('scroll', onScroll)\r\n    removeScrollListener = () => {\r\n      newParent.removeEventListener('scroll', onScroll)\r\n    }\r\n  }\r\n})\r\n\r\n// 组件挂载后检查\r\nonMounted(() => {\r\n  nextTick(() => {\r\n    check()\r\n  })\r\n})\r\n\r\n// 组件卸载时清理\r\nonUnmounted(() => {\r\n  if (removeScrollListener) {\r\n    removeScrollListener()\r\n  }\r\n})\r\n\r\n// 暴露方法\r\ndefineExpose({\r\n  retry,\r\n  check,\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './infinite-scroll.less';\r\n</style>\r\n","<template>\r\n  <div\r\n    :class=\"[\r\n      classPrefix,\r\n      {\r\n        [`${classPrefix}-disabled`]: disabled,\r\n      },\r\n    ]\"\r\n    :style=\"nativeStyle\"\r\n  >\r\n    <div :class=\"`${classPrefix}-prefix`\" v-if=\"$slots.prefix\">\r\n      <slot name=\"prefix\"></slot>\r\n    </div>\r\n    <input\r\n      ref=\"nativeInputRef\"\r\n      :class=\"`${classPrefix}-element`\"\r\n      :value=\"currentValue\"\r\n      :id=\"id\"\r\n      :placeholder=\"placeholder\"\r\n      :disabled=\"disabled\"\r\n      :readonly=\"readOnly\"\r\n      :maxlength=\"maxLength\"\r\n      :minlength=\"minLength\"\r\n      :max=\"max\"\r\n      :min=\"min\"\r\n      :autocomplete=\"autoComplete\"\r\n      :autofocus=\"autoFocus\"\r\n      :pattern=\"pattern\"\r\n      :inputmode=\"inputMode\"\r\n      :type=\"type\"\r\n      :name=\"name\"\r\n      :autocapitalize=\"autoCapitalize\"\r\n      :autocorrect=\"autoCorrect\"\r\n      :step=\"step\"\r\n      :role=\"role\"\r\n      :aria-label=\"ariaLabel\"\r\n      @input=\"handleInput\"\r\n      @focus=\"handleFocus\"\r\n      @blur=\"handleBlur\"\r\n      @paste=\"handlePaste\"\r\n      @keydown=\"handleKeyDown\"\r\n      @keyup=\"handleKeyUp\"\r\n      @compositionstart=\"handleCompositionStart\"\r\n      @compositionend=\"handleCompositionEnd\"\r\n      @click=\"handleClick\"\r\n    />\r\n    <div :class=\"`${classPrefix}-subfix`\" v-if=\"$slots.subfix\">\r\n      <slot name=\"subfix\"></slot>\r\n    </div>\r\n    <div\r\n      v-if=\"shouldShowClear\"\r\n      :class=\"`${classPrefix}-clear`\"\r\n      :aria-label=\"clearAriaLabel\"\r\n      @mousedown=\"handleClearMouseDown\"\r\n      @click=\"handleClear\"\r\n    >\r\n      <component :is=\"clearIcon\" v-if=\"props.clearIcon\" />\r\n      <svg viewBox=\"0 0 1024 1024\" width=\"1.5em\" height=\"1.5em\" fill=\"currentColor\" v-else>\r\n        <path\r\n          d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm165.4 618.2l-66-.3L512 563.4l-99.3 118.4-66.1.3c-4.4 0-8-3.5-8-8 0-1.9.7-3.7 1.9-5.2l130.1-155L340.5 359a8.32 8.32 0 0 1-1.9-5.2c0-4.4 3.6-8 8-8l66.1.3L512 464.6l99.3-118.4 66-.3c4.4 0 8 3.5 8 8 0 1.9-.7 3.7-1.9 5.2L553.5 514l130 155c1.2 1.5 1.9 3.3 1.9 5.2 0 4.4-3.6 8-8 8z\"\r\n        />\r\n      </svg>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, onMounted, onUnmounted, ref } from 'vue'\r\nimport { bound } from '../../utils/bound'\r\nimport { isIOS } from '../../utils/validate'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport type { InputProps } from './types'\r\n\r\nconst classPrefix = 'adm-input'\r\n\r\nconst props = withDefaults(defineProps<InputProps>(), {\r\n  defaultValue: '',\r\n  onlyShowClearWhenFocus: true,\r\n  type: 'text',\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:value': [value: string]\r\n  change: [value: string]\r\n  focus: [e: FocusEvent]\r\n  blur: [e: FocusEvent]\r\n  clear: []\r\n  'enter-press': [e: KeyboardEvent]\r\n  paste: [e: ClipboardEvent]\r\n  keydown: [e: KeyboardEvent]\r\n  keyup: [e: KeyboardEvent]\r\n  'composition-start': [e: CompositionEvent]\r\n  'composition-end': [e: CompositionEvent]\r\n  click: [e: MouseEvent]\r\n}>()\r\n\r\n// Refs\r\nconst nativeInputRef = ref<HTMLInputElement>()\r\nconst hasFocus = ref(false)\r\nconst compositionStartRef = ref(false)\r\n\r\n// Get config\r\nconst { locale } = useConfig()\r\n\r\n// Internal value state for controlled/uncontrolled\r\nconst internalValue = ref(props.defaultValue || '')\r\nconst isControlled = computed(() => props.value !== undefined)\r\n\r\nconst currentValue = computed({\r\n  get: () => (isControlled.value ? props.value || '' : internalValue.value),\r\n  set: (val: string) => {\r\n    if (!isControlled.value) {\r\n      internalValue.value = val\r\n    }\r\n    emit('update:value', val)\r\n    emit('change', val)\r\n    // props.onChange?.(val)\r\n  },\r\n})\r\n\r\n// Computed\r\nconst clearAriaLabel = computed(() => locale.Input?.clear || 'clear')\r\n\r\nconst nativeStyle = computed(() => {\r\n  const style: Record<string, string> = {}\r\n\r\n  if (props['--font-size']) style['--font-size'] = props['--font-size']\r\n  if (props['--color']) style['--color'] = props['--color']\r\n  if (props['--placeholder-color']) style['--placeholder-color'] = props['--placeholder-color']\r\n  if (props['--text-align']) style['--text-align'] = props['--text-align']\r\n\r\n  return style\r\n})\r\n\r\nconst shouldShowClear = computed(() => {\r\n  if (!props.clearable || !currentValue.value || props.readOnly) return false\r\n  if (props.onlyShowClearWhenFocus) {\r\n    return hasFocus.value\r\n  } else {\r\n    return true\r\n  }\r\n})\r\n\r\nconst ariaLabel = computed(() => props.ariaLabel || '')\r\n\r\n// Value validation for number type\r\nfunction checkValue() {\r\n  let nextValue = currentValue.value\r\n  if (props.type === 'number') {\r\n    const boundValue =\r\n      nextValue && bound(parseFloat(nextValue as string), props.min, props.max).toString()\r\n    // fix the display issue of numbers starting with 0\r\n    if (Number(nextValue) !== Number(boundValue)) {\r\n      nextValue = boundValue\r\n    }\r\n  }\r\n  if (nextValue !== currentValue.value) {\r\n    currentValue.value = nextValue as string\r\n  }\r\n}\r\n\r\n// Event handlers\r\nconst handleInput = (e: Event) => {\r\n  const target = e.target as HTMLInputElement\r\n  currentValue.value = target.value\r\n}\r\n\r\nconst handleFocus = (e: FocusEvent) => {\r\n  hasFocus.value = true\r\n  emit('focus', e)\r\n  // props.onFocus?.(e)\r\n}\r\n\r\nconst handleBlur = (e: FocusEvent) => {\r\n  hasFocus.value = false\r\n  checkValue()\r\n  emit('blur', e)\r\n  // props.onBlur?.(e)\r\n}\r\n\r\nconst handlePaste = (e: ClipboardEvent) => {\r\n  emit('paste', e)\r\n  // props.onPaste?.(e)\r\n}\r\n\r\nconst handleKeyDown = (e: KeyboardEvent) => {\r\n  if (props.onEnterPress && (e.code === 'Enter' || e.keyCode === 13)) {\r\n    emit('enter-press', e)\r\n    // props.onEnterPress?.(e)\r\n  }\r\n  emit('keydown', e)\r\n  // props.onKeyDown?.(e)\r\n}\r\n\r\nconst handleKeyUp = (e: KeyboardEvent) => {\r\n  emit('keyup', e)\r\n  // props.onKeyUp?.(e)\r\n}\r\n\r\nconst handleCompositionStart = (e: CompositionEvent) => {\r\n  compositionStartRef.value = true\r\n  emit('composition-start', e)\r\n  // props.onCompositionStart?.(e)\r\n}\r\n\r\nconst handleCompositionEnd = (e: CompositionEvent) => {\r\n  compositionStartRef.value = false\r\n  emit('composition-end', e)\r\n  // props.onCompositionEnd?.(e)\r\n}\r\n\r\nconst handleClick = (e: MouseEvent) => {\r\n  emit('click', e)\r\n  // props.onClick?.(e)\r\n}\r\n\r\nconst handleClearMouseDown = (e: MouseEvent) => {\r\n  e.preventDefault()\r\n}\r\n\r\nconst handleClear = () => {\r\n  currentValue.value = ''\r\n  emit('clear')\r\n  // props.onClear?.()\r\n\r\n  // https://github.com/ant-design/ant-design-mobile/issues/5212\r\n  if (isIOS() && compositionStartRef.value) {\r\n    compositionStartRef.value = false\r\n    nativeInputRef.value?.blur()\r\n  }\r\n}\r\n\r\n// Handle enterKeyHint attribute\r\nconst updateEnterKeyHint = () => {\r\n  const element = nativeInputRef.value\r\n  if (!props.enterKeyHint || !element) return\r\n\r\n  element.setAttribute('enterkeyhint', props.enterKeyHint)\r\n}\r\n\r\nconst removeEnterKeyHint = () => {\r\n  const element = nativeInputRef.value\r\n  if (!element) return\r\n  element.removeAttribute('enterkeyhint')\r\n}\r\n\r\nonMounted(() => {\r\n  updateEnterKeyHint()\r\n})\r\n\r\nonUnmounted(() => {\r\n  removeEnterKeyHint()\r\n})\r\n\r\n// Watch enterKeyHint changes\r\n// const unwatchEnterKeyHint = computed(() => {\r\n//   updateEnterKeyHint()\r\n//   return props.enterKeyHint\r\n// })\r\n\r\n// Expose methods\r\nconst clear = () => {\r\n  handleClear()\r\n}\r\n\r\nconst focus = () => {\r\n  nativeInputRef.value?.focus()\r\n}\r\n\r\nconst blur = () => {\r\n  nativeInputRef.value?.blur()\r\n}\r\n\r\nconst nativeElement = computed(() => {\r\n  return nativeInputRef.value ?? null\r\n})\r\n\r\ndefineExpose({\r\n  clear,\r\n  focus,\r\n  blur,\r\n  get nativeElement() {\r\n    return nativeElement.value\r\n  },\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n@import './input.less';\r\n</style>\r\n","<template>\r\n  <Button\r\n    :key=\"props.action.key\"\r\n    @click=\"handleClick\"\r\n    :class=\"[\r\n      'adm-modal-button',\r\n      (props.action.primary && 'adm-modal-button-primary') as string,\r\n      props.action.className as string,\r\n    ]\"\r\n    :fill=\"props.action.primary ? 'solid' : 'none'\"\r\n    size=\"middle\"\r\n    block\r\n    :color=\"props.action.danger ? 'danger' : 'primary'\"\r\n    :loading=\"loading\"\r\n    :disabled=\"props.action.disabled || loading\"\r\n    :style=\"props.action.style\"\r\n  >\r\n    <component v-if=\"isVNode(props.action.text)\" :is=\"props.action.text\" />\r\n    <template v-else>{{ props.action.text }}</template>\r\n  </Button>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { isVNode, ref } from 'vue'\r\nimport type { Action } from './types.ts'\r\nimport Button from '../button/index.vue'\r\n\r\nexport interface ModalActionButtonProps {\r\n  action: Action\r\n}\r\n\r\nconst props = defineProps<ModalActionButtonProps>()\r\n\r\nconst emit = defineEmits<{\r\n  action: [action: Action]\r\n}>()\r\n\r\nconst loading = ref(false)\r\n\r\n// const buttonClass = computed(() => {\r\n//   const classes = ['adm-modal-button']\r\n//   if (props.action.primary) {\r\n//     classes.push('adm-modal-button-primary')\r\n//   }\r\n//   if (props.action.danger) {\r\n//     classes.push('adm-modal-button-danger')\r\n//   }\r\n//   return classes\r\n// })\r\n\r\nconst handleClick = async () => {\r\n  if (loading.value) return\r\n\r\n  try {\r\n    loading.value = true\r\n\r\n    // 执行 action 的 onClick\r\n    if (props.action.onClick) {\r\n      await props.action.onClick()\r\n    }\r\n\r\n    // 发送 action 事件\r\n    emit('action', props.action)\r\n  } catch (error) {\r\n    console.error('Modal action error:', error)\r\n  } finally {\r\n    loading.value = false\r\n  }\r\n}\r\n</script>\r\n","<template>\r\n  <CenterPopup v-bind=\"centerPopupProps\">\r\n    <div v-if=\"props.header\" :class=\"cls('header')\">\r\n      <AutoCenter>\r\n        <slot name=\"header\">\r\n          <component v-if=\"isVNode(props.header)\" :is=\"props.header\" />\r\n          <template v-else>{{ props.header }}</template>\r\n        </slot>\r\n      </AutoCenter>\r\n    </div>\r\n    <template v-else-if=\"$slots.header\">\r\n      <AutoCenter>\r\n        <slot name=\"header\"></slot>\r\n      </AutoCenter>\r\n    </template>\r\n\r\n    <div v-if=\"props.title\" :class=\"cls('title')\">\r\n      <component v-if=\"isVNode(props.title)\" :is=\"props.title\" />\r\n      <template v-else>{{ props.title }}</template>\r\n    </div>\r\n    <template v-else-if=\"$slots.title\">\r\n      <slot name=\"title\"></slot>\r\n    </template>\r\n\r\n    <div v-if=\"props.image\" :class=\"cls('image-container')\">\r\n      <template v-if=\"Array.isArray(props.image)\">\r\n        <Image\r\n          v-for=\"(img, index) in props.image\"\r\n          :key=\"index\"\r\n          :src=\"img\"\r\n          alt=\"modal header image\"\r\n          width=\"100%\"\r\n        />\r\n      </template>\r\n      <template v-else>\r\n        <Image :src=\"props.image\" alt=\"modal header image\" width=\"100%\" />\r\n      </template>\r\n    </div>\r\n\r\n    <div :class=\"cls('content')\" v-if=\"props.content || $slots.content\">\r\n      <AutoCenter v-if=\"typeof props.content === 'string'\">\r\n        {{ props.content }}\r\n      </AutoCenter>\r\n      <component v-else-if=\"isVNode(props.content)\" :is=\"props.content\" />\r\n      <template v-else-if=\"$slots.content\">\r\n        <slot name=\"content\"></slot>\r\n      </template>\r\n      <template v-else>{{ props.content }}</template>\r\n    </div>\r\n\r\n    <Space\r\n      :direction=\"props.actionDirection\"\r\n      block\r\n      :class=\"[cls('footer'), props.actions.length === 0 && cls('footer-empty')]\"\r\n      v-if=\"props.actions && props.actions.length > 0\"\r\n    >\r\n      <ModalActionButton\r\n        v-for=\"(action, index) in props.actions\"\r\n        :key=\"action.key\"\r\n        :action=\"action\"\r\n        @action=\"onAction(action, index)\"\r\n      />\r\n    </Space>\r\n    <template v-else-if=\"$slots.footer\">\r\n      <div :class=\"cls('footer')\">\r\n        <slot name=\"footer\"></slot>\r\n      </div>\r\n    </template>\r\n  </CenterPopup>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport interface ModalProps {\r\n  // 从 CenterPopupProps 继承的属性\r\n  afterClose?: () => void\r\n  afterShow?: () => void\r\n  bodyClassName?: string\r\n  bodyStyle?: Record<string, string | number>\r\n  destroyOnClose?: boolean\r\n  disableBodyScroll?: boolean\r\n  forceRender?: boolean\r\n  getContainer?: string | HTMLElement | (() => HTMLElement) | null\r\n  maskClassName?: string\r\n  maskStyle?: Record<string, string | number>\r\n  stopPropagation?: string[]\r\n  visible?: boolean\r\n  // Modal 特有属性\r\n  image?: string | string[]\r\n  header?: ContentType\r\n  title?: ContentType\r\n  content?: ContentType\r\n  actionDirection?: 'horizontal' | 'vertical'\r\n  actions?: Action[]\r\n  onAction?: (action: Action, index: number) => void | Promise<void>\r\n  onClose?: () => void\r\n  closeOnAction?: boolean\r\n  closeOnMaskClick?: boolean\r\n  showCloseButton?: boolean\r\n  // 添加常用的文本属性\r\n  confirmText?: string\r\n  cancelText?: string\r\n  // NativeProps\r\n  style?: Record<string, string | number>\r\n  className?: string\r\n}\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, isVNode, useAttrs } from 'vue'\r\nimport AutoCenter from '../auto-center/index.vue'\r\nimport CenterPopup from '../center-popup/center-popup.vue'\r\nimport Image from '../image/index.vue'\r\nimport Space from '../space/index.vue'\r\nimport ModalActionButton from './modal-action-button.vue'\r\nimport type { Action, ContentType } from './types.ts'\r\n\r\n// 声明 emits\r\nconst emit = defineEmits<{\r\n  confirm: []\r\n  cancel: []\r\n}>()\r\n\r\nfunction cls(name: string = '') {\r\n  return 'adm-modal' + (name && '-') + name\r\n}\r\n\r\nconst onAction = async (action: Action, index: number) => {\r\n  // action.onClick 已经在 ModalActionButton 中执行了，这里只执行 props.onAction\r\n  await props.onAction?.(action, index)\r\n\r\n  // 根据 action 类型触发对应事件\r\n  if (action.key === 'confirm') {\r\n    emit('confirm')\r\n  } else if (action.key === 'cancel') {\r\n    emit('cancel')\r\n  }\r\n  if (props.closeOnAction) {\r\n    props.onClose?.()\r\n  }\r\n}\r\n\r\nconst props = withDefaults(defineProps<ModalProps>(), {\r\n  actions: () => [] as Action[],\r\n  closeOnAction: false,\r\n  closeOnMaskClick: false,\r\n  getContainer: null,\r\n  visible: false,\r\n  disableBodyScroll: true,\r\n  destroyOnClose: false,\r\n  forceRender: false,\r\n  showCloseButton: false,\r\n  actionDirection: 'vertical',\r\n  confirmText: '确定',\r\n  cancelText: '取消',\r\n  style: () => ({}),\r\n  className: '',\r\n  bodyClassName: '',\r\n  bodyStyle: () => ({}),\r\n  maskClassName: '',\r\n  maskStyle: () => ({}),\r\n  stopPropagation: () => ['click'],\r\n})\r\n\r\n// 计算合并后的样式\r\nconst mergedStyle = computed(() => {\r\n  return {\r\n    ...props.style,\r\n  }\r\n})\r\n\r\n// 禁用属性自动继承\r\ndefineOptions({\r\n  inheritAttrs: false,\r\n})\r\n\r\nconst attrs = useAttrs()\r\n\r\n// 提取 CenterPopup 相关的属性，确保 visible 正确传递\r\nconst centerPopupProps = computed(() => ({\r\n  afterClose: props.afterClose,\r\n  afterShow: props.afterShow,\r\n  showCloseButton: props.showCloseButton,\r\n  closeOnMaskClick: props.closeOnMaskClick,\r\n  onClose: props.onClose,\r\n  visible: props.visible, // 确保这里正确传递\r\n  getContainer: props.getContainer,\r\n  bodyStyle: props.bodyStyle,\r\n  bodyClassName: [\r\n    cls('body'),\r\n    (props.image && cls('with-image')) || '',\r\n    props.bodyClassName || '',\r\n  ].join(' '),\r\n  maskStyle: props.maskStyle,\r\n  maskClassName: props.maskClassName,\r\n  stopPropagation: props.stopPropagation,\r\n  disableBodyScroll: props.disableBodyScroll,\r\n  destroyOnClose: props.destroyOnClose,\r\n  forceRender: props.forceRender,\r\n  className: [cls(), props.className].join(' '),\r\n  style: mergedStyle.value,\r\n  ...attrs,\r\n}))\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.adm-modal-footer {\r\n  user-select: none;\r\n  padding: 8px 12px 12px;\r\n  &-empty {\r\n    padding: 0;\r\n    height: 8px;\r\n  }\r\n  &.adm-space {\r\n    --gap-vertical: 20px;\r\n  }\r\n  .adm-modal-button {\r\n    font-size: var(--adm-font-size-10);\r\n    line-height: 25px;\r\n    &:not(.adm-modal-button-primary) {\r\n      // padding-top: 0;\r\n      // padding-bottom: 0;\r\n      &::before {\r\n        display: none;\r\n      }\r\n      &:active {\r\n        opacity: 0.7;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>\r\n","import { createApp, h, ref } from 'vue'\r\nimport type { ModalProps } from './modal.vue'\r\nimport Modal from './modal.vue'\r\n\r\nexport type ModalShowProps = Omit<ModalProps, 'visible' | 'destroyOnClose' | 'forceRender'>\r\n\r\nexport type ModalShowHandler = {\r\n  close: () => void\r\n}\r\n\r\nexport const closeFnSet = new Set<() => void>()\r\n\r\nexport function show(props: ModalShowProps): ModalShowHandler {\r\n  const container = document.createElement('div')\r\n  document.body.appendChild(container)\r\n\r\n  // 创建响应式的 visible 状态\r\n  const visible = ref(true)\r\n  let isDestroyed = false // 添加标记防止重复销毁\r\n\r\n  const close = () => {\r\n    if (isDestroyed) return // 防止重复调用\r\n\r\n    visible.value = false // 先设置为 false 触发关闭动画\r\n\r\n    // 等待动画完成后再卸载\r\n    setTimeout(() => {\r\n      if (!isDestroyed) {\r\n        isDestroyed = true\r\n        app.unmount()\r\n        // 检查 container 是否还在 DOM 中\r\n        if (container.parentNode) {\r\n          container.parentNode.removeChild(container)\r\n        }\r\n        closeFnSet.delete(close)\r\n      }\r\n    }, 300)\r\n  }\r\n\r\n  const app = createApp({\r\n    setup() {\r\n      return () =>\r\n        h(Modal, {\r\n          ...props,\r\n          visible: visible.value,\r\n          onClose: () => {\r\n            props.onClose?.()\r\n            close()\r\n          },\r\n          afterClose: () => {\r\n            props.afterClose?.()\r\n          },\r\n        })\r\n    },\r\n  })\r\n\r\n  app.mount(container)\r\n\r\n  const handler: ModalShowHandler = { close }\r\n  closeFnSet.add(close)\r\n\r\n  return handler\r\n}\r\n","import { getDefaultConfig } from '../config-provider/types.ts'\r\nimport type { ModalProps } from './modal.vue'\r\nimport { show } from './show.ts'\r\nimport type { ContentType } from './types.ts'\r\n\r\nexport type ModalAlertProps = Omit<ModalProps, 'visible' | 'closeOnAction' | 'actions'> & {\r\n  confirmText?: ContentType\r\n  onConfirm?: () => void | Promise<void>\r\n}\r\n\r\nexport function alert(p: ModalAlertProps): Promise<void> {\r\n  const defaultProps = {\r\n    confirmText: getDefaultConfig().locale.Modal.ok,\r\n  }\r\n  const props = { ...defaultProps, ...p }\r\n\r\n  return new Promise<void>((resolve) => {\r\n    show({\r\n      ...props,\r\n      closeOnAction: true,\r\n      actions: [\r\n        {\r\n          key: 'confirm',\r\n          text: props.confirmText,\r\n          primary: true,\r\n        },\r\n      ],\r\n      onAction: props.onConfirm,\r\n      onClose: () => {\r\n        props.onClose?.()\r\n        resolve()\r\n      },\r\n    })\r\n  })\r\n}\r\n","import { closeFnSet } from './show'\r\n\r\nexport function clear() {\r\n  closeFnSet.forEach(close => {\r\n    close()\r\n  })\r\n}\r\n","import { getDefaultConfig } from '../config-provider/types.ts'\r\nimport type { ModalProps } from './modal.vue'\r\nimport { show } from './show.ts'\r\nimport type { ContentType } from './types.ts'\r\n\r\nexport type ModalConfirmProps = Omit<ModalProps, 'visible' | 'closeOnAction' | 'actions'> & {\r\n  confirmText?: ContentType\r\n  cancelText?: ContentType\r\n  onConfirm?: () => void | Promise<void>\r\n  onCancel?: () => void | Promise<void>\r\n}\r\n\r\nconst defaultProps = {\r\n  confirmText: '确认',\r\n  cancelText: '取消',\r\n}\r\n\r\nexport function confirm(p: ModalConfirmProps): Promise<boolean> {\r\n  const { locale } = getDefaultConfig()\r\n  const props = {\r\n    ...defaultProps,\r\n    confirmText: locale.common.confirm,\r\n    cancelText: locale.common.cancel,\r\n    ...p,\r\n  }\r\n\r\n  return new Promise<boolean>((resolve) => {\r\n    show({\r\n      ...props,\r\n      closeOnAction: true,\r\n      onClose: () => {\r\n        props.onClose?.()\r\n        resolve(false)\r\n      },\r\n      actions: [\r\n        {\r\n          key: 'confirm',\r\n          text: props.confirmText,\r\n          primary: true,\r\n          onClick: async () => {\r\n            await props.onConfirm?.()\r\n            resolve(true)\r\n          },\r\n        },\r\n        {\r\n          key: 'cancel',\r\n          text: props.cancelText,\r\n          onClick: async () => {\r\n            await props.onCancel?.()\r\n            resolve(false)\r\n          },\r\n        },\r\n      ],\r\n    })\r\n  })\r\n}\r\n","import './modal.less'\r\nimport { attachPropertiesToComponent } from '../../utils/attach-properties-to-component.ts'\r\nimport { alert } from './alert'\r\nimport { clear } from './clear.ts'\r\nimport { confirm } from './confirm'\r\nimport Modal from './modal.vue'\r\nimport { show } from './show.ts'\r\n\r\nexport type { ModalAlertProps } from './alert'\r\nexport type { ModalConfirmProps } from './confirm'\r\nexport type { ModalProps } from './modal.vue'\r\nexport type { ModalShowHandler, ModalShowProps } from './show.ts'\r\nexport type { Action } from './types.ts'\r\n\r\n// 导出单独的方法\r\nexport { alert, clear, confirm, show }\r\n\r\n// 导出带有方法的组件\r\nexport default attachPropertiesToComponent(Modal, {\r\n  show,\r\n  alert,\r\n  confirm,\r\n  clear,\r\n})\r\n","<template>\r\n  <div :class=\"classPrefix\" :style=\"nativeStyle\">\r\n    <div :class=\"`${classPrefix}-left`\" role=\"button\">\r\n      <div v-if=\"back !== null\" :class=\"`${classPrefix}-back`\" @click=\"onLeftBack\">\r\n        <span v-if=\"mergedBackIcon\" :class=\"`${classPrefix}-back-arrow`\">\r\n          <component :is=\"mergedBackIcon\" />\r\n        </span>\r\n        <span aria-hidden=\"true\">{{ back }}</span>\r\n      </div>\r\n      <slot name=\"left\">{{ left }}</slot>\r\n    </div>\r\n    <div :class=\"`${classPrefix}-title`\">\r\n      <slot />\r\n    </div>\r\n    <div :class=\"`${classPrefix}-right`\">\r\n      <slot name=\"right\">{{ right }}</slot>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, useAttrs, type Component, type CSSProperties } from 'vue'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport { LeftOutline } from 'ant-mobile-icons-vue3'\r\n\r\nconst classPrefix = 'adm-nav-bar'\r\n\r\ninterface NavBarProps {\r\n  back?: string\r\nbackIcon?: boolean | Component\r\n  /** @deprecated use backIcon instead */\r\n  backArrow?: boolean | Component\r\n  left?: Component\r\n  right?: Component\r\n  onBack?: () => void\r\n}\r\n\r\ndefineOptions({ inheritAttrs: false })\r\n\r\nconst props = withDefaults(defineProps<NavBarProps>(), {\r\n  backIcon: undefined,\r\n  backArrow: undefined,\r\n  left: undefined,\r\n  right: undefined,\r\n  onBack: () => {},\r\n  back: undefined,\r\n})\r\n\r\nconst config = useConfig().navBar || {}\r\n\r\nconst defaultBackIcon = LeftOutline\r\n\r\nfunction resolveIcon(val: boolean | Component | null): Component | null | undefined | boolean {\r\n  if (val === true) return config.backIcon || defaultBackIcon\r\n  if (val === false || val == null) return null\r\n  return val\r\n}\r\n\r\nconst mergedBackIcon = computed(() => {\r\n  // 优先级：backArrow > backIcon > config.backIcon > defaultBackIcon\r\n  if (props.backArrow !== undefined) {\r\n    return resolveIcon(props.backArrow)\r\n  }\r\n  if (props.backIcon !== undefined) {\r\n    return resolveIcon(props.backIcon)\r\n  }\r\n  return config.backIcon || defaultBackIcon\r\n})\r\n\r\nconst back = computed(() => props.back)\r\nconst left = computed(() => props.left)\r\nconst right = computed(() => props.right)\r\n\r\nfunction onLeftBack() {\r\n  props.onBack?.()\r\n}\r\n\r\nconst attrs = useAttrs()\r\nconst nativeStyle = computed(() => {\r\n  // 合并用户传入的 style 和 CSS 变量\r\n  return (attrs.style as CSSProperties) || {}\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n</style>\r\n","<template>\r\n  <div\r\n    v-if=\"visible\"\r\n    :class=\"[\r\n      classPrefix,\r\n      `${classPrefix}-${mergedProps.color}`,\r\n      `${classPrefix}-${mergedProps.shape}`,\r\n      { [`${classPrefix}-wrap`]: mergedProps.wrap },\r\n      { [`${classPrefix}-bordered`]: mergedProps.bordered === true },\r\n      { [`${classPrefix}-without-border`]: mergedProps.bordered === false },\r\n    ]\"\r\n    :style=\"nativeStyle\"\r\n    @click=\"onClick\"\r\n  >\r\n    <span v-if=\"mergedProps.icon\" :class=\"`${classPrefix}-left`\">\r\n      <component :is=\"mergedProps.icon\" />\r\n    </span>\r\n    <span ref=\"containerRef\" :class=\"`${classPrefix}-content`\">\r\n      <span ref=\"textRef\" :class=\"`${classPrefix}-content-inner`\" @transitionend=\"onTransitionEnd\">\r\n        <slot>{{ mergedProps.content }}</slot>\r\n      </span>\r\n    </span>\r\n    <span v-if=\"mergedProps.closeable || !!$slots.extra\" :class=\"`${classPrefix}-right`\">\r\n      <slot name=\"extra\"></slot>\r\n      <div v-if=\"mergedProps.closeable\" :class=\"`${classPrefix}-close`\" @click.stop=\"handleClose\">\r\n        <component :is=\"mergedProps.closeIcon\" />\r\n      </div>\r\n    </span>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport {\r\n  ref,\r\n  computed,\r\n  watch,\r\n  onMounted,\r\n  nextTick,\r\n  useAttrs,\r\n  type Component,\r\n  type CSSProperties,\r\n} from 'vue'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport { CloseOutline, SoundOutline } from 'ant-mobile-icons-vue3'\r\n\r\nconst classPrefix = 'adm-notice-bar'\r\n\r\ninterface NoticeBarProps {\r\n  color?: 'default' | 'alert' | 'error' | 'success' | 'info'\r\n  delay?: number\r\n  speed?: number\r\n  content?: Component | string\r\n  closeable?: boolean\r\n  closeIcon?: Component\r\n  onClose?: () => void\r\n  onClick?: () => void\r\n  extra?: Component\r\n  icon?: Component | false\r\n  wrap?: boolean\r\n  shape?: 'rectangular' | 'neutral' | 'rounded'\r\n  bordered?: 'block' | boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<NoticeBarProps>(), {\r\n  color: 'default',\r\n  delay: 2000,\r\n  speed: 50,\r\n  icon: SoundOutline,\r\n  wrap: false,\r\n  shape: 'rectangular',\r\n  bordered: 'block',\r\n})\r\n\r\nconst config = useConfig().noticeBar || {}\r\nconst mergedProps = computed(() => {\r\n  return {\r\n    ...config,\r\n    ...props,\r\n    closeIcon: props.closeIcon || config.closeIcon || CloseOutline,\r\n  }\r\n})\r\n\r\nconst visible = ref(true)\r\nconst containerRef = ref<HTMLElement>()\r\nconst textRef = ref<HTMLElement>()\r\n\r\nconst attrs = useAttrs()\r\nconst nativeStyle = computed(() => (attrs.style as CSSProperties) || {})\r\n\r\n// 滚动动画逻辑\r\nconst animating = ref(false)\r\nconst delayLock = ref(true)\r\n\r\nfunction start() {\r\n  if (delayLock.value || mergedProps.value.wrap) return\r\n  const container = containerRef.value\r\n  const text = textRef.value\r\n  if (!container || !text) return\r\n  if (container.offsetWidth >= text.offsetWidth) {\r\n    animating.value = false\r\n    text.style.removeProperty('transition-duration')\r\n    text.style.removeProperty('transform')\r\n    return\r\n  }\r\n  if (animating.value) return\r\n  const initial = !text.style.transform\r\n  text.style.transitionDuration = '0s'\r\n  if (initial) {\r\n    text.style.transform = 'translateX(0)'\r\n  } else {\r\n    text.style.transform = `translateX(${container.offsetWidth}px)`\r\n  }\r\n  const distance = initial ? text.offsetWidth : container.offsetWidth + text.offsetWidth\r\n  animating.value = true\r\n  text.style.transitionDuration = `${Math.round(distance / mergedProps.value.speed)}s`\r\n  text.style.transform = `translateX(-${text.offsetWidth}px)`\r\n}\r\n\r\nfunction onTransitionEnd() {\r\n  animating.value = false\r\n  start()\r\n}\r\n\r\nfunction handleClose() {\r\n  visible.value = false\r\n  mergedProps.value.onClose?.()\r\n}\r\n\r\nonMounted(() => {\r\n  setTimeout(() => {\r\n    delayLock.value = false\r\n    start()\r\n  }, mergedProps.value.delay)\r\n})\r\n\r\nwatch([() => mergedProps.value.wrap, () => mergedProps.value.speed], () => {\r\n  nextTick(() => start())\r\n})\r\n\r\nwatch(\r\n  () => mergedProps.value.content,\r\n  () => {\r\n    nextTick(() => start())\r\n  },\r\n)\r\n</script>\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n</style>\r\n","<template>\r\n  <div :class=\"containerClass\" :style=\"nativeStyle\">\r\n    <div v-for=\"index in total\" :key=\"index - 1\" :class=\"getDotClass(index - 1)\" />\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\nconst classPrefix = 'adm-page-indicator'\r\n\r\nexport interface PageIndicatorProps {\r\n  total: number\r\n  current: number\r\n  direction?: 'horizontal' | 'vertical'\r\n  color?: 'primary' | 'white'\r\n  // CSS Variables\r\n  '--dot-color'?: string\r\n  '--active-dot-color'?: string\r\n  '--dot-size'?: string\r\n  '--active-dot-size'?: string\r\n  '--dot-border-radius'?: string\r\n  '--active-dot-border-radius'?: string\r\n  '--dot-spacing'?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<PageIndicatorProps>(), {\r\n  color: 'primary',\r\n  direction: 'horizontal',\r\n})\r\n\r\nconst containerClass = computed(() => [\r\n  classPrefix,\r\n  `${classPrefix}-${props.direction}`,\r\n  `${classPrefix}-color-${props.color}`,\r\n])\r\n\r\nconst getDotClass = (index: number) => [\r\n  `${classPrefix}-dot`,\r\n  {\r\n    [`${classPrefix}-dot-active`]: props.current === index,\r\n  },\r\n]\r\n\r\nconst nativeStyle = computed(() => {\r\n  const style: Record<string, string> = {}\r\n\r\n  if (props['--dot-color']) {\r\n    style['--dot-color'] = props['--dot-color']\r\n  }\r\n  if (props['--active-dot-color']) {\r\n    style['--active-dot-color'] = props['--active-dot-color']\r\n  }\r\n  if (props['--dot-size']) {\r\n    style['--dot-size'] = props['--dot-size']\r\n  }\r\n  if (props['--active-dot-size']) {\r\n    style['--active-dot-size'] = props['--active-dot-size']\r\n  }\r\n  if (props['--dot-border-radius']) {\r\n    style['--dot-border-radius'] = props['--dot-border-radius']\r\n  }\r\n  if (props['--active-dot-border-radius']) {\r\n    style['--active-dot-border-radius'] = props['--active-dot-border-radius']\r\n  }\r\n  if (props['--dot-spacing']) {\r\n    style['--dot-spacing'] = props['--dot-spacing']\r\n  }\r\n\r\n  return style\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './page-indicator.less';\r\n</style>\r\n","<template>\r\n  <Popover\r\n    ref=\"innerRef\"\r\n    v-bind=\"{\r\n      ...popoverProps,\r\n      className: classNames(classPrefix, $attrs.class || $attrs.className || ''),\r\n    }\"\r\n    @visible-change=\"onVisibleChange\"\r\n  >\r\n    <template #default>\r\n      <slot></slot>\r\n    </template>\r\n    <template #content>\r\n      <div :class=\"`${classPrefix}-list`\">\r\n        <div\r\n          :class=\"\r\n            classNames(`${classPrefix}-list-inner`, {\r\n              [`${classPrefix}-list-scroll`]: whetherScroll,\r\n            })\r\n          \"\r\n          :style=\"{\r\n            height: innerHeight ? `${innerHeight}px` : undefined,\r\n          }\"\r\n        >\r\n          <a\r\n            v-for=\"(action, index) in actions\"\r\n            :key=\"action.key ?? index\"\r\n            :class=\"\r\n              classNames(`${classPrefix}-item`, 'adm-plain-anchor', {\r\n                [`${classPrefix}-item-disabled`]: action.disabled,\r\n              })\r\n            \"\r\n            @click=\"handleItemClick(action)\"\r\n          >\r\n            <div v-if=\"action.icon\" :class=\"`${classPrefix}-item-icon`\">\r\n              <component :is=\"action.icon\" v-if=\"typeof action.icon === 'object'\" />\r\n              <span v-else v-html=\"action.icon\"></span>\r\n            </div>\r\n            <div :class=\"`${classPrefix}-item-text`\">\r\n              <component :is=\"action.text\" v-if=\"typeof action.text === 'object'\" />\r\n              <span v-else>{{ action.text }}</span>\r\n            </div>\r\n          </a>\r\n        </div>\r\n      </div>\r\n    </template>\r\n  </Popover>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport classNames from 'classnames'\r\nimport { computed, ref, type Component } from 'vue'\r\nimport type { PopoverProps } from './popover.vue'\r\nimport Popover from './popover.vue'\r\n\r\nexport interface Action {\r\n  text: string | object\r\n  icon?: string | Component | null\r\n  disabled?: boolean\r\n  key?: string | number\r\n  onClick?: () => void\r\n}\r\n\r\nexport interface PopoverMenuProps extends Omit<PopoverProps, 'content'> {\r\n  actions: Action[]\r\n  maxCount?: number\r\n  onAction?: (item: Action) => void\r\n}\r\n\r\nconst props = withDefaults(defineProps<PopoverMenuProps>(), {\r\n  trigger: 'click',\r\n  placement: 'bottom-start',\r\n  actions: undefined,\r\n  maxCount: undefined,\r\n  onAction: undefined,\r\n  visible: undefined,\r\n  destroyOnHide: true,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  action: [item: Action]\r\n  'visible-change': [visible: boolean]\r\n}>()\r\n\r\nconst classPrefix = 'adm-popover-menu'\r\nconst innerRef = ref<InstanceType<typeof Popover> | null>(null)\r\n\r\nconst whetherScroll = computed(() => props.maxCount && props.actions.length > props.maxCount)\r\n\r\nconst innerHeight = computed(() => props.maxCount && props.maxCount * 48)\r\n\r\nconst handleItemClick = (action: Action) => {\r\n  if (action.disabled) return\r\n\r\n  emit('action', action)\r\n  props.onAction?.(action)\r\n  action.onClick?.()\r\n\r\n  innerRef.value?.hide()\r\n}\r\n\r\nconst onVisibleChange = (visible: boolean) => {\r\n  emit('visible-change', visible)\r\n}\r\n\r\n// 提取 Popover 组件需要的 props\r\nconst popoverProps = computed(() => {\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n  const { actions, maxCount, onAction, ...rest } = props\r\n  return rest\r\n})\r\n\r\ndefineExpose({\r\n  show: () => innerRef.value?.show(),\r\n  hide: () => innerRef.value?.hide(),\r\n  visible: computed(() => innerRef.value?.visible),\r\n})\r\n\r\ndefineOptions({\r\n  name: 'PopoverMenu',\r\n  inheritAttrs: false,\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './popover-menu.less';\r\n</style>\r\n","export const sleep = (time: number) => new Promise((resolve) => setTimeout(resolve, time))\r\n","<template>\r\n  <div ref=\"elementRef\" :class=\"classPrefix\">\r\n    <div\r\n      :class=\"`${classPrefix}-head`\"\r\n      :style=\"{ height: springHeight + 'px', overflow: 'hidden' }\"\r\n    >\r\n      <div :class=\"`${classPrefix}-head-content`\" :style=\"{ height: headHeight + 'px' }\">\r\n        <component v-if=\"isComponent(statusText)\" :is=\"statusText\" />\r\n        <span v-else>{{ statusText }}</span>\r\n      </div>\r\n    </div>\r\n    <div :class=\"`${classPrefix}-content`\">\r\n      <slot />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport type { Component } from 'vue'\r\n\r\nexport type PullStatus = 'pulling' | 'canRelease' | 'refreshing' | 'complete'\r\n\r\nexport interface PullToRefreshProps {\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  onRefresh?: () => Promise<any>\r\n  pullingText?: string | Component\r\n  canReleaseText?: string | Component\r\n  refreshingText?: string | Component\r\n  completeText?: string | Component\r\n  completeDelay?: number\r\n  headHeight?: number\r\n  threshold?: number\r\n  disabled?: boolean\r\n  renderText?: (status: PullStatus) => string | Component\r\n}\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, onMounted, onUnmounted, ref } from 'vue'\r\nimport { convertPx } from '../../utils/convert-px'\r\nimport { getScrollParent } from '../../utils/get-scroll-parent'\r\nimport { rubberbandIfOutOfBounds } from '../../utils/rubberband'\r\nimport { sleep } from '../../utils/sleep'\r\nimport { supportsPassive } from '../../utils/supports-passive'\r\nimport { useConfig } from '../config-provider/useConfig'\r\n\r\nconst classPrefix = 'adm-pull-to-refresh'\r\n\r\nconst props = withDefaults(defineProps<PullToRefreshProps>(), {\r\n  completeDelay: 500,\r\n  disabled: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  refresh: []\r\n}>()\r\n\r\n// Refs\r\nconst elementRef = ref<HTMLDivElement>()\r\nconst status = ref<PullStatus>('pulling')\r\nconst springHeight = ref(0)\r\nconst pullingRef = ref(false)\r\n\r\n// Get config\r\nconst { locale } = useConfig()\r\n// Computed values\r\nconst headHeight = computed(() => props.headHeight ?? convertPx(40))\r\nconst threshold = computed(() => props.threshold ?? convertPx(60))\r\n\r\nconst defaultTexts = computed(() => ({\r\n  pullingText: props.pullingText || locale.PullToRefresh.pulling,\r\n  canReleaseText: props.canReleaseText || locale.PullToRefresh.canRelease,\r\n  refreshingText: props.refreshingText || `${locale.common.loading}...`,\r\n  completeText: props.completeText || locale.PullToRefresh.complete,\r\n}))\r\n\r\nconst statusText = computed(() => {\r\n  if (props.renderText) {\r\n    return props.renderText(status.value)\r\n  }\r\n\r\n  const texts = defaultTexts.value\r\n  switch (status.value) {\r\n    case 'pulling':\r\n      return texts.pullingText\r\n    case 'canRelease':\r\n      return texts.canReleaseText\r\n    case 'refreshing':\r\n      return texts.refreshingText\r\n    case 'complete':\r\n      return texts.completeText\r\n    default:\r\n      return texts.pullingText\r\n  }\r\n})\r\n\r\n// Helper function to check if value is a component\r\nconst isComponent = (value: string | Component) => {\r\n  return value && typeof value === 'object' && (value.render || value.setup || value.__vccOpts)\r\n}\r\n\r\n// Animation helper\r\nconst animateHeight = (targetHeight: number, duration = 300) => {\r\n  return new Promise<void>((resolve) => {\r\n    const startHeight = springHeight.value\r\n    const startTime = Date.now()\r\n\r\n    const animate = () => {\r\n      const elapsed = Date.now() - startTime\r\n      const progress = Math.min(elapsed / duration, 1)\r\n\r\n      // Easing function (ease-out)\r\n      const easeOut = 1 - Math.pow(1 - progress, 3)\r\n\r\n      springHeight.value = startHeight + (targetHeight - startHeight) * easeOut\r\n\r\n      if (progress < 1) {\r\n        requestAnimationFrame(animate)\r\n      } else {\r\n        resolve()\r\n      }\r\n    }\r\n\r\n    animate()\r\n  })\r\n}\r\n\r\n// Reset function\r\nconst reset = async () => {\r\n  await animateHeight(0)\r\n  status.value = 'pulling'\r\n}\r\n\r\n// Refresh function\r\nconst doRefresh = async () => {\r\n  springHeight.value = headHeight.value\r\n  status.value = 'refreshing'\r\n\r\n  try {\r\n    emit('refresh')\r\n    if (props.onRefresh) {\r\n      await props.onRefresh()\r\n    }\r\n    status.value = 'complete'\r\n  } catch (e) {\r\n    await reset()\r\n    throw e\r\n  }\r\n\r\n  if (props.completeDelay > 0) {\r\n    await sleep(props.completeDelay)\r\n  }\r\n\r\n  await reset()\r\n}\r\n\r\n// Touch event handlers\r\nlet startY = 0\r\nlet currentY = 0\r\nlet isDragging = false\r\n\r\nconst getScrollTop = (element: Window | Element): number => {\r\n  return 'scrollTop' in element ? element.scrollTop : element.scrollY\r\n}\r\n\r\nconst checkScrollable = (target: Element): boolean => {\r\n  let scrollParent = getScrollParent(target)\r\n\r\n  while (scrollParent) {\r\n    const scrollTop = getScrollTop(scrollParent)\r\n    if (scrollTop > 0) {\r\n      return false // 有滚动，不允许下拉刷新\r\n    }\r\n\r\n    if (scrollParent instanceof Window) {\r\n      break\r\n    }\r\n\r\n    scrollParent = getScrollParent(scrollParent.parentNode as Element)\r\n  }\r\n\r\n  return true // 没有滚动，允许下拉刷新\r\n}\r\n\r\nconst handleTouchStart = (e: TouchEvent) => {\r\n  if (props.disabled || status.value === 'refreshing' || status.value === 'complete') {\r\n    return\r\n  }\r\n\r\n  startY = e.touches[0].clientY\r\n  isDragging = false\r\n  pullingRef.value = false\r\n}\r\n\r\nconst handleTouchMove = (e: TouchEvent) => {\r\n  if (props.disabled || status.value === 'refreshing' || status.value === 'complete') {\r\n    return\r\n  }\r\n\r\n  currentY = e.touches[0].clientY\r\n  const deltaY = currentY - startY\r\n\r\n  if (deltaY <= 0) {\r\n    return // 向上滑动，不处理\r\n  }\r\n\r\n  if (!isDragging) {\r\n    const target = e.target as Element\r\n    if (!checkScrollable(target)) {\r\n      return\r\n    }\r\n    isDragging = true\r\n    pullingRef.value = true\r\n  }\r\n\r\n  if (!pullingRef.value) return\r\n\r\n  if (e.cancelable) {\r\n    e.preventDefault()\r\n  }\r\n  e.stopPropagation()\r\n\r\n  const height = Math.max(rubberbandIfOutOfBounds(deltaY, 0, 0, headHeight.value * 5, 0.5), 0)\r\n\r\n  springHeight.value = height\r\n  status.value = height > threshold.value ? 'canRelease' : 'pulling'\r\n}\r\n\r\nconst handleTouchEnd = (e: TouchEvent) => {\r\n  if (!pullingRef.value) return\r\n\r\n  pullingRef.value = false\r\n  isDragging = false\r\n\r\n  if (status.value === 'canRelease') {\r\n    doRefresh()\r\n  } else {\r\n    animateHeight(0)\r\n  }\r\n}\r\n\r\n// Lifecycle\r\nonMounted(() => {\r\n  const element = elementRef.value\r\n  if (!element) return\r\n\r\n  // 防止下拉时抖动\r\n  element.addEventListener('touchmove', () => {}, supportsPassive ? { passive: false } : false)\r\n\r\n  // 添加触摸事件监听器\r\n  element.addEventListener(\r\n    'touchstart',\r\n    handleTouchStart,\r\n    supportsPassive ? { passive: true } : false,\r\n  )\r\n  element.addEventListener(\r\n    'touchmove',\r\n    handleTouchMove,\r\n    supportsPassive ? { passive: false } : false,\r\n  )\r\n  element.addEventListener('touchend', handleTouchEnd, supportsPassive ? { passive: true } : false)\r\n})\r\n\r\nonUnmounted(() => {\r\n  const element = elementRef.value\r\n  if (!element) return\r\n\r\n  element.removeEventListener('touchstart', handleTouchStart)\r\n  element.removeEventListener('touchmove', handleTouchMove)\r\n  element.removeEventListener('touchend', handleTouchEnd)\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n@import './pull-to-refresh.less';\r\n</style>\r\n","<template>\r\n  <input\r\n    ref=\"inputRef\"\r\n    :type=\"type\"\r\n    :checked=\"checked\"\r\n    :disabled=\"disabled\"\r\n    :id=\"id\"\r\n    @click=\"handleClick\"\r\n    style=\"display: none\"\r\n  />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref } from 'vue'\r\n\r\nexport interface NativeInputProps {\r\n  type: 'checkbox' | 'radio'\r\n  checked: boolean\r\n  onChange: (checked: boolean) => void\r\n  disabled?: boolean\r\n  id?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<NativeInputProps>(), {\r\n  disabled: false,\r\n})\r\n\r\nconst inputRef = ref<HTMLInputElement | null>(null)\r\n\r\nconst handleClick = (e: Event) => {\r\n  e.stopPropagation()\r\n  e.stopImmediatePropagation()\r\n\r\n  const target = e.target as HTMLInputElement\r\n  const latestChecked = target.checked\r\n\r\n  if (latestChecked === props.checked) return\r\n  props.onChange(latestChecked)\r\n}\r\n</script>\r\n","<template>\r\n  <label :class=\"labelClasses\" @click=\"handleClick\" :style=\"props.style || {}\">\r\n    <NativeInput\r\n      type=\"radio\"\r\n      :checked=\"finalChecked\"\r\n      :disabled=\"finalDisabled\"\r\n      :id=\"id\"\r\n      :onChange=\"setChecked\"\r\n    />\r\n\r\n    <!-- 自定义图标渲染 -->\r\n    <div v-if=\"icon\" :class=\"`${classPrefix}-custom-icon`\">\r\n      <component :is=\"icon(finalChecked)\" />\r\n    </div>\r\n\r\n    <!-- 默认图标渲染 -->\r\n    <div v-else :class=\"`${classPrefix}-icon`\">\r\n      <CheckIcon v-if=\"finalChecked\" />\r\n    </div>\r\n\r\n    <!-- 内容区域 -->\r\n    <div v-if=\"$slots.default\" :class=\"`${classPrefix}-content`\">\r\n      <slot />\r\n    </div>\r\n  </label>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { CSSProperties, Component } from 'vue'\r\nimport { computed, ref, inject } from 'vue'\r\nimport CheckIcon from '../checkbox/check-icon.vue'\r\nimport NativeInput from './native-input.vue'\r\nimport type { RadioGroupContext, RadioValue } from './types.ts'\r\n\r\nconst classPrefix = 'adm-radio'\r\n\r\nexport interface RadioProps {\r\n  checked?: boolean\r\n  defaultChecked?: boolean\r\n  disabled?: boolean\r\n  onChange?: (checked: boolean) => void\r\n  value?: RadioValue\r\n  block?: boolean\r\n  id?: string\r\n  icon?: (checked: boolean) => Component\r\n  onClick?: (event: MouseEvent) => void\r\n  // CSS 变量支持\r\n  style?: CSSProperties & {\r\n    '--icon-size'?: string\r\n    '--font-size'?: string\r\n    '--gap'?: string\r\n  }\r\n  class?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<RadioProps>(), {\r\n  defaultChecked: false,\r\n  checked: undefined,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:checked': [value: boolean]\r\n  change: [value: boolean]\r\n}>()\r\n\r\n// 注入 group context\r\nconst groupContext = inject<{ value: RadioGroupContext } | null>('adm-radio-group', null)\r\n\r\n// 内部状态管理\r\nconst innerChecked = ref(props.defaultChecked)\r\nconst isControlled = computed(() => props.checked !== undefined)\r\n\r\n// 根据是否在 group 中来计算最终状态\r\nconst finalChecked = computed(() => {\r\n  if (groupContext && props.value !== undefined) {\r\n    return groupContext.value.value.includes(props.value as RadioValue)\r\n  }\r\n  return isControlled.value ? (props.checked ?? false) : innerChecked.value\r\n})\r\n\r\nconst finalDisabled = computed(() => {\r\n  if (groupContext) {\r\n    return props.disabled || groupContext.value.disabled\r\n  }\r\n  return props.disabled || false\r\n})\r\n\r\nconst setChecked = (newValue: boolean) => {\r\n  if (groupContext && props.value !== undefined) {\r\n    // Group 模式：通过 group context 管理状态\r\n    if (newValue) {\r\n      groupContext.value.check(props.value as RadioValue)\r\n    } else {\r\n      groupContext.value.uncheck(props.value as RadioValue)\r\n    }\r\n    // 仍然触发本地 onChange\r\n    props.onChange?.(newValue)\r\n  } else {\r\n    // 单独模式：正常的受控/非受控逻辑\r\n    if (!isControlled.value) {\r\n      innerChecked.value = newValue\r\n    }\r\n    emit('update:checked', newValue)\r\n    emit('change', newValue)\r\n    props.onChange?.(newValue)\r\n  }\r\n}\r\n\r\n// 事件处理\r\nconst handleClick = (e: MouseEvent) => {\r\n  if (!finalDisabled.value) {\r\n    props.onClick?.(e)\r\n  }\r\n}\r\n\r\n// 样式类计算\r\nconst labelClasses = computed(() => {\r\n  const classes = [classPrefix]\r\n\r\n  if (finalChecked.value) {\r\n    classes.push(`${classPrefix}-checked`)\r\n  }\r\n\r\n  if (finalDisabled.value) {\r\n    classes.push(`${classPrefix}-disabled`)\r\n  }\r\n\r\n  if (props.block) {\r\n    classes.push(`${classPrefix}-block`)\r\n  }\r\n\r\n  return classes\r\n})\r\n</script>\r\n\r\n<style lang=\"less\">\r\n@import './radio.less';\r\n</style>\r\n","<template>\r\n  <div :class=\"classPrefix\">\r\n    <slot />\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, provide } from 'vue'\r\nimport type { RadioGroupContext, RadioGroupProps, RadioValue } from './types'\r\n\r\nconst classPrefix = 'adm-radio-group'\r\n\r\nconst props = withDefaults(defineProps<RadioGroupProps>(), {\r\n  defaultValue: null,\r\n  disabled: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:value': [value: RadioValue | null]\r\n  change: [value: RadioValue | null]\r\n}>()\r\n\r\n// 状态管理 - 仿照React usePropsValue模式\r\nconst innerValue = ref<RadioValue | null>(props.value ?? props.defaultValue)\r\nconst isControlled = computed(() => props.value !== undefined)\r\n\r\nconst currentValue = computed(() => {\r\n  return isControlled.value ? props.value : innerValue.value\r\n})\r\n\r\nconst setValue = (newValue: RadioValue | null) => {\r\n  if (!isControlled.value) {\r\n    innerValue.value = newValue\r\n  }\r\n  emit('update:value', newValue)\r\n  emit('change', newValue)\r\n\r\n  if (props.onChange && newValue !== null) {\r\n    props.onChange(newValue)\r\n  }\r\n}\r\n\r\n// Group context methods\r\nconst check = (value: RadioValue) => {\r\n  setValue(value)\r\n}\r\n\r\nconst uncheck = () => {\r\n  // Radio 通常不需要 uncheck，但为了接口一致性保留\r\n}\r\n\r\n// 创建context并提供给子组件\r\nconst groupContext = computed<RadioGroupContext>(() => ({\r\n  value: currentValue.value === null ? [] : [currentValue.value],\r\n  disabled: props.disabled,\r\n  check,\r\n  uncheck,\r\n}))\r\n\r\n// 使用 provide 提供给子组件\r\nprovide('adm-radio-group', groupContext)\r\n\r\n// 暴露给父组件的方法\r\ndefineExpose({\r\n  check,\r\n  uncheck,\r\n  value: currentValue,\r\n  disabled: computed(() => props.disabled),\r\n})\r\n</script>\r\n","import { computed } from 'vue'\r\nimport {\r\n  CheckCircleFill,\r\n  CloseCircleFill,\r\n  InformationCircleFill,\r\n  ClockCircleFill,\r\n  ExclamationCircleFill,\r\n} from 'ant-mobile-icons-vue3'\r\nimport { useConfig } from '../config-provider/useConfig'\r\n\r\nexport type ResultStatus = 'success' | 'error' | 'info' | 'waiting' | 'warning'\r\n\r\nexport function useResultIcon(status?: ResultStatus) {\r\n  const { result: componentConfig = {} } = useConfig()\r\n\r\n  const defaultIcons = {\r\n    successIcon: CheckCircleFill,\r\n    errorIcon: CloseCircleFill,\r\n    infoIcon: InformationCircleFill,\r\n    waitingIcon: ClockCircleFill,\r\n    warningIcon: ExclamationCircleFill,\r\n  }\r\n\r\n  // 如果有配置，可以合并\r\n  const mergedIcons = { ...defaultIcons, ...componentConfig }\r\n\r\n  return computed(() => {\r\n    if (!status) return null\r\n\r\n    switch (status) {\r\n      case 'success':\r\n        return mergedIcons.successIcon\r\n      case 'error':\r\n        return mergedIcons.errorIcon\r\n      case 'info':\r\n        return mergedIcons.infoIcon\r\n      case 'waiting':\r\n        return mergedIcons.waitingIcon\r\n      case 'warning':\r\n        return mergedIcons.warningIcon\r\n      default:\r\n        return null\r\n    }\r\n  })\r\n}\r\n","<template>\r\n  <div :class=\"[classPrefix, `${classPrefix}-${status}`, className]\" :style=\"mergedStyle\">\r\n    <div :class=\"`${classPrefix}-image`\" v-if=\"props.image\">\r\n      <img :src=\"props.image\" />\r\n    </div>\r\n    <div :class=\"`${classPrefix}-icon`\" v-else>\r\n      <component v-if=\"icon\" :is=\"icon\" />\r\n      <component v-else-if=\"fallbackIcon\" :is=\"fallbackIcon\" />\r\n    </div>\r\n    <div :class=\"`${classPrefix}-title`\">\r\n      <component v-if=\"isVNode(title)\" :is=\"title\" />\r\n      <template v-else>{{ title }}</template>\r\n    </div>\r\n    <div v-if=\"description\" :class=\"`${classPrefix}-description`\">\r\n      <component v-if=\"isVNode(description)\" :is=\"description\" />\r\n      <template v-else>{{ description }}</template>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, isVNode, type VNode, type Component } from 'vue'\r\nimport { useResultIcon, type ResultStatus } from './useResultIcon'\r\n\r\nconst classPrefix = 'adm-result'\r\n\r\nexport interface ResultProps {\r\n  status?: ResultStatus\r\n  title: string | VNode\r\n  description?: string | VNode\r\n  icon?: VNode | Component | undefined | null\r\n  style?: Record<string, string | number>\r\n  image?: string | undefined\r\n  className?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<ResultProps>(), {\r\n  status: 'info',\r\n  style: () => ({}),\r\n  className: '',\r\n  image: undefined,\r\n})\r\n\r\nconst fallbackIcon = useResultIcon(props.status)\r\n\r\nconst mergedStyle = computed(() => {\r\n  return props.style || {}\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n@import './index.less';\r\n</style>\r\n","<template>\r\n  <div\r\n    :class=\"[\r\n      classPrefix,\r\n      {\r\n        [`${classPrefix}-active`]: hasFocus,\r\n      },\r\n    ]\"\r\n    :style=\"mergedStyle\"\r\n  >\r\n    <div :class=\"`${classPrefix}-input-box`\">\r\n      <div v-if=\"searchIcon\" :class=\"`${classPrefix}-input-box-icon`\" @click=\"handleSearch\">\r\n        <component :is=\"searchIcon\" />\r\n      </div>\r\n      <Input\r\n        ref=\"inputRef\"\r\n        :class=\"[\r\n          `${classPrefix}-input`,\r\n          {\r\n            [`${classPrefix}-input-without-icon`]: !searchIcon,\r\n          },\r\n        ]\"\r\n        :value=\"currentValue\"\r\n        :maxLength=\"maxLength\"\r\n        :autoFocus=\"autoFocus\"\r\n        :placeholder=\"placeholder\"\r\n        :clearable=\"clearable\"\r\n        :onlyShowClearWhenFocus=\"onlyShowClearWhenFocus\"\r\n        :disabled=\"disabled\"\r\n        :readOnly=\"readOnly\"\r\n        type=\"search\"\r\n        enterKeyHint=\"search\"\r\n        :aria-label=\"searchBarName\"\r\n        @update:value=\"handleValueChange\"\r\n        @focus=\"handleFocus\"\r\n        @blur=\"handleBlur\"\r\n        @clear=\"handleClear\"\r\n        @enter-press=\"handleEnterPress\"\r\n        @composition-start=\"handleCompositionStart\"\r\n        @composition-end=\"handleCompositionEnd\"\r\n      />\r\n    </div>\r\n    <div v-if=\"shouldShowCancelButton\" :class=\"`${classPrefix}-suffix`\">\r\n      <Button\r\n        fill=\"none\"\r\n        :class=\"`${classPrefix}-cancel-button`\"\r\n        @click=\"handleCancelClick\"\r\n        @mousedown=\"handleCancelMouseDown\"\r\n      >\r\n        {{ cancelText }}\r\n      </Button>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport type { Component } from 'vue'\r\n\r\nexport interface SearchBarProps {\r\n  value?: string\r\n  defaultValue?: string\r\n  maxLength?: number\r\n  placeholder?: string\r\n  clearable?: boolean\r\n  onlyShowClearWhenFocus?: boolean\r\n  showCancelButton?: boolean | ((focus: boolean, value: string) => boolean)\r\n  cancelText?: string\r\n  searchIcon?: Component | null | false | undefined\r\n  /**\r\n   * @deprecated use `searchIcon` instead\r\n   */\r\n  icon?: Component | null\r\n  clearOnCancel?: boolean\r\n  autoFocus?: boolean\r\n  disabled?: boolean\r\n  readOnly?: boolean\r\n  className?: string\r\n\r\n  // Events\r\n  onFocus?: (e: FocusEvent) => void\r\n  onBlur?: (e: FocusEvent) => void\r\n  onClear?: () => void\r\n  onCompositionStart?: (e: CompositionEvent) => void\r\n  onCompositionEnd?: (e: CompositionEvent) => void\r\n  onSearch?: (val: string) => void\r\n  onChange?: (val: string) => void\r\n  onCancel?: () => void\r\n\r\n  // CSS Variables\r\n  '--background'?: string\r\n  '--border-radius'?: string\r\n  '--placeholder-color'?: string\r\n  '--height'?: string\r\n  '--padding-left'?: string\r\n  '--color'?: string\r\n  '--cancel-button-color'?: string\r\n}\r\n\r\nexport interface SearchBarRef {\r\n  clear: () => void\r\n  focus: () => void\r\n  blur: () => void\r\n  nativeElement: HTMLInputElement | null\r\n}\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { SearchOutline } from 'ant-mobile-icons-vue3'\r\nimport { computed, ref } from 'vue'\r\nimport Button from '../button/index.vue'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport Input from '../input/input.vue'\r\nimport type { InputRef } from '../input/types'\r\n\r\nconst classPrefix = 'adm-search-bar'\r\n\r\nconst props = withDefaults(defineProps<SearchBarProps>(), {\r\n  clearable: true,\r\n  onlyShowClearWhenFocus: false,\r\n  showCancelButton: false,\r\n  defaultValue: '',\r\n  clearOnCancel: true,\r\n  searchIcon: undefined,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:value': [value: string]\r\n  change: [value: string]\r\n  focus: [e: FocusEvent]\r\n  blur: [e: FocusEvent]\r\n  clear: []\r\n  'composition-start': [e: CompositionEvent]\r\n  'composition-end': [e: CompositionEvent]\r\n  search: [value: string]\r\n  cancel: []\r\n}>()\r\n\r\n// Refs\r\nconst inputRef = ref<InputRef>()\r\nconst hasFocus = ref(false)\r\nconst composingRef = ref(false)\r\n\r\n// Get config\r\nconst { locale } = useConfig()\r\n\r\n// Internal value state for controlled/uncontrolled\r\nconst internalValue = ref(props.defaultValue || '')\r\nconst isControlled = computed(() => props.value !== undefined)\r\n\r\nconst currentValue = computed({\r\n  get: () => (isControlled.value ? props.value || '' : internalValue.value),\r\n  set: (val: string) => {\r\n    if (!isControlled.value) {\r\n      internalValue.value = val\r\n    }\r\n    emit('update:value', val)\r\n    emit('change', val)\r\n    props.onChange?.(val)\r\n  },\r\n})\r\n\r\n// Computed\r\nconst cancelText = computed(() => props.cancelText || locale.common.cancel)\r\nconst searchBarName = computed(() => locale.SearchBar.name)\r\n\r\nconst searchIcon = computed(() => {\r\n  if ([null, false].includes(props.searchIcon as null | false)) {\r\n    return null\r\n  }\r\n  // Handle deprecated 'icon' prop\r\n  return props.searchIcon || SearchOutline\r\n})\r\n\r\nconst mergedStyle = computed(() => {\r\n  const style: Record<string, string> = {}\r\n\r\n  if (props['--background']) style['--background'] = props['--background']\r\n  if (props['--border-radius']) style['--border-radius'] = props['--border-radius']\r\n  if (props['--placeholder-color']) style['--placeholder-color'] = props['--placeholder-color']\r\n  if (props['--height']) style['--height'] = props['--height']\r\n  if (props['--padding-left']) style['--padding-left'] = props['--padding-left']\r\n\r\n  return style\r\n})\r\n\r\n// Cancel button visibility\r\nconst shouldShowCancelButton = computed(() => {\r\n  if (typeof props.showCancelButton === 'function') {\r\n    return props.showCancelButton(hasFocus.value, currentValue.value)\r\n  }\r\n  return props.showCancelButton && hasFocus.value\r\n})\r\n\r\n// Event handlers\r\nconst handleSearch = () => {\r\n  if (!composingRef.value) {\r\n    emit('search', currentValue.value)\r\n    props.onSearch?.(currentValue.value)\r\n  }\r\n}\r\n\r\nconst handleValueChange = (value: string) => {\r\n  currentValue.value = value\r\n}\r\n\r\nconst handleFocus = (e: FocusEvent) => {\r\n  hasFocus.value = true\r\n  emit('focus', e)\r\n  props.onFocus?.(e)\r\n}\r\n\r\nconst handleBlur = (e: FocusEvent) => {\r\n  hasFocus.value = false\r\n  emit('blur', e)\r\n  props.onBlur?.(e)\r\n}\r\n\r\nconst handleClear = () => {\r\n  emit('clear')\r\n  props.onClear?.()\r\n}\r\n\r\nconst handleEnterPress = () => {\r\n  if (!composingRef.value) {\r\n    inputRef.value?.blur()\r\n    emit('search', currentValue.value)\r\n    props.onSearch?.(currentValue.value)\r\n  }\r\n}\r\n\r\nconst handleCompositionStart = (e: CompositionEvent) => {\r\n  composingRef.value = true\r\n  emit('composition-start', e)\r\n  props.onCompositionStart?.(e)\r\n}\r\n\r\nconst handleCompositionEnd = (e: CompositionEvent) => {\r\n  composingRef.value = false\r\n  emit('composition-end', e)\r\n  props.onCompositionEnd?.(e)\r\n}\r\n\r\nconst handleCancelClick = () => {\r\n  if (props.clearOnCancel) {\r\n    inputRef.value?.clear()\r\n  }\r\n  inputRef.value?.blur()\r\n  emit('cancel')\r\n  props.onCancel?.()\r\n}\r\n\r\nconst handleCancelMouseDown = (e: MouseEvent) => {\r\n  e.preventDefault()\r\n}\r\n\r\n// Expose methods\r\nconst clear = () => {\r\n  inputRef.value?.clear()\r\n}\r\n\r\nconst focus = () => {\r\n  inputRef.value?.focus()\r\n}\r\n\r\nconst blur = () => {\r\n  inputRef.value?.blur()\r\n}\r\n\r\nconst nativeElement = computed(() => {\r\n  return inputRef.value?.nativeElement ?? null\r\n})\r\n\r\ndefineExpose({\r\n  clear,\r\n  focus,\r\n  blur,\r\n  get nativeElement() {\r\n    return nativeElement.value\r\n  },\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n@import './search-bar.less';\r\n</style>\r\n","<template>\r\n  <svg\r\n    width=\"17px\"\r\n    height=\"13px\"\r\n    viewBox=\"0 0 17 13\"\r\n    version=\"1.1\"\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n  >\r\n    <g\r\n      stroke=\"none\"\r\n      stroke-width=\"1\"\r\n      fill=\"none\"\r\n      fill-rule=\"evenodd\"\r\n      stroke-linecap=\"round\"\r\n      stroke-linejoin=\"round\"\r\n    >\r\n      <g transform=\"translate(-2832.000000, -1103.000000)\" stroke=\"#FFFFFF\" stroke-width=\"3\">\r\n        <g transform=\"translate(2610.000000, 955.000000)\">\r\n          <g transform=\"translate(24.000000, 91.000000)\">\r\n            <g transform=\"translate(179.177408, 36.687816)\">\r\n              <polyline points=\"34.2767388 22 24.797043 31.4796958 21 27.6826527\" />\r\n            </g>\r\n          </g>\r\n        </g>\r\n      </g>\r\n    </g>\r\n  </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n// 无逻辑，仅渲染 SVG\r\n</script>\r\n","<template>\r\n  <div\r\n    :class=\"itemClass\"\r\n    :aria-checked=\"selected\"\r\n    :aria-disabled=\"disabled\"\r\n    role=\"option\"\r\n    @click=\"onClick\"\r\n  >\r\n    <template v-if=\"renderOption\">\r\n      <component :is=\"renderOption(option, selected)\" />\r\n    </template>\r\n    <template v-else>\r\n      <div :class=\"`${classPrefix}-label`\">{{ option.label }}</div>\r\n      <div v-if=\"option.description\" :class=\"`${classPrefix}-description`\">\r\n        {{ option.description }}\r\n      </div>\r\n      <div v-if=\"showCheckMark && selected\" :class=\"`${classPrefix}-check-mark-wrapper`\">\r\n        <CheckMark />\r\n      </div>\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, type Component } from 'vue'\r\nimport CheckMark from './check-mark.vue'\r\nimport type { SelectorOption } from './types'\r\n\r\nconst classPrefix = 'adm-selector-item'\r\n\r\nconst props = defineProps<{\r\n  option: SelectorOption\r\n  selected: boolean\r\n  disabled?: boolean\r\n  showCheckMark?: boolean\r\n  renderOption?: (option: SelectorOption, selected: boolean) => Component\r\n}>()\r\nconst emit = defineEmits(['click'])\r\n\r\nconst itemClass = computed(() => [\r\n  classPrefix,\r\n  props.selected ? `${classPrefix}-active` : '',\r\n  props.disabled ? `${classPrefix}-disabled` : '',\r\n])\r\n\r\nfunction onClick() {\r\n  if (!props.disabled) emit('click')\r\n}\r\n</script>\r\n","<template>\r\n  <div :class=\"rootClass\" :style=\"props.style\">\r\n    <Grid v-if=\"props.grid || props.columns\" :columns=\"props.columns || 3\">\r\n      <template #default>\r\n        <SelectorOptionItem\r\n          v-for=\"option in options\"\r\n          :key=\"option.value\"\r\n          :option=\"option\"\r\n          :selected=\"selectedSet.has(option.value)\"\r\n          :disabled=\"isOptionDisabled(option)\"\r\n          :show-check-mark=\"props.showCheckMark\"\r\n          :render-option=\"props.renderOption\"\r\n          @click=\"handleOptionClick(option)\"\r\n        />\r\n      </template>\r\n    </Grid>\r\n    <Space v-else-if=\"props.space\" wrap>\r\n      <SelectorOptionItem\r\n        v-for=\"option in options\"\r\n        :key=\"option.value\"\r\n        :option=\"option\"\r\n        :selected=\"selectedSet.has(option.value)\"\r\n        :disabled=\"isOptionDisabled(option)\"\r\n        :show-check-mark=\"props.showCheckMark\"\r\n        :render-option=\"props.renderOption\"\r\n        @click=\"handleOptionClick(option)\"\r\n      />\r\n    </Space>\r\n    <template v-else>\r\n      <SelectorOptionItem\r\n        v-for=\"option in options\"\r\n        :key=\"option.value\"\r\n        :option=\"option\"\r\n        :selected=\"selectedSet.has(option.value)\"\r\n        :disabled=\"isOptionDisabled(option)\"\r\n        :show-check-mark=\"props.showCheckMark\"\r\n        :render-option=\"props.renderOption\"\r\n        @click=\"handleOptionClick(option)\"\r\n      />\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref } from 'vue'\r\nimport type { SelectorOption, SelectorProps, FieldNames } from './types'\r\n// 依赖直接用原版\r\nimport Grid from '../grid/index.vue'\r\nimport Space from '../space/index.vue'\r\nimport SelectorOptionItem from './selector-option-item.vue'\r\n\r\nconst classPrefix = 'adm-selector'\r\n\r\nconst props = withDefaults(defineProps<SelectorProps>(), {\r\n  options: () => [],\r\n  defaultValue: () => [],\r\n  fieldNames: () =>\r\n    ({\r\n      label: 'label',\r\n      value: 'value',\r\n      description: 'description',\r\n      disabled: 'disabled',\r\n    }) as FieldNames,\r\n  value: undefined,\r\n  multiple: false,\r\n  disabled: false,\r\n  showCheckMark: true,\r\n  block: false,\r\n  grid: false,\r\n  columns: undefined,\r\n  space: true,\r\n})\r\nconst emit = defineEmits(['update:value', 'change'])\r\n\r\nconst isControlled = computed(() => props.value !== undefined)\r\nconst innerValue = ref<(string | number)[]>(props.defaultValue || [])\r\n\r\nconst options = computed(() => {\r\n  const {\r\n    label = 'label',\r\n    value = 'value',\r\n    description = 'description',\r\n    disabled = 'disabled',\r\n  } = props.fieldNames || {}\r\n  return props.options.map((opt) => ({\r\n    label: opt[label],\r\n    value: opt[value],\r\n    description: opt[description],\r\n    disabled: opt[disabled],\r\n  }))\r\n})\r\n\r\nconst selectedValue = computed({\r\n  get() {\r\n    return isControlled.value ? props.value! : innerValue.value\r\n  },\r\n  set(val: (string | number)[]) {\r\n    if (!isControlled.value) innerValue.value = val\r\n    emit('update:value', val)\r\n    emit('change', val, {\r\n      items: options.value.filter((opt) => val.includes(opt.value)),\r\n    })\r\n    props.onChange?.(val, {\r\n      items: options.value.filter((opt) => val.includes(opt.value)),\r\n    })\r\n  },\r\n})\r\n\r\nconst selectedSet = computed(() => new Set(selectedValue.value))\r\n\r\nconst rootClass = computed(() => [\r\n  classPrefix,\r\n  props.block ? `${classPrefix}-block` : '',\r\n  props.class,\r\n])\r\n\r\nfunction isOptionDisabled(option: SelectorOption) {\r\n  return props.disabled || option.disabled\r\n}\r\n\r\nfunction handleOptionClick(option: SelectorOption) {\r\n  if (isOptionDisabled(option)) return\r\n  const value = option.value\r\n  if (props.multiple) {\r\n    const next = selectedValue.value.includes(value)\r\n      ? selectedValue.value.filter((v) => v !== value)\r\n      : [...selectedValue.value, value]\r\n    selectedValue.value = next\r\n  } else {\r\n    selectedValue.value = [value]\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n@import './selector.less';\r\n</style>\r\n","<template>\r\n  <div :class=\"classPrefix\">\r\n    <template v-for=\"point in sortedPoints\" :key=\"point\">\r\n      <span\r\n        v-if=\"marks[point] !== undefined && marks[point] !== null\"\r\n        :class=\"getMarkClassName(point)\"\r\n        :style=\"getMarkStyle(point)\"\r\n      >\r\n        {{ marks[point] }}\r\n      </span>\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport classNames from 'classnames'\r\nimport { computed } from 'vue'\r\nimport type { SliderMarks } from './types'\r\n\r\nconst classPrefix = 'adm-slider-mark'\r\n\r\nconst props = defineProps<{\r\n  min: number\r\n  max: number\r\n  marks: SliderMarks\r\n  lowerBound: number\r\n  upperBound: number\r\n}>()\r\n\r\nconst range = computed(() => props.max - props.min)\r\n\r\nconst sortedPoints = computed(() => {\r\n  return Object.keys(props.marks)\r\n    .map(parseFloat)\r\n    .sort((a, b) => a - b)\r\n    .filter((point) => point >= props.min && point <= props.max)\r\n})\r\n\r\nfunction getMarkStyle(point: number) {\r\n  return {\r\n    left: `${((point - props.min) / range.value) * 100}%`,\r\n  }\r\n}\r\n\r\nfunction getMarkClassName(point: number) {\r\n  const isActive = point <= props.upperBound && point >= props.lowerBound\r\n  return classNames({\r\n    [`${classPrefix}-text`]: true,\r\n    [`${classPrefix}-text-active`]: isActive,\r\n  })\r\n}\r\n</script>\r\n","<template>\r\n  <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n    <g fill=\"currentColor\" fill-rule=\"evenodd\">\r\n      <rect :x=\"10\" width=\"4\" height=\"24\" :rx=\"2\" />\r\n      <rect :y=\"4\" width=\"4\" height=\"16\" :rx=\"2\" />\r\n      <rect :x=\"20\" :y=\"4\" width=\"4\" height=\"16\" :rx=\"2\" />\r\n    </g>\r\n  </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n// ThumbIcon 组件 - 滑块默认图标\r\n</script>\r\n","<template>\r\n  <div\r\n    :class=\"`${classPrefix}-thumb-container`\"\r\n    :style=\"currentPosition\"\r\n    role=\"slider\"\r\n    :aria-label=\"ariaLabel\"\r\n    :aria-valuemax=\"max\"\r\n    :aria-valuemin=\"min\"\r\n    :aria-valuenow=\"value\"\r\n    :aria-disabled=\"disabled\"\r\n    @mousedown=\"handleMouseDown\"\r\n    @touchstart=\"handleTouchStart\"\r\n  >\r\n    <component\r\n      v-if=\"renderPopoverContent\"\r\n      :is=\"Popover\"\r\n      :content=\"renderPopoverContent(value)\"\r\n      placement=\"top\"\r\n      :visible=\"residentPopover || dragging\"\r\n      mode=\"dark\"\r\n    >\r\n      <div :class=\"`${classPrefix}-thumb`\">\r\n        <component v-if=\"icon\" :is=\"icon\" :class=\"`${classPrefix}-thumb-icon`\" />\r\n        <ThumbIcon v-else :class=\"`${classPrefix}-thumb-icon`\" />\r\n      </div>\r\n    </component>\r\n    <div v-else :class=\"`${classPrefix}-thumb`\">\r\n      <component v-if=\"icon\" :is=\"icon\" :class=\"`${classPrefix}-thumb-icon`\" />\r\n      <ThumbIcon v-else :class=\"`${classPrefix}-thumb-icon`\" />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { Component } from 'vue'\r\nimport { computed, ref } from 'vue'\r\nimport ThumbIcon from './thumb-icon.vue'\r\nimport Popover from '../popover/popover.vue'\r\n\r\nconst classPrefix = 'adm-slider'\r\n\r\nconst props = defineProps<{\r\n  value: number\r\n  min: number\r\n  max: number\r\n  disabled: boolean\r\n  trackRef: HTMLDivElement | null\r\n  icon?: Component | string\r\n  popover?: boolean | ((value: number) => Component | string)\r\n  residentPopover?: boolean\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n  drag: [position: number, first: boolean, last: boolean]\r\n}>()\r\n\r\nconst dragging = ref(false)\r\nconst prevValue = ref(props.value)\r\n\r\n// 模拟 useConfig（需要根据你的项目实际情况调整）\r\nconst ariaLabel = computed(() => {\r\n  // 这里应该从 locale 中获取，暂时硬编码\r\n  return 'Slider'\r\n})\r\n\r\nconst currentPosition = computed(() => ({\r\n  left: `${((props.value - props.min) / (props.max - props.min)) * 100}%`,\r\n  right: 'auto',\r\n}))\r\n\r\nconst renderPopoverContent = computed(() => {\r\n  if (typeof props.popover === 'function') {\r\n    return props.popover\r\n  }\r\n  if (props.popover) {\r\n    return (value: number) => value.toString()\r\n  }\r\n  return null\r\n})\r\n\r\nfunction handleMouseDown(event: MouseEvent) {\r\n  if (props.disabled) return\r\n  startDrag(event)\r\n}\r\n\r\nfunction handleTouchStart(event: TouchEvent) {\r\n  if (props.disabled) return\r\n  startDrag(event)\r\n}\r\n\r\nfunction startDrag(event: MouseEvent | TouchEvent) {\r\n  prevValue.value = props.value\r\n  dragging.value = true\r\n\r\n  const handleMove = (moveEvent: MouseEvent | TouchEvent) => {\r\n    if (!props.trackRef) return\r\n\r\n    const clientX = 'touches' in moveEvent ? moveEvent.touches[0].clientX : moveEvent.clientX\r\n    const startX = 'touches' in event ? event.touches[0].clientX : event.clientX\r\n\r\n    const x = clientX - startX\r\n    const sliderOffsetWidth = props.trackRef.offsetWidth\r\n    if (!sliderOffsetWidth) return\r\n\r\n    const diff = (x / Math.ceil(sliderOffsetWidth)) * (props.max - props.min)\r\n    const newPosition = prevValue.value + diff\r\n\r\n    emit('drag', newPosition, false, false)\r\n  }\r\n\r\n  const handleEnd = () => {\r\n    dragging.value = false\r\n    emit('drag', props.value, false, true)\r\n\r\n    document.removeEventListener('mousemove', handleMove)\r\n    document.removeEventListener('mouseup', handleEnd)\r\n    document.removeEventListener('touchmove', handleMove)\r\n    document.removeEventListener('touchend', handleEnd)\r\n  }\r\n\r\n  // 首次拖动\r\n  emit('drag', props.value, true, false)\r\n\r\n  document.addEventListener('mousemove', handleMove)\r\n  document.addEventListener('mouseup', handleEnd)\r\n  document.addEventListener('touchmove', handleMove)\r\n  document.addEventListener('touchend', handleEnd)\r\n\r\n  event.preventDefault()\r\n}\r\n</script>\r\n","<template>\r\n  <div :class=\"`${classPrefix}-ticks`\">\r\n    <span\r\n      v-for=\"point in props.points\"\r\n      :key=\"point\"\r\n      :class=\"getPointClassName(point)\"\r\n      :style=\"getPointStyle(point)\"\r\n    />\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport classNames from 'classnames'\r\nimport { computed } from 'vue'\r\n\r\nconst classPrefix = 'adm-slider'\r\n\r\nconst props = defineProps<{\r\n  points: number[]\r\n  min: number\r\n  max: number\r\n  lowerBound: number\r\n  upperBound: number\r\n}>()\r\n\r\nconst range = computed(() => props.max - props.min)\r\n\r\nfunction getPointStyle(point: number) {\r\n  const offset = `${(Math.abs(point - props.min) / range.value) * 100}%`\r\n  return { left: offset }\r\n}\r\n\r\nfunction getPointClassName(point: number) {\r\n  const isActived = point <= props.upperBound && point >= props.lowerBound\r\n  return classNames({\r\n    [`${classPrefix}-tick`]: true,\r\n    [`${classPrefix}-tick-active`]: isActived,\r\n  })\r\n}\r\n</script>\r\n","export function nearest(arr: number[], target: number) {\n  return arr.reduce((pre, cur) => {\n    return Math.abs(pre - target) < Math.abs(cur - target) ? pre : cur\n  })\n}\n","<template>\r\n  <div :class=\"rootClass\" :style=\"nativeStyle\">\r\n    <div :class=\"`${classPrefix}-track-container`\" @click=\"onTrackClick\">\r\n      <div :class=\"`${classPrefix}-track`\" ref=\"trackRef\">\r\n        <div\r\n          :class=\"`${classPrefix}-fill`\"\r\n          :style=\"{\r\n            width: fillSize,\r\n            left: fillStart,\r\n          }\"\r\n        />\r\n        <Ticks\r\n          v-if=\"mergedProps.ticks\"\r\n          :points=\"pointList\"\r\n          :min=\"mergedProps.min\"\r\n          :max=\"mergedProps.max\"\r\n          :lower-bound=\"sliderValue[0]\"\r\n          :upper-bound=\"sliderValue[1]\"\r\n        />\r\n        <Thumb\r\n          v-if=\"mergedProps.range\"\r\n          :key=\"0\"\r\n          :value=\"sliderValue[0]\"\r\n          :min=\"mergedProps.min\"\r\n          :max=\"mergedProps.max\"\r\n          :disabled=\"mergedProps.disabled\"\r\n          :track-ref=\"trackRef\"\r\n          :icon=\"mergedProps.icon\"\r\n          :popover=\"mergedProps.popover\"\r\n          :resident-popover=\"mergedProps.residentPopover\"\r\n          @drag=\"(position, first, last) => onThumbDrag(0, position, first, last)\"\r\n        />\r\n        <Thumb\r\n          :key=\"1\"\r\n          :value=\"sliderValue[1]\"\r\n          :min=\"mergedProps.min\"\r\n          :max=\"mergedProps.max\"\r\n          :disabled=\"mergedProps.disabled\"\r\n          :track-ref=\"trackRef\"\r\n          :icon=\"mergedProps.icon\"\r\n          :popover=\"mergedProps.popover\"\r\n          :resident-popover=\"mergedProps.residentPopover\"\r\n          @drag=\"(position, first, last) => onThumbDrag(1, position, first, last)\"\r\n        />\r\n      </div>\r\n    </div>\r\n    <Marks\r\n      v-if=\"mergedProps.marks\"\r\n      :min=\"mergedProps.min\"\r\n      :max=\"mergedProps.max\"\r\n      :marks=\"mergedProps.marks\"\r\n      :lower-bound=\"sliderValue[0]\"\r\n      :upper-bound=\"sliderValue[1]\"\r\n    />\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport getMiniDecimal, { toFixed } from '@rc-component/mini-decimal'\r\nimport classNames from 'classnames'\r\nimport { computed, ref } from 'vue'\r\nimport Marks from './marks.vue'\r\nimport Thumb from './thumb.vue'\r\nimport Ticks from './ticks.vue'\r\nimport type { SliderProps, SliderValue } from './types'\r\nimport { mergeProps } from '../../utils/with-default-props'\r\nimport { nearest } from '../../utils/nearest'\r\nimport { devWarning } from '../../utils/dev-log'\r\n\r\nconst classPrefix = 'adm-slider'\r\n\r\nconst defaultProps = {\r\n  min: 0,\r\n  max: 100,\r\n  step: 1,\r\n  ticks: false,\r\n  range: false,\r\n  disabled: false,\r\n  popover: false,\r\n  residentPopover: false,\r\n}\r\n\r\nconst props = defineProps<SliderProps>()\r\nconst emit = defineEmits<{\r\n  'update:value': [value: SliderValue]\r\n  change: [value: SliderValue]\r\n  afterChange: [value: SliderValue]\r\n}>()\r\n\r\nconst mergedProps = computed(() => mergeProps(defaultProps, props))\r\n\r\n// 状态管理 - 模拟 usePropsValue\r\nconst isControlled = computed(() => props.value !== undefined)\r\nconst innerValue = ref<SliderValue>(\r\n  props.defaultValue ??\r\n    (mergedProps.value.range\r\n      ? [mergedProps.value.min, mergedProps.value.min]\r\n      : mergedProps.value.min),\r\n)\r\n\r\n// 验证 range 模式下的 value 类型\r\nlet propsValue: SliderValue | undefined = props.value\r\nif (mergedProps.value.range && typeof props.value === 'number') {\r\n  devWarning(\r\n    'Slider',\r\n    'When `range` prop is enabled, the `value` prop should be an array, like: [0, 0]',\r\n  )\r\n  propsValue = [0, props.value]\r\n}\r\n\r\nconst rawValue = computed({\r\n  get: () => (isControlled.value ? (propsValue ?? props.value!) : innerValue.value),\r\n  set: (val: SliderValue) => {\r\n    if (!isControlled.value) innerValue.value = val\r\n    emit('update:value', val)\r\n    emit('change', val)\r\n    props.onChange?.(val)\r\n  },\r\n})\r\n\r\n// 值处理函数\r\nfunction sortValue(val: [number, number]): [number, number] {\r\n  return val.sort((a, b) => a - b)\r\n}\r\n\r\nfunction convertValue(value: SliderValue): [number, number] {\r\n  return (mergedProps.value.range ? value : [mergedProps.value.min, value]) as [number, number]\r\n}\r\n\r\nfunction alignValue(value: number, decimalLen: number) {\r\n  const decimal = getMiniDecimal(value)\r\n  const fixedStr = toFixed(decimal.toString(), '.', decimalLen)\r\n  return getMiniDecimal(fixedStr).toNumber()\r\n}\r\n\r\nfunction getDecimalLen(n: number) {\r\n  return (`${n}`.split('.')[1] || '').length\r\n}\r\n\r\nfunction reverseValue(value: [number, number]): SliderValue {\r\n  const mergedDecimalLen = Math.max(\r\n    getDecimalLen(mergedProps.value.step),\r\n    getDecimalLen(value[0]),\r\n    getDecimalLen(value[1]),\r\n  )\r\n  return mergedProps.value.range\r\n    ? (value.map((v) => alignValue(v, mergedDecimalLen)) as [number, number])\r\n    : alignValue(value[1], mergedDecimalLen)\r\n}\r\n\r\nconst sliderValue = computed(() => sortValue(convertValue(rawValue.value)))\r\n\r\nfunction setSliderValue(value: [number, number]) {\r\n  const next = sortValue(value)\r\n  const current = sliderValue.value\r\n  if (next[0] === current[0] && next[1] === current[1]) return\r\n  rawValue.value = reverseValue(next)\r\n}\r\n\r\nfunction onAfterChange(value: [number, number]) {\r\n  const reversedValue = reverseValue(value)\r\n  emit('afterChange', reversedValue)\r\n  props.onAfterChange?.(reversedValue)\r\n}\r\n\r\nconst trackRef = ref<HTMLDivElement | null>(null)\r\nconst dragLockRef = ref(0)\r\nconst valueBeforeDragRef = ref<[number, number]>()\r\n\r\n// 计算填充样式\r\nconst fillSize = computed(\r\n  () =>\r\n    `${(100 * (sliderValue.value[1] - sliderValue.value[0])) / (mergedProps.value.max - mergedProps.value.min)}%`,\r\n)\r\nconst fillStart = computed(\r\n  () =>\r\n    `${(100 * (sliderValue.value[0] - mergedProps.value.min)) / (mergedProps.value.max - mergedProps.value.min)}%`,\r\n)\r\n\r\n// 计算要显示的点\r\nconst pointList = computed(() => {\r\n  if (mergedProps.value.marks) {\r\n    return Object.keys(mergedProps.value.marks)\r\n      .map(parseFloat)\r\n      .sort((a, b) => a - b)\r\n  } else if (mergedProps.value.ticks) {\r\n    const points: number[] = []\r\n    for (\r\n      let i = getMiniDecimal(mergedProps.value.min);\r\n      i.lessEquals(getMiniDecimal(mergedProps.value.max));\r\n      i = i.add(mergedProps.value.step)\r\n    ) {\r\n      points.push(i.toNumber())\r\n    }\r\n    return points\r\n  }\r\n  return []\r\n})\r\n\r\nfunction getValueByPosition(position: number) {\r\n  const newPosition =\r\n    position < mergedProps.value.min\r\n      ? mergedProps.value.min\r\n      : position > mergedProps.value.max\r\n        ? mergedProps.value.max\r\n        : position\r\n  let value = mergedProps.value.min\r\n\r\n  // 显示了刻度点，就只能移动到点上\r\n  if (pointList.value.length) {\r\n    value = nearest(pointList.value, newPosition)\r\n  } else {\r\n    // 使用 MiniDecimal 避免精度问题\r\n    const cell = Math.round((newPosition - mergedProps.value.min) / mergedProps.value.step)\r\n    const nextVal = getMiniDecimal(cell).multi(mergedProps.value.step)\r\n    value = getMiniDecimal(mergedProps.value.min).add(nextVal.toString()).toNumber()\r\n  }\r\n  return value\r\n}\r\n\r\nconst onTrackClick = (event: MouseEvent) => {\r\n  if (dragLockRef.value > 0) return\r\n  event.stopPropagation()\r\n  if (mergedProps.value.disabled) return\r\n  const track = trackRef.value\r\n  if (!track) return\r\n  const sliderOffsetLeft = track.getBoundingClientRect().left\r\n  const position =\r\n    ((event.clientX - sliderOffsetLeft) / Math.ceil(track.offsetWidth)) *\r\n      (mergedProps.value.max - mergedProps.value.min) +\r\n    mergedProps.value.min\r\n\r\n  const targetValue = getValueByPosition(position)\r\n  let nextSliderValue: [number, number]\r\n  if (mergedProps.value.range) {\r\n    // 移动的滑块采用就近原则\r\n    if (\r\n      Math.abs(targetValue - sliderValue.value[0]) > Math.abs(targetValue - sliderValue.value[1])\r\n    ) {\r\n      nextSliderValue = [sliderValue.value[0], targetValue]\r\n    } else {\r\n      nextSliderValue = [targetValue, sliderValue.value[1]]\r\n    }\r\n  } else {\r\n    nextSliderValue = [mergedProps.value.min, targetValue]\r\n  }\r\n  setSliderValue(nextSliderValue)\r\n  onAfterChange(nextSliderValue)\r\n}\r\n\r\nconst onThumbDrag = (index: number, position: number, first: boolean, last: boolean) => {\r\n  if (first) {\r\n    dragLockRef.value += 1\r\n    valueBeforeDragRef.value = sliderValue.value\r\n  }\r\n  const val = getValueByPosition(position)\r\n  const valueBeforeDrag = valueBeforeDragRef.value\r\n  if (!valueBeforeDrag) return\r\n  const next = [...valueBeforeDrag] as [number, number]\r\n  next[index] = val\r\n  setSliderValue(next)\r\n  if (last) {\r\n    onAfterChange(next)\r\n    window.setTimeout(() => {\r\n      dragLockRef.value -= 1\r\n    }, 100)\r\n  }\r\n}\r\n\r\n// 计算根元素的类名和样式\r\nconst rootClass = computed(() =>\r\n  classNames(\r\n    classPrefix,\r\n    {\r\n      [`${classPrefix}-disabled`]: mergedProps.value.disabled,\r\n    },\r\n    props.class,\r\n  ),\r\n)\r\n\r\nconst nativeStyle = computed(() => {\r\n  const style: Record<string, string | number> = { ...props.style }\r\n  if (props['--fill-color']) {\r\n    style['--fill-color'] = props['--fill-color']\r\n  }\r\n  return style\r\n})\r\n</script>\r\n\r\n<style lang=\"less\">\r\n@import './slider.less';\r\n</style>\r\n","<template>\r\n  <div :class=\"stepperClass\" :style=\"cssVars\">\r\n    <Button\r\n      :class=\"`${classPrefix}-minus`\"\r\n      @click=\"handleMinus\"\r\n      :disabled=\"minusDisabled\"\r\n      type=\"button\"\r\n      :aria-label=\"locale?.Stepper?.decrease || '减少'\"\r\n      v-if=\"props.button\"\r\n    >\r\n      <MinusOutline />\r\n    </Button>\r\n\r\n    <div :class=\"`${classPrefix}-middle`\">\r\n      <Input\r\n        ref=\"inputRef\"\r\n        :class=\"`${classPrefix}-input`\"\r\n        :placeholder=\"props.placeholder\"\r\n        @focus=\"handleFocus\"\r\n        :value=\"inputValue\"\r\n        @input=\"handleInputChange\"\r\n        :disabled=\"disabled\"\r\n        @blur=\"handleBlur\"\r\n        :readonly=\"inputReadOnly\"\r\n        role=\"spinbutton\"\r\n        :aria-valuenow=\"Number(inputValue)\"\r\n        :aria-valuemax=\"max ? Number(max) : undefined\"\r\n        :aria-valuemin=\"min ? Number(min) : undefined\"\r\n        inputmode=\"decimal\"\r\n      />\r\n    </div>\r\n\r\n    <Button\r\n      :class=\"`${classPrefix}-plus`\"\r\n      @click=\"handlePlus\"\r\n      :disabled=\"plusDisabled\"\r\n      type=\"button\"\r\n      :aria-label=\"locale?.Stepper?.increase || '增加'\"\r\n      v-if=\"props.button\"\r\n    >\r\n      <AddOutline />\r\n    </Button>\r\n    <div class=\"subfix\" v-if=\"props.subfix\">{{ props.subfix }}</div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\" generic=\"ValueType extends number | string\">\r\nimport { computed, ref, watch, nextTick, onMounted } from 'vue'\r\nimport classNames from 'classnames'\r\nimport { MinusOutline, AddOutline } from 'ant-mobile-icons-vue3'\r\nimport getMiniDecimal, { toFixed, type DecimalClass } from '@rc-component/mini-decimal'\r\nimport { mergeProps } from '../../utils/with-default-props'\r\nimport Input from '../input/input.vue'\r\nimport Button from '../button/index.vue'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport type { StepperProps, StepperRef, MergedStepperProps } from './types'\r\n\r\nconst classPrefix = 'adm-stepper'\r\n\r\n// 用 withDefaults + StepperProps 类型定义 props\r\nconst props = withDefaults(defineProps<StepperProps>(), {\r\n  step: 1,\r\n  min: undefined,\r\n  max: undefined,\r\n  digits: undefined,\r\n  disabled: false,\r\n  allowEmpty: false,\r\n  inputReadOnly: false,\r\n  placeholder: undefined,\r\n  value: undefined,\r\n  defaultValue: undefined,\r\n  parser: undefined,\r\n  formatter: undefined,\r\n  onFocus: undefined,\r\n  onBlur: undefined,\r\n  onChange: undefined,\r\n  stringMode: false,\r\n  button: true,\r\n  subfix: undefined,\r\n  // ... 其他样式变量默认值 ...\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:value': [value: ValueType | null]\r\n  change: [value: ValueType | null]\r\n  focus: [e: FocusEvent]\r\n  blur: [e: FocusEvent]\r\n}>()\r\n\r\n// 获取配置\r\nconst { locale } = useConfig()\r\n\r\n// 内部状态\r\nconst inputRef = ref<HTMLInputElement | null>(null)\r\nconst focused = ref(false)\r\nconst innerValue = ref<ValueType | null>(\r\n  (props.defaultValue ?? (0 as ValueType)) as ValueType | null,\r\n)\r\nconst inputValue = ref('')\r\n\r\n// 计算属性\r\nconst isControlled = computed(() => props.value !== undefined)\r\n\r\nconst currentValue = computed(() => {\r\n  return isControlled.value ? props.value : innerValue.value\r\n})\r\n\r\nconst mergedProps = computed(() => mergeProps({}, props) as MergedStepperProps<ValueType>)\r\n\r\nconst stepperClass = computed(() =>\r\n  classNames(classPrefix, {\r\n    [`${classPrefix}-active`]: focused.value,\r\n  }),\r\n)\r\n\r\nconst cssVars = computed(() => {\r\n  const vars: Record<string, string> = {}\r\n  const cssProps = [\r\n    '--height',\r\n    '--input-width',\r\n    '--input-font-size',\r\n    '--input-background-color',\r\n    '--border-radius',\r\n    '--border',\r\n    '--border-inner',\r\n    '--active-border',\r\n    '--button-font-size',\r\n    '--button-background-color',\r\n    '--button-width',\r\n    '--input-font-color',\r\n    '--button-text-color',\r\n  ]\r\n\r\n  cssProps.forEach((prop) => {\r\n    const key = prop as keyof typeof props\r\n    if (props[key]) {\r\n      vars[prop] = props[key] as string\r\n    }\r\n  })\r\n\r\n  return vars\r\n})\r\n\r\n// 值处理函数\r\nconst fixedValue = (value: ValueType): string => {\r\n  const fixedVal =\r\n    mergedProps.value.digits !== undefined\r\n      ? toFixed(value.toString(), '.', mergedProps.value.digits)\r\n      : value\r\n  return fixedVal.toString()\r\n}\r\n\r\nconst getValueAsType = (value: DecimalClass): ValueType => {\r\n  return (mergedProps.value.stringMode ? value.toString() : value.toNumber()) as ValueType\r\n}\r\n\r\nconst parseValue = (text: string): string | null => {\r\n  if (text === '') return null\r\n\r\n  if (mergedProps.value.parser) {\r\n    return String(mergedProps.value.parser(text))\r\n  }\r\n\r\n  const decimal = getMiniDecimal(text)\r\n  return decimal.isInvalidate() ? null : decimal.toString()\r\n}\r\n\r\nconst formatValue = (value: ValueType | null): string => {\r\n  if (value === null || value === undefined) return ''\r\n  return mergedProps.value.formatter ? mergedProps.value.formatter(value) : fixedValue(value)\r\n}\r\n\r\n// 设置值\r\nconst setValue = (newValue: ValueType | null) => {\r\n  if (!isControlled.value) {\r\n    innerValue.value = newValue\r\n  }\r\n  emit('update:value', newValue)\r\n  emit('change', newValue)\r\n  mergedProps.value.onChange?.(newValue as ValueType)\r\n}\r\n\r\nconst setValueWithCheck = (nextValue: DecimalClass) => {\r\n  if (nextValue.isNaN()) return\r\n\r\n  let target = nextValue\r\n\r\n  // 限制范围\r\n  if (mergedProps.value.min !== undefined) {\r\n    const minDecimal = getMiniDecimal(mergedProps.value.min)\r\n    if (target.lessEquals(minDecimal)) {\r\n      target = minDecimal\r\n    }\r\n  }\r\n\r\n  if (mergedProps.value.max !== undefined) {\r\n    const maxDecimal = getMiniDecimal(mergedProps.value.max)\r\n    if (maxDecimal.lessEquals(target)) {\r\n      target = maxDecimal\r\n    }\r\n  }\r\n\r\n  // 修正位数\r\n  if (mergedProps.value.digits !== undefined) {\r\n    target = getMiniDecimal(fixedValue(getValueAsType(target)))\r\n  }\r\n\r\n  setValue(getValueAsType(target))\r\n}\r\n\r\n// 事件处理\r\nconst handleInputChange = (e: Event) => {\r\n  const target = e.target as HTMLInputElement\r\n  const v = target.value\r\n  inputValue.value = v\r\n  const valueStr = parseValue(v)\r\n\r\n  if (valueStr === null) {\r\n    if (mergedProps.value.allowEmpty) {\r\n      setValue(null)\r\n    } else {\r\n      setValue((mergedProps.value.defaultValue ?? (0 as ValueType)) as ValueType)\r\n    }\r\n  } else {\r\n    setValueWithCheck(getMiniDecimal(valueStr))\r\n  }\r\n}\r\n\r\nconst triggerFocus = (nextFocus: boolean) => {\r\n  focused.value = nextFocus\r\n\r\n  // 聚焦时转换为原始文本\r\n  if (nextFocus) {\r\n    inputValue.value =\r\n      currentValue.value !== null && currentValue.value !== undefined\r\n        ? String(currentValue.value)\r\n        : ''\r\n  }\r\n}\r\n\r\nconst handleFocus = (e: FocusEvent) => {\r\n  triggerFocus(true)\r\n  emit('focus', e)\r\n  mergedProps.value.onFocus?.(e)\r\n}\r\n\r\nconst handleBlur = (e: FocusEvent) => {\r\n  triggerFocus(false)\r\n  emit('blur', e)\r\n  mergedProps.value.onBlur?.(e)\r\n}\r\n\r\n// 操作按钮\r\nconst handleOffset = (positive: boolean) => {\r\n  let stepValue = getMiniDecimal(mergedProps.value.step)\r\n  if (!positive) {\r\n    stepValue = stepValue.negate()\r\n  }\r\n\r\n  setValueWithCheck(getMiniDecimal(currentValue.value ?? 0).add(stepValue.toString()))\r\n}\r\n\r\nconst handleMinus = () => {\r\n  handleOffset(false)\r\n}\r\n\r\nconst handlePlus = () => {\r\n  handleOffset(true)\r\n}\r\n\r\n// 按钮禁用状态\r\nconst minusDisabled = computed(() => {\r\n  if (mergedProps.value.disabled) return true\r\n  if (currentValue.value === null) return false\r\n  if (mergedProps.value.min !== undefined) {\r\n    return currentValue.value <= mergedProps.value.min\r\n  }\r\n  return false\r\n})\r\n\r\nconst plusDisabled = computed(() => {\r\n  if (mergedProps.value.disabled) return true\r\n  if (currentValue.value === null) return false\r\n  if (mergedProps.value.max !== undefined) {\r\n    return currentValue.value >= mergedProps.value.max\r\n  }\r\n  return false\r\n})\r\n\r\n// 监听聚焦状态，选中文本\r\nwatch(\r\n  () => focused.value,\r\n  async (isFocused) => {\r\n    if (isFocused) {\r\n      await nextTick()\r\n      inputRef.value?.select?.()\r\n    }\r\n  },\r\n)\r\n\r\n// 失焦时格式化值\r\nwatch(\r\n  () => [focused.value, currentValue.value, mergedProps.value.digits],\r\n  () => {\r\n    if (!focused.value) {\r\n      inputValue.value = formatValue(currentValue.value)\r\n    }\r\n  },\r\n)\r\n\r\n// 初始化输入值\r\nonMounted(() => {\r\n  inputValue.value = formatValue(currentValue.value)\r\n})\r\n\r\n// 暴露方法\r\ndefineExpose<StepperRef>({\r\n  focus: () => {\r\n    inputRef.value?.focus()\r\n  },\r\n  blur: () => {\r\n    inputRef.value?.blur()\r\n  },\r\n  get nativeElement() {\r\n    return inputRef.value ?? null\r\n  },\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './stepper.less';\r\n</style>\r\n","<template>\r\n  <div :class=\"stepsClass\" :style=\"nativeStyle\">\r\n    <template v-for=\"(child, index) in $slots.default?.()\" :key=\"index\">\r\n      <component :is=\"child\" :index=\"index\" :status=\"getStepStatus(index, child.props?.status)\" />\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, provide, type Component } from 'vue'\r\nimport type { StepsProps, StepsContextType } from './types'\r\n\r\nconst classPrefix = 'adm-steps'\r\n\r\nconst props = withDefaults(defineProps<StepsProps>(), {\r\n  current: 0,\r\n  direction: 'horizontal',\r\n})\r\n\r\nconst stepsClass = computed(() => [classPrefix, `${classPrefix}-${props.direction}`])\r\n\r\nconst nativeStyle = computed(() => {\r\n  const style: Record<string, string> = {}\r\n\r\n  if (props['--title-font-size']) {\r\n    style['--title-font-size'] = props['--title-font-size']\r\n  }\r\n  if (props['--description-font-size']) {\r\n    style['--description-font-size'] = props['--description-font-size']\r\n  }\r\n  if (props['--indicator-margin-right']) {\r\n    style['--indicator-margin-right'] = props['--indicator-margin-right']\r\n  }\r\n  if (props['--icon-size']) {\r\n    style['--icon-size'] = props['--icon-size']\r\n  }\r\n\r\n  return style\r\n})\r\n\r\n// 计算步骤状态\r\nconst getStepStatus = (index: number, stepStatus?: string) => {\r\n  if (stepStatus) return stepStatus as 'wait' | 'process' | 'finish' | 'error'\r\n\r\n  const currentStep = props.current || 0\r\n  if (index < currentStep) {\r\n    return 'finish'\r\n  } else if (index === currentStep) {\r\n    return 'process'\r\n  }\r\n  return 'wait'\r\n}\r\n\r\n// 通过 provide/inject 向子组件提供状态计算逻辑\r\nprovide<StepsContextType>('stepsContext', {\r\n  current: computed(() => props.current || 0),\r\n  getStepStatus,\r\n  getStepIcon: (stepIcon?: Component | string) => {\r\n    return stepIcon || undefined\r\n  },\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './steps.less';\r\n</style>\r\n","<template>\r\n  <div :class=\"stepClass\" :style=\"nativeStyle\">\r\n    <div :class=\"`${classPrefix}-indicator`\">\r\n      <div :class=\"`${classPrefix}-icon-container`\">\r\n        <slot name=\"icon\">\r\n          <component :is=\"finalIcon\" v-if=\"typeof finalIcon === 'object'\" />\r\n          <span v-else-if=\"typeof finalIcon === 'string'\">{{ finalIcon }}</span>\r\n          <span v-else :class=\"`${classPrefix}-icon-dot`\" />\r\n        </slot>\r\n      </div>\r\n    </div>\r\n    <div :class=\"`${classPrefix}-content`\">\r\n      <div :class=\"`${classPrefix}-title`\">\r\n        <slot name=\"title\">{{ props.title }}</slot>\r\n      </div>\r\n      <div v-if=\"hasDescription\" :class=\"`${classPrefix}-description`\">\r\n        <slot name=\"description\">{{ props.description }}</slot>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, useSlots, inject } from 'vue'\r\nimport type { StepProps, StepsContextType } from './types'\r\n\r\nconst classPrefix = 'adm-step'\r\n\r\nconst props = withDefaults(defineProps<StepProps>(), {\r\n  index: undefined,\r\n  status: undefined,\r\n  icon: undefined,\r\n  stepIndex: 0,\r\n})\r\n\r\nconst slots = useSlots()\r\n\r\n// 从 Steps 组件获取上下文\r\nconst stepsContext = inject<StepsContextType>('stepsContext', {\r\n  current: { value: 0 },\r\n  getStepStatus: () => 'wait',\r\n  getStepIcon: (icon) => icon || undefined,\r\n})\r\n\r\nconst finalIcon = computed(() => {\r\n  return stepsContext.getStepIcon(props.icon)\r\n})\r\n\r\nconst stepClass = computed(() => {\r\n  if (props.status === undefined && props.index !== undefined) {\r\n    return [\r\n      classPrefix,\r\n      `${classPrefix}-status-${stepsContext.getStepStatus(props.index, props.status)}`,\r\n    ]\r\n  }\r\n  return [classPrefix, `${classPrefix}-status-${props.status}`]\r\n})\r\n\r\nconst hasDescription = computed(\r\n  () =>\r\n    !!slots.description?.().length ||\r\n    (props.description !== undefined && props.description !== null && props.description !== ''),\r\n)\r\n\r\nconst nativeStyle = computed(() => {\r\n  const style: Record<string, string> = {}\r\n\r\n  // 收集 CSS 变量\r\n  if (props['--title-font-size']) {\r\n    style['--title-font-size'] = props['--title-font-size']\r\n  }\r\n  if (props['--description-font-size']) {\r\n    style['--description-font-size'] = props['--description-font-size']\r\n  }\r\n  if (props['--indicator-margin-right']) {\r\n    style['--indicator-margin-right'] = props['--indicator-margin-right']\r\n  }\r\n  if (props['--icon-size']) {\r\n    style['--icon-size'] = props['--icon-size']\r\n  }\r\n\r\n  return style\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './steps.less';\r\n</style>\r\n","<template>\r\n  <Steps :current=\"props.current\" :direction=\"props.direction\" :style=\"nativeStyle\">\r\n    <Step\r\n      v-for=\"(step, index) in stepList\"\r\n      :key=\"index\"\r\n      :index=\"index\"\r\n      :title=\"step.title\"\r\n      :description=\"step.description\"\r\n      :icon=\"step.icon\"\r\n      :status=\"step.status\"\r\n      :step-index=\"index\"\r\n    >\r\n    </Step>\r\n  </Steps>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Steps from './steps.vue'\r\nimport Step from './step.vue'\r\nimport type { StepsWrapperProps } from './types'\r\n\r\nconst props = withDefaults(defineProps<StepsWrapperProps>(), {\r\n  current: 0,\r\n  direction: 'horizontal',\r\n})\r\n\r\nconst stepList = computed(() => props.steps)\r\n\r\nconst nativeStyle = computed(() => {\r\n  const style: Record<string, string> = {}\r\n\r\n  if (props['--title-font-size']) {\r\n    style['--title-font-size'] = props['--title-font-size']\r\n  }\r\n  if (props['--description-font-size']) {\r\n    style['--description-font-size'] = props['--description-font-size']\r\n  }\r\n  if (props['--indicator-margin-right']) {\r\n    style['--indicator-margin-right'] = props['--indicator-margin-right']\r\n  }\r\n  if (props['--icon-size']) {\r\n    style['--icon-size'] = props['--icon-size']\r\n  }\r\n\r\n  return style\r\n})\r\n</script>\r\n","<template>\r\n  <svg :class=\"className\" viewBox=\"0 0 1024 1024\" width=\"1em\" height=\"1em\" fill=\"currentColor\">\r\n    <path\r\n      d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\"\r\n    />\r\n    <path\r\n      d=\"M512 140c-205.4 0-372 166.6-372 372h72c0-165.7 134.3-300 300-300s300 134.3 300 300h72c0-205.4-166.6-372-372-372z\"\r\n    >\r\n      <animateTransform\r\n        attributeName=\"transform\"\r\n        attributeType=\"XML\"\r\n        type=\"rotate\"\r\n        dur=\"1s\"\r\n        from=\"0 512 512\"\r\n        to=\"360 512 512\"\r\n        repeatCount=\"indefinite\"\r\n      />\r\n    </path>\r\n  </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\ninterface SpinIconProps {\r\n  className?: string\r\n}\r\n\r\nwithDefaults(defineProps<SpinIconProps>(), {\r\n  className: '',\r\n})\r\n</script>\r\n","<template>\r\n  <div\r\n    :class=\"[\r\n      classPrefix,\r\n      {\r\n        [`${classPrefix}-checked`]: checked,\r\n        [`${classPrefix}-disabled`]: disabled || changing,\r\n      },\r\n    ]\"\r\n    :style=\"cssVars\"\r\n    role=\"switch\"\r\n    :aria-label=\"locale.Switch.name\"\r\n    :aria-checked=\"checked\"\r\n    :aria-disabled=\"disabled\"\r\n    @click=\"onClick\"\r\n  >\r\n    <div :class=\"`${classPrefix}-checkbox`\">\r\n      <div :class=\"`${classPrefix}-handle`\">\r\n        <SpinIcon v-if=\"loading || changing\" :class=\"`${classPrefix}-spin-icon`\" />\r\n      </div>\r\n      <div :class=\"`${classPrefix}-inner`\">\r\n        <slot name=\"checkedText\" v-if=\"checked && $slots.checkedText\" />\r\n        <component :is=\"renderCheckedText\" v-else-if=\"checked && checkedText\" />\r\n        <slot name=\"uncheckedText\" v-else-if=\"!checked && $slots.uncheckedText\" />\r\n        <component :is=\"renderUncheckedText\" v-else-if=\"!checked && uncheckedText\" />\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, h, ref, watch, type VNode, type CSSProperties } from 'vue'\r\nimport { isPromise } from '../../utils/validate'\r\nimport { useConfig } from '../config-provider/useConfig'\r\nimport SpinIcon from './spin-icon.vue'\r\n\r\nconst classPrefix = 'adm-switch'\r\n\r\nexport interface SwitchProps {\r\n  loading?: boolean\r\n  disabled?: boolean\r\n  checked?: boolean | undefined\r\n  defaultChecked?: boolean\r\n  /** @deprecated use `onChange` instead */\r\n  beforeChange?: (val: boolean) => Promise<void>\r\n  onChange?: (checked: boolean) => void | Promise<void>\r\n  checkedText?: string | VNode | (() => VNode)\r\n  uncheckedText?: string | VNode | (() => VNode)\r\n  // CSS 变量支持\r\n  checkedColor?: string\r\n  width?: string\r\n  height?: string\r\n  borderWidth?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<SwitchProps>(), {\r\n  defaultChecked: false,\r\n  checked: undefined,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:checked': [checked: boolean]\r\n  change: [checked: boolean]\r\n}>()\r\n\r\n// 响应式状态\r\nconst changing = ref(false)\r\nconst innerChecked = ref(props.defaultChecked)\r\n\r\nconst { locale } = useConfig()\r\n\r\n// 实现类似 usePropsValue 的逻辑\r\nconst isControlled = computed(() => props.checked !== undefined)\r\n\r\nconst checked = computed(() => {\r\n  return isControlled.value ? props.checked! : innerChecked.value\r\n})\r\n\r\nconst disabled = computed(() => props.disabled || props.loading || false)\r\n\r\n// 核心的状态设置函数，模拟 usePropsValue 的 setChecked\r\nconst setChecked = async (nextChecked: boolean) => {\r\n  // 非受控模式：直接更新内部状态\r\n  if (!isControlled.value) {\r\n    innerChecked.value = nextChecked\r\n  }\r\n\r\n  // 发出事件（受控模式父组件需要监听来更新状态）\r\n  emit('update:checked', nextChecked)\r\n  emit('change', nextChecked)\r\n\r\n  // 调用 onChange 回调\r\n  if (props.onChange) {\r\n    const result = props.onChange(nextChecked)\r\n    if (isPromise(result)) {\r\n      return result\r\n    }\r\n  }\r\n\r\n  return Promise.resolve()\r\n}\r\n\r\n// 监听受控模式下的 props.checked 变化\r\nwatch(\r\n  () => props.checked,\r\n  (newValue) => {\r\n    if (isControlled.value && newValue !== undefined) {\r\n      // 受控模式下不需要同步到 innerChecked，因为 checked 计算属性会直接使用 props.checked\r\n    }\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\n// 渲染文本内容\r\nconst renderCheckedText = computed(() => {\r\n  if (!props.checkedText) return null\r\n\r\n  if (typeof props.checkedText === 'function') {\r\n    return props.checkedText()\r\n  }\r\n\r\n  if (typeof props.checkedText === 'string') {\r\n    return h('span', props.checkedText)\r\n  }\r\n\r\n  return props.checkedText\r\n})\r\n\r\nconst renderUncheckedText = computed(() => {\r\n  if (!props.uncheckedText) return null\r\n\r\n  if (typeof props.uncheckedText === 'function') {\r\n    return props.uncheckedText()\r\n  }\r\n\r\n  if (typeof props.uncheckedText === 'string') {\r\n    return h('span', props.uncheckedText)\r\n  }\r\n\r\n  return props.uncheckedText\r\n})\r\n\r\n// CSS 变量计算\r\nconst cssVars = computed<CSSProperties>(() => {\r\n  const vars: Record<string, string> = {}\r\n\r\n  if (props.checkedColor) {\r\n    vars['--checked-color'] = props.checkedColor\r\n  }\r\n  if (props.width) {\r\n    vars['--width'] = props.width\r\n  }\r\n  if (props.height) {\r\n    vars['--height'] = props.height\r\n  }\r\n  if (props.borderWidth) {\r\n    vars['--border-width'] = props.borderWidth\r\n  }\r\n\r\n  return vars\r\n})\r\n\r\n// 点击处理函数\r\nconst onClick = async () => {\r\n  if (disabled.value || props.loading || changing.value) {\r\n    return\r\n  }\r\n\r\n  const nextChecked = !checked.value\r\n\r\n  // 处理 beforeChange（已废弃的属性）\r\n  if (props.beforeChange) {\r\n    changing.value = true\r\n    try {\r\n      await props.beforeChange(nextChecked)\r\n      changing.value = false\r\n    } catch (e) {\r\n      changing.value = false\r\n      throw e\r\n    }\r\n  }\r\n\r\n  // 调用 setChecked 并处理可能的异步结果\r\n  const result = setChecked(nextChecked)\r\n  if (isPromise(result)) {\r\n    changing.value = true\r\n    try {\r\n      await result\r\n      changing.value = false\r\n    } catch (e) {\r\n      changing.value = false\r\n      throw e\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './switch.less';\r\n</style>\r\n","<template>\r\n  <span :class=\"tagClass\" :style=\"tagStyle\" @click=\"props.onClick\">\r\n    <slot />\r\n  </span>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\n// 标签颜色类型\r\nexport type TagColor = 'default' | 'primary' | 'success' | 'warning' | 'danger' | string\r\n\r\n// 填充样式类型\r\nexport type TagFill = 'solid' | 'outline'\r\n\r\nexport interface TagProps {\r\n  color?: TagColor\r\n  fill?: TagFill\r\n  round?: boolean\r\n  onClick?: (e: MouseEvent) => void\r\n  // CSS Variables\r\n  '--border-color'?: string\r\n  '--background-color'?: string\r\n  '--text-color'?: string\r\n  '--border-radius'?: string\r\n}\r\n\r\n// 颜色映射\r\nexport const colorRecord: Record<string, string> = {\r\n  default: 'var(--adm-color-text-secondary, #666666)',\r\n  primary: 'var(--adm-color-primary, #1677ff)',\r\n  success: 'var(--adm-color-success, #00b578)',\r\n  warning: 'var(--adm-color-warning, #ff8f1f)',\r\n  danger: 'var(--adm-color-danger, #ff3141)',\r\n}\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\nconst classPrefix = 'adm-tag'\r\n\r\nconst props = withDefaults(defineProps<TagProps>(), {\r\n  color: 'default',\r\n  fill: 'solid',\r\n  round: false,\r\n})\r\n\r\nconst tagClass = computed(() => [\r\n  classPrefix,\r\n  {\r\n    [`${classPrefix}-round`]: props.round,\r\n  },\r\n])\r\n\r\nconst resolvedColor = computed(() => {\r\n  return colorRecord[props.color] ?? props.color\r\n})\r\n\r\nconst tagStyle = computed(() => {\r\n  const style: Record<string, string> = {\r\n    '--border-color': resolvedColor.value,\r\n    '--text-color': props.fill === 'outline' ? resolvedColor.value : '#ffffff',\r\n    '--background-color': props.fill === 'outline' ? 'transparent' : resolvedColor.value,\r\n  }\r\n\r\n  // 添加用户自定义的 CSS 变量\r\n  if (props['--border-color']) {\r\n    style['--border-color'] = props['--border-color']\r\n  }\r\n  if (props['--background-color']) {\r\n    style['--background-color'] = props['--background-color']\r\n  }\r\n  if (props['--text-color']) {\r\n    style['--text-color'] = props['--text-color']\r\n  }\r\n  if (props['--border-radius']) {\r\n    style['--border-radius'] = props['--border-radius']\r\n  }\r\n\r\n  return style\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './tag.less';\r\n</style>\r\n","import { onMounted, type Ref } from 'vue'\n\ninterface InputHandleKeyDownType {\n  onEnterPress?: (e: KeyboardEvent) => void\n  onKeyDown?: (e: KeyboardEvent) => void\n  enterKeyHint?: string\n  nativeInputRef: Ref<HTMLInputElement | HTMLTextAreaElement>\n}\n\nexport function useInputHandleKeyDown({\n  onEnterPress,\n  onKeyDown,\n  nativeInputRef,\n  enterKeyHint,\n}: InputHandleKeyDownType) {\n  const handleKeydown = (e: KeyboardEvent) => {\n    if (onEnterPress && (e.code === 'Enter' || e.keyCode === 13)) {\n      onEnterPress(e)\n    }\n    onKeyDown?.(e)\n  }\n\n  onMounted(() => {\n    const ele = nativeInputRef.value\n\n    if (!enterKeyHint || !ele) return\n\n    ele.setAttribute('enterkeyhint', enterKeyHint)\n  })\n\n  return handleKeydown\n}\n","<template>\n  <div v-bind:class=\"{ [classPrefix]: true, horizontal }\">\n    <textarea\n      ref=\"nativeTextAreaRef\"\n      :class=\"`${classPrefix}-element`\"\n      :rows=\"finalRows\"\n      :value=\"currentValue\"\n      :placeholder=\"placeholder\"\n      :id=\"id\"\n      :autocomplete=\"autoComplete\"\n      :autofocus=\"autoFocus\"\n      :disabled=\"disabled\"\n      :readonly=\"readOnly\"\n      :name=\"name\"\n      @input=\"handleInput\"\n      @compositionstart=\"handleCompositionStart\"\n      @compositionend=\"handleCompositionEnd\"\n      @focus=\"onFocus\"\n      @blur=\"onBlur\"\n      @click=\"onClick\"\n      @keydown=\"handleKeydown\"\n    />\n\n    <!-- 字符计数 -->\n    <div v-if=\"showCountDisplay\" :class=\"`${classPrefix}-count`\">\n      <component v-if=\"typeof showCount === 'function'\" :is=\"showCountDisplay\" />\n      <template v-else>{{ showCountDisplay }}</template>\n    </div>\n\n    <!-- 自动调整高度的隐藏 textarea -->\n    <textarea\n      v-if=\"autoSize\"\n      ref=\"hiddenTextAreaRef\"\n      :class=\"`${classPrefix}-element ${classPrefix}-element-hidden`\"\n      :value=\"currentValue\"\n      :rows=\"finalRows\"\n      aria-hidden=\"true\"\n      readonly\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, ref, watch, type Ref } from 'vue'\nimport { devError } from '../../utils/dev-log'\nimport runes from 'runes2'\nimport type { TextAreaProps } from './types.ts'\nimport { useInputHandleKeyDown } from './useInputHandleKeyDown'\n\nconst classPrefix = 'adm-text-area'\n\nconst props = withDefaults(defineProps<TextAreaProps>(), {\n  rows: 2,\n  horizontal: false,\n  showCount: false,\n  autoSize: false,\n  defaultValue: '',\n})\n\nconst emit = defineEmits<{\n  'update:value': [value: string]\n  change: [value: string]\n  focus: [e: FocusEvent]\n  blur: [e: FocusEvent]\n  click: [e: MouseEvent]\n}>()\n\n// 事件处理\nconst onFocus = (e: FocusEvent) => {\n  emit('focus', e)\n  props.onFocus?.(e)\n}\n\nconst onBlur = (e: FocusEvent) => {\n  emit('blur', e)\n  props.onBlur?.(e)\n}\n\nconst onClick = (e: MouseEvent) => {\n  emit('click', e)\n  props.onClick?.(e)\n}\n\n// 引用\nconst nativeTextAreaRef = ref<HTMLTextAreaElement | null>(null)\nconst hiddenTextAreaRef = ref<HTMLTextAreaElement | null>(null)\nconst heightRef = ref<string>('auto')\nconst compositingRef = ref(false)\n\n// 状态管理 - 仿照 React usePropsValue 模式\nconst innerValue = ref(props.defaultValue || '')\nconst isControlled = computed(() => props.value !== undefined)\n\nconst currentValue = computed(() => {\n  const val = isControlled.value ? props.value : innerValue.value\n  if (val === null) {\n    devError(\n      'TextArea',\n      '`value` prop on `TextArea` should not be `null`. Consider using an empty string to clear the component.',\n    )\n    return ''\n  }\n  return val || ''\n})\n\nconst setValue = (newValue: string) => {\n  if (!isControlled.value) {\n    innerValue.value = newValue\n  }\n  emit('update:value', newValue)\n  emit('change', newValue)\n  props.onChange?.(newValue)\n}\n\n// 键盘事件处理\nconst handleKeydown = useInputHandleKeyDown({\n  onEnterPress: props.onEnterPress,\n  onKeyDown: props.onKeyDown,\n  nativeInputRef: nativeTextAreaRef as Ref<HTMLTextAreaElement>,\n  enterKeyHint: props.enterKeyHint,\n})\n\n// 输入处理\nconst handleInput = (e: Event) => {\n  const target = e.target as HTMLTextAreaElement\n  let value = target.value\n\n  if (props.maxLength && !compositingRef.value) {\n    value = runes(value).slice(0, props.maxLength).join('')\n  }\n  setValue(value)\n}\n\nconst handleCompositionStart = (e: CompositionEvent) => {\n  compositingRef.value = true\n  props.onCompositionStart?.(e)\n}\n\nconst handleCompositionEnd = (e: CompositionEvent) => {\n  compositingRef.value = false\n  if (props.maxLength) {\n    const target = e.target as HTMLTextAreaElement\n    const value = target.value\n    setValue(runes(value).slice(0, props.maxLength).join(''))\n  }\n  props.onCompositionEnd?.(e)\n}\n\n// 行数计算\nconst finalRows = computed(() => {\n  let rows = props.rows || 2\n  if (typeof props.autoSize === 'object') {\n    if (props.autoSize.maxRows && rows > props.autoSize.maxRows) {\n      rows = props.autoSize.maxRows\n    }\n    if (props.autoSize.minRows && rows < props.autoSize.minRows) {\n      rows = props.autoSize.minRows\n    }\n  }\n  return rows\n})\n\n// 字符计数显示\nconst showCountDisplay = computed(() => {\n  if (!props.showCount) return null\n\n  const valueLength = runes(currentValue.value).length\n\n  if (typeof props.showCount === 'function') {\n    return props.showCount(valueLength, props.maxLength)\n  }\n\n  return props.maxLength === undefined ? valueLength : `${valueLength}/${props.maxLength}`\n})\n\n// 自动调整高度\nconst updateHeight = async () => {\n  if (!props.autoSize) return\n\n  await nextTick()\n\n  const textArea = nativeTextAreaRef.value\n  const hiddenTextArea = hiddenTextAreaRef.value\n\n  if (!textArea || !hiddenTextArea) return\n\n  textArea.style.height = heightRef.value\n\n  let height = hiddenTextArea.scrollHeight\n\n  if (typeof props.autoSize === 'object') {\n    const computedStyle = window.getComputedStyle(textArea)\n    const lineHeight = parseFloat(computedStyle.lineHeight)\n\n    if (props.autoSize.minRows) {\n      height = Math.max(height, props.autoSize.minRows * lineHeight)\n    }\n    if (props.autoSize.maxRows) {\n      height = Math.min(height, props.autoSize.maxRows * lineHeight)\n    }\n  }\n\n  heightRef.value = `${height}px`\n  textArea.style.height = `${height}px`\n}\n\n// 监听值变化，更新高度\nwatch(() => [currentValue.value, props.autoSize], updateHeight, {\n  immediate: true,\n})\n\n// 暴露方法给父组件\ndefineExpose({\n  clear: () => {\n    setValue('')\n  },\n  focus: () => {\n    nativeTextAreaRef.value?.focus()\n  },\n  blur: () => {\n    nativeTextAreaRef.value?.blur()\n  },\n  get nativeElement() {\n    return nativeTextAreaRef.value\n  },\n})\n</script>\n\n<style lang=\"less\" scoped>\n@import './text-area.less';\n</style>\n","<template>\r\n  <Mask\r\n    :visible=\"visible\"\r\n    destroyOnClose\r\n    :opacity=\"0\"\r\n    :disableBodyScroll=\"!maskClickable\"\r\n    :getContainer=\"getContainer\"\r\n    :afterClose=\"afterClose\"\r\n    :style=\"{\r\n      pointerEvents: maskClickable ? 'none' : 'auto',\r\n      ...maskStyle,\r\n    }\"\r\n    :class=\"classNames(`${classPrefix}-mask`, maskClassName)\"\r\n    :stopPropagation=\"stopPropagation\"\r\n  >\r\n    <div :class=\"classNames(`${classPrefix}-wrap`)\">\r\n      <div\r\n        :style=\"{ top: computedTop }\"\r\n        :class=\"\r\n          classNames(\r\n            `${classPrefix}-main`,\r\n            icon ? `${classPrefix}-main-icon` : `${classPrefix}-main-text`,\r\n          )\r\n        \"\r\n      >\r\n        <div v-if=\"iconElement\" :class=\"`${classPrefix}-icon`\">\r\n          <component :is=\"iconElement\" />\r\n        </div>\r\n        <AutoCenter v-if=\"content\">\r\n          <component v-if=\"isVNode(content)\" :is=\"content\" />\r\n          <span v-else>{{ content }}</span>\r\n        </AutoCenter>\r\n      </div>\r\n    </div>\r\n  </Mask>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, isVNode, type VNode, type Component } from 'vue'\r\nimport classNames from 'classnames'\r\nimport { CheckOutline, CloseOutline } from 'ant-mobile-icons-vue3'\r\nimport SpinLoading from '../spin-loading/index.vue'\r\nimport AutoCenter from '../auto-center/index.vue'\r\nimport Mask from '../mask/index.vue'\r\n\r\nexport interface ToastProps {\r\n  afterClose?: () => void\r\n  maskStyle?: Record<string, string | number>\r\n  maskClassName?: string\r\n  maskClickable?: boolean\r\n  content?: string | VNode\r\n  icon?: 'success' | 'fail' | 'loading' | VNode | Component\r\n  duration?: number\r\n  position?: 'top' | 'bottom' | 'center'\r\n  visible?: boolean\r\n  getContainer?: string | HTMLElement | null\r\n  stopPropagation?: string[]\r\n}\r\n\r\nconst props = withDefaults(defineProps<ToastProps>(), {\r\n  maskClickable: true,\r\n  stopPropagation: () => ['click'],\r\n  position: 'center',\r\n  duration: 2000,\r\n})\r\n\r\nconst classPrefix = 'adm-toast'\r\n\r\nconst iconElement = computed(() => {\r\n  if (props.icon === null || props.icon === undefined) return null\r\n\r\n  switch (props.icon) {\r\n    case 'success':\r\n      return CheckOutline\r\n    case 'fail':\r\n      return CloseOutline\r\n    case 'loading':\r\n      return SpinLoading\r\n    default:\r\n      return props.icon\r\n  }\r\n})\r\n\r\nconst computedTop = computed(() => {\r\n  switch (props.position) {\r\n    case 'top':\r\n      return '20%'\r\n    case 'bottom':\r\n      return '80%'\r\n    default:\r\n      return '50%'\r\n  }\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './index.less';\r\n</style>\r\n","import { h, render, type VNode, type ComponentPublicInstance } from 'vue'\r\nimport ToastComponent from './toast.vue'\r\nimport type { ToastProps } from './toast.vue'\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\r\nexport interface ToastShowProps extends Omit<ToastProps, 'visible'> {}\r\n\r\nexport interface ToastHandler {\r\n  close: () => void\r\n}\r\n\r\nexport interface ToastConfig {\r\n  duration?: number\r\n  position?: 'top' | 'bottom' | 'center'\r\n  maskClickable?: boolean\r\n}\r\n\r\n// 简单的单例管理\r\nclass ToastManager {\r\n  private container: HTMLElement | null = null\r\n  private currentTimeout: number | null = null\r\n  private currentInstance: ComponentPublicInstance | null = null\r\n\r\n  private defaultConfig: Required<Pick<ToastProps, 'duration' | 'position' | 'maskClickable'>> = {\r\n    duration: 2000,\r\n    position: 'center',\r\n    maskClickable: true,\r\n  }\r\n\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  private mergeProps<T extends Record<string, any>>(defaults: T, props: Partial<T>): T {\r\n    return { ...defaults, ...props }\r\n  }\r\n\r\n  private createContainer(): HTMLElement {\r\n    const container = document.createElement('div')\r\n    container.style.position = 'relative'\r\n    container.style.zIndex = '9999'\r\n    document.body.appendChild(container)\r\n    return container\r\n  }\r\n\r\n  private cleanup(): void {\r\n    if (this.container) {\r\n      // 使用 render(null) 来清理组件\r\n      render(null, this.container)\r\n      document.body.removeChild(this.container)\r\n      this.container = null\r\n      this.currentInstance = null\r\n    }\r\n  }\r\n\r\n  show(options: ToastShowProps | string): ToastHandler {\r\n    const mergedOptions = typeof options === 'string' ? { content: options } : options\r\n    const props = this.mergeProps(this.defaultConfig, mergedOptions)\r\n    // 清理之前的实例\r\n    this.clear()\r\n\r\n    // 创建新容器\r\n    this.container = this.createContainer()\r\n\r\n    // 创建虚拟节点\r\n    const vnode = h(ToastComponent, {\r\n      ...props,\r\n      visible: true,\r\n      afterClose: () => {\r\n        this.cleanup()\r\n        // if (mergedOptions && typeof mergedOptions === 'object') {\r\n        //   mergedOptions.afterClose?.()\r\n        // }\r\n      },\r\n    })\r\n\r\n    // 渲染组件\r\n    render(vnode, this.container)\r\n    this.currentInstance = vnode.component?.proxy || null\r\n\r\n    // 设置自动关闭定时器\r\n    if (props.duration !== 0) {\r\n      this.currentTimeout = window.setTimeout(() => {\r\n        this.clear()\r\n        if (mergedOptions && typeof mergedOptions === 'object') {\r\n          mergedOptions.afterClose?.()\r\n        }\r\n      }, props.duration)\r\n    }\r\n\r\n    return {\r\n      close: () => this.clear(),\r\n    }\r\n  }\r\n\r\n  clear(): void {\r\n    if (this.currentTimeout) {\r\n      window.clearTimeout(this.currentTimeout)\r\n      this.currentTimeout = null\r\n    }\r\n    this.cleanup()\r\n  }\r\n\r\n  config(options: ToastConfig): void {\r\n    if (options.duration !== undefined) {\r\n      this.defaultConfig.duration = options.duration\r\n    }\r\n    if (options.position !== undefined) {\r\n      this.defaultConfig.position = options.position\r\n    }\r\n    if (options.maskClickable !== undefined) {\r\n      this.defaultConfig.maskClickable = options.maskClickable\r\n    }\r\n  }\r\n\r\n  // 便捷方法\r\n  success(\r\n    content: string | VNode,\r\n    options?: Omit<ToastShowProps, 'content' | 'icon'>,\r\n  ): ToastHandler {\r\n    return this.show({ ...options, content, icon: 'success' })\r\n  }\r\n\r\n  fail(content: string | VNode, options?: Omit<ToastShowProps, 'content' | 'icon'>): ToastHandler {\r\n    return this.show({ ...options, content, icon: 'fail' })\r\n  }\r\n\r\n  loading(\r\n    content: string | VNode,\r\n    options?: Omit<ToastShowProps, 'content' | 'icon'>,\r\n  ): ToastHandler {\r\n    return this.show({ ...options, content, icon: 'loading' })\r\n  }\r\n}\r\n\r\n// 创建单例实例\r\nconst toastManager = new ToastManager()\r\n\r\n// 导出方法\r\nexport const show = toastManager.show.bind(toastManager)\r\nexport const clear = toastManager.clear.bind(toastManager)\r\nexport const config = toastManager.config.bind(toastManager)\r\nexport const success = toastManager.success.bind(toastManager)\r\nexport const fail = toastManager.fail.bind(toastManager)\r\nexport const loading = toastManager.loading.bind(toastManager)\r\nexport default {\r\n  show,\r\n  clear,\r\n  config,\r\n  success,\r\n  fail,\r\n  loading,\r\n}\r\n","<template>\r\n  <div :class=\"waterMarkClass\" :style=\"waterMarkStyle\" />\r\n</template>\r\n\r\n<script lang=\"ts\">\r\n// 字体样式类型\r\ntype FontStyle = 'none' | 'normal' | 'italic' | 'oblique'\r\n\r\n// 字体粗细类型\r\ntype FontWeight = 'normal' | 'light' | 'weight' | number\r\n\r\n// WaterMark 组件 Props\r\nexport interface WaterMarkProps {\r\n  gapX?: number\r\n  gapY?: number\r\n  zIndex?: number\r\n  width?: number\r\n  height?: number\r\n  rotate?: number\r\n  image?: string\r\n  imageWidth?: number\r\n  imageHeight?: number\r\n  content?: string | string[]\r\n  fontColor?: string\r\n  fontStyle?: FontStyle\r\n  fontFamily?: string\r\n  fontWeight?: FontWeight\r\n  fontSize?: number | string\r\n  fullPage?: boolean\r\n  // CSS Variables\r\n  '--z-index'?: string\r\n}\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch, onMounted, nextTick } from 'vue'\r\n\r\nconst classPrefix = 'adm-water-mark'\r\n\r\nconst props = withDefaults(defineProps<WaterMarkProps>(), {\r\n  fullPage: true,\r\n  gapX: 24,\r\n  gapY: 48,\r\n  width: 120,\r\n  height: 64,\r\n  rotate: -22,\r\n  imageWidth: 120,\r\n  imageHeight: 64,\r\n  fontStyle: 'normal',\r\n  fontWeight: 'normal',\r\n  fontColor: 'rgba(0,0,0,.15)',\r\n  fontSize: 14,\r\n  fontFamily: 'sans-serif',\r\n})\r\n\r\nconst base64Url = ref('')\r\n\r\nconst waterMarkClass = computed(() => [\r\n  classPrefix,\r\n  {\r\n    [`${classPrefix}-full-page`]: props.fullPage,\r\n  },\r\n])\r\n\r\nconst waterMarkStyle = computed(() => {\r\n  const style: Record<string, string | number | undefined> = {\r\n    zIndex: props.zIndex,\r\n    backgroundSize: `${props.gapX + props.width}px`,\r\n    backgroundImage: base64Url.value === '' ? undefined : `url('${base64Url.value}')`,\r\n  }\r\n\r\n  // 添加用户自定义的 CSS 变量\r\n  if (props['--z-index']) {\r\n    style['--z-index'] = props['--z-index']\r\n  }\r\n\r\n  return style\r\n})\r\n\r\nconst generateWaterMark = async () => {\r\n  const canvas = document.createElement('canvas')\r\n  const ratio = window.devicePixelRatio\r\n  const ctx = canvas.getContext('2d')\r\n\r\n  const canvasWidth = (props.gapX + props.width) * ratio\r\n  const canvasHeight = (props.gapY + props.height) * ratio\r\n\r\n  const markWidth = props.width * ratio\r\n  const markHeight = props.height * ratio\r\n\r\n  canvas.setAttribute('width', canvasWidth.toString())\r\n  canvas.setAttribute('height', canvasHeight.toString())\r\n\r\n  if (!ctx) {\r\n    throw new Error('Canvas is not supported in the current environment')\r\n  }\r\n\r\n  ctx.save()\r\n\r\n  if (props.image) {\r\n    // 绘制图片水印\r\n    ctx.translate(markWidth / 2, markHeight / 2)\r\n    ctx.rotate((Math.PI / 180) * Number(props.rotate))\r\n\r\n    try {\r\n      const img = await loadImage(props.image)\r\n      ctx.drawImage(\r\n        img,\r\n        (-props.imageWidth * ratio) / 2,\r\n        (-props.imageHeight * ratio) / 2,\r\n        props.imageWidth * ratio,\r\n        props.imageHeight * ratio,\r\n      )\r\n      ctx.restore()\r\n      base64Url.value = canvas.toDataURL()\r\n    } catch (error) {\r\n      console.error('Failed to load watermark image:', error)\r\n      base64Url.value = ''\r\n    }\r\n  } else if (props.content) {\r\n    // 绘制文字水印\r\n    ctx.textBaseline = 'middle'\r\n    ctx.textAlign = 'center'\r\n    ctx.translate(markWidth / 2, markHeight / 2)\r\n    ctx.rotate((Math.PI / 180) * Number(props.rotate))\r\n\r\n    const markSize = Number(props.fontSize) * ratio\r\n    ctx.font = `${props.fontStyle} normal ${props.fontWeight} ${markSize}px/${markHeight}px ${props.fontFamily}`\r\n    ctx.fillStyle = props.fontColor\r\n\r\n    if (Array.isArray(props.content)) {\r\n      props.content.forEach((item: string, index: number) => {\r\n        ctx.fillText(item, 0, index * markSize)\r\n      })\r\n    } else {\r\n      ctx.fillText(props.content, 0, 0)\r\n    }\r\n\r\n    ctx.restore()\r\n    base64Url.value = canvas.toDataURL()\r\n  }\r\n}\r\n\r\nconst loadImage = (src: string): Promise<HTMLImageElement> => {\r\n  return new Promise((resolve, reject) => {\r\n    const img = new Image()\r\n    img.crossOrigin = 'anonymous'\r\n    img.referrerPolicy = 'no-referrer'\r\n    img.onload = () => resolve(img)\r\n    img.onerror = reject\r\n    img.src = src\r\n  })\r\n}\r\n\r\n// 监听所有影响水印生成的属性\r\nwatch(\r\n  [\r\n    () => props.gapX,\r\n    () => props.gapY,\r\n    () => props.rotate,\r\n    () => props.fontStyle,\r\n    () => props.fontWeight,\r\n    () => props.width,\r\n    () => props.height,\r\n    () => props.fontFamily,\r\n    () => props.fontColor,\r\n    () => props.image,\r\n    () => props.content,\r\n    () => props.fontSize,\r\n    () => props.imageWidth,\r\n    () => props.imageHeight,\r\n  ],\r\n  () => {\r\n    nextTick(() => {\r\n      generateWaterMark()\r\n    })\r\n  },\r\n  { immediate: true },\r\n)\r\n\r\nonMounted(() => {\r\n  generateWaterMark()\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import './water-mark.less';\r\n</style>\r\n","import { LoremIpsum } from 'lorem-ipsum'\n\nexport const lorem = new LoremIpsum({\n  sentencesPerParagraph: {\n    max: 8,\n    min: 4,\n  },\n  wordsPerSentence: {\n    max: 16,\n    min: 4,\n  },\n})\n\n// lorem.generateWords(1)\n// lorem.generateSentences(5)\n// lorem.generateParagraphs(7)\n"],"names":["_sfc_main$1E","_hoisted_1","_openBlock","_createElementBlock","_mergeProps","_ctx","_createElementVNode","_renderSlot","toCSSLength","val","emit","__emit","lazyRef","ref","observer","onMounted","entries","entry","onUnmounted","_cache","classPrefix","props","__props","defaultPlaceholder","h","ImageIcon","defaultFallback","BrokenImageIcon","loaded","failed","initialized","containerRef","imgRef","currentSrc","computed","currentSrcSet","watch","containerStyle","style","imgStyle","handleLoad","event","_a","handleError","handleContainerClick","handleLazyActive","placeholder","fallback","_createBlock","LazyDetector","_Fragment","_resolveDynamicComponent","args","fallbackComponent","FallbackIcon","nativeStyle","Image","Dot","slots","useSlots","hasChildren","isDot","dot","showBadge","badgeClass","classNames","badgeStyle","_normalizeClass","_normalizeStyle","_toDisplayString","colorRecord","finalColor","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_renderList","i","isPromise","obj","isIOS","canUseDom","buttonRef","innerLoading","isLoading","isDisabled","currentLoadingIcon","DotLoading","buttonClasses","baseStyle","handleClick","result","error","handleTouchStart","handleTouchEnd","__expose","showHeader","headerClasses","classes","bodyClasses","handleBodyClick","handleHeaderClick","$slots","_createTextVNode","defaultConfigRef","setDefaultConfig","config","getDefaultConfig","enUS","CONFIG_INJECTION_KEY","useConfig","injectedConfig","inject","__default__","circumference","animatedPercent","animationId","isReversing","spinStyle","animate","startTime","startValue","endValue","animateStep","currentTime","elapsed","progress","easedProgress","t","checkMotionReduced","$attrs","bound","position","min","max","ret","isDev","devWarning","component","message","devError","measureCSSLength","raw","withUnit","rubberband","distance","dimension","constant","rubberbandIfOutOfBounds","supportsPassive","opts","unitStyle","reactive","rootRef","itemHeightMeasureRef","itemHeight","y","draggingRef","isAnimating","targetY","initUnitStyle","rootElment","label","animateToPosition","target","immediate","startY","duration","eased","onSelect","nextTick","itemHeightMeasure","syncPositionWithValue","targetIndex","item","finalPosition","shouldAnimate","newColumn","oldColumn","firstItem","scrollSelect","index","handleGestureState","data","handleDrag","state","direction","last","velocity","offset","boundNum","handleWheel","wheelDir","scrollY","speed","isDragging","startTouchY","lastTouchY","velocityTracker","e","handleTouchMove","currentY","deltaY","totalDelta","calculateVelocity","recent","previous","timeDiff","yDiff","handleWheelEvent","root","selectedIndex","renderAccessible","current","previousIndex","nextIndex","next","withCache","generate","cache","generateColumnsExtend","rawColumns","columns","column","items","v","useColumnsExtend","value","stored","rawColumnsValue","valueValue","temp","defaultRenderLabel","innerValue","newValue","timeout","extend","debounceTimer","handleSelect","_createVNode","SpinLoading","Wheel","_unref","opacityRecord","maskRef","isTransitioning","background","opacity","rgb","maskClasses","maskStyle","maskAriaLabel","lockScroll","unlockScroll","handleMaskClick","handleEnter","handleLeave","handleAfterEnter","handleAfterLeave","newVisible","_Transition","_Teleport","_withDirectives","defaultPopupBaseProps","CloseOutline","locale","componentConfig","containerElement","closeIcon","percent","active","maskVisible","popupRef","shouldRender","bodyClass","closeButtonClass","wrapperStyle","animatedBodyStyle","transform","startAnimation","newPercent","_b","handleCloseClick","handleSwipe","vTouch","el","binding","startX","endY","endX","deltaX","elementWithCleanup","Mask","currentConfirmText","currentCancelText","innerVisible","isControlled","currentVisible","setVisible","visible","tempValue","innerPickerValue","isValueControlled","currentValue","setValue","emitConfirm","defValue","first","actions","handleCancel","judgeValueIsExist","primarys","handleConfirm","jv","handlePickerChange","mergedStyle","isVNode","Popup","PickerView","SafeArea","useColumnsFn","options","depth","maxDepth","traverse","currentDepth","nextDepth","option","selected","currentOptions","selectedValue","targetOption","pickerProps","rest","columnsFn","pickerRef","Picker","prompt","resolve","container","app","createApp","cleanup","CascadePicker","columnFn","nativeElementRef","renderHeader","cssVars","vars","CheckListContextKey","mergedProps","listMode","check","uncheck","provide","List","clickable","onClick","showArrow","mergedArrowIcon","hasPrefix","hasTitle","hasDescription","hasExtra","listItemClass","RightOutline","context","finalReadOnly","itemClasses","ListItem","generateIntArray","from","to","array","lineCount","lineCountArr","getlineCountStyle","idx","$props","titleStyle","rootClass","rootStyle","showTitle","showParagraph","titleWidth","paragraphRows","paragraphWidth","contentStyle","SkeletonTitle","SkeletonParagraph","throttle","func","wait","timeoutId","lastCallTime","now","tabListContainerRef","activeLineRef","tabRefs","internalActiveKey","lineX","lineWidth","leftMaskOpacity","rightMaskOpacity","animating","activeKey","isRTL","panes","defaultSlot","traverseVNode","vnode","type","key","tabProps","titleSlot","keyToIndexRecord","record","pane","firstActiveKey","hasActiveContent","activePane","defaultFn","child","vnodes","fn","nodes","useShouldRender","forceRender","destroyOnClose","setTabRef","fromMutation","activeIndex","activeLine","activeTabWrapper","activeTab","activeTabLeft","activeTabWidth","activeTabWrapperLeft","activeTabWrapperWidth","containerWidth","containerScrollWidth","activeLineWidth","x","width","w","maxScrollDistance","nextScrollLeft","updateMask","scrollLeft","showLeftMask","showRightMask","handleKeyDown","keys","currentIndex","isNext","isPrev","currentKey","startIndex","length","p","handleTabClick","$event","optionSkeleton","useCascaderValueExtend","names","valueName","childrenName","nptions","useFieldNames","fieldNames","disabled","children","labelName","disabledName","generateValueExtend","tabActiveIndex","levels","reachedEnd","newVal","onItemSelect","selectValue","whetherLoading","onTabsChange","Tabs","level","Tab","Skeleton","CheckList","select","_index","CheckListItem","popRef","cascaderViewRef","generateItems","displayItems","valueRef","toRef","visibleRef","visibleProp","viewProps","handleClose","title","CascaderView","handleResolve","Cascader","attachPropertiesToComponent","properties","index$9","totalLockCount","BODY_LOCK_CLASS","createTouch","touch","LOCK_DIRECTION_DISTANCE","getScrollParent","element","overflowScrollReg","defaultRoot","node","overflowY","overflow","getScrollableElement","checkSupportsPassive","useLockScroll","shouldLock","isLocked","onTouchMove","scrollableParent","scrollHeight","offsetHeight","scrollTop","height","status","lock","unlock","scale","wrapperClass","maskClass","animatedStyle","showAnimation","hideAnimation","groupContext","innerChecked","finalChecked","setChecked","finalDisabled","finalSetChecked","newChecked","handleChange","labelClasses","IndeterminateIcon","CheckIcon","panelRefs","panelHeights","currentActiveKey","setActiveKey","emitValue","panels","panelProps","isActive","mockEvent","getArrowIcon","panel","arrow","DownOutline","setPanelRef","getPanelStyle","updatePanelHeight","newKeys","oldKeys","allKeys","module","this","s","a","d","n","o","r","u","TILL_NOW","dayjs","isoWeek","isoWeeksInYear","isLeapYear","precisionRankRecord","generateDatePickerColumns","precision","renderLabel","filter","tillNow","minYear","minMonth","minDay","minHour","minMinute","minSecond","maxYear","maxMonth","maxDay","maxHour","maxMinute","maxSecond","rank","selectedYear","firstDayInSelectedMonth","convertStringArrayToDate","selectedMonth","selectedDay","selectedHour","selectedMinute","selectedSecond","isInMinYear","isInMaxYear","isInMinMonth","isInMaxMonth","isInMinDay","isInMaxDay","isInMinHour","isInMaxHour","isInMinMinute","isInMaxMinute","generateColumn","prefix","currentFilter","stringArray","years","months","lower","upper","days","hours","minutes","seconds","convertDateToStringArray","date","yearString","monthString","dateString","hourString","minuteString","secondString","quarterOfYear","minQuarter","maxQuarter","selectedQuarter","quarters","day","quarterString","minWeek","maxWeek","minWeekday","maxWeekday","selectedWeek","selectedWeekday","isInMinWeek","isInMaxWeek","selectedYearWeeks","weeks","weekString","weekdayString","precisionLengthRecord","weekUtils.convertDateToStringArray","quarterUtils.convertDateToStringArray","datePrecision","dateUtils.convertDateToStringArray","weekUtils.convertStringArrayToDate","quarterUtils.convertStringArrayToDate","dateUtils.convertStringArrayToDate","weekUtils.generateDatePickerColumns","quarterUtils.generateDatePickerColumns","dateUtils.generateDatePickerColumns","mergedRenderLabel","info","pickerValue","adaptColumns","reactColumns","onConfirm","handleAfterShow","handleAfterClose","getActions","_withCtx","defaultValue","onResolve","onReject","DatePicker","currentApp","showDatePicker","reject","handleReject","PromptComponent","showYearPicker","showMonthPicker","showTimePicker","showDateTimePicker","DatePickerPrompt","zhCNRenderLabel","enUSRenderLabel","createRenderLabel","customRenderLabel","minDate","maxDate","validPickerValue","year","month","maxDayInMonth","stringValues","valueToEmit","useRenderLabel","padding","ariaProps","Button","loadingStates","popupClasses","cls","contentClasses","normalizedActions","row","handleActionClick","action","loadingKey","name","CenterPopup","AutoCenter","rowIndex","actionIndex","DialogActionButton","closeFnSet","show","isDestroyed","close","afterClose","Dialog","alert","confirmText","clear","confirm","cancelText","index$8","mergedConfig","contentPosition","ELLIPSIS_TEXT","measureStyle","useMeasure","content","rows","expanded","expandNode","collapseNode","fullMeasureRef","singleRowMeasureRef","midMeasureRef","runes","runes2","contentChars","maxHeight","walkingIndexes","startMeasure","midIndex","fullMeasureHeight","rowMeasureHeight","diff","midHeight","_c","mid","renderContent","prefixContent","suffixContent","withStopPropagation","events","handler","evt","handleExpand","handleCollapse","showExpand","showCollapse","finalContent","handleContentClick","EmptyIcon","imageRecord","DefaultImage","DisconnectedImage","EmptyImage","BusyImage","contentPack","displayTitle","displayDescription","imageNode","isComponent","defaultFormContext","FormContextKey","NoStyleItemContextKey","useFormContext","provideFormContext","useNoStyleItemContext","provideNoStyleItemContext","toArray","candidate","createFieldId","formName","namePath","nameList","isRequired","rules","rule","mergeClasses","getValueFromEvent","keyIndex","generateKey","ValidateError","field","__publicField","FormValidator","validateMessages","finalValue","expectedLength","actualLength","valid","messageKey","defaultMessage","path","messages","defaultValidateMessages","FormStore","callbacks","preserve","values","flat","flatten","curKey","k","meta","currentMeta","hidden","oldValue","changedFields","allFields","_d","fields","defaultNames","errors","hasError","errorMessages","err","useForm","form","useWatch","bodyStyle","formStore","mergedValidateMessages","isIncludeArray","slot","changedValues","allValues","errorInfo","formContext","arr","formRef","formClasses","handleSubmit","tenPxTester","tester","convertPx","px","mergeProps","normalizePlacement","placement","elementRef","actualElement","getElement","targetRef","floatingRef","arrowRef","cleanupFn","cssVariables","update","floating","arrowElement","realPlacement","middlewareData","computePosition","shift","limitShift","flip","hide","side","arrowSide","arrowX","arrowY","arrowRotate","handleTargetClick","handleClickAway","targetElement","floatingElement","isClickInsideTarget","isClickInsideFloating","eventCleanupFns","autoUpdate","Wrapper","Arrow","undefinedFallback","notifyParentMetaChange","widgetRef","subMetas","nameKey","fieldControl","fieldValue","fieldMeta","watchEffect","mergedValidateTrigger","mergedDisabled","mergedHasFeedback","mergedLayout","isRenderFunction","isFieldRequired","fieldId","curErrors","subErrors","acc","warnings","curWarnings","subWarnings","requiredMark","requiredMarkStyle","optionalText","formatHelp","QuestionCircleOutline","Popover","labelElement","mergedDescription","childClasses","childComponent","slotContent","childProps","baseProps","handleBlur","noStyle","normalizedValue","warning","internalArray","operation","insertIndex","newField","currentValues","indices","b","handleAdd","watchedValues","childContent","headerRef","contentRef","pulling","pullingRef","isBottomPlacement","possibles","bounds","panelStyle","translateY","nearest","pre","cur","animateToY","header","newY","isAtTop","isAtBottom","isDraggingDown","isDraggingUp","shouldDragPanel","wasPulling","setHeight","initialY","onBeforeUnmount","styleObject","itemStyle","onItemClick","controlRef","imageWrapperRef","matrix","imageLoaded","imageSize","controlSize","currentZoom","imageWrapperStyle","handleTap","resetMatrix","handleImageLoad","img","fitImageToContainer","handleImageError","containerRect","scaleX","scaleY","startDistance","startScale","getDistance","touches","touch1","touch2","maxZoom","clampedScale","resolveContainer","getContainer","Slide","dragLockRef","currentX","slideWidth","startOffsetX","lastTouchTime","count","displayIndex","slidesInnerStyle","updateSlideWidth","swipeTo","boundedIndex","targetX","handleZoomChange","zoom","newOffsetX","timeDelta","maxOffset","boundedOffsetX","excess","offsetX","minIndex","maxIndex","velocityOffset","newIndex","image","slidesRef","handleSlideChange","images","boundIndex","Slides","handlerSet","createContainer","renderComponent","showImageViewer","clearImageViewer","isClosed","ImageViewer","unmount","newProps","newComponent","showMultiImageViewer","MultiImageViewer","Multi","normalizedChildren","flattenChildren","onSpaceClick","src","handleDelete","gapMeasureRef","inputRef","tasks","cellSize","idCountRef","imageViewerHandlerRef","deleteIcon","gridStyle","finalTasks","task","showUpload","visibleTasks","containerSize","size","resizeObserver","rect","gapMeasure","computedStyle","gapValue","newTasks","taskList","fileItem","processFile","file","fileList","beforeUpload","transformedFile","getFinalTasks","rawFiles","files","postFiles","exceed","currentTask","previewImage","handleImageClick","handleImageDelete","_","handleTaskDelete","taskId","Grid","PreviewItem","AddOutline","Space","useLockFn","lockRef","useThrottleFn","timer","overflowStylePatterns","isElement","isWindow","flag","nextFlagRef","scrollParent","doLoadMore","isRetry","checkLoadMore","parent","elementTop","nextFlag","retry","removeScrollListener","newParent","onScroll","InfiniteScrollContent","nativeInputRef","hasFocus","compositionStartRef","internalValue","clearAriaLabel","shouldShowClear","ariaLabel","checkValue","nextValue","boundValue","handleInput","handleFocus","handlePaste","handleKeyUp","handleCompositionStart","handleCompositionEnd","handleClearMouseDown","handleClear","updateEnterKeyHint","removeEnterKeyHint","focus","blur","nativeElement","loading","onAction","attrs","useAttrs","centerPopupProps","ModalActionButton","Modal","defaultProps","index$4","defaultBackIcon","LeftOutline","resolveIcon","mergedBackIcon","back","left","right","onLeftBack","textRef","delayLock","start","text","initial","onTransitionEnd","containerClass","getDotClass","innerRef","whetherScroll","innerHeight","handleItemClick","onVisibleChange","popoverProps","maxCount","sleep","time","springHeight","headHeight","threshold","defaultTexts","statusText","texts","animateHeight","targetHeight","startHeight","easeOut","reset","doRefresh","getScrollTop","checkScrollable","latestChecked","NativeInput","useResultIcon","mergedIcons","CheckCircleFill","CloseCircleFill","InformationCircleFill","ClockCircleFill","ExclamationCircleFill","fallbackIcon","composingRef","searchBarName","searchIcon","SearchOutline","shouldShowCancelButton","handleSearch","handleValueChange","handleEnterPress","handleCancelClick","handleCancelMouseDown","Input","itemClass","CheckMark","description","opt","selectedSet","isOptionDisabled","handleOptionClick","SelectorOptionItem","range","sortedPoints","point","getMarkStyle","getMarkClassName","dragging","prevValue","currentPosition","renderPopoverContent","handleMouseDown","startDrag","handleMove","moveEvent","clientX","sliderOffsetWidth","newPosition","handleEnd","ThumbIcon","getPointStyle","getPointClassName","isActived","propsValue","rawValue","sortValue","convertValue","alignValue","decimalLen","decimal","getMiniDecimal","fixedStr","toFixed","getDecimalLen","reverseValue","mergedDecimalLen","sliderValue","setSliderValue","onAfterChange","reversedValue","trackRef","valueBeforeDragRef","fillSize","fillStart","pointList","points","getValueByPosition","cell","nextVal","onTrackClick","track","sliderOffsetLeft","targetValue","nextSliderValue","onThumbDrag","valueBeforeDrag","Ticks","Thumb","Marks","focused","inputValue","stepperClass","prop","fixedValue","getValueAsType","parseValue","formatValue","setValueWithCheck","minDecimal","maxDecimal","handleInputChange","valueStr","triggerFocus","nextFocus","handleOffset","positive","stepValue","handleMinus","handlePlus","minusDisabled","plusDisabled","isFocused","MinusOutline","stepsClass","getStepStatus","stepStatus","currentStep","stepIcon","stepsContext","icon","finalIcon","stepClass","stepList","Steps","step","Step","changing","checked","nextChecked","renderCheckedText","renderUncheckedText","SpinIcon","tagClass","resolvedColor","tagStyle","useInputHandleKeyDown","onEnterPress","onKeyDown","enterKeyHint","handleKeydown","ele","onFocus","onBlur","nativeTextAreaRef","hiddenTextAreaRef","heightRef","compositingRef","finalRows","showCountDisplay","valueLength","updateHeight","textArea","hiddenTextArea","lineHeight","iconElement","CheckOutline","computedTop","ToastManager","defaults","render","mergedOptions","ToastComponent","toastManager","success","fail","base64Url","waterMarkClass","waterMarkStyle","generateWaterMark","canvas","ratio","ctx","canvasWidth","canvasHeight","markWidth","markHeight","loadImage","markSize","lorem","LoremIpsum"],"mappings":"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","x_google_ignoreList":[66,67,68,71]}