{"version":3,"file":"index.cjs","sources":["../packages/components/Icon/Icon.vue","../packages/hooks/useExposeRef.js","../packages/components/Button/Button.vue","../packages/components/Input/Input.vue","../packages/components/Form/Form.vue","../packages/components/FormItem/FormItem.vue","../packages/utils/classNames.js","../packages/hooks/useClassName.js","../packages/components/Tooltip/Tooltip.vue","../packages/components/Select/Select.vue","../packages/components/Option/Option.vue","../packages/components/OptionGroup/OptionGroup.vue","../packages/components/Pagination/Pagination.vue","../packages/components/Radio/Radio.vue","../packages/components/RadioGroup/RadioGroup.vue","../packages/components/RadioButton/RadioButton.vue","../packages/components/Switch/Switch.vue","../packages/components/Tag/Tag.vue","../packages/components/Alert/Alert.vue","../packages/components/Dialog/Dialog.vue","../packages/components/Notification/Notification.vue","../packages/components/Message/Message.vue","../packages/components/NotifiMessage/NotifiMessage.vue","../packages/components/DatePicker/DatePicker.vue","../packages/components/Empty/Empty.vue","../packages/components/Table/Table.vue","../packages/components/Table/TableColumn.vue","../packages/components/Banner/Banner.vue","../packages/utils/styleUtils.js","../packages/components/Tabs/Tabs.vue","../packages/components/Tabs/TabPane.vue","../packages/components/TabCard/TabCardItem.vue","../packages/components/TabCard/TabCard.vue","../packages/components/Breadcrumb/BreadcrumbSeparator.vue","../packages/components/Breadcrumb/Breadcrumb.vue","../node_modules/vant/es/utils/basic.mjs","../node_modules/vant/es/utils/props.mjs","../node_modules/@vant/use/dist/index.esm.mjs","../node_modules/vant/es/utils/dom.mjs","../node_modules/vant/es/utils/format.mjs","../node_modules/vant/es/utils/deep-assign.mjs","../node_modules/vant/es/locale/lang/zh-CN.mjs","../node_modules/vant/es/locale/index.mjs","../node_modules/vant/es/utils/create.mjs","../node_modules/vant/es/utils/constant.mjs","../node_modules/vant/es/utils/interceptor.mjs","../node_modules/vant/es/utils/with-install.mjs","../node_modules/vant/es/composables/on-popup-reopen.mjs","../node_modules/vant/es/composables/use-expose.mjs","../node_modules/vant/es/badge/Badge.mjs","../node_modules/vant/es/badge/index.mjs","../node_modules/vant/es/composables/use-global-z-index.mjs","../node_modules/vant/es/config-provider/ConfigProvider.mjs","../node_modules/vant/es/icon/Icon.mjs","../node_modules/vant/es/icon/index.mjs","../node_modules/vant/es/popup/shared.mjs","../node_modules/vant/es/composables/use-touch.mjs","../node_modules/vant/es/composables/use-lock-scroll.mjs","../node_modules/vant/es/composables/use-lazy-render.mjs","../node_modules/vant/es/composables/use-scope-id.mjs","../node_modules/vant/es/overlay/Overlay.mjs","../node_modules/vant/es/overlay/index.mjs","../node_modules/vant/es/popup/Popup.mjs","../node_modules/vant/es/popup/index.mjs","../packages/components/Picker/Picker.vue","../packages/index.js"],"sourcesContent":["<template>\r\n  <i \r\n    :class=\"iconClass\" \r\n    :style=\"iconStyle\"\r\n    v-bind=\"$attrs\"\r\n    @click=\"handleClick\"\r\n  >\r\n    <slot></slot>\r\n  </i>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed } from 'vue'\r\n\r\n// 定义组件名\r\ndefineOptions({\r\n  name: 'MIcon'\r\n})\r\n\r\nconst props = defineProps({\r\n  name: {\r\n    type: String,\r\n    required: true\r\n  },\r\n  size: {\r\n    type: [String, Number],\r\n    default: '16px'\r\n  },\r\n  color: {\r\n    type: String,\r\n    default: 'inherit'\r\n  },\r\n  spin: {\r\n    type: Boolean,\r\n    default: false\r\n  },\r\n  pulse: {\r\n    type: Boolean,\r\n    default: false\r\n  },\r\n  rotate: {\r\n    type: Number,\r\n    default: 0\r\n  },\r\n  flip: {\r\n    type: String,\r\n    default: undefined\r\n  },\r\n  prefix: {\r\n    type: String,\r\n    default: 'icon'\r\n  }\r\n})\r\n\r\nconst emit = defineEmits(['click'])\r\n\r\n// 计算图标类名\r\nconst iconClass = computed(() => {\r\n  const classes = ['iconfont']\r\n  \r\n  // 添加图标名称类\r\n  if (props.name) {\r\n    classes.push(`${props.prefix}-${props.name}`)\r\n  }\r\n  \r\n  // 添加动画类\r\n  if (props.spin) {\r\n    classes.push('icon-spin')\r\n  }\r\n  if (props.pulse) {\r\n    classes.push('icon-pulse')\r\n  }\r\n  \r\n  // 添加翻转类\r\n  if (props.flip) {\r\n    classes.push(`icon-flip-${props.flip}`)\r\n  }\r\n  \r\n  return classes\r\n})\r\n\r\n// 计算图标样式\r\nconst iconStyle = computed(() => {\r\n  const style = {}\r\n  \r\n  // 设置大小\r\n  if (props.size) {\r\n    if (typeof props.size === 'number') {\r\n      style.fontSize = `${props.size}px`\r\n    } else {\r\n      style.fontSize = props.size\r\n    }\r\n  }\r\n  \r\n  // 设置颜色\r\n  if (props.color) {\r\n    style.color = props.color\r\n  }\r\n  \r\n  // 设置旋转\r\n  if (props.rotate !== 0) {\r\n    style.transform = `rotate(${props.rotate}deg)`\r\n  }\r\n  \r\n  return style\r\n})\r\n\r\n// 点击事件处理\r\nconst handleClick = (event) => {\r\n  emit('click', event)\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n\r\n/* 旋转动画 */\r\n.icon-spin {\r\n  animation: icon-spin 1s linear infinite;\r\n}\r\n\r\n@keyframes icon-spin {\r\n  from {\r\n    transform: rotate(0deg);\r\n  }\r\n  to {\r\n    transform: rotate(360deg);\r\n  }\r\n}\r\n\r\n/* 脉冲动画 */\r\n.icon-pulse {\r\n  animation: icon-pulse 1s ease-in-out infinite;\r\n}\r\n\r\n@keyframes icon-pulse {\r\n  0% {\r\n    transform: scale(1);\r\n  }\r\n  50% {\r\n    transform: scale(1.1);\r\n  }\r\n  100% {\r\n    transform: scale(1);\r\n  }\r\n}\r\n\r\n/* 翻转效果 */\r\n.icon-flip-horizontal {\r\n  transform: scaleX(-1);\r\n}\r\n\r\n.icon-flip-vertical {\r\n  transform: scaleY(-1);\r\n}\r\n\r\n.icon-flip-both {\r\n  transform: scale(-1);\r\n}\r\n\r\n/* 当有旋转时，需要与翻转效果结合 */\r\n.icon-spin.icon-flip-horizontal {\r\n  animation: icon-spin-flip-horizontal 1s linear infinite;\r\n}\r\n\r\n.icon-spin.icon-flip-vertical {\r\n  animation: icon-spin-flip-vertical 1s linear infinite;\r\n}\r\n\r\n.icon-spin.icon-flip-both {\r\n  animation: icon-spin-flip-both 1s linear infinite;\r\n}\r\n\r\n@keyframes icon-spin-flip-horizontal {\r\n  from {\r\n    transform: rotate(0deg) scaleX(-1);\r\n  }\r\n  to {\r\n    transform: rotate(360deg) scaleX(-1);\r\n  }\r\n}\r\n\r\n@keyframes icon-spin-flip-vertical {\r\n  from {\r\n    transform: rotate(0deg) scaleY(-1);\r\n  }\r\n  to {\r\n    transform: rotate(360deg) scaleY(-1);\r\n  }\r\n}\r\n\r\n@keyframes icon-spin-flip-both {\r\n  from {\r\n    transform: rotate(0deg) scale(-1);\r\n  }\r\n  to {\r\n    transform: rotate(360deg) scale(-1);\r\n  }\r\n}\r\n</style>\r\n","import { ref } from 'vue'\r\n\r\n/**\r\n * 无感透传 ref 的 Hook\r\n * 通过 Proxy 将外部 ref 访问转发给内部 Element Plus 组件实例\r\n * \r\n * @param {string} refName - 内部 ref 的名称，默认为 'innerRef'\r\n * @param {Object} options - 配置选项\r\n * @param {Object} options.compatibilityKeys - 兼容性字段映射 { key: value }\r\n * @returns {Object} 包含 innerRef 和 exposedProxy 的对象\r\n * \r\n * @example\r\n * // 在组件中使用\r\n * const { innerRef, exposedProxy } = useExposeRef('innerTableRef')\r\n * defineExpose(exposedProxy)\r\n * \r\n * // 在模板中使用\r\n * <el-table v-bind=\"$attrs\" ref=\"innerTableRef\">\r\n */\r\nexport function useExposeRef(refName = 'innerRef', options = {}) {\r\n  const { compatibilityKeys = {} } = options\r\n  \r\n  // 创建内部 ref\r\n  const innerRef = ref()\r\n  \r\n  // 创建 Proxy 代理对象\r\n  const exposedProxy = new Proxy({}, {\r\n    get(_target, key) {\r\n      // 返回兼容性字段\r\n      if (key in compatibilityKeys) {\r\n        const value = compatibilityKeys[key]\r\n        return typeof value === 'function' ? value() : value\r\n      }\r\n      \r\n      // 保留默认兼容字段\r\n      if (key === 'elRef' || key === refName) {\r\n        return innerRef\r\n      }\r\n      // 动态生成 getter 方法：getElRef, getInnerRef, getInnerTableRef 等\r\n      // 将 refName 转换为驼峰命名，如 innerTableRef -> InnerTableRef\r\n      const getterMethodName = 'get' + refName.charAt(0).toUpperCase() + refName.slice(1)\r\n      if (key === 'getElRef' || key === getterMethodName) {\r\n        return () => innerRef.value\r\n      }\r\n      if (key === 'call') {\r\n        return (method, ...args) => innerRef.value?.[method]?.(...args)\r\n      }\r\n      \r\n      // 访问内部实例的属性或方法\r\n      const target = innerRef.value\r\n      if (!target) return undefined\r\n      \r\n      // 使用 Reflect.get 支持 Symbol 类型的 key\r\n      const value = Reflect.get(target, key, target)\r\n      // 如果是函数，绑定 this 指向原实例\r\n      return typeof value === 'function' ? value.bind(target) : value\r\n    },\r\n    set(_target, key, val) {\r\n      const target = innerRef.value\r\n      if (target) {\r\n        target[key] = val\r\n      }\r\n      return true\r\n    },\r\n    has(_target, key) {\r\n      // 检查兼容字段\r\n      const getterMethodName = `get${refName.charAt(0).toUpperCase() + refName.slice(1)}`\r\n      if (key in compatibilityKeys || key === 'elRef' || key === refName || key === 'getElRef' || key === getterMethodName || key === 'call') {\r\n        return true\r\n      }\r\n      // 检查内部实例\r\n      const target = innerRef.value\r\n      // 使用 Reflect.has 支持 Symbol 类型的 key\r\n      return target ? Reflect.has(target, key) : false\r\n    },\r\n    ownKeys(_target) {\r\n      const target = innerRef.value\r\n      if (target) {\r\n        return Reflect.ownKeys(target)\r\n      }\r\n      return []\r\n    },\r\n    getOwnPropertyDescriptor(_target, key) {\r\n      // 检查兼容字段\r\n      const getterMethodName = `get${refName.charAt(0).toUpperCase() + refName.slice(1)}`\r\n      if (key in compatibilityKeys || key === 'elRef' || key === refName || key === 'getElRef' || key === getterMethodName || key === 'call') {\r\n        return {\r\n          enumerable: true,\r\n          configurable: true\r\n        }\r\n      }\r\n      \r\n      // 检查内部实例\r\n      const target = innerRef.value\r\n      if (target && key in target) {\r\n        return Reflect.getOwnPropertyDescriptor(target, key)\r\n      }\r\n      \r\n      // 如果都不存在，返回 undefined（符合 Proxy 规范）\r\n      return undefined\r\n    }\r\n  })\r\n  \r\n  return {\r\n    innerRef,\r\n    exposedProxy\r\n  }\r\n}\r\n","<template>\r\n  <el-button ref=\"buttonRef\" v-bind=\"$attrs\" class=\"m-button\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-button>\r\n</template>\r\n\r\n<script setup>\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: 'MButton'\r\n})\r\n\r\nconst { innerRef: buttonRef, exposedProxy } = useExposeRef('buttonRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n// Button 组件样式 - 使用高优先级选择器确保不被全局样式覆盖\r\n\r\n</style>","<template>\r\n  <el-input ref=\"inputRef\" v-bind=\"$attrs\" class=\"m-input\" :class=\"{ solid: $attrs.styleType === 'solid' }\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-input>\r\n</template>\r\n\r\n<script setup>\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: 'MInput'\r\n})\r\n\r\nconst { innerRef: inputRef, exposedProxy } = useExposeRef('inputRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n<style lang=\"scss\">\r\n\r\n</style>","<template>\r\n  <el-form ref=\"formRef\" v-bind=\"$attrs\" class=\"m-form\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-form>\r\n</template>\r\n\r\n<script setup>\r\nimport { ElForm } from 'element-plus'\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: 'MForm'\r\n})\r\n\r\nconst { innerRef: formRef, exposedProxy } = useExposeRef('formRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n\r\n</style>","<template>\r\n  <el-form-item v-bind=\"$attrs\" class=\"m-form-item\" ref=\"formItemRef\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-form-item>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n  name: 'MFormItem'\r\n})\r\n\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\nconst { innerRef: formItemRef, exposedProxy } = useExposeRef('formItemRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n</style>","/**\r\n * 类名装饰器方法\r\n * @param {...(string|boolean|undefined|null)} classes - 类名参数\r\n * @returns {string} 合并后的类名字符串\r\n */\r\nexport const classNames = (...classes) => {\r\n  return classes.filter(Boolean).join(' ')\r\n}\r\n\r\n/**\r\n * 排除指定属性\r\n * @param {Object} attrs - 原始属性对象\r\n * @param {...string} excludeKeys - 要排除的属性名\r\n * @returns {Object} 排除指定属性后的新对象\r\n */\r\nexport const excludeAttrs = (attrs, ...excludeKeys) => {\r\n  const result = { ...attrs }\r\n  excludeKeys.forEach(key => {\r\n    delete result[key]\r\n  })\r\n  return result\r\n}\r\n\r\n","import { computed, useAttrs } from 'vue'\r\nimport { classNames, excludeAttrs } from '@packages/utils/classNames.js'\r\n\r\n/**\r\n * 类名 Hook\r\n * @param {string} defaultClass - 默认的类名\r\n * @param {string} excludeKey - 要排除的属性名，默认为 'popperClass'\r\n * @returns {Object} 包含 mergedAttrs 和 className 的对象\r\n */\r\nexport function useClassName(defaultClass, excludeKey = 'popperClass') {\r\n  const attrs = useAttrs()\r\n  \r\n  // 排除指定属性\r\n  const mergedAttrs = computed(() => excludeAttrs(attrs, excludeKey))\r\n  \r\n  // 计算类名\r\n  const className = computed(() => classNames(defaultClass, attrs[excludeKey]))\r\n  \r\n  return {\r\n    mergedAttrs,\r\n    className\r\n  }\r\n}\r\n","<template>\r\n  <el-tooltip ref=\"tooltipRef\" v-bind=\"mergedAttrs\" :popper-class=\"popperClass\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-tooltip>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\"\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: 'MTooltip'\r\n})\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n  popperClass: {\r\n    type: String,\r\n    default: ''\r\n  }\r\n})\r\n\r\n// 使用类名 Hook\r\nconst { mergedAttrs, className: popperClass } = useClassName('mc-tooltip-popper')\r\n\r\nconst { innerRef: tooltipRef, exposedProxy } = useExposeRef('tooltipRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.mc-tooltip-popper {\r\n  &.is-dark {\r\n    color: #fff !important;\r\n    background-color: var(--all-gray-6) !important;\r\n    border-color: var(--all-gray-6) !important;\r\n    .el-popper__arrow::before{\r\n        background-color: var(--all-gray-6) !important;\r\n        border-color: var(--all-gray-6) !important;\r\n    }\r\n  }\r\n  \r\n  &.is-light {\r\n    color: #606266 !important;\r\n    background-color: #fff !important;\r\n    border: 1px solid #e4e7ed !important;\r\n    \r\n    .el-popper__arrow::before {\r\n      background-color: #fff !important;\r\n      border-color: #fff !important;\r\n    }\r\n  }\r\n}\r\n\r\n:deep(.el-popper) {\r\n  &.is-light {\r\n    background: var(--bg-tertiary-hover);\r\n    border-color: var(--border-primary);\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <el-select\r\n    ref=\"selectRef\"\r\n    class=\"m-select\"\r\n    :class=\"{ solid: $attrs.styleType === 'solid' }\"\r\n    :show-arrow=\"false\"\r\n    v-bind=\"$attrs\"\r\n  >\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-select>\r\n</template>\r\n\r\n<script setup>\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: \"MSelect\",\r\n});\r\n\r\nconst { innerRef: selectRef, exposedProxy } = useExposeRef('selectRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n\r\n</style>\r\n","<template>\r\n  <el-option ref=\"optionRef\" v-bind=\"$attrs\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-option>\r\n</template>\r\n\r\n<script setup>\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: 'MOption'\r\n})\r\n\r\nconst { innerRef: optionRef, exposedProxy } = useExposeRef('optionRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n","<template>\r\n  <el-option-group ref=\"optionGroupRef\" v-bind=\"$attrs\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-option-group>\r\n</template>\r\n\r\n<script setup>\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: 'MOptionGroup'\r\n})\r\n\r\nconst { innerRef: optionGroupRef, exposedProxy } = useExposeRef('optionGroupRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n","<template>\r\n  <el-pagination ref=\"paginationRef\" v-bind=\"$attrs\" class=\"m-pagination\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-pagination>\r\n</template>\r\n\r\n<script setup>\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: \"MPagination\",\r\n});\r\n\r\nconst { innerRef: paginationRef, exposedProxy } = useExposeRef('paginationRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.m-pagination {\r\n  --el-border-color-hover: var(--border-tertiary) !important;\r\n  --el-pagination-button-bg-color: var(--bg-tertiary-hover) !important;\r\n  &.is-background .el-pager li.is-active {\r\n    color: var(--text-quaternary) !important;\r\n  }\r\n  .el-pager li{\r\n    border-radius: var(--xs);\r\n    border: 1px solid transparent;\r\n    &:hover {\r\n      border: 1px solid var(--border-tertiary);\r\n      color: var(--text-primary);\r\n    }\r\n  }\r\n  .el-select .el-select__wrapper {\r\n    width: 112px;\r\n    min-height: 32px;\r\n    padding: 5px 8px;\r\n    border-radius: var(--xs);\r\n    background-color: var(--bg-tertiary-hover);\r\n  }\r\n  .el-input .el-input__wrapper {\r\n    height: 30px;\r\n    border-radius: var(--xs);\r\n    background-color: var(--bg-tertiary-hover);\r\n  }\r\n  .el-pagination.is-background {\r\n    background-color: var(--bg-tertiary-hover);\r\n  }\r\n  .el-pager .number {\r\n    font-size: var(--font-size-text-sm);\r\n    font-weight: 500;\r\n  }\r\n  .btn-prev,\r\n  .btn-next {\r\n    &:disabled {\r\n      background-color: transparent !important;\r\n    }\r\n    &:hover:not(:disabled) {\r\n      border: 1px solid var(--border-tertiary);\r\n      color: var(--text-primary);\r\n    }\r\n    background-color: transparent !important;\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <el-radio ref=\"radioRef\" v-bind=\"mergedAttrs\" class=\"m-radio\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-radio>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\"\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: 'MRadio'\r\n})\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n  popperClass: {\r\n    type: String,\r\n    default: ''\r\n  }\r\n})\r\n\r\n// 使用类名 Hook\r\nconst { mergedAttrs, className: popperClass } = useClassName('mc-radio-popper')\r\n\r\nconst { innerRef: radioRef, exposedProxy } = useExposeRef('radioRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// Radio popper-class 样式\r\n// .mc-radio-popper {\r\n//   自定义单选框样式可以在这里添加\r\n// }\r\n.m-radio{\r\n  &.el-radio{\r\n    --el-radio-input-height: 16px;\r\n    --el-radio-input-width: 16px;\r\n    --el-radio-input-border: 2px solid var(--icon-tertiary);\r\n    &.el-radio--large{\r\n      --el-radio-input-height: 20px;\r\n      --el-radio-input-width: 20px;\r\n      .el-radio__inner{\r\n        height: var(--el-radio-input-height);\r\n        width: var(--el-radio-input-width);\r\n      }\r\n    }\r\n\r\n    .el-radio__input {\r\n      &.is-checked .el-radio__inner::after {\r\n        height: 6px;\r\n        width: 6px;\r\n        background-color: var(--bg-primary);\r\n      }\r\n      \r\n      &.is-disabled {\r\n        .el-radio__inner {\r\n          background-color: var(--all-alphe-white-20);\r\n          border-color: var(--icon-tertiary);\r\n        }\r\n        \r\n        &.is-checked .el-radio__inner::after {\r\n          background-color: var(--all-alphe-white-20);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <el-radio-group ref=\"radioGroupRef\" v-bind=\"mergedAttrs\" :popper-class=\"computedPopperClass\" class=\"m-radio-group\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-radio-group>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed, useAttrs } from 'vue'\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: 'MRadioGroup'\r\n})\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n  popperClass: {\r\n    type: String,\r\n    default: ''\r\n  }\r\n})\r\n\r\n// 获取attrs\r\nconst attrs = useAttrs()\r\n\r\n// 计算popper-class，合并默认类名和外部传入的类名\r\nconst computedPopperClass = computed(() => {\r\n  const defaultPopperClass = 'mc-radio-group-popper'\r\n  \r\n  if (attrs.popperClass) {\r\n    return `${defaultPopperClass} ${attrs.popperClass}`.trim()\r\n  }\r\n  \r\n  return defaultPopperClass\r\n})\r\n\r\n// 合并其他属性（排除popperClass）\r\nconst mergedAttrs = computed(() => {\r\n  const { popperClass, ...otherAttrs } = attrs\r\n  return otherAttrs\r\n})\r\n\r\nconst { innerRef: radioGroupRef, exposedProxy } = useExposeRef('radioGroupRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// RadioGroup popper-class 样式\r\n.mc-radio-group-popper {\r\n  // 自定义单选框组样式可以在这里添加\r\n}\r\n\r\n// 自定义主题示例\r\n.mc-radio-group-custom {\r\n  .el-radio {\r\n    .el-radio__input {\r\n      .el-radio__inner {\r\n        background: linear-gradient(45deg, #667eea, #764ba2);\r\n        border-color: #667eea;\r\n        \r\n        &:hover {\r\n          background: linear-gradient(45deg, #5a6fd8, #6a4190);\r\n          border-color: #5a6fd8;\r\n        }\r\n      }\r\n      \r\n      &.is-checked .el-radio__inner {\r\n        background: linear-gradient(45deg, #4c63d2, #5d3a7e);\r\n        border-color: #4c63d2;\r\n      }\r\n    }\r\n    \r\n    .el-radio__label {\r\n      color: #667eea;\r\n      font-weight: 500;\r\n    }\r\n  }\r\n}\r\n\r\n.mc-radio-group-success {\r\n  .el-radio {\r\n    .el-radio__input {\r\n      .el-radio__inner {\r\n        background-color: #67c23a;\r\n        border-color: #67c23a;\r\n        \r\n        &:hover {\r\n          background-color: #5daf34;\r\n          border-color: #5daf34;\r\n        }\r\n      }\r\n      \r\n      &.is-checked .el-radio__inner {\r\n        background-color: #529b2e;\r\n        border-color: #529b2e;\r\n      }\r\n    }\r\n    \r\n    .el-radio__label {\r\n      color: #67c23a;\r\n      font-weight: 500;\r\n    }\r\n  }\r\n}\r\n\r\n.mc-radio-group-warning {\r\n  .el-radio {\r\n    .el-radio__input {\r\n      .el-radio__inner {\r\n        background-color: #e6a23c;\r\n        border-color: #e6a23c;\r\n        \r\n        &:hover {\r\n          background-color: #d4922b;\r\n          border-color: #d4922b;\r\n        }\r\n      }\r\n      \r\n      &.is-checked .el-radio__inner {\r\n        background-color: #c8951f;\r\n        border-color: #c8951f;\r\n      }\r\n    }\r\n    \r\n    .el-radio__label {\r\n      color: #e6a23c;\r\n      font-weight: 500;\r\n    }\r\n  }\r\n}\r\n\r\n.mc-radio-group-danger {\r\n  .el-radio {\r\n    .el-radio__input {\r\n      .el-radio__inner {\r\n        background-color: #f56c6c;\r\n        border-color: #f56c6c;\r\n        \r\n        &:hover {\r\n          background-color: #f45454;\r\n          border-color: #f45454;\r\n        }\r\n      }\r\n      \r\n      &.is-checked .el-radio__inner {\r\n        background-color: #f24545;\r\n        border-color: #f24545;\r\n      }\r\n    }\r\n    \r\n    .el-radio__label {\r\n      color: #f56c6c;\r\n      font-weight: 500;\r\n    }\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <el-radio-button ref=\"radioButtonRef\" v-bind=\"mergedAttrs\" class=\"m-radio-button\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-radio-button>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\"\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: 'MRadioButton'\r\n})\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n  popperClass: {\r\n    type: String,\r\n    default: ''\r\n  }\r\n})\r\n\r\n// 使用类名 Hook\r\nconst { mergedAttrs, className: popperClass } = useClassName('mc-radio-button-popper')\r\n\r\nconst { innerRef: radioButtonRef, exposedProxy } = useExposeRef('radioButtonRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// RadioButton popper-class 样式\r\n// .mc-radio-button-popper {\r\n//   自定义单选框按钮样式可以在这里添加\r\n// }\r\n\r\n// 自定义主题示例\r\n.mc-radio-button-custom {\r\n  .el-radio-button__inner {\r\n    background: linear-gradient(45deg, #667eea, #764ba2);\r\n    border-color: #667eea;\r\n    color: white;\r\n    \r\n    &:hover {\r\n      background: linear-gradient(45deg, #5a6fd8, #6a4190);\r\n      border-color: #5a6fd8;\r\n    }\r\n  }\r\n  \r\n  .el-radio-button__original-radio:checked + .el-radio-button__inner {\r\n    background: linear-gradient(45deg, #4c63d2, #5d3a7e);\r\n    border-color: #4c63d2;\r\n    box-shadow: -1px 0 0 0 #4c63d2;\r\n  }\r\n}\r\n\r\n.mc-radio-button-success {\r\n  .el-radio-button__inner {\r\n    background-color: #67c23a;\r\n    border-color: #67c23a;\r\n    color: white;\r\n    \r\n    &:hover {\r\n      background-color: #5daf34;\r\n      border-color: #5daf34;\r\n    }\r\n  }\r\n  \r\n  .el-radio-button__original-radio:checked + .el-radio-button__inner {\r\n    background-color: #529b2e;\r\n    border-color: #529b2e;\r\n    box-shadow: -1px 0 0 0 #529b2e;\r\n  }\r\n}\r\n\r\n.mc-radio-button-warning {\r\n  .el-radio-button__inner {\r\n    background-color: #e6a23c;\r\n    border-color: #e6a23c;\r\n    color: white;\r\n    \r\n    &:hover {\r\n      background-color: #d4922b;\r\n      border-color: #d4922b;\r\n    }\r\n  }\r\n  \r\n  .el-radio-button__original-radio:checked + .el-radio-button__inner {\r\n    background-color: #c8951f;\r\n    border-color: #c8951f;\r\n    box-shadow: -1px 0 0 0 #c8951f;\r\n  }\r\n}\r\n\r\n.mc-radio-button-danger {\r\n  .el-radio-button__inner {\r\n    background-color: #f56c6c;\r\n    border-color: #f56c6c;\r\n    color: white;\r\n    \r\n    &:hover {\r\n      background-color: #f45454;\r\n      border-color: #f45454;\r\n    }\r\n  }\r\n  \r\n  .el-radio-button__original-radio:checked + .el-radio-button__inner {\r\n    background-color: #f24545;\r\n    border-color: #f24545;\r\n    box-shadow: -1px 0 0 0 #f24545;\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <el-switch ref=\"switchRef\" v-bind=\"mergedAttrs\" :popper-class=\"popperClass\" class=\"m-switch\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-switch>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\";\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: \"MSwitch\",\r\n});\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n  popperClass: {\r\n    type: String,\r\n    default: \"\",\r\n  },\r\n});\r\n\r\n// 使用类名 Hook\r\nconst { mergedAttrs, className: popperClass } =\r\n  useClassName(\"mc-switch-popper\");\r\n\r\nconst { innerRef: switchRef, exposedProxy } = useExposeRef('switchRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.m-switch {\r\n  &.is-checked {\r\n    .el-switch__action {\r\n      background-color: var(--all-gray-10);\r\n    }\r\n  }\r\n  \r\n  &:not(.is-checked) {\r\n    .el-switch__core {\r\n      background-color: var(--all-gray-5);\r\n      border-color: var(--all-gray-5);\r\n      .el-switch__action {\r\n        background-color: var(--all-gray-1);\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <el-tag ref=\"tagRef\" v-bind=\"$attrs\" :type=\"computedType\" class=\"m-tag\" :class=\"{ 'is-loading': computedLoading }\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <!-- 自定义spinner loading效果 -->\r\n      <div v-if=\"computedLoading && !computedPrefixIcon\" class=\"custom-spinner\">\r\n        <div class=\"ldio-spinner\">\r\n          <div v-for=\"i in 8\" :key=\"i\"></div>\r\n        </div>\r\n      </div>\r\n      <!-- 原有的prefixIcon -->\r\n      <i \r\n        class=\"prefixIcon\" \r\n        :class=\"['iconfont', computedPrefixIcon]\" \r\n        v-else-if=\"computedPrefixIcon\"\r\n      ></i>\r\n      <div>\r\n        <slot :name=\"name\" />\r\n      </div>\r\n      <i \r\n        class=\"suffixIcon\" \r\n        :class=\"['iconfont', computedSuffixIcon]\" \r\n        v-if=\"computedSuffixIcon\"\r\n      ></i>\r\n    </template>\r\n  </el-tag>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed } from 'vue'\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: 'MTag'\r\n})\r\n\r\nconst props = defineProps({\r\n  prefixIcon: {\r\n    type: String,\r\n    default: ''\r\n  },\r\n  suffixIcon: {\r\n    type: String,\r\n    default: ''\r\n  },\r\n  loading: {\r\n    type: Boolean,\r\n    default: false\r\n  },\r\n  status: {\r\n    type: String,\r\n    default: ''\r\n  }\r\n})\r\n\r\n// 根据status自动设置type颜色\r\nconst computedType = computed(() => {\r\n  if (props.status) {\r\n    // 如果设置了status，自动映射到对应的type\r\n    return props.status\r\n  }\r\n  // 否则使用v-bind传入的type（通过$attrs）\r\n  return undefined\r\n})\r\n\r\n// 根据status自动设置图标和loading状态\r\nconst computedLoading = computed(() => {\r\n  if (props.status === 'warning') {\r\n    return true\r\n  }\r\n  return props.loading\r\n})\r\n\r\nconst computedPrefixIcon = computed(() => {\r\n  // 如果有显式的prefixIcon，优先使用\r\n  if (props.prefixIcon) {\r\n    return props.prefixIcon\r\n  }\r\n  \r\n  // 根据status自动设置prefixIcon\r\n  if (props.status === 'success') {\r\n    return 'icon-circle-check-filled'\r\n  }\r\n  \r\n  if (props.status === 'danger') {\r\n    return 'icon-lucide_circle-x-filled'\r\n  }\r\n  \r\n  return ''\r\n})\r\n\r\nconst computedSuffixIcon = computed(() => {\r\n  // 如果有显式的suffixIcon，优先使用\r\n  if (props.suffixIcon) {\r\n    return props.suffixIcon\r\n  }\r\n  \r\n  return ''\r\n})\r\n\r\nconst { innerRef: tagRef, exposedProxy } = useExposeRef('tagRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.m-tag {\r\n  .prefixIcon,\r\n  .suffixIcon {\r\n    font-size: 16px;\r\n    display: inline-block;\r\n    line-height: 1;\r\n    \r\n    &.iconfont {\r\n      font-family: \"iconfont\" !important;\r\n    }\r\n    \r\n    &.colorfont {\r\n      font-family: \"colorfont\" !important;\r\n    }\r\n  }\r\n  .el-tag__content{\r\n    display: flex;\r\n    align-items: center;\r\n  }\r\n  \r\n  .prefixIcon {\r\n    margin-right: 4px;\r\n  }\r\n  \r\n  .suffixIcon {\r\n    margin-left: 4px;\r\n  }\r\n  \r\n  // 自定义spinner样式\r\n  .custom-spinner {\r\n    display: inline-block;\r\n    margin-right: 4px;\r\n    width: 16px;\r\n    height: 16px;\r\n    overflow: hidden;\r\n    \r\n    .ldio-spinner {\r\n      width: 100%;\r\n      height: 100%;\r\n      position: relative;\r\n      transform: translateZ(0) scale(0.16);\r\n      backface-visibility: hidden;\r\n      transform-origin: 0 0;\r\n      \r\n      div {\r\n        left: 46px;\r\n        top: 7.5px;\r\n        position: absolute;\r\n        animation: ldio-spinner-fade linear 1s infinite;\r\n        background: currentColor;\r\n        width: 8px;\r\n        height: 21px;\r\n        border-radius: 3.15px / 3.15px;\r\n        transform-origin: 4px 42.5px;\r\n        box-sizing: content-box;\r\n      }\r\n      \r\n      div:nth-child(1) {\r\n        transform: rotate(0deg);\r\n        animation-delay: -0.875s;\r\n      }\r\n      \r\n      div:nth-child(2) {\r\n        transform: rotate(45deg);\r\n        animation-delay: -0.75s;\r\n      }\r\n      \r\n      div:nth-child(3) {\r\n        transform: rotate(90deg);\r\n        animation-delay: -0.625s;\r\n      }\r\n      \r\n      div:nth-child(4) {\r\n        transform: rotate(135deg);\r\n        animation-delay: -0.5s;\r\n      }\r\n      \r\n      div:nth-child(5) {\r\n        transform: rotate(180deg);\r\n        animation-delay: -0.375s;\r\n      }\r\n      \r\n      div:nth-child(6) {\r\n        transform: rotate(225deg);\r\n        animation-delay: -0.25s;\r\n      }\r\n      \r\n      div:nth-child(7) {\r\n        transform: rotate(270deg);\r\n        animation-delay: -0.125s;\r\n      }\r\n      \r\n      div:nth-child(8) {\r\n        transform: rotate(315deg);\r\n        animation-delay: 0s;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n@keyframes ldio-spinner-fade {\r\n  0% { \r\n    opacity: 1; \r\n  }\r\n  100% { \r\n    opacity: 0; \r\n  }\r\n}\r\n</style>","<template>\r\n  <el-alert v-bind=\"mergedAttrs\" class=\"mc-alert\">\r\n    <!-- 自定义图标插槽 -->\r\n    <template v-if=\"iconUrl\" #icon>\r\n      <img :src=\"iconUrl\" :alt=\"`${type} icon`\" class=\"mc-alert-icon\" />\r\n    </template>\r\n    \r\n    <!-- 其他插槽 -->\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-alert>\r\n</template>\r\n\r\n<script>\r\n// 定义可选的Alert类型\r\nconst availableTypes = ['success', 'warning', 'error']\r\n\r\nexport default {\r\n  name: 'MAlert'\r\n}\r\n</script>\r\n\r\n<script setup>\r\nimport { computed, useAttrs } from 'vue'\r\n\r\nconst props = defineProps({\r\n  type: {\r\n    type: String,\r\n    default: 'success',\r\n    validator: (value) => availableTypes.includes(value)\r\n  },\r\n  useCustomIcon: {\r\n    type: Boolean,\r\n    default: true\r\n  }\r\n})\r\n\r\nconst attrs = useAttrs()\r\n\r\n// 排除已处理的属性，确保 type 属性正确传递\r\nconst mergedAttrs = computed(() => {\r\n  const { useCustomIcon, ...rest } = attrs\r\n  return {\r\n    ...rest,\r\n    type: props.type  // 确保 type 属性正确传递给 el-alert\r\n  }\r\n})\r\n\r\n// 计算图标URL\r\nconst iconUrl = computed(() => {\r\n  if (!props.useCustomIcon) {\r\n    return null\r\n  }\r\n  \r\n  return `https://cfdsaas-pre.oss-cn-hongkong.aliyuncs.com/mc-assets/mc-ui/alert/alert-${props.type}.png`\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.mc-alert.el-alert {\r\n  --el-alert-padding: 14px 16px;\r\n  .mc-alert-icon {\r\n    width: 16px;\r\n    height: 16px;\r\n    object-fit: contain;\r\n  }\r\n  .el-alert__close-btn{\r\n    top: 50%;\r\n    transform: translateY(-50%);\r\n    opacity: 0.6;\r\n    transition: opacity 0.2s ease;\r\n    border-radius: 50%;\r\n    width: 20px;\r\n    height: 20px;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    \r\n    &:hover {\r\n      opacity: 1;\r\n      background: rgba(0, 0, 0, 0.1);\r\n    }\r\n  }\r\n  // Error 类型样式\r\n  &.el-alert--error.is-light {\r\n    background-color: var(--all-red-10);\r\n    color: var(--text-error-primary);\r\n    border-color: var(--all-red-10);\r\n    \r\n    .el-alert__title,\r\n    .el-alert__description,\r\n    .el-alert__close-btn {\r\n      color: var(--text-error-primary);\r\n    }\r\n  \r\n    .el-alert__icon {\r\n      display: flex;\r\n      align-items: center;\r\n    }\r\n  }\r\n  \r\n  // Warning 类型样式\r\n  &.el-alert--warning.is-light {\r\n    background-color: var(--all-orange-10);\r\n    color: var(--text-warning-primary);\r\n    border-color: var(--all-orange-10);\r\n    \r\n    .el-alert__title,\r\n    .el-alert__description,\r\n    .el-alert__close-btn {\r\n      color: var(--text-warning-primary);\r\n    }\r\n  \r\n    .el-alert__icon {\r\n      display: flex;\r\n      align-items: center;\r\n    }\r\n  }\r\n  \r\n  // Success 类型样式\r\n  &.el-alert--success.is-light {\r\n    background-color: var(--all-green-10);\r\n    color: var(--all-green-4);\r\n    border-color: var(--all-green-10);\r\n    \r\n    .el-alert__title,\r\n    .el-alert__description,\r\n    .el-alert__close-btn {\r\n      color: var(--all-green-4);\r\n    }\r\n  \r\n    .el-alert__icon {\r\n      display: flex;\r\n      align-items: center;\r\n    }\r\n  }\r\n}\r\n\r\n</style>","<template>\r\n  <div>\r\n    <el-dialog\r\n      ref=\"dialogRef\"\r\n      v-model=\"dialogVisible\"\r\n      :width=\"width\"\r\n      :title=\"title\"\r\n      :draggable=\"draggable\"\r\n      :close-on-click-modal=\"closeOnClickModal\"\r\n      :center=\"center\"\r\n      align-center\r\n      v-bind=\"$attrs\"\r\n      class=\"m-dialog\"\r\n      header-class=\"m-header\"\r\n    >\r\n      <template v-if=\"$slots.header\" #header=\"{ close, titleId, titleClass }\">\r\n        <slot name=\"header\" v-bind=\"{ close, titleId, titleClass }\"></slot>\r\n      </template>\r\n      <slot name=\"default\"></slot>\r\n      <template v-if=\"$slots.footer\" #footer class=\"m-footer\">\r\n        <slot name=\"footer\"></slot>\r\n      </template>\r\n    </el-dialog>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: 'MDialog'\r\n})\r\nconst props = defineProps({\r\n  width: {\r\n    type: String,\r\n    default: '440px'\r\n  },\r\n  center: {\r\n    type: Boolean,\r\n    default: true\r\n  },\r\n  draggable: {\r\n    type: Boolean,\r\n    default: true\r\n  },\r\n  closeOnClickModal: {\r\n    type: Boolean,\r\n    default: false\r\n  },\r\n  title: {\r\n    type: String,\r\n    default: ''\r\n  }\r\n})\r\nconst emit = defineEmits(['close'])\r\nconst dialogVisible = defineModel('modelValue', {\r\n  type: Boolean,\r\n  default: false\r\n})\r\n\r\nconst { innerRef: dialogRef, exposedProxy } = useExposeRef('dialogRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n\r\n</style>\r\n","<template>\r\n  <el-notification v-bind=\"$attrs\" class=\"mc-notification\">\r\n    <!-- 其他插槽 -->\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-notification>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n  name: \"MNotification\",\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// Notification 基础样式\r\n// 如需自定义样式，可以在这里添加\r\n</style>\r\n","<template>\r\n  <teleport to=\"body\">\r\n    <transition-group name=\"message\" tag=\"div\" class=\"message-container\">\r\n      <div\r\n        v-for=\"message in messages\"\r\n        :key=\"message.id\"\r\n        :class=\"[\r\n          'custom-message',\r\n          `message-${message.type}`,\r\n          `message-${message.placement}`,\r\n          { 'message-plain': message.plain },\r\n        ]\"\r\n      >\r\n        <!-- 图标 -->\r\n        <div v-if=\"message.showIcon\" class=\"message-icon\">\r\n          <img\r\n            v-if=\"message.customIcon\"\r\n            :src=\"message.customIcon\"\r\n            alt=\"custom icon\"\r\n            class=\"message-icon-img\"\r\n          />\r\n          <img\r\n            v-else-if=\"message.type === 'success'\"\r\n            src=\"https://cfdsaas-pre.oss-cn-hongkong.aliyuncs.com/mc-assets/mc-ui/alert/alert-success.png\"\r\n            alt=\"success icon\"\r\n            class=\"message-icon-img\"\r\n          />\r\n          <img\r\n            v-else-if=\"message.type === 'warning'\"\r\n            src=\"https://cfdsaas-pre.oss-cn-hongkong.aliyuncs.com/mc-assets/mc-ui/alert/alert-warning.png\"\r\n            alt=\"warning icon\"\r\n            class=\"message-icon-img\"\r\n          />\r\n          <img\r\n            v-else-if=\"message.type === 'error'\"\r\n            src=\"https://cfdsaas-pre.oss-cn-hongkong.aliyuncs.com/mc-assets/mc-ui/alert/alert-error.png\"\r\n            alt=\"error icon\"\r\n            class=\"message-icon-img\"\r\n          />\r\n        </div>\r\n\r\n        <!-- 消息内容 -->\r\n        <div class=\"message-content\">\r\n          <component\r\n            v-if=\"typeof message.message === 'function'\"\r\n            :is=\"message.message\"\r\n          />\r\n          <div\r\n            v-else-if=\"message.dangerouslyUseHTMLString\"\r\n            v-html=\"message.message\"\r\n          />\r\n          <span v-else>{{ message.message }}</span>\r\n\r\n          <!-- 重复数量 -->\r\n          <span v-if=\"message.repeatNum > 1\" class=\"message-repeat\">\r\n            {{ message.repeatNum }}\r\n          </span>\r\n        </div>\r\n\r\n        <!-- 关闭按钮 -->\r\n        <button\r\n          v-if=\"message.showClose\"\r\n          class=\"message-close\"\r\n          @click=\"closeMessage(message.id)\"\r\n        >\r\n          ×\r\n        </button>\r\n      </div>\r\n    </transition-group>\r\n  </teleport>\r\n</template>\r\n\r\n<script>\r\nimport { ref } from \"vue\";\r\n\r\n// 全局消息列表\r\nconst messages = ref([]);\r\nlet messageId = 0;\r\n\r\n// 创建 Message 静态方法对象\r\nconst Message = {\r\n  // 默认配置\r\n  defaultOptions: {\r\n    message: \"\",\r\n    type: \"success\",\r\n    plain: false,\r\n    customIcon: \"\",\r\n    dangerouslyUseHTMLString: false,\r\n    customClass: \"\",\r\n    duration: 3000,\r\n    showClose: false,\r\n    showIcon: true,\r\n    onClose: null,\r\n    offset: 16,\r\n    placement: \"top\",\r\n    appendTo: \"body\",\r\n    grouping: false,\r\n    repeatNum: 1,\r\n  },\r\n\r\n  // 显示消息\r\n  show(options = {}) {\r\n    // 如果是字符串，转换为配置对象\r\n    if (typeof options === \"string\") {\r\n      options = { message: options };\r\n    }\r\n\r\n    const config = {\r\n      ...this.defaultOptions,\r\n      ...options,\r\n      id: ++messageId,\r\n    };\r\n\r\n    // 分组处理\r\n    if (config.grouping) {\r\n      const existingIndex = messages.value.findIndex(\r\n        (m) =>\r\n          m.message === config.message && m.type === config.type && m.grouping\r\n      );\r\n\r\n      if (existingIndex > -1) {\r\n        messages.value[existingIndex].repeatNum++;\r\n        return { close: () => this.close(messages.value[existingIndex].id) };\r\n      }\r\n    }\r\n\r\n    // 添加到消息列表\r\n    messages.value.push(config);\r\n\r\n    // 如果设置了自动关闭时间，则自动关闭\r\n    if (config.duration > 0) {\r\n      setTimeout(() => {\r\n        this.close(config.id);\r\n      }, config.duration);\r\n    }\r\n\r\n    return {\r\n      close: () => this.close(config.id),\r\n    };\r\n  },\r\n\r\n  // 关闭指定消息\r\n  close(id) {\r\n    const index = messages.value.findIndex((m) => m.id === id);\r\n    if (index > -1) {\r\n      const message = messages.value[index];\r\n      if (message.onClose) {\r\n        message.onClose(message);\r\n      }\r\n      messages.value.splice(index, 1);\r\n    }\r\n  },\r\n\r\n  // 关闭所有消息\r\n  closeAll() {\r\n    messages.value = [];\r\n  },\r\n\r\n  // 便捷方法\r\n  success(options = {}) {\r\n    if (typeof options === \"string\") {\r\n      options = { message: options };\r\n    }\r\n    return this.show({ ...options, type: \"success\" });\r\n  },\r\n\r\n  warning(options = {}) {\r\n    if (typeof options === \"string\") {\r\n      options = { message: options };\r\n    }\r\n    return this.show({ ...options, type: \"warning\" });\r\n  },\r\n\r\n  error(options = {}) {\r\n    if (typeof options === \"string\") {\r\n      options = { message: options };\r\n    }\r\n    return this.show({ ...options, type: \"error\" });\r\n  },\r\n};\r\n\r\n// 关闭消息的方法\r\nconst closeMessage = (id) => {\r\n  Message.close(id);\r\n};\r\n\r\n// Vue 组件定义\r\nexport default {\r\n  name: \"MMessage\",\r\n  setup() {\r\n    return {\r\n      messages,\r\n      closeMessage,\r\n    };\r\n  },\r\n};\r\n\r\n// 导出类供直接使用\r\nexport { Message };\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.message-container {\r\n  position: fixed;\r\n  z-index: 9999;\r\n  pointer-events: none;\r\n}\r\n\r\n.custom-message {\r\n  position: fixed;\r\n  left: 50%;\r\n  transform: translateX(-50%);\r\n  min-width: 200px;\r\n  max-width: 320px;\r\n  padding: 12px 16px;\r\n  border-radius: 8px;\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n  pointer-events: auto;\r\n  z-index: 9999;\r\n  font-size: 14px;\r\n\r\n  // 位置控制\r\n  &.message-top {\r\n    top: 20px;\r\n\r\n    &:nth-child(2) {\r\n      top: 70px;\r\n    }\r\n    &:nth-child(3) {\r\n      top: 120px;\r\n    }\r\n    &:nth-child(4) {\r\n      top: 170px;\r\n    }\r\n    &:nth-child(5) {\r\n      top: 220px;\r\n    }\r\n  }\r\n\r\n  &.message-top-left {\r\n    top: 20px;\r\n    left: 20px;\r\n    transform: none;\r\n\r\n    &:nth-child(2) {\r\n      top: 70px;\r\n    }\r\n    &:nth-child(3) {\r\n      top: 120px;\r\n    }\r\n    &:nth-child(4) {\r\n      top: 170px;\r\n    }\r\n    &:nth-child(5) {\r\n      top: 220px;\r\n    }\r\n  }\r\n\r\n  &.message-top-right {\r\n    top: 20px;\r\n    right: 20px;\r\n    left: auto;\r\n    transform: none;\r\n\r\n    &:nth-child(2) {\r\n      top: 70px;\r\n    }\r\n    &:nth-child(3) {\r\n      top: 120px;\r\n    }\r\n    &:nth-child(4) {\r\n      top: 170px;\r\n    }\r\n    &:nth-child(5) {\r\n      top: 220px;\r\n    }\r\n  }\r\n\r\n  &.message-bottom {\r\n    bottom: 20px;\r\n    top: auto;\r\n\r\n    &:nth-child(2) {\r\n      bottom: 70px;\r\n    }\r\n    &:nth-child(3) {\r\n      bottom: 120px;\r\n    }\r\n    &:nth-child(4) {\r\n      bottom: 170px;\r\n    }\r\n    &:nth-child(5) {\r\n      bottom: 220px;\r\n    }\r\n  }\r\n\r\n  &.message-bottom-left {\r\n    bottom: 20px;\r\n    left: 20px;\r\n    top: auto;\r\n    transform: none;\r\n\r\n    &:nth-child(2) {\r\n      bottom: 70px;\r\n    }\r\n    &:nth-child(3) {\r\n      bottom: 120px;\r\n    }\r\n    &:nth-child(4) {\r\n      bottom: 170px;\r\n    }\r\n    &:nth-child(5) {\r\n      bottom: 220px;\r\n    }\r\n  }\r\n\r\n  &.message-bottom-right {\r\n    bottom: 20px;\r\n    right: 20px;\r\n    left: auto;\r\n    top: auto;\r\n    transform: none;\r\n\r\n    &:nth-child(2) {\r\n      bottom: 70px;\r\n    }\r\n    &:nth-child(3) {\r\n      bottom: 120px;\r\n    }\r\n    &:nth-child(4) {\r\n      bottom: 170px;\r\n    }\r\n    &:nth-child(5) {\r\n      bottom: 220px;\r\n    }\r\n  }\r\n\r\n  .message-icon {\r\n    flex-shrink: 0;\r\n    display: flex;\r\n    align-items: center;\r\n\r\n    .message-icon-img {\r\n      width: 16px;\r\n      height: 16px;\r\n      object-fit: contain;\r\n    }\r\n  }\r\n\r\n  .message-content {\r\n    flex: 1;\r\n    line-height: 1.4;\r\n    position: relative;\r\n\r\n    .message-repeat {\r\n      position: absolute;\r\n      top: -8px;\r\n      right: -8px;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      background: #666;\r\n      color: white;\r\n      font-size: 10px;\r\n      font-weight: bold;\r\n      min-width: 16px;\r\n      height: 16px;\r\n      padding: 0 4px;\r\n      border-radius: 8px;\r\n      border: 2px solid white;\r\n      box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n    }\r\n  }\r\n\r\n  .message-close {\r\n    flex-shrink: 0;\r\n    border: none;\r\n    background: transparent;\r\n    cursor: pointer;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    padding: 4px;\r\n    margin-left: 8px;\r\n    opacity: 0.6;\r\n    transition: opacity 0.2s ease;\r\n    font-size: 24px;\r\n    width: 20px;\r\n    height: 20px;\r\n    border-radius: 50%;\r\n    color: var(--icon-tertiary, #999);\r\n\r\n    &:hover {\r\n      opacity: 1;\r\n      background: rgba(0, 0, 0, 0.1);\r\n    }\r\n  }\r\n\r\n  // 不同类型的样式 - 统一使用 bg-tertiary-hover 背景\r\n  &.message-success {\r\n    background-color: var(--bg-tertiary-hover, #f5f5f5);\r\n    color: var(--all-green-4, #67c23a);\r\n    border: 1px solid var(--bg-tertiary-hover, #f5f5f5);\r\n\r\n    .message-icon {\r\n      color: var(--all-green-4, #67c23a);\r\n    }\r\n\r\n    .message-repeat {\r\n      background: var(--all-green-4, #67c23a);\r\n      border-color: var(--all-green-4, #67c23a);\r\n    }\r\n\r\n    &.message-plain {\r\n      background: var(--all-green-4, #67c23a);\r\n      border: 1px solid var(--all-green-4, #67c23a);\r\n      color: #fff;\r\n\r\n      .message-icon {\r\n        color: #fff;\r\n      }\r\n    }\r\n  }\r\n\r\n  &.message-warning {\r\n    background-color: var(--bg-tertiary-hover, #f5f5f5);\r\n    color: var(--text-warning-primary, #e6a23c);\r\n    border: 1px solid var(--bg-tertiary-hover, #f5f5f5);\r\n\r\n    .message-icon {\r\n      color: var(--text-warning-primary, #e6a23c);\r\n    }\r\n\r\n    .message-repeat {\r\n      background: var(--text-warning-primary, #e6a23c);\r\n      border-color: var(--text-warning-primary, #e6a23c);\r\n    }\r\n\r\n    &.message-plain {\r\n      background: var(--text-warning-primary, #e6a23c);\r\n      border: 1px solid var(--text-warning-primary, #e6a23c);\r\n      color: #fff;\r\n\r\n      .message-icon {\r\n        color: #fff;\r\n      }\r\n    }\r\n  }\r\n\r\n  &.message-error {\r\n    background-color: var(--bg-tertiary-hover, #f5f5f5);\r\n    color: var(--text-error-primary, #f56c6c);\r\n    border: 1px solid var(--bg-tertiary-hover, #f5f5f5);\r\n\r\n    .message-icon {\r\n      color: var(--text-error-primary, #f56c6c);\r\n    }\r\n\r\n    .message-repeat {\r\n      background: var(--text-error-primary, #f56c6c);\r\n      border-color: var(--text-error-primary, #f56c6c);\r\n    }\r\n\r\n    &.message-plain {\r\n      background: var(--text-error-primary, #f56c6c);\r\n      border: 1px solid var(--text-error-primary, #f56c6c);\r\n      color: #fff;\r\n\r\n      .message-icon {\r\n        color: #fff;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n// 动画效果\r\n.message-enter-active {\r\n  transition: all 0.3s ease;\r\n}\r\n\r\n.message-leave-active {\r\n  transition: all 0.3s ease;\r\n}\r\n\r\n.message-enter-from {\r\n  opacity: 0;\r\n  transform: translateX(-50%) translateY(-20px);\r\n}\r\n\r\n.message-leave-to {\r\n  opacity: 0;\r\n  transform: translateX(-50%) translateY(-20px);\r\n}\r\n\r\n.message-move {\r\n  transition: transform 0.3s ease;\r\n}\r\n\r\n// 不同位置的动画\r\n.message-top-left {\r\n  &.message-enter-from,\r\n  &.message-leave-to {\r\n    transform: translateX(-20px);\r\n  }\r\n}\r\n\r\n.message-top-right {\r\n  &.message-enter-from,\r\n  &.message-leave-to {\r\n    transform: translateX(20px);\r\n  }\r\n}\r\n\r\n.message-bottom {\r\n  &.message-enter-from,\r\n  &.message-leave-to {\r\n    transform: translateX(-50%) translateY(20px);\r\n  }\r\n}\r\n\r\n.message-bottom-left {\r\n  &.message-enter-from,\r\n  &.message-leave-to {\r\n    transform: translateX(-20px);\r\n  }\r\n}\r\n\r\n.message-bottom-right {\r\n  &.message-enter-from,\r\n  &.message-leave-to {\r\n    transform: translateX(20px);\r\n  }\r\n}\r\n\r\n.mc-h5 {\r\n  .custom-message {\r\n    width: 304px;\r\n\r\n    .message-icon {\r\n      .message-icon-img {\r\n        width: 20px;\r\n        height: 20px;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <teleport to=\"body\">\r\n    <transition-group name=\"notification\" tag=\"div\" class=\"notification-container\">\r\n      <div\r\n        v-for=\"notification in notifications\"\r\n        :key=\"notification.id\"\r\n        :class=\"[\r\n          'custom-notification',\r\n          `notification-${notification.position}`\r\n        ]\"\r\n      >\r\n        <!-- 图标 -->\r\n        <div class=\"notification-icon\">\r\n          <img \r\n            src=\"https://cfdsaas-pre.oss-cn-hongkong.aliyuncs.com/mc-assets/MCImages/userCenter/icon-quota-tip.png\" \r\n            alt=\"notification icon\"\r\n          />\r\n        </div>\r\n\r\n        <!-- 内容区域 -->\r\n        <div class=\"notification-content\">\r\n          <!-- 标题 -->\r\n          <div class=\"notification-title\">{{ notification.title }}</div>\r\n          \r\n          <!-- 消息内容 -->\r\n          <div class=\"notification-message\">{{ notification.message }}</div>\r\n          \r\n          <!-- 自定义插槽内容 -->\r\n          <div v-if=\"notification.slotContent\" class=\"notification-action\">\r\n            <component :is=\"notification.slotContent\" />\r\n          </div>\r\n        </div>\r\n\r\n        <!-- 关闭按钮 -->\r\n        <button \r\n          v-if=\"notification.showClose\"\r\n          class=\"notification-close\"\r\n          @click=\"closeNotification(notification.id)\"\r\n        >\r\n          ×\r\n        </button>\r\n      </div>\r\n    </transition-group>\r\n  </teleport>\r\n</template>\r\n\r\n<script>\r\nimport { ref } from 'vue'\r\n\r\n// 全局通知列表\r\nconst notifications = ref([])\r\nlet notificationId = 0\r\n\r\n// 创建 NotifiMessage 静态方法对象\r\nconst NotifiMessage = {\r\n  // 默认配置\r\n  defaultOptions: {\r\n    title: '',\r\n    message: '',\r\n    duration: 4500,\r\n    position: 'top-right',\r\n    showClose: true,\r\n    offset: 20\r\n  },\r\n\r\n  // 显示通知\r\n  show(options = {}) {\r\n    const config = {\r\n      ...this.defaultOptions,\r\n      ...options,\r\n      id: ++notificationId\r\n    }\r\n\r\n    // 添加到通知列表\r\n    notifications.value.push(config)\r\n\r\n    // 如果设置了自动关闭时间，则自动关闭\r\n    if (config.duration > 0) {\r\n      setTimeout(() => {\r\n        this.close(config.id)\r\n      }, config.duration)\r\n    }\r\n\r\n    return {\r\n      close: () => this.close(config.id)\r\n    }\r\n  },\r\n\r\n  // 关闭指定通知\r\n  close(id) {\r\n    const index = notifications.value.findIndex(n => n.id === id)\r\n    if (index > -1) {\r\n      notifications.value.splice(index, 1)\r\n    }\r\n  },\r\n\r\n  // 关闭所有通知\r\n  closeAll() {\r\n    notifications.value = []\r\n  },\r\n\r\n  // 便捷方法\r\n  success(options = {}) {\r\n    return this.show(options)\r\n  },\r\n\r\n  warning(options = {}) {\r\n    return this.show(options)\r\n  },\r\n\r\n  error(options = {}) {\r\n    return this.show(options)\r\n  }\r\n}\r\n\r\n// 关闭通知的方法\r\nconst closeNotification = (id) => {\r\n  const index = notifications.value.findIndex(n => n.id === id)\r\n  if (index > -1) {\r\n    notifications.value.splice(index, 1)\r\n  }\r\n}\r\n\r\n\r\n// Vue 组件定义\r\nexport default {\r\n  name: 'MNotifiMessage',\r\n  setup() {\r\n    return {\r\n      notifications,\r\n      closeNotification\r\n    }\r\n  }\r\n}\r\n\r\n// 导出类供直接使用\r\nexport { NotifiMessage }\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.notification-container {\r\n  position: fixed;\r\n  z-index: 9999;\r\n  pointer-events: none;\r\n}\r\n\r\n.custom-notification {\r\n  position: fixed;\r\n  top: 20px;\r\n  right: 20px;\r\n  width: 400px;\r\n  background: #201F24;\r\n  border-radius: 12px;\r\n  padding: 16px;\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 4px;\r\n  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);\r\n  pointer-events: auto;\r\n  z-index: 9999;\r\n  \r\n  // 多个通知的堆叠效果\r\n  &:nth-child(2) { top: 100px; }\r\n  &:nth-child(3) { top: 180px; }\r\n  &:nth-child(4) { top: 260px; }\r\n  &:nth-child(5) { top: 340px; }\r\n  \r\n  .notification-icon {\r\n    flex-shrink: 0;\r\n    width: 40px;\r\n    height: 40px;\r\n    border-radius: 50%;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    position: relative;\r\n    transform: translate(-9px, -8px);\r\n    \r\n    img {\r\n      width: 100%;\r\n      height: 100%;\r\n      object-fit: contain;\r\n    }\r\n  }\r\n  \r\n  .notification-content {\r\n    flex: 1;\r\n    \r\n    .notification-title {\r\n      color: #FFFFFF;\r\n      font-size: 16px;\r\n      font-weight: 600;\r\n      margin-bottom: 8px;\r\n    }\r\n    \r\n    .notification-message {\r\n      color: rgba(255, 255, 255, 0.8);\r\n      font-size: 14px;\r\n      line-height: 1.5;\r\n      margin-bottom: 16px;\r\n    }\r\n    \r\n    .notification-action {\r\n      .custom-action-link {\r\n        color: #FFD905;\r\n        font-size: 14px;\r\n        font-weight: 500;\r\n        cursor: pointer;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 6px;\r\n        transition: all 0.2s ease;\r\n        \r\n        &:hover {\r\n          color: #FFF;\r\n        }\r\n        \r\n        span {\r\n          line-height: 1;\r\n        }\r\n        \r\n        .arrow {\r\n          transition: transform 0.2s ease;\r\n          display: flex;\r\n          align-items: center;\r\n          line-height: 1;\r\n        }\r\n        \r\n        &:hover .arrow {\r\n          transform: translateX(2px);\r\n        }\r\n      }\r\n    }\r\n  }\r\n  \r\n  .notification-close {\r\n    position: absolute;\r\n    top: 12px;\r\n    right: 12px;\r\n    width: 20px;\r\n    height: 20px;\r\n    border: none;\r\n    background: transparent;\r\n    color: var(--icon-tertiary, #999);\r\n    border-radius: 50%;\r\n    cursor: pointer;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    font-size: 24px;\r\n    line-height: 1;\r\n    opacity: 0.6;\r\n    transition: opacity 0.2s ease;\r\n    \r\n    &:hover {\r\n      opacity: 1;\r\n      background: rgba(0, 0, 0, 0.1);\r\n    }\r\n  }\r\n}\r\n\r\n// 动画效果\r\n.notification-enter-active {\r\n  transition: all 0.3s ease;\r\n}\r\n\r\n.notification-leave-active {\r\n  transition: all 0.3s ease;\r\n}\r\n\r\n.notification-enter-from {\r\n  opacity: 0;\r\n  transform: translateX(100%);\r\n}\r\n\r\n.notification-leave-to {\r\n  opacity: 0;\r\n  transform: translateX(100%);\r\n}\r\n\r\n.notification-move {\r\n  transition: transform 0.3s ease;\r\n}\r\n\r\n// 响应式设计\r\n@media (max-width: 480px) {\r\n  .custom-notification {\r\n    width: calc(100vw - 40px);\r\n    left: 20px !important;\r\n    right: 20px !important;\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <el-date-picker ref=\"datePickerRef\" v-bind=\"mergedAttrs\" class=\"m-datepicker\" :popper-class=\"popperClass\" :class=\"{ 'style-type-solid': styleType === 'solid' }\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-date-picker>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\";\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: \"MDatePicker\",\r\n});\r\n\r\n// 定义 props，提供默认的 type 值\r\nconst props = defineProps({\r\n  popperClass: {\r\n    type: String,\r\n    default: \"\",\r\n  },\r\n  styleType: {\r\n    type: String,\r\n  },\r\n});\r\n\r\n// 使用类名 Hook，排除 type 和 popperClass 属性\r\nconst { mergedAttrs, className: popperClass } = useClassName(\r\n  \"mc-datepicker-popper\",\r\n  \"popperClass\"\r\n);\r\n\r\nconst { innerRef: datePickerRef, exposedProxy } = useExposeRef('datePickerRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n<style lang=\"scss\">\r\n.m-datepicker{\r\n  &.style-type-solid{\r\n    --el-input-border-color: var(--bg-tertiary-hover);\r\n    &.el-date-editor.el-input__wrapper, .el-input__wrapper{\r\n      // box-shadow: none ;\r\n      background-color: var(--bg-tertiary-hover);\r\n    }\r\n  }\r\n  &.el-input--small{\r\n    --el-input-height: 40px;\r\n  }\r\n}\r\n.mc-datepicker-popper {\r\n  .el-picker-panel {\r\n    border: 1px solid var(--border-primary);\r\n    border-radius: 6px;\r\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\r\n    .current,\r\n    // .today:not(.in-range),\r\n    .start-date,\r\n    .end-date {\r\n      .el-date-table-cell {\r\n        .el-date-table-cell__text {\r\n          color: var(--text-quaternary);\r\n          border-radius: 3px;\r\n        }\r\n      }\r\n    }\r\n\r\n    .start-date {\r\n      .el-date-table-cell {\r\n        border-top-left-radius: 3px;\r\n        border-bottom-left-radius: 3px;\r\n      }\r\n    }\r\n\r\n    .end-date {\r\n      .el-date-table-cell {\r\n        border-top-right-radius: 3px;\r\n        border-bottom-right-radius: 3px;\r\n      }\r\n    }\r\n\r\n    .el-button.is-text {\r\n      color: var(--text-brand);\r\n    }\r\n    .el-button.is-plain {\r\n      background: var(--bg-brand);\r\n      color: var(--text-quaternary);\r\n    }\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <el-empty ref=\"emptyRef\" v-bind=\"mergedAttrs\" :image=\"imageUrl\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-empty>\r\n</template>\r\n\r\n<script>\r\n// 定义可选的图片文件名（在模块作用域中）\r\nconst availableImages = [\r\n  '404',\r\n  'billing', \r\n  'cart',\r\n  'comments',\r\n  'dashboard',\r\n  'files',\r\n  'inbox',\r\n  'location',\r\n  'network',\r\n  'notifications',\r\n  'orders',\r\n  'records',\r\n  'session',\r\n  'subscription',\r\n  'todo',\r\n  'wishlist'\r\n]\r\n\r\nexport default {\r\n  name: 'MEmpty'\r\n}\r\n</script>\r\n\r\n<script setup>\r\nimport { computed, useAttrs } from 'vue'\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\nconst props = defineProps({\r\n  image: {\r\n    type: String,\r\n    default: 'orders',\r\n    validator: (value) => {\r\n      // 如果是完整的URL或路径，直接通过验证\r\n      if (value.includes('/') || value.includes('http')) {\r\n        return true\r\n      }\r\n      // 否则检查是否在可选列表中\r\n      return availableImages.includes(value)\r\n    }\r\n  }\r\n})\r\n\r\nconst attrs = useAttrs()\r\n\r\n// 排除 image 属性，避免重复绑定\r\nconst mergedAttrs = computed(() => {\r\n  const { image, ...rest } = attrs\r\n  return rest\r\n})\r\n\r\n// 计算图片URL\r\nconst imageUrl = computed(() => {\r\n  const { image } = props\r\n  \r\n  // 如果是完整的URL或路径，直接返回\r\n  if (image.includes('/') || image.includes('http')) {\r\n    return image\r\n  }\r\n  \r\n  // 使用 public 目录中的图片\r\n  // Vite 会自动处理 public 目录中的静态资源\r\n  return `https://cfdsaas-pre.oss-cn-hongkong.aliyuncs.com/mc-assets/mc-ui/empty/${image}.png`\r\n})\r\n\r\nconst { innerRef: emptyRef, exposedProxy } = useExposeRef('emptyRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>","<template>\r\n  <el-table v-bind=\"$attrs\" ref=\"innerTableRef\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n      <slot :name=\"name\" />\r\n    </template>\r\n  </el-table>\r\n</template>\r\n\r\n<script setup>\r\nimport { useExposeRef } from '@packages/hooks/useExposeRef.js'\r\n\r\ndefineOptions({\r\n  name: \"MTable\",\r\n});\r\n\r\nconst { innerRef: innerTableRef, exposedProxy } = useExposeRef('innerTableRef')\r\n\r\ndefineExpose(exposedProxy)\r\n</script>\r\n<style lang=\"scss\">\r\n// Table 组件样式 - 无边框设计\r\n\r\n</style>\r\n","<template>\r\n  <el-table-column v-bind=\"$attrs\" class=\"m-table-column\">\r\n    <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]=\"slotProps\">\r\n      <slot :name=\"name\" v-bind=\"slotProps || {}\" />\r\n    </template>\r\n  </el-table-column>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n  name: \"MTableColumn\",\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// TableColumn 组件样式\r\n.m-table-column.el-table-column {\r\n  // 继承父级 Table 组件的样式\r\n}\r\n</style>\r\n","<template>\r\n  <div \r\n    v-if=\"visible\" \r\n    class=\"m-banner\"\r\n    :class=\"[\r\n      `m-banner--${type}`,\r\n      {\r\n        'm-banner--closable': closable,\r\n        'm-banner--with-icon': icon || slots.icon\r\n      }\r\n    ]\"\r\n    :style=\"bannerStyle\"\r\n  >\r\n    <div class=\"m-banner__content\">\r\n      <!-- 图标插槽 -->\r\n      <div v-if=\"icon || slots.icon\" class=\"m-banner__icon\">\r\n        <slot name=\"icon\">\r\n          <m-icon :name=\"icon\" :size=\"iconSize\" />\r\n        </slot>\r\n      </div>\r\n      \r\n      <!-- 主要内容 -->\r\n      <div class=\"m-banner__text\">\r\n        <slot>{{ content }}</slot>\r\n      </div>\r\n      \r\n      <!-- 关闭按钮 -->\r\n      <div v-if=\"closable\" class=\"m-banner__close\" @click=\"handleClose\">\r\n        <m-icon name=\"lucide-x\" :size=\"closeIconSize\" />\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, computed, watch, useSlots } from 'vue'\r\nimport MIcon from '../Icon/Icon.vue'\r\n\r\n// 获取插槽\r\nconst slots = useSlots()\r\n\r\n// 定义 props\r\nconst props = defineProps({\r\n  // 横幅内容\r\n  content: {\r\n    type: String,\r\n    default: ''\r\n  },\r\n  // 横幅类型\r\n  type: {\r\n    type: String,\r\n    default: 'info',\r\n    validator: (value) => ['info', 'success', 'warning', 'error'].includes(value)\r\n  },\r\n  // 是否可关闭\r\n  closable: {\r\n    type: Boolean,\r\n    default: true\r\n  },\r\n  // 是否显示\r\n  visible: {\r\n    type: Boolean,\r\n    default: true\r\n  },\r\n  // 图标名称\r\n  icon: {\r\n    type: String,\r\n    default: ''\r\n  },\r\n  // 图标大小\r\n  iconSize: {\r\n    type: [String, Number],\r\n    default: '16px'\r\n  },\r\n  // 关闭图标大小\r\n  closeIconSize: {\r\n    type: [String, Number],\r\n    default: '16px'\r\n  },\r\n  // 自定义背景色\r\n  backgroundColor: {\r\n    type: String,\r\n    default: ''\r\n  },\r\n  // 自定义文字颜色\r\n  textColor: {\r\n    type: String,\r\n    default: ''\r\n  },\r\n  // 自定义边框颜色\r\n  borderColor: {\r\n    type: String,\r\n    default: ''\r\n  },\r\n  // 持续时间（毫秒），0 表示不自动关闭\r\n  duration: {\r\n    type: Number,\r\n    default: 0\r\n  }\r\n})\r\n\r\n// 定义 emits\r\nconst emit = defineEmits(['close', 'update:visible'])\r\n\r\n// 响应式数据\r\nconst internalVisible = ref(props.visible)\r\n\r\n// 监听 visible prop 变化\r\nwatch(() => props.visible, (newVal) => {\r\n  internalVisible.value = newVal\r\n})\r\n\r\n// 计算样式\r\nconst bannerStyle = computed(() => {\r\n  const style = {}\r\n  \r\n  if (props.backgroundColor) {\r\n    style.backgroundColor = props.backgroundColor\r\n  }\r\n  if (props.textColor) {\r\n    style.color = props.textColor\r\n  }\r\n  if (props.borderColor) {\r\n    style.borderColor = props.borderColor\r\n  }\r\n  \r\n  return style\r\n})\r\n\r\n// 默认图标映射\r\nconst defaultIcons = {\r\n  info: 'info',\r\n  success: 'check-circle',\r\n  warning: 'warning',\r\n  error: 'close-circle'\r\n}\r\n\r\n// 计算实际使用的图标\r\nconst actualIcon = computed(() => {\r\n  return props.icon || defaultIcons[props.type]\r\n})\r\n\r\n// 处理关闭\r\nconst handleClose = () => {\r\n  internalVisible.value = false\r\n  emit('update:visible', false)\r\n  emit('close')\r\n}\r\n\r\n// 自动关闭逻辑\r\nwatch(internalVisible, (newVal) => {\r\n  if (newVal && props.duration > 0) {\r\n    setTimeout(() => {\r\n      handleClose()\r\n    }, props.duration)\r\n  }\r\n})\r\n\r\n// 定义组件名称\r\ndefineOptions({\r\n  name: 'MBanner'\r\n})\r\n\r\n// 暴露方法给父组件\r\ndefineExpose({\r\n  close: handleClose\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.m-banner {\r\n  position: relative;\r\n  display: flex;\r\n  align-items: center;\r\n  min-height: 40px;\r\n  border-radius: 4px;\r\n  border: 1px solid;\r\n  font-size: 14px;\r\n  line-height: 1.5;\r\n  padding: 10px;\r\n  transition: all 0.3s ease;\r\n\r\n  &__content {\r\n    display: flex;\r\n    align-items: center;\r\n    width: 100%;\r\n    flex: 1;\r\n  }\r\n\r\n  &__icon {\r\n    display: flex;\r\n    align-items: center;\r\n    margin-right: 8px;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  &__text {\r\n    flex: 1;\r\n    word-break: break-word;\r\n  }\r\n\r\n  &__close {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    margin-left: 8px;\r\n    cursor: pointer;\r\n    padding: 4px;\r\n    border-radius: 3px;\r\n    transition: background-color 0.2s ease;\r\n    flex-shrink: 0;\r\n    min-width: 20px;\r\n    min-height: 20px;\r\n    opacity: 0.7;\r\n\r\n    &:hover {\r\n      background-color: rgba(0, 0, 0, 0.1);\r\n      opacity: 1;\r\n    }\r\n  }\r\n\r\n  // 类型样式\r\n  &--info {\r\n    background-color: #e1f3ff;\r\n    border-color: #b3d8ff;\r\n    color: #0066cc;\r\n\r\n    .m-banner__close:hover {\r\n      background-color: rgba(0, 102, 204, 0.1);\r\n    }\r\n  }\r\n\r\n  &--success {\r\n    background-color: #f0f9ff;\r\n    border-color: #b3e5b3;\r\n    color: #00a854;\r\n\r\n    .m-banner__close:hover {\r\n      background-color: rgba(0, 168, 84, 0.1);\r\n    }\r\n  }\r\n\r\n  &--warning {\r\n    background-color: #fff7e6;\r\n    border-color: #ffd591;\r\n    color: #fa8c16;\r\n\r\n    .m-banner__close:hover {\r\n      background-color: rgba(250, 140, 22, 0.1);\r\n    }\r\n  }\r\n\r\n  &--error {\r\n    background-color: #fff2f0;\r\n    border-color: #ffccc7;\r\n    color: #ff4d4f;\r\n\r\n    .m-banner__close:hover {\r\n      background-color: rgba(255, 77, 79, 0.1);\r\n    }\r\n  }\r\n\r\n  // 带动画的关闭\r\n  &.m-banner-leave-active {\r\n    opacity: 0;\r\n    transform: translateY(-10px);\r\n    transition: opacity 0.3s ease, transform 0.3s ease;\r\n  }\r\n}\r\n\r\n// 深色主题适配\r\n@media (prefers-color-scheme: dark) {\r\n  .m-banner {\r\n    &--info {\r\n      background-color: rgba(24, 144, 255, 0.1);\r\n      border-color: rgba(24, 144, 255, 0.3);\r\n      color: #69c0ff;\r\n    }\r\n\r\n    &--success {\r\n      background-color: rgba(82, 196, 26, 0.1);\r\n      border-color: rgba(82, 196, 26, 0.3);\r\n      color: #95de64;\r\n    }\r\n\r\n    &--warning {\r\n      background-color: rgba(250, 173, 20, 0.1);\r\n      border-color: rgba(250, 173, 20, 0.3);\r\n      color: #ffd666;\r\n    }\r\n\r\n    &--error {\r\n      background-color: rgba(255, 77, 79, 0.1);\r\n      border-color: rgba(255, 77, 79, 0.3);\r\n      color: #ff7875;\r\n    }\r\n  }\r\n}\r\n</style>\r\n","/**\r\n * 样式工具函数\r\n * 用于确保组件样式完全覆盖 Element Plus\r\n */\r\n\r\n/**\r\n * 为元素添加高优先级样式类\r\n * @param {HTMLElement} element - 目标元素\r\n */\r\nexport function addOverrideClass(element) {\r\n  if (element && element.classList) {\r\n    element.classList.add('mc-ui-override');\r\n  }\r\n}\r\n\r\n/**\r\n * 为 Vue 组件实例添加覆盖样式\r\n * @param {Object} componentInstance - Vue 组件实例\r\n */\r\nexport function addComponentOverride(componentInstance) {\r\n  if (componentInstance && componentInstance.$el) {\r\n    addOverrideClass(componentInstance.$el);\r\n  }\r\n}\r\n\r\n/**\r\n * 全局应用样式覆盖\r\n * 在应用启动时调用，确保所有 Element Plus 组件都被覆盖\r\n */\r\nexport function applyGlobalOverride() {\r\n  // 为 body 添加覆盖类\r\n  if (typeof document !== 'undefined') {\r\n    document.body.classList.add('mc-ui-override');\r\n    \r\n    // 监听动态添加的 Element Plus 组件\r\n    const observer = new MutationObserver((mutations) => {\r\n      mutations.forEach((mutation) => {\r\n        mutation.addedNodes.forEach((node) => {\r\n          if (node.nodeType === 1 && node.classList) {\r\n            // 为新添加的 Element Plus 组件添加覆盖类\r\n            if (node.className && typeof node.className === 'string' && node.className.includes('el-')) {\r\n              const parent = node.closest('.mc-ui-override') || node.parentElement;\r\n              if (parent && !parent.classList.contains('mc-ui-override')) {\r\n                parent.classList.add('mc-ui-override');\r\n              }\r\n            }\r\n            \r\n            // 检查子元素\r\n            const elComponents = node.querySelectorAll('[class*=\"el-\"]');\r\n            elComponents.forEach(el => {\r\n              const parent = el.closest('.mc-ui-override') || el.parentElement;\r\n              if (parent && !parent.classList.contains('mc-ui-override')) {\r\n                parent.classList.add('mc-ui-override');\r\n              }\r\n            });\r\n          }\r\n        });\r\n      });\r\n    });\r\n    \r\n    observer.observe(document.body, {\r\n      childList: true,\r\n      subtree: true\r\n    });\r\n  }\r\n}\r\n\r\n/**\r\n * 启用或自动切换 H5 适配（为 html 添加 mc-h5 类）\r\n * @param {Object} options\r\n * @param {'auto'|'on'|'off'} [options.mode='auto'] - 自动/强开/关闭\r\n * @param {number} [options.breakpoint=768] - 视口断点（px）\r\n * @returns {() => void} 调用以移除监听并清理状态\r\n */\r\nexport function enableH5Override(options = {}) {\r\n  if (typeof window === 'undefined' || typeof document === 'undefined') return () => {};\r\n\r\n  const {\r\n    mode = 'auto',\r\n    breakpoint = 768,\r\n  } = options;\r\n\r\n  const root = document.documentElement;\r\n\r\n  const isMobileUA = () => /Mobi|Android|iPhone|iPad|iPod|Mobile/i.test(navigator.userAgent);\r\n  const isNarrow = () => window.innerWidth <= breakpoint;\r\n\r\n  const apply = (enable) => {\r\n    if (enable) {\r\n      root.classList.add('mc-h5');\r\n    } else {\r\n      root.classList.remove('mc-h5');\r\n    }\r\n  };\r\n\r\n  if (mode === 'on') {\r\n    apply(true);\r\n    return () => { root.classList.remove('mc-h5'); };\r\n  }\r\n\r\n  if (mode === 'off') {\r\n    apply(false);\r\n    return () => {};\r\n  }\r\n\r\n  // auto 模式：依据 UA 或断点\r\n  const compute = () => apply(isMobileUA() || isNarrow());\r\n  compute();\r\n\r\n  const onResize = () => compute();\r\n  window.addEventListener('resize', onResize, { passive: true });\r\n\r\n  return () => {\r\n    window.removeEventListener('resize', onResize);\r\n  };\r\n}\r\n\r\n/**\r\n * 强制刷新组件样式\r\n * @param {string} selector - CSS 选择器\r\n */\r\nexport function forceRefreshStyles(selector = '[class*=\"el-\"]') {\r\n  if (typeof document !== 'undefined') {\r\n    const elements = document.querySelectorAll(selector);\r\n    elements.forEach(el => {\r\n      const parent = el.closest('.mc-ui-override') || el.parentElement;\r\n      if (parent && !parent.classList.contains('mc-ui-override')) {\r\n        parent.classList.add('mc-ui-override');\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\n/**\r\n * 检测当前是否为 H5 环境\r\n * 优先检查 mc-h5 类（由 enableH5Override 管理），如果不存在则回退到 UA 和窗口宽度检测\r\n * @param {number} [breakpoint=768] - 视口断点（px），仅在回退检测时使用\r\n * @returns {boolean} 是否为 H5 环境\r\n */\r\nexport function isH5(breakpoint = 768) {\r\n  if (typeof window === 'undefined' || typeof document === 'undefined') {\r\n    return false;\r\n  }\r\n\r\n  // 优先检查 mc-h5 类（最可靠，由 enableH5Override 自动管理）\r\n  const root = document.documentElement;\r\n  if (root.classList.contains('mc-h5')) {\r\n    return true;\r\n  }\r\n\r\n  // 回退检测：UA 或窗口宽度（兼容未调用 enableH5Override 的情况）\r\n  const isMobileUA = /Mobi|Android|iPhone|iPad|iPod|Mobile/i.test(navigator.userAgent);\r\n  const isNarrow = window.innerWidth <= breakpoint;\r\n  return isMobileUA || isNarrow;\r\n}\r\n\r\n/**\r\n * 创建带有样式覆盖的 Element Plus 组件配置\r\n * @param {Object} componentConfig - 组件配置\r\n * @returns {Object} 增强后的组件配置\r\n */\r\nexport function createOverrideComponent(componentConfig) {\r\n  return {\r\n    ...componentConfig,\r\n    mounted() {\r\n      addOverrideClass(this.$el);\r\n      if (componentConfig.mounted) {\r\n        componentConfig.mounted.call(this);\r\n      }\r\n    },\r\n    updated() {\r\n      addOverrideClass(this.$el);\r\n      if (componentConfig.updated) {\r\n        componentConfig.updated.call(this);\r\n      }\r\n    }\r\n  };\r\n}\r\n","<template>\r\n  <div class=\"m-tabs\" :class=\"{ 'style-solid': styleType === 'solid' }\">\r\n    <div class=\"m-tabs__header-wrapper\">\r\n\r\n      <i\r\n        v-if=\"showLeftArrow\"\r\n        class=\"m-tabs__arrow m-tabs__arrow--left iconfont icon-chevron-left\"\r\n        @click=\"handleScrollLeft\"\r\n      />\r\n      <div class=\"m-tabs__header\" ref=\"headerRef\" @scroll=\"handleScroll\">\r\n        <div class=\"m-tabs__nav\" ref=\"navRef\">\r\n        <div\r\n          v-for=\"(tab, index) in tabs\"\r\n          :key=\"tab.name\"\r\n          :class=\"[\r\n            'm-tabs__item',\r\n            { 'is-active': activeTab === tab.name }\r\n          ]\"\r\n          @click=\"handleTabClick(tab.name)\"\r\n        >\r\n          {{ tab.label }}\r\n        </div>\r\n        <div\r\n          v-if=\"styleType !== 'solid'\"\r\n          class=\"m-tabs__active-bar\"\r\n          :style=\"activeBarStyle\"\r\n        ></div>\r\n        </div>\r\n      </div>\r\n      <i\r\n        v-if=\"showRightArrow\"\r\n        class=\"m-tabs__arrow m-tabs__arrow--right iconfont icon-chevron-right\"\r\n        @click=\"handleScrollRight\"\r\n      />\r\n    </div>\r\n    <div class=\"m-tabs__content\" ref=\"contentRef\" :key=\"internalKey\">\r\n      <slot></slot>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport { ref, reactive, computed, onMounted, onUnmounted, nextTick, provide, watch } from 'vue'\r\nimport { isH5 } from '../../utils/styleUtils.js'\r\n\r\n// 常量定义\r\nconst CONSTANTS = {\r\n  // 滚动相关\r\n  SCROLL_RATIO: 0.8, // 滚动比例\r\n  SCROLL_MARGIN: 20, // 滚动边距\r\n  EDGE_THRESHOLD_RATIO: 0.3, // 边缘阈值比例\r\n  SCROLL_MIN_DIFF: 10, // 最小滚动差值（避免抖动）\r\n  SCROLL_PRECISION: 0.5, // 滚动精度阈值\r\n  \r\n  // 定时器延迟\r\n  SORT_DELAY: 10, // 排序延迟\r\n  RESET_DELAY: 100, // 重置延迟\r\n  SCROLL_DEBOUNCE: 150, // 滚动防抖时间\r\n  SCROLL_ANIMATION: 400, // 滚动动画时间\r\n  INIT_DELAY: 50, // 初始化延迟\r\n  \r\n  // ActiveBar 相关\r\n  ACTIVE_BAR_WIDTH: 16, // 活动条宽度\r\n  ACTIVE_BAR_OFFSET: 8, // 活动条偏移量\r\n  H5_POSITION_TOLERANCE: 1 // H5 位置容差\r\n}\r\n\r\nexport default {\r\n  name: 'MTabs',\r\n  props: {\r\n    modelValue: {\r\n      type: [String, Number],\r\n      default: ''\r\n    },\r\n    closable: {\r\n      type: Boolean,\r\n      default: false\r\n    },\r\n    styleType: {\r\n      type: String,\r\n      default: 'default',\r\n      validator: (value) => ['default', 'solid'].includes(value)\r\n    }\r\n  },\r\n  emits: ['update:modelValue', 'tab-click', 'tab-remove', 'tab-change', 'tab-add', 'edit'],\r\n  setup(props, { emit, slots }) {\r\n    const navRef = ref(null)\r\n    const headerRef = ref(null)\r\n    const contentRef = ref(null)\r\n    const tabs = ref([])\r\n    const activeTab = ref(props.modelValue)\r\n    const internalKey = ref(0) // 内部key，用于强制重新渲染slot内容\r\n    const previousTabsCount = ref(0) // 上一次tabs的数量\r\n    const previousTabsNames = ref([]) // 上一次tabs的name列表\r\n    \r\n    // 箭头显示控制\r\n    const showLeftArrow = ref(false)\r\n    const showRightArrow = ref(false)\r\n\r\n    // 活动条样式\r\n    const activeBarStyle = ref({ width: '0px', left: '0px' })\r\n    \r\n    // 定时器和状态管理\r\n    let sortTimer = null\r\n    let rafId = null\r\n    let scrollTimeout = null\r\n    let isManualScroll = false\r\n    let isResetting = false\r\n    let resizeObserver = null\r\n\r\n    // 重置活动条样式\r\n    const resetActiveBarStyle = () => {\r\n      activeBarStyle.value = { width: '0px', left: '0px' }\r\n    }\r\n\r\n    // 获取活动项的精确位置\r\n    const getActiveItemPosition = (activeItem) => {\r\n      let itemLeft = activeItem.offsetLeft\r\n      \r\n      // 在 H5 环境下，使用更精确的位置计算\r\n      if (isH5()) {\r\n        const navStyle = window.getComputedStyle(navRef.value)\r\n        const actualNavPaddingLeft = parseFloat(navStyle.paddingLeft) || 0\r\n        \r\n        // 如果位置差异超过容差，使用 getBoundingClientRect 重新计算\r\n        if (Math.abs(itemLeft - actualNavPaddingLeft) > CONSTANTS.H5_POSITION_TOLERANCE) {\r\n          const navRect = navRef.value.getBoundingClientRect()\r\n          const itemRect = activeItem.getBoundingClientRect()\r\n          itemLeft = itemRect.left - navRect.left\r\n        }\r\n      }\r\n      \r\n      return itemLeft\r\n    }\r\n\r\n    // 更新活动条位置\r\n    const updateActiveBarPosition = (shouldScroll = true) => {\r\n      nextTick(() => {\r\n        // 提前退出条件检查\r\n        if (!navRef.value || tabs.value.length === 0 || !activeTab.value) {\r\n          resetActiveBarStyle()\r\n          return\r\n        }\r\n\r\n        const activeIndex = tabs.value.findIndex(tab => tab.name === activeTab.value)\r\n        if (activeIndex === -1) {\r\n          resetActiveBarStyle()\r\n          return\r\n        }\r\n\r\n        const navItems = navRef.value.querySelectorAll('.m-tabs__item')\r\n        const activeItem = navItems[activeIndex]\r\n        \r\n        if (!activeItem) {\r\n          resetActiveBarStyle()\r\n          return\r\n        }\r\n\r\n        // 计算活动条位置\r\n        const itemLeft = getActiveItemPosition(activeItem)\r\n        const centerLeft = itemLeft + (activeItem.offsetWidth / 2) - CONSTANTS.ACTIVE_BAR_OFFSET\r\n\r\n        activeBarStyle.value = {\r\n          width: `${CONSTANTS.ACTIVE_BAR_WIDTH}px`,\r\n          left: `${centerLeft}px`\r\n        }\r\n\r\n        // 滚动到活动tab可见区域（只在应该滚动时执行）\r\n        if (shouldScroll) {\r\n          scrollToActiveTab(activeItem)\r\n        }\r\n      })\r\n    }\r\n\r\n    // 滚动到活动tab\r\n    const scrollToActiveTab = (activeItem) => {\r\n      if (!headerRef.value || !activeItem) return\r\n\r\n      const header = headerRef.value\r\n      const headerWidth = header.clientWidth\r\n      const headerScrollLeft = header.scrollLeft\r\n      \r\n      const itemLeft = activeItem.offsetLeft\r\n      const itemWidth = activeItem.offsetWidth\r\n      const itemRight = itemLeft + itemWidth\r\n\r\n      if (isH5()) {\r\n        // H5 环境：让标签中心对齐到可视区域中心\r\n        const itemCenter = itemLeft + itemWidth / 2\r\n        const navWidth = navRef.value.scrollWidth\r\n        const maxScrollLeft = Math.max(0, navWidth - headerWidth)\r\n        \r\n        let targetScrollLeft = itemCenter - headerWidth / 2\r\n        targetScrollLeft = Math.max(0, Math.min(targetScrollLeft, maxScrollLeft))\r\n        \r\n        // 检查是否需要滚动\r\n        const itemVisibleLeft = itemLeft - headerScrollLeft\r\n        const itemVisibleRight = itemRight - headerScrollLeft\r\n        const isItemInView = itemVisibleLeft >= 0 && itemVisibleRight <= headerWidth\r\n        \r\n        const edgeThreshold = headerWidth * CONSTANTS.EDGE_THRESHOLD_RATIO\r\n        const isInLeftEdge = itemVisibleLeft >= 0 && itemVisibleLeft < edgeThreshold\r\n        const isInRightEdge = itemVisibleRight > headerWidth - edgeThreshold && itemVisibleRight <= headerWidth\r\n        \r\n        const shouldScroll = !isItemInView || isInLeftEdge || isInRightEdge\r\n        const scrollDiff = Math.abs(headerScrollLeft - targetScrollLeft)\r\n        \r\n        if (shouldScroll && scrollDiff > CONSTANTS.SCROLL_MIN_DIFF) {\r\n          header.scrollTo({ left: targetScrollLeft, behavior: 'smooth' })\r\n        }\r\n      } else {\r\n        // 非H5环境：保持原有逻辑\r\n        if (itemLeft < headerScrollLeft) {\r\n          header.scrollTo({\r\n            left: itemLeft - CONSTANTS.SCROLL_MARGIN,\r\n            behavior: 'smooth'\r\n          })\r\n        } else if (itemRight > headerScrollLeft + headerWidth) {\r\n          header.scrollTo({\r\n            left: itemRight - headerWidth + CONSTANTS.SCROLL_MARGIN,\r\n            behavior: 'smooth'\r\n          })\r\n        }\r\n      }\r\n    }\r\n\r\n    // 处理tab点击\r\n    const handleTabClick = (tabName) => {\r\n      if (tabName === activeTab.value) return\r\n      \r\n      const oldValue = activeTab.value\r\n      activeTab.value = tabName\r\n      emit('update:modelValue', tabName)\r\n      emit('tab-click', tabName)\r\n      emit('tab-change', tabName, oldValue)\r\n      updateActiveBarPosition()\r\n    }\r\n\r\n    // 处理tab关闭\r\n    const handleTabRemove = (tabName) => {\r\n      emit('tab-remove', tabName)\r\n      emit('edit', tabName, 'remove')\r\n    }\r\n\r\n    // 处理tab添加\r\n    const handleTabAdd = () => {\r\n      emit('tab-add')\r\n      emit('edit', null, 'add')\r\n    }\r\n\r\n    // 更新UI状态\r\n    const updateUIState = () => {\r\n      if (tabs.value.length > 0) {\r\n        if (activeTab.value) {\r\n          updateActiveBarPosition()\r\n        }\r\n        updateArrowVisibility()\r\n      }\r\n    }\r\n\r\n    // 注册tab\r\n    const registerTab = (tab) => {\r\n      const index = tabs.value.findIndex(t => t.name === tab.name)\r\n      \r\n      if (index === -1) {\r\n        tabs.value.push(tab)\r\n      } else {\r\n        tabs.value[index] = tab\r\n      }\r\n      \r\n      // 延迟排序，等待DOM更新完成\r\n      if (sortTimer) {\r\n        clearTimeout(sortTimer)\r\n      }\r\n      \r\n      sortTimer = setTimeout(() => {\r\n        nextTick(() => {\r\n          sortTabsByDOMOrder()\r\n          updateUIState()\r\n        })\r\n      }, CONSTANTS.SORT_DELAY)\r\n    }\r\n    \r\n    // 按照DOM顺序排序tabs\r\n    const sortTabsByDOMOrder = () => {\r\n      if (!contentRef.value || tabs.value.length === 0) return\r\n      \r\n      const paneElements = contentRef.value.querySelectorAll('.m-tab-pane')\r\n      if (paneElements.length === 0 || paneElements.length !== tabs.value.length) return\r\n      \r\n      // 从DOM元素中读取data-name属性，获取DOM中的顺序\r\n      const domOrder = []\r\n      paneElements.forEach((el) => {\r\n        const name = el.getAttribute('data-tab-name')\r\n        if (name) {\r\n          domOrder.push(name)\r\n        }\r\n      })\r\n      \r\n      if (domOrder.length === 0 || domOrder.length !== tabs.value.length) return\r\n      \r\n      // 检查当前顺序是否与DOM顺序一致\r\n      const currentOrder = tabs.value.map(t => String(t.name))\r\n      const isOrderSame = currentOrder.length === domOrder.length && \r\n        currentOrder.every((name, index) => name === String(domOrder[index]))\r\n      \r\n      if (!isOrderSame) {\r\n        // DOM顺序与tabs顺序不一致，按照DOM顺序重新排序\r\n        const tabMap = new Map(tabs.value.map(t => [String(t.name), t]))\r\n        const sortedTabs = []\r\n        \r\n        domOrder.forEach(name => {\r\n          const tab = tabMap.get(String(name))\r\n          if (tab) {\r\n            sortedTabs.push(tab)\r\n          }\r\n        })\r\n        \r\n        // 确保所有tabs都被包含（处理新增的情况）\r\n        tabs.value.forEach(tab => {\r\n          if (!sortedTabs.find(t => t.name === tab.name)) {\r\n            sortedTabs.push(tab)\r\n          }\r\n        })\r\n        \r\n        // 只有当数量一致时才更新\r\n        if (sortedTabs.length === tabs.value.length) {\r\n          tabs.value.splice(0, tabs.value.length, ...sortedTabs)\r\n          updateActiveBarPosition()\r\n        }\r\n      }\r\n    }\r\n    \r\n    \r\n\r\n    // 注销tab\r\n    const unregisterTab = (tabName) => {\r\n      const index = tabs.value.findIndex(t => t.name === tabName)\r\n      if (index > -1) {\r\n        tabs.value.splice(index, 1)\r\n      }\r\n    }\r\n\r\n    // 提供给子组件的方法\r\n    provide('tabsContext', {\r\n      activeTab,\r\n      registerTab,\r\n      unregisterTab,\r\n      handleTabRemove,\r\n      handleTabAdd\r\n    })\r\n\r\n    // 监听modelValue变化\r\n    watch(() => props.modelValue, (newValue, oldValue) => {\r\n      if (newValue !== activeTab.value) {\r\n        activeTab.value = newValue\r\n        emit('tab-change', newValue, oldValue)\r\n        updateActiveBarPosition()\r\n      }\r\n    })\r\n\r\n    // 检测tabs列表是否发生变化\r\n    const detectTabsChange = (newTabs) => {\r\n      if (previousTabsCount.value === 0) return false\r\n      \r\n      const newCount = newTabs.length\r\n      const newNames = newTabs.map(t => String(t.name))\r\n      \r\n      const isCountChanged = newCount !== previousTabsCount.value\r\n      const isOrderChanged = newCount === previousTabsCount.value && \r\n        newNames.some((name, index) => \r\n          index >= previousTabsNames.value.length || name !== previousTabsNames.value[index])\r\n      \r\n      return isCountChanged || isOrderChanged\r\n    }\r\n\r\n    // 处理tabs列表切换\r\n    const handleTabsListChange = () => {\r\n      internalKey.value++\r\n      isResetting = true\r\n      \r\n      nextTick(() => {\r\n        setTimeout(() => {\r\n          sortTabsByDOMOrder()\r\n          \r\n          if (tabs.value.length > 0) {\r\n            previousTabsCount.value = tabs.value.length\r\n            previousTabsNames.value = tabs.value.map(t => String(t.name))\r\n            updateUIState()\r\n          }\r\n          \r\n          isResetting = false\r\n        }, CONSTANTS.RESET_DELAY)\r\n      })\r\n    }\r\n\r\n    // 监听tabs变化（用于更新UI和检测列表切换）\r\n    watch(tabs, (newTabs) => {\r\n      if (isResetting || newTabs.length === 0) return\r\n      \r\n      // 检测到列表切换时，强制重新渲染\r\n      if (detectTabsChange(newTabs)) {\r\n        handleTabsListChange()\r\n        return\r\n      }\r\n      \r\n      // 更新记录和UI\r\n      previousTabsCount.value = newTabs.length\r\n      previousTabsNames.value = newTabs.map(t => String(t.name))\r\n      updateUIState()\r\n    }, { deep: true })\r\n\r\n    // 更新箭头可见性\r\n    const updateArrowVisibility = () => {\r\n      if (!headerRef.value || !navRef.value) return\r\n      \r\n      const header = headerRef.value\r\n      const nav = navRef.value\r\n      const currentScrollLeft = header.scrollLeft\r\n      const scrollWidth = nav.scrollWidth\r\n      const clientWidth = header.clientWidth\r\n      \r\n      // 检查是否需要显示箭头（内容宽度大于容器宽度）\r\n      const needsScroll = scrollWidth > clientWidth\r\n      \r\n      if (!needsScroll) {\r\n        showLeftArrow.value = false\r\n        showRightArrow.value = false\r\n        return\r\n      }\r\n      \r\n      // 计算最大滚动距离和箭头可见性\r\n      const maxScrollLeft = Math.max(0, scrollWidth - clientWidth)\r\n      \r\n      // 使用精度阈值处理浮点数精度问题\r\n      showLeftArrow.value = currentScrollLeft > CONSTANTS.SCROLL_PRECISION\r\n      showRightArrow.value = currentScrollLeft < maxScrollLeft - CONSTANTS.SCROLL_PRECISION\r\n    }\r\n\r\n    // 清理滚动相关的定时器\r\n    const clearScrollTimers = () => {\r\n      if (rafId) {\r\n        cancelAnimationFrame(rafId)\r\n        rafId = null\r\n      }\r\n      if (scrollTimeout) {\r\n        clearTimeout(scrollTimeout)\r\n        scrollTimeout = null\r\n      }\r\n    }\r\n\r\n    // 滚动事件处理（防抖优化）\r\n    const handleScroll = () => {\r\n      updateArrowVisibility()\r\n      \r\n      // 非手动滚动时更新 activeBar 位置（但不自动滚动）\r\n      if (!isManualScroll) {\r\n        updateActiveBarPosition(false)\r\n      }\r\n      \r\n      // 使用 requestAnimationFrame 优化更新\r\n      clearScrollTimers()\r\n      \r\n      rafId = requestAnimationFrame(() => {\r\n        updateArrowVisibility()\r\n        rafId = null\r\n      })\r\n      \r\n      // 滚动停止后再次检查\r\n      scrollTimeout = setTimeout(() => {\r\n        updateArrowVisibility()\r\n        if (isManualScroll) {\r\n          isManualScroll = false\r\n        }\r\n        scrollTimeout = null\r\n      }, CONSTANTS.SCROLL_DEBOUNCE)\r\n    }\r\n\r\n    // 执行滚动动画\r\n    const performScroll = (direction) => {\r\n      if (!headerRef.value) return\r\n      \r\n      isManualScroll = true\r\n      const scrollAmount = headerRef.value.clientWidth * CONSTANTS.SCROLL_RATIO\r\n      headerRef.value.scrollBy({\r\n        left: direction === 'left' ? -scrollAmount : scrollAmount,\r\n        behavior: 'smooth'\r\n      })\r\n      \r\n      // 滚动完成后更新状态\r\n      setTimeout(() => {\r\n        updateArrowVisibility()\r\n        isManualScroll = false\r\n      }, CONSTANTS.SCROLL_ANIMATION)\r\n    }\r\n\r\n    // 向左滚动\r\n    const handleScrollLeft = () => {\r\n      performScroll('left')\r\n    }\r\n\r\n    // 向右滚动\r\n    const handleScrollRight = () => {\r\n      performScroll('right')\r\n    }\r\n\r\n    // 初始化默认active tab\r\n    const initDefaultActiveTab = () => {\r\n      if (!activeTab.value && tabs.value.length > 0) {\r\n        const firstTab = tabs.value[0]\r\n        activeTab.value = firstTab.name\r\n        emit('update:modelValue', activeTab.value)\r\n      }\r\n    }\r\n\r\n    // 初始化时设置默认active tab\r\n    onMounted(() => {\r\n      // 初始化记录\r\n      previousTabsCount.value = tabs.value.length\r\n      previousTabsNames.value = tabs.value.map(t => String(t.name))\r\n      \r\n      initDefaultActiveTab()\r\n      updateActiveBarPosition()\r\n      \r\n      // 延迟更新，确保样式完全应用（特别是 H5 样式）\r\n      setTimeout(() => {\r\n        updateActiveBarPosition()\r\n      }, CONSTANTS.INIT_DELAY)\r\n      \r\n      // 使用 requestAnimationFrame 确保在样式渲染后更新\r\n      requestAnimationFrame(() => {\r\n        setTimeout(() => {\r\n          updateActiveBarPosition()\r\n        }, CONSTANTS.INIT_DELAY)\r\n      })\r\n      \r\n      // 初始化箭头可见性\r\n      nextTick(() => {\r\n        updateArrowVisibility()\r\n      })\r\n      \r\n      // 监听窗口大小变化和tabs变化\r\n      if (headerRef.value && navRef.value) {\r\n        resizeObserver = new ResizeObserver(() => {\r\n          updateArrowVisibility()\r\n          updateActiveBarPosition(false)\r\n        })\r\n        resizeObserver.observe(headerRef.value)\r\n        resizeObserver.observe(navRef.value)\r\n      }\r\n    })\r\n\r\n    // 清理所有定时器和观察器\r\n    onUnmounted(() => {\r\n      if (sortTimer) {\r\n        clearTimeout(sortTimer)\r\n        sortTimer = null\r\n      }\r\n      \r\n      clearScrollTimers()\r\n      \r\n      if (resizeObserver) {\r\n        resizeObserver.disconnect()\r\n        resizeObserver = null\r\n      }\r\n    })\r\n\r\n    return {\r\n      navRef,\r\n      headerRef,\r\n      contentRef,\r\n      tabs,\r\n      activeTab,\r\n      activeBarStyle,\r\n      showLeftArrow,\r\n      showRightArrow,\r\n      internalKey,\r\n      handleTabClick,\r\n      handleTabRemove,\r\n      handleTabAdd,\r\n      registerTab,\r\n      unregisterTab,\r\n      updateActiveBarPosition,\r\n      updateArrowVisibility,\r\n      handleScroll,\r\n      handleScrollLeft,\r\n      handleScrollRight\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.m-tabs {\r\n  &__header-wrapper {\r\n    position: relative;\r\n    display: flex;\r\n    align-items: stretch;\r\n    border-bottom: 1px solid var(--border-primary);\r\n  }\r\n\r\n  &__header {\r\n    flex: 1;\r\n    position: relative;\r\n    overflow-x: auto;\r\n    overflow-y: hidden;\r\n    \r\n    // 完全隐藏滚动条（但保持滚动功能）\r\n    scrollbar-width: none; // Firefox\r\n    -ms-overflow-style: none; // IE 和 Edge\r\n    \r\n    &::-webkit-scrollbar {\r\n      display: none; // Chrome, Safari, Opera\r\n    }\r\n\r\n    // 使用 CSS transition 实现平滑滚动\r\n    scroll-behavior: smooth;\r\n  }\r\n\r\n  &__nav {\r\n    position: relative;\r\n    display: inline-flex;\r\n    white-space: nowrap;\r\n    padding: 0 16px;\r\n  }\r\n\r\n  &__item {\r\n    position: relative;\r\n    height: 24px;\r\n    margin-right: 20px;\r\n    margin-bottom: 6px;\r\n    cursor: pointer;\r\n    color: var(--text-tertiary);\r\n    font-size: var(--font-size-text-base);\r\n    transition: color 0.3s;\r\n    user-select: none;\r\n    font-weight: 600;\r\n\r\n    &:hover {\r\n      color: var(--text-brand);\r\n    }\r\n\r\n    &.is-active {\r\n      color: var(--text-brand);\r\n    }\r\n\r\n    &:last-child {\r\n      margin-right: 0;\r\n    }\r\n  }\r\n\r\n  &__active-bar {\r\n    position: absolute;\r\n    bottom: 0;\r\n    height: 3px;\r\n    background-color: var(--text-brand);\r\n    transition: all 0.3s;\r\n    z-index: 1;\r\n  }\r\n\r\n  &__arrow {\r\n    flex-shrink: 0;\r\n    width: 32px;\r\n    height: 100%;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    border: none;\r\n    cursor: pointer;\r\n    color: var(--text-primary);\r\n    font-size: 24px;\r\n    transition: opacity 0.3s, background-color 0.3s;\r\n    user-select: none;\r\n    z-index: 1;\r\n\r\n    &:hover {\r\n      opacity: 0.8;\r\n      background-color: var(--bg-secondary);\r\n    }\r\n\r\n    &:active {\r\n      opacity: 0.6;\r\n    }\r\n  }\r\n\r\n  // solid 样式\r\n  &.style-solid {\r\n    .m-tabs__nav {\r\n      border-bottom: none;\r\n      background-color: var(--bg-tertiary-hover);\r\n      border-radius: 8px;\r\n      padding: 4px;\r\n    }\r\n\r\n    .m-tabs__item {\r\n      height: 32px;\r\n      margin-right: 0;\r\n      margin-bottom: 0;\r\n      padding: 0 16px;\r\n      border-radius: 6px;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      background-color: transparent;\r\n      transition: all 0.3s;\r\n\r\n      &:hover {\r\n        background-color: rgba(0, 0, 0, 0.05);\r\n      }\r\n\r\n      &.is-active {\r\n        background-color: var(--bg-primary);\r\n        color: var(--text-primary);\r\n        box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n.mc-h5{\r\n  .m-tabs{\r\n    .m-tabs__item {\r\n      font-size: var(--font-size-text-sm);\r\n      margin-right: 16px;\r\n      \r\n      // 移动端禁用 hover 效果\r\n      &:hover {\r\n        color: var(--text-tertiary);\r\n      }\r\n      \r\n      &.is-active:hover {\r\n        color: var(--text-brand);\r\n      }\r\n    }\r\n    .m-tabs__nav {\r\n      padding:0 10px;\r\n    }\r\n    // 移动端隐藏箭头按钮\r\n    .m-tabs__arrow {\r\n      display: none;\r\n    }\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <div\r\n    v-show=\"isActive\"\r\n    class=\"m-tab-pane\"\r\n    :class=\"{ 'is-active': isActive }\"\r\n    :data-tab-name=\"tabName\"\r\n  >\r\n    <slot></slot>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport { inject, computed, onMounted, onUnmounted, watch, nextTick } from 'vue'\r\n\r\nexport default {\r\n  name: 'MTabPane',\r\n  props: {\r\n    label: {\r\n      type: String,\r\n      required: true\r\n    },\r\n    name: {\r\n      type: [String, Number],\r\n      default: ''\r\n    },\r\n    disabled: {\r\n      type: Boolean,\r\n      default: false\r\n    },\r\n    closable: {\r\n      type: Boolean,\r\n      default: false\r\n    }\r\n  },\r\n  setup(props) {\r\n    const tabsContext = inject('tabsContext')\r\n    \r\n    // 计算tab名称，如果没有提供name则使用label\r\n    const tabName = computed(() => {\r\n      return props.name || props.label\r\n    })\r\n\r\n    // 计算是否激活\r\n    const isActive = computed(() => {\r\n      return tabsContext.activeTab.value === tabName.value\r\n    })\r\n\r\n    // 注册tab的函数\r\n    const doRegisterTab = () => {\r\n      const tabInfo = {\r\n        label: props.label,\r\n        name: tabName.value,\r\n        disabled: props.disabled,\r\n        closable: props.closable\r\n      }\r\n      tabsContext.registerTab(tabInfo)\r\n    }\r\n    \r\n    // 组件挂载时注册tab\r\n    onMounted(() => {\r\n      doRegisterTab()\r\n    })\r\n\r\n    // 监听props变化，立即更新tab信息并重新排序（不使用防抖，确保立即响应）\r\n    watch(() => [props.label, props.name, props.disabled, props.closable], (newVal, oldVal) => {\r\n      // 只在首次渲染后或值真正改变时触发\r\n      if (!oldVal || newVal[0] !== oldVal[0] || newVal[1] !== oldVal[1] || \r\n          newVal[2] !== oldVal[2] || newVal[3] !== oldVal[3]) {\r\n        // 立即注册，不使用防抖，确保顺序正确\r\n        doRegisterTab()\r\n      }\r\n    }, { immediate: false })\r\n\r\n    // 组件卸载时注销tab\r\n    onUnmounted(() => {\r\n      tabsContext.unregisterTab(tabName.value)\r\n    })\r\n\r\n    return {\r\n      isActive,\r\n      tabName\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.m-tab-pane {\r\n  display: none;\r\n\r\n  &.is-active {\r\n    display: block;\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <div\r\n    :class=\"[\r\n      'm-tab-card-item',\r\n      { \r\n        'is-active': isActive,\r\n        'is-disabled': disabled\r\n      }\r\n    ]\"\r\n    @click=\"handleClick\"\r\n  >\r\n    <span class=\"m-tab-card-item__text\">\r\n      <slot>{{ label }}</slot>\r\n    </span>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { inject, computed } from 'vue'\r\n\r\ndefineOptions({\r\n  name: \"MTabCardItem\",\r\n})\r\n\r\n// 定义 props\r\nconst props = defineProps({\r\n  label: {\r\n    type: String,\r\n    default: ''\r\n  },\r\n  name: {\r\n    type: [String, Number],\r\n    required: true\r\n  },\r\n  disabled: {\r\n    type: Boolean,\r\n    default: false\r\n  }\r\n})\r\n\r\n// 定义 emits\r\nconst emit = defineEmits(['click'])\r\n\r\n// 注入父组件上下文\r\nconst tabCardContext = inject('tabCardContext')\r\n\r\n// 计算是否激活\r\nconst isActive = computed(() => {\r\n  return tabCardContext.activeTab.value === props.name\r\n})\r\n\r\n// 处理点击\r\nconst handleClick = () => {\r\n  if (props.disabled) {\r\n    return\r\n  }\r\n  \r\n  tabCardContext.handleTabClick(props.name, props.disabled)\r\n  emit('click', props.name)\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.m-tab-card-item {\r\n  position: relative;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  height: 32px;\r\n  border-radius: var(--md);\r\n  cursor: pointer;\r\n  // transition: all 0.3s ease;\r\n  user-select: none;\r\n  background-color: transparent;\r\n  padding: 0 36px;\r\n  text-align: center;\r\n  z-index: 1;\r\n\r\n  // &:hover:not(.is-disabled):not(.is-active) {\r\n  //   background-color: rgba(255, 255, 255, 0.05);\r\n  // }\r\n\r\n  &.is-active {\r\n    background-color: var(--bg-brand, #ffd700);\r\n    color: var(--text-quaternary);\r\n    font-weight: 600;\r\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n  }\r\n\r\n  &.is-disabled {\r\n    cursor: not-allowed;\r\n    opacity: 0.5;\r\n  }\r\n\r\n  &:not(.is-active) {\r\n    color: var(--text-secondary, #ffffff);\r\n  }\r\n\r\n  &__text {\r\n    font-size: 14px;\r\n    line-height: 1.4;\r\n    white-space: nowrap;\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <div class=\"m-tab-card\" :class=\"{ 'is-disabled': disabled }\">\r\n    <div class=\"m-tab-card__container\">\r\n      <m-tab-card-item\r\n        v-for=\"(tab, index) in tabs\"\r\n        :key=\"tab.name\"\r\n        :name=\"tab.name\"\r\n        :label=\"tab.label\"\r\n        :disabled=\"tab.disabled\"\r\n      />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, computed, watch, provide } from 'vue'\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\"\r\nimport MTabCardItem from './TabCardItem.vue'\r\n\r\ndefineOptions({\r\n  name: \"MTabCard\",\r\n})\r\n\r\n// 定义 props\r\nconst props = defineProps({\r\n  modelValue: {\r\n    type: [String, Number],\r\n    default: ''\r\n  },\r\n  disabled: {\r\n    type: Boolean,\r\n    default: false\r\n  },\r\n  options: {\r\n    type: Array,\r\n    default: () => []\r\n  }\r\n})\r\n\r\n// 定义 emits\r\nconst emit = defineEmits(['update:modelValue', 'change', 'tab-click'])\r\n\r\n// 使用类名 Hook\r\nconst { mergedAttrs } = useClassName()\r\n\r\n// 内部状态\r\nconst activeTab = ref(props.modelValue)\r\n\r\n// 计算 tabs 数据\r\nconst tabs = computed(() => {\r\n  return props.options.map(option => {\r\n    if (typeof option === 'string') {\r\n      return { label: option, name: option, disabled: false }\r\n    }\r\n    return {\r\n      label: option.label || option.name || '',\r\n      name: option.name || option.label || '',\r\n      disabled: option.disabled || false\r\n    }\r\n  })\r\n})\r\n\r\n// 处理 tab 点击\r\nconst handleTabClick = (tabName, isDisabled) => {\r\n  if (isDisabled || props.disabled || tabName === activeTab.value) {\r\n    return\r\n  }\r\n  \r\n  const oldValue = activeTab.value\r\n  activeTab.value = tabName\r\n  emit('update:modelValue', tabName)\r\n  emit('change', tabName, oldValue)\r\n  emit('tab-click', tabName)\r\n}\r\n\r\n// 监听 modelValue 变化\r\nwatch(() => props.modelValue, (newValue) => {\r\n  if (newValue !== activeTab.value) {\r\n    activeTab.value = newValue\r\n  }\r\n})\r\n\r\n// 提供给子组件的方法\r\nprovide('tabCardContext', {\r\n  activeTab,\r\n  handleTabClick\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.m-tab-card {\r\n  display: inline-block;\r\n  \r\n  &.is-disabled {\r\n    pointer-events: none;\r\n    opacity: 0.6;\r\n  }\r\n\r\n  &__container {\r\n    display: flex;\r\n    background-color: var(--bg-tertiary-hover, #2a2a2a);\r\n    border-radius: var(--md);\r\n    padding: 4px;\r\n    gap: 0;\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <svg \r\n    class=\"breadcrumb-separator-icon\"\r\n    width=\"6\" \r\n    height=\"10\" \r\n    viewBox=\"0 0 6 10\" \r\n    fill=\"none\" \r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n  >\r\n    <path \r\n      fill-rule=\"evenodd\" \r\n      clip-rule=\"evenodd\" \r\n      d=\"M0.52827 0.529247C0.788619 0.268897 1.21073 0.268897 1.47108 0.529247L5.47108 4.52925C5.73143 4.7896 5.73143 5.21171 5.47108 5.47206L1.47108 9.47206C1.21073 9.73241 0.788619 9.73241 0.52827 9.47206C0.26792 9.21171 0.26792 8.7896 0.52827 8.52925L4.05687 5.00065L0.52827 1.47206C0.26792 1.21171 0.26792 0.789596 0.52827 0.529247Z\" \r\n      fill=\"currentColor\"\r\n    />\r\n  </svg>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n  name: \"BreadcrumbSeparator\",\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.breadcrumb-separator-icon {\r\n  display: inline-block;\r\n  vertical-align: middle;\r\n}\r\n</style>\r\n\r\n","<template>\r\n  <nav class=\"m-breadcrumb\" aria-label=\"Breadcrumb\">\r\n    <template v-for=\"(item, index) in items\" :key=\"index\">\r\n      <span\r\n        :class=\"['m-breadcrumb__item', { 'is-link': item.to }]\"\r\n        @click=\"handleItemClick(item)\"\r\n      >\r\n        {{ item.label }}\r\n      </span>\r\n      <BreadcrumbSeparator \r\n        v-if=\"index < items.length - 1\"\r\n        class=\"m-breadcrumb__separator\"\r\n      />\r\n    </template>\r\n  </nav>\r\n</template>\r\n\r\n<script setup>\r\nimport BreadcrumbSeparator from './BreadcrumbSeparator.vue'\r\n\r\ndefineOptions({\r\n  name: \"MBreadcrumb\",\r\n})\r\n\r\nconst props = defineProps({\r\n  items: {\r\n    type: Array,\r\n    default: () => [],\r\n    validator: (items) => {\r\n      return items.every(item => \r\n        typeof item === 'object' && \r\n        item.label !== undefined\r\n      )\r\n    }\r\n  }\r\n})\r\n\r\nconst emit = defineEmits(['click'])\r\n\r\nconst handleItemClick = (item) => {\r\n  if (!item.to) return\r\n  \r\n  emit('click', item)\r\n  \r\n  // 处理路由跳转\r\n  if (typeof item.to === 'string') {\r\n    if (item.to.startsWith('http://') || item.to.startsWith('https://')) {\r\n      window.location.href = item.to\r\n    } else {\r\n      if (item.replace) {\r\n        window.history.replaceState({}, '', item.to)\r\n      } else {\r\n        window.history.pushState({}, '', item.to)\r\n      }\r\n      window.dispatchEvent(new PopStateEvent('popstate'))\r\n    }\r\n  } else if (typeof item.to === 'object' && item.to.path) {\r\n    const path = item.to.path\r\n    if (item.replace) {\r\n      window.history.replaceState({}, '', path)\r\n    } else {\r\n      window.history.pushState({}, '', path)\r\n    }\r\n    window.dispatchEvent(new PopStateEvent('popstate'))\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.m-breadcrumb {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  font-size: 14px;\r\n  line-height: 20px;\r\n  height: 20px;\r\n  \r\n  &__item {\r\n    color: var(--text-secondary, #909399);\r\n    transition: color 0.2s;\r\n    white-space: nowrap;\r\n    line-height: 20px;\r\n    height: 20px;\r\n    display: inline-flex;\r\n    align-items: center;\r\n    \r\n    &.is-link {\r\n      color: var(--text-tertiary);\r\n      cursor: pointer;\r\n      font-weight: 500;\r\n      \r\n      &:hover {\r\n        color: var(--text-primary, #ffd700);\r\n      }\r\n    }\r\n    \r\n    &:last-child {\r\n      color: var(--text-primary, #c0c4cc);\r\n      cursor: default;\r\n      font-weight: normal;\r\n    }\r\n  }\r\n  \r\n  &__separator {\r\n    margin: 0 8px;\r\n    color: var(--text-tertiary, #c0c4cc);\r\n    flex-shrink: 0;\r\n    display: inline-flex;\r\n    align-items: center;\r\n    height: 20px;\r\n  }\r\n}\r\n</style>\r\n\r\n","function noop() {\n}\nconst extend = Object.assign;\nconst inBrowser = typeof window !== \"undefined\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isDef = (val) => val !== void 0 && val !== null;\nconst isFunction = (val) => typeof val === \"function\";\nconst isPromise = (val) => isObject(val) && isFunction(val.then) && isFunction(val.catch);\nconst isDate = (val) => Object.prototype.toString.call(val) === \"[object Date]\" && !Number.isNaN(val.getTime());\nfunction isMobile(value) {\n  value = value.replace(/[^-|\\d]/g, \"\");\n  return /^((\\+86)|(86))?(1)\\d{10}$/.test(value) || /^0[0-9-]{10,13}$/.test(value);\n}\nconst isNumeric = (val) => typeof val === \"number\" || /^\\d+(\\.\\d+)?$/.test(val);\nconst isIOS = () => inBrowser ? /ios|iphone|ipad|ipod/.test(navigator.userAgent.toLowerCase()) : false;\nfunction get(object, path) {\n  const keys = path.split(\".\");\n  let result = object;\n  keys.forEach((key) => {\n    var _a;\n    result = isObject(result) ? (_a = result[key]) != null ? _a : \"\" : \"\";\n  });\n  return result;\n}\nfunction pick(obj, keys, ignoreUndefined) {\n  return keys.reduce(\n    (ret, key) => {\n      if (!ignoreUndefined || obj[key] !== void 0) {\n        ret[key] = obj[key];\n      }\n      return ret;\n    },\n    {}\n  );\n}\nconst isSameValue = (newValue, oldValue) => JSON.stringify(newValue) === JSON.stringify(oldValue);\nconst toArray = (item) => Array.isArray(item) ? item : [item];\nconst flat = (arr) => arr.reduce((acc, val) => acc.concat(val), []);\nexport {\n  extend,\n  flat,\n  get,\n  inBrowser,\n  isDate,\n  isDef,\n  isFunction,\n  isIOS,\n  isMobile,\n  isNumeric,\n  isObject,\n  isPromise,\n  isSameValue,\n  noop,\n  pick,\n  toArray\n};\n","const unknownProp = null;\nconst numericProp = [Number, String];\nconst truthProp = {\n  type: Boolean,\n  default: true\n};\nconst makeRequiredProp = (type) => ({\n  type,\n  required: true\n});\nconst makeArrayProp = () => ({\n  type: Array,\n  default: () => []\n});\nconst makeNumberProp = (defaultVal) => ({\n  type: Number,\n  default: defaultVal\n});\nconst makeNumericProp = (defaultVal) => ({\n  type: numericProp,\n  default: defaultVal\n});\nconst makeStringProp = (defaultVal) => ({\n  type: String,\n  default: defaultVal\n});\nexport {\n  makeArrayProp,\n  makeNumberProp,\n  makeNumericProp,\n  makeRequiredProp,\n  makeStringProp,\n  numericProp,\n  truthProp,\n  unknownProp\n};\n","// src/utils.ts\nvar inBrowser = typeof window !== \"undefined\";\nvar supportsPassive = true;\nfunction raf(fn) {\n  return inBrowser ? requestAnimationFrame(fn) : -1;\n}\nfunction cancelRaf(id) {\n  if (inBrowser) {\n    cancelAnimationFrame(id);\n  }\n}\nfunction doubleRaf(fn) {\n  raf(() => raf(fn));\n}\n\n// src/useRect/index.ts\nimport { unref } from \"vue\";\nvar isWindow = (val) => val === window;\nvar makeDOMRect = (width2, height2) => ({\n  top: 0,\n  left: 0,\n  right: width2,\n  bottom: height2,\n  width: width2,\n  height: height2\n});\nvar useRect = (elementOrRef) => {\n  const element = unref(elementOrRef);\n  if (isWindow(element)) {\n    const width2 = element.innerWidth;\n    const height2 = element.innerHeight;\n    return makeDOMRect(width2, height2);\n  }\n  if (element == null ? void 0 : element.getBoundingClientRect) {\n    return element.getBoundingClientRect();\n  }\n  return makeDOMRect(0, 0);\n};\n\n// src/useToggle/index.ts\nimport { ref } from \"vue\";\nfunction useToggle(defaultValue = false) {\n  const state = ref(defaultValue);\n  const toggle = (value = !state.value) => {\n    state.value = value;\n  };\n  return [state, toggle];\n}\n\n// src/useRelation/useParent.ts\nimport {\n  ref as ref2,\n  inject,\n  computed,\n  onUnmounted,\n  getCurrentInstance\n} from \"vue\";\nfunction useParent(key) {\n  const parent = inject(key, null);\n  if (parent) {\n    const instance = getCurrentInstance();\n    const { link, unlink, internalChildren } = parent;\n    link(instance);\n    onUnmounted(() => unlink(instance));\n    const index = computed(() => internalChildren.indexOf(instance));\n    return {\n      parent,\n      index\n    };\n  }\n  return {\n    parent: null,\n    index: ref2(-1)\n  };\n}\n\n// src/useRelation/useChildren.ts\nimport {\n  isVNode,\n  provide,\n  reactive,\n  getCurrentInstance as getCurrentInstance2\n} from \"vue\";\nfunction flattenVNodes(children) {\n  const result = [];\n  const traverse = (children2) => {\n    if (Array.isArray(children2)) {\n      children2.forEach((child) => {\n        var _a;\n        if (isVNode(child)) {\n          result.push(child);\n          if ((_a = child.component) == null ? void 0 : _a.subTree) {\n            result.push(child.component.subTree);\n            traverse(child.component.subTree.children);\n          }\n          if (child.children) {\n            traverse(child.children);\n          }\n        }\n      });\n    }\n  };\n  traverse(children);\n  return result;\n}\nvar findVNodeIndex = (vnodes, vnode) => {\n  const index = vnodes.indexOf(vnode);\n  if (index === -1) {\n    return vnodes.findIndex(\n      (item) => vnode.key !== void 0 && vnode.key !== null && item.type === vnode.type && item.key === vnode.key\n    );\n  }\n  return index;\n};\nfunction sortChildren(parent, publicChildren, internalChildren) {\n  const vnodes = flattenVNodes(parent.subTree.children);\n  internalChildren.sort(\n    (a, b) => findVNodeIndex(vnodes, a.vnode) - findVNodeIndex(vnodes, b.vnode)\n  );\n  const orderedPublicChildren = internalChildren.map((item) => item.proxy);\n  publicChildren.sort((a, b) => {\n    const indexA = orderedPublicChildren.indexOf(a);\n    const indexB = orderedPublicChildren.indexOf(b);\n    return indexA - indexB;\n  });\n}\nfunction useChildren(key) {\n  const publicChildren = reactive([]);\n  const internalChildren = reactive([]);\n  const parent = getCurrentInstance2();\n  const linkChildren = (value) => {\n    const link = (child) => {\n      if (child.proxy) {\n        internalChildren.push(child);\n        publicChildren.push(child.proxy);\n        sortChildren(parent, publicChildren, internalChildren);\n      }\n    };\n    const unlink = (child) => {\n      const index = internalChildren.indexOf(child);\n      publicChildren.splice(index, 1);\n      internalChildren.splice(index, 1);\n    };\n    provide(\n      key,\n      Object.assign(\n        {\n          link,\n          unlink,\n          children: publicChildren,\n          internalChildren\n        },\n        value\n      )\n    );\n  };\n  return {\n    children: publicChildren,\n    linkChildren\n  };\n}\n\n// src/useCountDown/index.ts\nimport {\n  ref as ref3,\n  computed as computed2,\n  onActivated,\n  onDeactivated,\n  onBeforeUnmount\n} from \"vue\";\nvar SECOND = 1e3;\nvar MINUTE = 60 * SECOND;\nvar HOUR = 60 * MINUTE;\nvar DAY = 24 * HOUR;\nfunction parseTime(time) {\n  const days = Math.floor(time / DAY);\n  const hours = Math.floor(time % DAY / HOUR);\n  const minutes = Math.floor(time % HOUR / MINUTE);\n  const seconds = Math.floor(time % MINUTE / SECOND);\n  const milliseconds = Math.floor(time % SECOND);\n  return {\n    total: time,\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds\n  };\n}\nfunction isSameSecond(time1, time2) {\n  return Math.floor(time1 / 1e3) === Math.floor(time2 / 1e3);\n}\nfunction useCountDown(options) {\n  let rafId;\n  let endTime;\n  let counting;\n  let deactivated;\n  const remain = ref3(options.time);\n  const current = computed2(() => parseTime(remain.value));\n  const pause = () => {\n    counting = false;\n    cancelRaf(rafId);\n  };\n  const getCurrentRemain = () => Math.max(endTime - Date.now(), 0);\n  const setRemain = (value) => {\n    var _a, _b;\n    remain.value = value;\n    (_a = options.onChange) == null ? void 0 : _a.call(options, current.value);\n    if (value === 0) {\n      pause();\n      (_b = options.onFinish) == null ? void 0 : _b.call(options);\n    }\n  };\n  const microTick = () => {\n    rafId = raf(() => {\n      if (counting) {\n        setRemain(getCurrentRemain());\n        if (remain.value > 0) {\n          microTick();\n        }\n      }\n    });\n  };\n  const macroTick = () => {\n    rafId = raf(() => {\n      if (counting) {\n        const remainRemain = getCurrentRemain();\n        if (!isSameSecond(remainRemain, remain.value) || remainRemain === 0) {\n          setRemain(remainRemain);\n        }\n        if (remain.value > 0) {\n          macroTick();\n        }\n      }\n    });\n  };\n  const tick = () => {\n    if (!inBrowser) {\n      return;\n    }\n    if (options.millisecond) {\n      microTick();\n    } else {\n      macroTick();\n    }\n  };\n  const start = () => {\n    if (!counting) {\n      endTime = Date.now() + remain.value;\n      counting = true;\n      tick();\n    }\n  };\n  const reset = (totalTime = options.time) => {\n    pause();\n    remain.value = totalTime;\n  };\n  onBeforeUnmount(pause);\n  onActivated(() => {\n    if (deactivated) {\n      counting = true;\n      deactivated = false;\n      tick();\n    }\n  });\n  onDeactivated(() => {\n    if (counting) {\n      pause();\n      deactivated = true;\n    }\n  });\n  return {\n    start,\n    pause,\n    reset,\n    current\n  };\n}\n\n// src/useClickAway/index.ts\nimport { unref as unref3 } from \"vue\";\n\n// src/useEventListener/index.ts\nimport {\n  watch,\n  isRef,\n  unref as unref2,\n  onUnmounted as onUnmounted2,\n  onDeactivated as onDeactivated2\n} from \"vue\";\n\n// src/onMountedOrActivated/index.ts\nimport { nextTick, onMounted, onActivated as onActivated2 } from \"vue\";\nfunction onMountedOrActivated(hook) {\n  let mounted;\n  onMounted(() => {\n    hook();\n    nextTick(() => {\n      mounted = true;\n    });\n  });\n  onActivated2(() => {\n    if (mounted) {\n      hook();\n    }\n  });\n}\n\n// src/useEventListener/index.ts\nfunction useEventListener(type, listener, options = {}) {\n  if (!inBrowser) {\n    return;\n  }\n  const { target = window, passive = false, capture = false } = options;\n  let cleaned = false;\n  let attached;\n  const add = (target2) => {\n    if (cleaned) {\n      return;\n    }\n    const element = unref2(target2);\n    if (element && !attached) {\n      element.addEventListener(type, listener, {\n        capture,\n        passive\n      });\n      attached = true;\n    }\n  };\n  const remove = (target2) => {\n    if (cleaned) {\n      return;\n    }\n    const element = unref2(target2);\n    if (element && attached) {\n      element.removeEventListener(type, listener, capture);\n      attached = false;\n    }\n  };\n  onUnmounted2(() => remove(target));\n  onDeactivated2(() => remove(target));\n  onMountedOrActivated(() => add(target));\n  let stopWatch;\n  if (isRef(target)) {\n    stopWatch = watch(target, (val, oldVal) => {\n      remove(oldVal);\n      add(val);\n    });\n  }\n  return () => {\n    stopWatch == null ? void 0 : stopWatch();\n    remove(target);\n    cleaned = true;\n  };\n}\n\n// src/useClickAway/index.ts\nfunction useClickAway(target, listener, options = {}) {\n  if (!inBrowser) {\n    return;\n  }\n  const { eventName = \"click\" } = options;\n  const onClick = (event) => {\n    const targets = Array.isArray(target) ? target : [target];\n    const isClickAway = targets.every((item) => {\n      const element = unref3(item);\n      return element && !element.contains(event.target);\n    });\n    if (isClickAway) {\n      listener(event);\n    }\n  };\n  useEventListener(eventName, onClick, { target: document });\n}\n\n// src/useWindowSize/index.ts\nimport { ref as ref4 } from \"vue\";\nvar width;\nvar height;\nfunction useWindowSize() {\n  if (!width) {\n    width = ref4(0);\n    height = ref4(0);\n    if (inBrowser) {\n      const update = () => {\n        width.value = window.innerWidth;\n        height.value = window.innerHeight;\n      };\n      update();\n      window.addEventListener(\"resize\", update, { passive: true });\n      window.addEventListener(\"orientationchange\", update, { passive: true });\n    }\n  }\n  return { width, height };\n}\n\n// src/useScrollParent/index.ts\nimport { ref as ref5, onMounted as onMounted2 } from \"vue\";\nvar overflowScrollReg = /scroll|auto|overlay/i;\nvar defaultRoot = inBrowser ? window : void 0;\nfunction isElement(node) {\n  const ELEMENT_NODE_TYPE = 1;\n  return node.tagName !== \"HTML\" && node.tagName !== \"BODY\" && node.nodeType === ELEMENT_NODE_TYPE;\n}\nfunction getScrollParent(el, root = defaultRoot) {\n  let node = el;\n  while (node && node !== root && isElement(node)) {\n    const { overflowY } = window.getComputedStyle(node);\n    if (overflowScrollReg.test(overflowY)) {\n      return node;\n    }\n    node = node.parentNode;\n  }\n  return root;\n}\nfunction useScrollParent(el, root = defaultRoot) {\n  const scrollParent = ref5();\n  onMounted2(() => {\n    if (el.value) {\n      scrollParent.value = getScrollParent(el.value, root);\n    }\n  });\n  return scrollParent;\n}\n\n// src/usePageVisibility/index.ts\nimport { ref as ref6 } from \"vue\";\nvar visibility;\nfunction usePageVisibility() {\n  if (!visibility) {\n    visibility = ref6(\"visible\");\n    if (inBrowser) {\n      const update = () => {\n        visibility.value = document.hidden ? \"hidden\" : \"visible\";\n      };\n      update();\n      window.addEventListener(\"visibilitychange\", update);\n    }\n  }\n  return visibility;\n}\n\n// src/useCustomFieldValue/index.ts\nimport { watch as watch2, inject as inject2 } from \"vue\";\nvar CUSTOM_FIELD_INJECTION_KEY = Symbol(\"van-field\");\nfunction useCustomFieldValue(customValue) {\n  const field = inject2(CUSTOM_FIELD_INJECTION_KEY, null);\n  if (field && !field.customValue.value) {\n    field.customValue.value = customValue;\n    watch2(customValue, () => {\n      field.resetValidation();\n      field.validateWithTrigger(\"onChange\");\n    });\n  }\n}\n\n// src/useRaf/index.ts\nfunction useRaf(fn, options) {\n  if (inBrowser) {\n    const { interval = 0, isLoop = false } = options || {};\n    let start;\n    let isStopped = false;\n    let rafId;\n    const stop = () => {\n      isStopped = true;\n      cancelAnimationFrame(rafId);\n    };\n    const frameWrapper = (timestamp) => {\n      if (isStopped)\n        return;\n      if (start === void 0) {\n        start = timestamp;\n      } else if (timestamp - start > interval) {\n        fn(timestamp);\n        start = timestamp;\n        if (!isLoop) {\n          stop();\n          return;\n        }\n      }\n      rafId = requestAnimationFrame(frameWrapper);\n    };\n    rafId = requestAnimationFrame(frameWrapper);\n    return stop;\n  }\n  return () => {\n  };\n}\nexport {\n  CUSTOM_FIELD_INJECTION_KEY,\n  cancelRaf,\n  doubleRaf,\n  flattenVNodes,\n  getScrollParent,\n  inBrowser,\n  onMountedOrActivated,\n  raf,\n  sortChildren,\n  supportsPassive,\n  useChildren,\n  useClickAway,\n  useCountDown,\n  useCustomFieldValue,\n  useEventListener,\n  usePageVisibility,\n  useParent,\n  useRaf,\n  useRect,\n  useScrollParent,\n  useToggle,\n  useWindowSize\n};\n","import { useRect, useWindowSize } from \"@vant/use\";\nimport { unref } from \"vue\";\nimport { isIOS as checkIsIOS } from \"./basic.mjs\";\nfunction getScrollTop(el) {\n  const top = \"scrollTop\" in el ? el.scrollTop : el.pageYOffset;\n  return Math.max(top, 0);\n}\nfunction setScrollTop(el, value) {\n  if (\"scrollTop\" in el) {\n    el.scrollTop = value;\n  } else {\n    el.scrollTo(el.scrollX, value);\n  }\n}\nfunction getRootScrollTop() {\n  return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n}\nfunction setRootScrollTop(value) {\n  setScrollTop(window, value);\n  setScrollTop(document.body, value);\n}\nfunction getElementTop(el, scroller) {\n  if (el === window) {\n    return 0;\n  }\n  const scrollTop = scroller ? getScrollTop(scroller) : getRootScrollTop();\n  return useRect(el).top + scrollTop;\n}\nconst isIOS = checkIsIOS();\nfunction resetScroll() {\n  if (isIOS) {\n    setRootScrollTop(getRootScrollTop());\n  }\n}\nconst stopPropagation = (event) => event.stopPropagation();\nfunction preventDefault(event, isStopPropagation) {\n  if (typeof event.cancelable !== \"boolean\" || event.cancelable) {\n    event.preventDefault();\n  }\n  if (isStopPropagation) {\n    stopPropagation(event);\n  }\n}\nfunction isHidden(elementRef) {\n  const el = unref(elementRef);\n  if (!el) {\n    return false;\n  }\n  const style = window.getComputedStyle(el);\n  const hidden = style.display === \"none\";\n  const parentHidden = el.offsetParent === null && style.position !== \"fixed\";\n  return hidden || parentHidden;\n}\nconst { width: windowWidth, height: windowHeight } = useWindowSize();\nfunction isContainingBlock(el) {\n  const css = window.getComputedStyle(el);\n  return css.transform !== \"none\" || css.perspective !== \"none\" || [\"transform\", \"perspective\", \"filter\"].some(\n    (value) => (css.willChange || \"\").includes(value)\n  );\n}\nfunction getContainingBlock(el) {\n  let node = el.parentElement;\n  while (node) {\n    if (node && node.tagName !== \"HTML\" && node.tagName !== \"BODY\" && isContainingBlock(node)) {\n      return node;\n    }\n    node = node.parentElement;\n  }\n  return null;\n}\nexport {\n  getContainingBlock,\n  getElementTop,\n  getRootScrollTop,\n  getScrollTop,\n  isHidden,\n  preventDefault,\n  resetScroll,\n  setRootScrollTop,\n  setScrollTop,\n  stopPropagation,\n  windowHeight,\n  windowWidth\n};\n","import { inBrowser } from \"./basic.mjs\";\nimport { windowWidth, windowHeight } from \"./dom.mjs\";\nimport { isDef, isNumeric } from \"./basic.mjs\";\nfunction addUnit(value) {\n  if (isDef(value)) {\n    return isNumeric(value) ? `${value}px` : String(value);\n  }\n  return void 0;\n}\nfunction getSizeStyle(originSize) {\n  if (isDef(originSize)) {\n    if (Array.isArray(originSize)) {\n      return {\n        width: addUnit(originSize[0]),\n        height: addUnit(originSize[1])\n      };\n    }\n    const size = addUnit(originSize);\n    return {\n      width: size,\n      height: size\n    };\n  }\n}\nfunction getZIndexStyle(zIndex) {\n  const style = {};\n  if (zIndex !== void 0) {\n    style.zIndex = +zIndex;\n  }\n  return style;\n}\nlet rootFontSize;\nfunction getRootFontSize() {\n  if (!rootFontSize) {\n    const doc = document.documentElement;\n    const fontSize = doc.style.fontSize || window.getComputedStyle(doc).fontSize;\n    rootFontSize = parseFloat(fontSize);\n  }\n  return rootFontSize;\n}\nfunction convertRem(value) {\n  value = value.replace(/rem/g, \"\");\n  return +value * getRootFontSize();\n}\nfunction convertVw(value) {\n  value = value.replace(/vw/g, \"\");\n  return +value * windowWidth.value / 100;\n}\nfunction convertVh(value) {\n  value = value.replace(/vh/g, \"\");\n  return +value * windowHeight.value / 100;\n}\nfunction unitToPx(value) {\n  if (typeof value === \"number\") {\n    return value;\n  }\n  if (inBrowser) {\n    if (value.includes(\"rem\")) {\n      return convertRem(value);\n    }\n    if (value.includes(\"vw\")) {\n      return convertVw(value);\n    }\n    if (value.includes(\"vh\")) {\n      return convertVh(value);\n    }\n  }\n  return parseFloat(value);\n}\nconst camelizeRE = /-(\\w)/g;\nconst camelize = (str) => str.replace(camelizeRE, (_, c) => c.toUpperCase());\nconst kebabCase = (str) => str.replace(/([A-Z])/g, \"-$1\").toLowerCase().replace(/^-/, \"\");\nfunction padZero(num, targetLength = 2) {\n  let str = num + \"\";\n  while (str.length < targetLength) {\n    str = \"0\" + str;\n  }\n  return str;\n}\nconst clamp = (num, min, max) => Math.min(Math.max(num, min), max);\nfunction trimExtraChar(value, char, regExp) {\n  const index = value.indexOf(char);\n  if (index === -1) {\n    return value;\n  }\n  if (char === \"-\" && index !== 0) {\n    return value.slice(0, index);\n  }\n  return value.slice(0, index + 1) + value.slice(index).replace(regExp, \"\");\n}\nfunction formatNumber(value, allowDot = true, allowMinus = true) {\n  if (allowDot) {\n    value = trimExtraChar(value, \".\", /\\./g);\n  } else {\n    value = value.split(\".\")[0];\n  }\n  if (allowMinus) {\n    value = trimExtraChar(value, \"-\", /-/g);\n  } else {\n    value = value.replace(/-/, \"\");\n  }\n  const regExp = allowDot ? /[^-0-9.]/g : /[^-0-9]/g;\n  return value.replace(regExp, \"\");\n}\nfunction addNumber(num1, num2) {\n  const cardinal = 10 ** 10;\n  return Math.round((num1 + num2) * cardinal) / cardinal;\n}\nexport {\n  addNumber,\n  addUnit,\n  camelize,\n  clamp,\n  formatNumber,\n  getSizeStyle,\n  getZIndexStyle,\n  kebabCase,\n  padZero,\n  unitToPx\n};\n","import { isDef, isObject } from \"./basic.mjs\";\nconst { hasOwnProperty } = Object.prototype;\nfunction assignKey(to, from, key) {\n  const val = from[key];\n  if (!isDef(val)) {\n    return;\n  }\n  if (!hasOwnProperty.call(to, key) || !isObject(val)) {\n    to[key] = val;\n  } else {\n    to[key] = deepAssign(Object(to[key]), val);\n  }\n}\nfunction deepAssign(to, from) {\n  Object.keys(from).forEach((key) => {\n    assignKey(to, from, key);\n  });\n  return to;\n}\nexport {\n  deepAssign\n};\n","var stdin_default = {\n  name: \"\\u59D3\\u540D\",\n  tel: \"\\u7535\\u8BDD\",\n  save: \"\\u4FDD\\u5B58\",\n  clear: \"\\u6E05\\u7A7A\",\n  cancel: \"\\u53D6\\u6D88\",\n  confirm: \"\\u786E\\u8BA4\",\n  delete: \"\\u5220\\u9664\",\n  loading: \"\\u52A0\\u8F7D\\u4E2D...\",\n  noCoupon: \"\\u6682\\u65E0\\u4F18\\u60E0\\u5238\",\n  nameEmpty: \"\\u8BF7\\u586B\\u5199\\u59D3\\u540D\",\n  addContact: \"\\u6DFB\\u52A0\\u8054\\u7CFB\\u4EBA\",\n  telInvalid: \"\\u8BF7\\u586B\\u5199\\u6B63\\u786E\\u7684\\u7535\\u8BDD\",\n  vanCalendar: {\n    end: \"\\u7ED3\\u675F\",\n    start: \"\\u5F00\\u59CB\",\n    title: \"\\u65E5\\u671F\\u9009\\u62E9\",\n    weekdays: [\"\\u65E5\", \"\\u4E00\", \"\\u4E8C\", \"\\u4E09\", \"\\u56DB\", \"\\u4E94\", \"\\u516D\"],\n    monthTitle: (year, month) => `${year}\\u5E74${month}\\u6708`,\n    rangePrompt: (maxRange) => `\\u6700\\u591A\\u9009\\u62E9 ${maxRange} \\u5929`\n  },\n  vanCascader: {\n    select: \"\\u8BF7\\u9009\\u62E9\"\n  },\n  vanPagination: {\n    prev: \"\\u4E0A\\u4E00\\u9875\",\n    next: \"\\u4E0B\\u4E00\\u9875\"\n  },\n  vanPullRefresh: {\n    pulling: \"\\u4E0B\\u62C9\\u5373\\u53EF\\u5237\\u65B0...\",\n    loosing: \"\\u91CA\\u653E\\u5373\\u53EF\\u5237\\u65B0...\"\n  },\n  vanSubmitBar: {\n    label: \"\\u5408\\u8BA1:\"\n  },\n  vanCoupon: {\n    unlimited: \"\\u65E0\\u95E8\\u69DB\",\n    discount: (discount) => `${discount}\\u6298`,\n    condition: (condition) => `\\u6EE1${condition}\\u5143\\u53EF\\u7528`\n  },\n  vanCouponCell: {\n    title: \"\\u4F18\\u60E0\\u5238\",\n    count: (count) => `${count}\\u5F20\\u53EF\\u7528`\n  },\n  vanCouponList: {\n    exchange: \"\\u5151\\u6362\",\n    close: \"\\u4E0D\\u4F7F\\u7528\",\n    enable: \"\\u53EF\\u7528\",\n    disabled: \"\\u4E0D\\u53EF\\u7528\",\n    placeholder: \"\\u8F93\\u5165\\u4F18\\u60E0\\u7801\"\n  },\n  vanAddressEdit: {\n    area: \"\\u5730\\u533A\",\n    areaEmpty: \"\\u8BF7\\u9009\\u62E9\\u5730\\u533A\",\n    addressEmpty: \"\\u8BF7\\u586B\\u5199\\u8BE6\\u7EC6\\u5730\\u5740\",\n    addressDetail: \"\\u8BE6\\u7EC6\\u5730\\u5740\",\n    defaultAddress: \"\\u8BBE\\u4E3A\\u9ED8\\u8BA4\\u6536\\u8D27\\u5730\\u5740\"\n  },\n  vanAddressList: {\n    add: \"\\u65B0\\u589E\\u5730\\u5740\"\n  }\n};\nexport {\n  stdin_default as default\n};\n","import { ref, reactive } from \"vue\";\nimport { deepAssign } from \"../utils/deep-assign.mjs\";\nimport defaultMessages from \"./lang/zh-CN.mjs\";\nconst lang = ref(\"zh-CN\");\nconst messages = reactive({\n  \"zh-CN\": defaultMessages\n});\nconst Locale = {\n  messages() {\n    return messages[lang.value];\n  },\n  use(newLang, newMessages) {\n    lang.value = newLang;\n    this.add({ [newLang]: newMessages });\n  },\n  add(newMessages = {}) {\n    deepAssign(messages, newMessages);\n  }\n};\nconst useCurrentLang = () => lang;\nvar stdin_default = Locale;\nexport {\n  Locale,\n  stdin_default as default,\n  useCurrentLang\n};\n","import { get, isFunction } from \"./basic.mjs\";\nimport { camelize } from \"./format.mjs\";\nimport locale from \"../locale/index.mjs\";\nfunction createTranslate(name) {\n  const prefix = camelize(name) + \".\";\n  return (path, ...args) => {\n    const messages = locale.messages();\n    const message = get(messages, prefix + path) || get(messages, path);\n    return isFunction(message) ? message(...args) : message;\n  };\n}\nfunction genBem(name, mods) {\n  if (!mods) {\n    return \"\";\n  }\n  if (typeof mods === \"string\") {\n    return ` ${name}--${mods}`;\n  }\n  if (Array.isArray(mods)) {\n    return mods.reduce(\n      (ret, item) => ret + genBem(name, item),\n      \"\"\n    );\n  }\n  return Object.keys(mods).reduce(\n    (ret, key) => ret + (mods[key] ? genBem(name, key) : \"\"),\n    \"\"\n  );\n}\nfunction createBEM(name) {\n  return (el, mods) => {\n    if (el && typeof el !== \"string\") {\n      mods = el;\n      el = \"\";\n    }\n    el = el ? `${name}__${el}` : name;\n    return `${el}${genBem(el, mods)}`;\n  };\n}\nfunction createNamespace(name) {\n  const prefixedName = `van-${name}`;\n  return [\n    prefixedName,\n    createBEM(prefixedName),\n    createTranslate(prefixedName)\n  ];\n}\nexport {\n  createBEM,\n  createNamespace,\n  createTranslate\n};\n","const BORDER = \"van-hairline\";\nconst BORDER_TOP = `${BORDER}--top`;\nconst BORDER_LEFT = `${BORDER}--left`;\nconst BORDER_RIGHT = `${BORDER}--right`;\nconst BORDER_BOTTOM = `${BORDER}--bottom`;\nconst BORDER_SURROUND = `${BORDER}--surround`;\nconst BORDER_TOP_BOTTOM = `${BORDER}--top-bottom`;\nconst BORDER_UNSET_TOP_BOTTOM = `${BORDER}-unset--top-bottom`;\nconst HAPTICS_FEEDBACK = \"van-haptics-feedback\";\nconst FORM_KEY = Symbol(\"van-form\");\nconst LONG_PRESS_START_TIME = 500;\nconst TAP_OFFSET = 5;\nexport {\n  BORDER,\n  BORDER_BOTTOM,\n  BORDER_LEFT,\n  BORDER_RIGHT,\n  BORDER_SURROUND,\n  BORDER_TOP,\n  BORDER_TOP_BOTTOM,\n  BORDER_UNSET_TOP_BOTTOM,\n  FORM_KEY,\n  HAPTICS_FEEDBACK,\n  LONG_PRESS_START_TIME,\n  TAP_OFFSET\n};\n","import { noop, isPromise } from \"./basic.mjs\";\nfunction callInterceptor(interceptor, {\n  args = [],\n  done,\n  canceled,\n  error\n}) {\n  if (interceptor) {\n    const returnVal = interceptor.apply(null, args);\n    if (isPromise(returnVal)) {\n      returnVal.then((value) => {\n        if (value) {\n          done();\n        } else if (canceled) {\n          canceled();\n        }\n      }).catch(error || noop);\n    } else if (returnVal) {\n      done();\n    } else if (canceled) {\n      canceled();\n    }\n  } else {\n    done();\n  }\n}\nexport {\n  callInterceptor\n};\n","import { camelize } from \"./format.mjs\";\nfunction withInstall(options) {\n  options.install = (app) => {\n    const { name } = options;\n    if (name) {\n      app.component(name, options);\n      app.component(camelize(`-${name}`), options);\n    }\n  };\n  return options;\n}\nexport {\n  withInstall\n};\n","import { inject, watch } from \"vue\";\nconst POPUP_TOGGLE_KEY = Symbol();\nfunction onPopupReopen(callback) {\n  const popupToggleStatus = inject(POPUP_TOGGLE_KEY, null);\n  if (popupToggleStatus) {\n    watch(popupToggleStatus, (show) => {\n      if (show) {\n        callback();\n      }\n    });\n  }\n}\nexport {\n  POPUP_TOGGLE_KEY,\n  onPopupReopen\n};\n","import { getCurrentInstance } from \"vue\";\nimport { extend } from \"../utils/index.mjs\";\nfunction useExpose(apis) {\n  const instance = getCurrentInstance();\n  if (instance) {\n    extend(instance.proxy, apis);\n  }\n}\nexport {\n  useExpose\n};\n","import { computed, defineComponent, createVNode as _createVNode } from \"vue\";\nimport { isDef, addUnit, isNumeric, truthProp, numericProp, makeStringProp, createNamespace } from \"../utils/index.mjs\";\nconst [name, bem] = createNamespace(\"badge\");\nconst badgeProps = {\n  dot: Boolean,\n  max: numericProp,\n  tag: makeStringProp(\"div\"),\n  color: String,\n  offset: Array,\n  content: numericProp,\n  showZero: truthProp,\n  position: makeStringProp(\"top-right\")\n};\nvar stdin_default = defineComponent({\n  name,\n  props: badgeProps,\n  setup(props, {\n    slots\n  }) {\n    const hasContent = () => {\n      if (slots.content) {\n        return true;\n      }\n      const {\n        content,\n        showZero\n      } = props;\n      return isDef(content) && content !== \"\" && (showZero || content !== 0 && content !== \"0\");\n    };\n    const renderContent = () => {\n      const {\n        dot,\n        max,\n        content\n      } = props;\n      if (!dot && hasContent()) {\n        if (slots.content) {\n          return slots.content();\n        }\n        if (isDef(max) && isNumeric(content) && +content > +max) {\n          return `${max}+`;\n        }\n        return content;\n      }\n    };\n    const getOffsetWithMinusString = (val) => val.startsWith(\"-\") ? val.replace(\"-\", \"\") : `-${val}`;\n    const style = computed(() => {\n      const style2 = {\n        background: props.color\n      };\n      if (props.offset) {\n        const [x, y] = props.offset;\n        const {\n          position\n        } = props;\n        const [offsetY, offsetX] = position.split(\"-\");\n        if (slots.default) {\n          if (typeof y === \"number\") {\n            style2[offsetY] = addUnit(offsetY === \"top\" ? y : -y);\n          } else {\n            style2[offsetY] = offsetY === \"top\" ? addUnit(y) : getOffsetWithMinusString(y);\n          }\n          if (typeof x === \"number\") {\n            style2[offsetX] = addUnit(offsetX === \"left\" ? x : -x);\n          } else {\n            style2[offsetX] = offsetX === \"left\" ? addUnit(x) : getOffsetWithMinusString(x);\n          }\n        } else {\n          style2.marginTop = addUnit(y);\n          style2.marginLeft = addUnit(x);\n        }\n      }\n      return style2;\n    });\n    const renderBadge = () => {\n      if (hasContent() || props.dot) {\n        return _createVNode(\"div\", {\n          \"class\": bem([props.position, {\n            dot: props.dot,\n            fixed: !!slots.default\n          }]),\n          \"style\": style.value\n        }, [renderContent()]);\n      }\n    };\n    return () => {\n      if (slots.default) {\n        const {\n          tag\n        } = props;\n        return _createVNode(tag, {\n          \"class\": bem(\"wrapper\")\n        }, {\n          default: () => [slots.default(), renderBadge()]\n        });\n      }\n      return renderBadge();\n    };\n  }\n});\nexport {\n  badgeProps,\n  stdin_default as default\n};\n","import { withInstall } from \"../utils/index.mjs\";\nimport _Badge from \"./Badge.mjs\";\nconst Badge = withInstall(_Badge);\nvar stdin_default = Badge;\nimport { badgeProps } from \"./Badge.mjs\";\nexport {\n  Badge,\n  badgeProps,\n  stdin_default as default\n};\n","let globalZIndex = 2e3;\nconst useGlobalZIndex = () => ++globalZIndex;\nconst setGlobalZIndex = (val) => {\n  globalZIndex = val;\n};\nexport {\n  setGlobalZIndex,\n  useGlobalZIndex\n};\n","import { watch, provide, computed, watchEffect, onActivated, onDeactivated, onBeforeUnmount, defineComponent, createVNode as _createVNode } from \"vue\";\nimport { extend, inBrowser, kebabCase, makeStringProp, createNamespace } from \"../utils/index.mjs\";\nimport { setGlobalZIndex } from \"../composables/use-global-z-index.mjs\";\nconst [name, bem] = createNamespace(\"config-provider\");\nconst CONFIG_PROVIDER_KEY = Symbol(name);\nconst configProviderProps = {\n  tag: makeStringProp(\"div\"),\n  theme: makeStringProp(\"light\"),\n  zIndex: Number,\n  themeVars: Object,\n  themeVarsDark: Object,\n  themeVarsLight: Object,\n  themeVarsScope: makeStringProp(\"local\"),\n  iconPrefix: String\n};\nfunction insertDash(str) {\n  return str.replace(/([a-zA-Z])(\\d)/g, \"$1-$2\");\n}\nfunction mapThemeVarsToCSSVars(themeVars) {\n  const cssVars = {};\n  Object.keys(themeVars).forEach((key) => {\n    const formattedKey = insertDash(kebabCase(key));\n    cssVars[`--van-${formattedKey}`] = themeVars[key];\n  });\n  return cssVars;\n}\nfunction syncThemeVarsOnRoot(newStyle = {}, oldStyle = {}) {\n  Object.keys(newStyle).forEach((key) => {\n    if (newStyle[key] !== oldStyle[key]) {\n      document.documentElement.style.setProperty(key, newStyle[key]);\n    }\n  });\n  Object.keys(oldStyle).forEach((key) => {\n    if (!newStyle[key]) {\n      document.documentElement.style.removeProperty(key);\n    }\n  });\n}\nvar stdin_default = defineComponent({\n  name,\n  props: configProviderProps,\n  setup(props, {\n    slots\n  }) {\n    const style = computed(() => mapThemeVarsToCSSVars(extend({}, props.themeVars, props.theme === \"dark\" ? props.themeVarsDark : props.themeVarsLight)));\n    if (inBrowser) {\n      const addTheme = () => {\n        document.documentElement.classList.add(`van-theme-${props.theme}`);\n      };\n      const removeTheme = (theme = props.theme) => {\n        document.documentElement.classList.remove(`van-theme-${theme}`);\n      };\n      watch(() => props.theme, (newVal, oldVal) => {\n        if (oldVal) {\n          removeTheme(oldVal);\n        }\n        addTheme();\n      }, {\n        immediate: true\n      });\n      onActivated(addTheme);\n      onDeactivated(removeTheme);\n      onBeforeUnmount(removeTheme);\n      watch(style, (newStyle, oldStyle) => {\n        if (props.themeVarsScope === \"global\") {\n          syncThemeVarsOnRoot(newStyle, oldStyle);\n        }\n      });\n      watch(() => props.themeVarsScope, (newScope, oldScope) => {\n        if (oldScope === \"global\") {\n          syncThemeVarsOnRoot({}, style.value);\n        }\n        if (newScope === \"global\") {\n          syncThemeVarsOnRoot(style.value, {});\n        }\n      });\n      if (props.themeVarsScope === \"global\") {\n        syncThemeVarsOnRoot(style.value, {});\n      }\n    }\n    provide(CONFIG_PROVIDER_KEY, props);\n    watchEffect(() => {\n      if (props.zIndex !== void 0) {\n        setGlobalZIndex(props.zIndex);\n      }\n    });\n    return () => _createVNode(props.tag, {\n      \"class\": bem(),\n      \"style\": props.themeVarsScope === \"local\" ? style.value : void 0\n    }, {\n      default: () => {\n        var _a;\n        return [(_a = slots.default) == null ? void 0 : _a.call(slots)];\n      }\n    });\n  }\n});\nexport {\n  CONFIG_PROVIDER_KEY,\n  configProviderProps,\n  stdin_default as default\n};\n","import { inject, computed, defineComponent, createVNode as _createVNode, mergeProps as _mergeProps } from \"vue\";\nimport { addUnit, numericProp, makeStringProp, createNamespace } from \"../utils/index.mjs\";\nimport { Badge } from \"../badge/index.mjs\";\nimport { CONFIG_PROVIDER_KEY } from \"../config-provider/ConfigProvider.mjs\";\nconst [name, bem] = createNamespace(\"icon\");\nconst isImage = (name2) => name2 == null ? void 0 : name2.includes(\"/\");\nconst iconProps = {\n  dot: Boolean,\n  tag: makeStringProp(\"i\"),\n  name: String,\n  size: numericProp,\n  badge: numericProp,\n  color: String,\n  badgeProps: Object,\n  classPrefix: String\n};\nvar stdin_default = defineComponent({\n  name,\n  props: iconProps,\n  setup(props, {\n    slots\n  }) {\n    const config = inject(CONFIG_PROVIDER_KEY, null);\n    const classPrefix = computed(() => props.classPrefix || (config == null ? void 0 : config.iconPrefix) || bem());\n    return () => {\n      const {\n        tag,\n        dot,\n        name: name2,\n        size,\n        badge,\n        color\n      } = props;\n      const isImageIcon = isImage(name2);\n      return _createVNode(Badge, _mergeProps({\n        \"dot\": dot,\n        \"tag\": tag,\n        \"class\": [classPrefix.value, isImageIcon ? \"\" : `${classPrefix.value}-${name2}`],\n        \"style\": {\n          color,\n          fontSize: addUnit(size)\n        },\n        \"content\": badge\n      }, props.badgeProps), {\n        default: () => {\n          var _a;\n          return [(_a = slots.default) == null ? void 0 : _a.call(slots), isImageIcon && _createVNode(\"img\", {\n            \"class\": bem(\"image\"),\n            \"src\": name2\n          }, null)];\n        }\n      });\n    };\n  }\n});\nexport {\n  stdin_default as default,\n  iconProps\n};\n","import { withInstall } from \"../utils/index.mjs\";\nimport _Icon from \"./Icon.mjs\";\nconst Icon = withInstall(_Icon);\nvar stdin_default = Icon;\nimport { iconProps } from \"./Icon.mjs\";\nexport {\n  Icon,\n  stdin_default as default,\n  iconProps\n};\n","import { truthProp, unknownProp, numericProp } from \"../utils/index.mjs\";\nconst popupSharedProps = {\n  // whether to show popup\n  show: Boolean,\n  // z-index\n  zIndex: numericProp,\n  // whether to show overlay\n  overlay: truthProp,\n  // transition duration\n  duration: numericProp,\n  // teleport\n  teleport: [String, Object],\n  // prevent body scroll\n  lockScroll: truthProp,\n  // whether to lazy render\n  lazyRender: truthProp,\n  // callback function before close\n  beforeClose: Function,\n  // overlay props\n  overlayProps: Object,\n  // overlay custom style\n  overlayStyle: Object,\n  // overlay custom class name\n  overlayClass: unknownProp,\n  // Initial rendering animation\n  transitionAppear: Boolean,\n  // whether to close popup when overlay is clicked\n  closeOnClickOverlay: truthProp\n};\nconst popupSharedPropKeys = Object.keys(\n  popupSharedProps\n);\nexport {\n  popupSharedPropKeys,\n  popupSharedProps\n};\n","import { ref } from \"vue\";\nimport { TAP_OFFSET } from \"../utils/index.mjs\";\nfunction getDirection(x, y) {\n  if (x > y) {\n    return \"horizontal\";\n  }\n  if (y > x) {\n    return \"vertical\";\n  }\n  return \"\";\n}\nfunction useTouch() {\n  const startX = ref(0);\n  const startY = ref(0);\n  const deltaX = ref(0);\n  const deltaY = ref(0);\n  const offsetX = ref(0);\n  const offsetY = ref(0);\n  const direction = ref(\"\");\n  const isTap = ref(true);\n  const isVertical = () => direction.value === \"vertical\";\n  const isHorizontal = () => direction.value === \"horizontal\";\n  const reset = () => {\n    deltaX.value = 0;\n    deltaY.value = 0;\n    offsetX.value = 0;\n    offsetY.value = 0;\n    direction.value = \"\";\n    isTap.value = true;\n  };\n  const start = (event) => {\n    reset();\n    startX.value = event.touches[0].clientX;\n    startY.value = event.touches[0].clientY;\n  };\n  const move = (event) => {\n    const touch = event.touches[0];\n    deltaX.value = (touch.clientX < 0 ? 0 : touch.clientX) - startX.value;\n    deltaY.value = touch.clientY - startY.value;\n    offsetX.value = Math.abs(deltaX.value);\n    offsetY.value = Math.abs(deltaY.value);\n    const LOCK_DIRECTION_DISTANCE = 10;\n    if (!direction.value || offsetX.value < LOCK_DIRECTION_DISTANCE && offsetY.value < LOCK_DIRECTION_DISTANCE) {\n      direction.value = getDirection(offsetX.value, offsetY.value);\n    }\n    if (isTap.value && (offsetX.value > TAP_OFFSET || offsetY.value > TAP_OFFSET)) {\n      isTap.value = false;\n    }\n  };\n  return {\n    move,\n    start,\n    reset,\n    startX,\n    startY,\n    deltaX,\n    deltaY,\n    offsetX,\n    offsetY,\n    direction,\n    isVertical,\n    isHorizontal,\n    isTap\n  };\n}\nexport {\n  useTouch\n};\n","import { watch, onBeforeUnmount, onDeactivated } from \"vue\";\nimport { getScrollParent, onMountedOrActivated } from \"@vant/use\";\nimport { useTouch } from \"./use-touch.mjs\";\nimport { preventDefault } from \"../utils/index.mjs\";\nlet totalLockCount = 0;\nconst BODY_LOCK_CLASS = \"van-overflow-hidden\";\nfunction useLockScroll(rootRef, shouldLock) {\n  const touch = useTouch();\n  const DIRECTION_UP = \"01\";\n  const DIRECTION_DOWN = \"10\";\n  const onTouchMove = (event) => {\n    touch.move(event);\n    const direction = touch.deltaY.value > 0 ? DIRECTION_DOWN : DIRECTION_UP;\n    const el = getScrollParent(\n      event.target,\n      rootRef.value\n    );\n    const { scrollHeight, offsetHeight, scrollTop } = el;\n    let status = \"11\";\n    if (scrollTop === 0) {\n      status = offsetHeight >= scrollHeight ? \"00\" : \"01\";\n    } else if (scrollTop + offsetHeight >= scrollHeight) {\n      status = \"10\";\n    }\n    if (status !== \"11\" && touch.isVertical() && !(parseInt(status, 2) & parseInt(direction, 2))) {\n      preventDefault(event, true);\n    }\n  };\n  const lock = () => {\n    document.addEventListener(\"touchstart\", touch.start);\n    document.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n    if (!totalLockCount) {\n      document.body.classList.add(BODY_LOCK_CLASS);\n    }\n    totalLockCount++;\n  };\n  const unlock = () => {\n    if (totalLockCount) {\n      document.removeEventListener(\"touchstart\", touch.start);\n      document.removeEventListener(\"touchmove\", onTouchMove);\n      totalLockCount--;\n      if (!totalLockCount) {\n        document.body.classList.remove(BODY_LOCK_CLASS);\n      }\n    }\n  };\n  const init = () => shouldLock() && lock();\n  const destroy = () => shouldLock() && unlock();\n  onMountedOrActivated(init);\n  onDeactivated(destroy);\n  onBeforeUnmount(destroy);\n  watch(shouldLock, (value) => {\n    value ? lock() : unlock();\n  });\n}\nexport {\n  useLockScroll\n};\n","import { ref, watch } from \"vue\";\nfunction useLazyRender(show) {\n  const inited = ref(false);\n  watch(\n    show,\n    (value) => {\n      if (value) {\n        inited.value = value;\n      }\n    },\n    { immediate: true }\n  );\n  return (render) => () => inited.value ? render() : null;\n}\nexport {\n  useLazyRender\n};\n","import { getCurrentInstance } from \"vue\";\nconst useScopeId = () => {\n  var _a;\n  const { scopeId } = ((_a = getCurrentInstance()) == null ? void 0 : _a.vnode) || {};\n  return scopeId ? { [scopeId]: \"\" } : null;\n};\nexport {\n  useScopeId\n};\n","import { ref, defineComponent, Teleport, Transition, vShow as _vShow, mergeProps as _mergeProps, createVNode as _createVNode, withDirectives as _withDirectives } from \"vue\";\nimport { isDef, extend, truthProp, numericProp, unknownProp, preventDefault, createNamespace, getZIndexStyle } from \"../utils/index.mjs\";\nimport { useEventListener } from \"@vant/use\";\nimport { useLazyRender } from \"../composables/use-lazy-render.mjs\";\nconst [name, bem] = createNamespace(\"overlay\");\nconst overlayProps = {\n  show: Boolean,\n  zIndex: numericProp,\n  duration: numericProp,\n  className: unknownProp,\n  lockScroll: truthProp,\n  lazyRender: truthProp,\n  customStyle: Object,\n  teleport: [String, Object]\n};\nvar stdin_default = defineComponent({\n  name,\n  inheritAttrs: false,\n  props: overlayProps,\n  setup(props, {\n    attrs,\n    slots\n  }) {\n    const root = ref();\n    const lazyRender = useLazyRender(() => props.show || !props.lazyRender);\n    const onTouchMove = (event) => {\n      if (props.lockScroll) {\n        preventDefault(event, true);\n      }\n    };\n    const renderOverlay = lazyRender(() => {\n      var _a;\n      const style = extend(getZIndexStyle(props.zIndex), props.customStyle);\n      if (isDef(props.duration)) {\n        style.animationDuration = `${props.duration}s`;\n      }\n      return _withDirectives(_createVNode(\"div\", _mergeProps({\n        \"ref\": root,\n        \"style\": style,\n        \"class\": [bem(), props.className]\n      }, attrs), [(_a = slots.default) == null ? void 0 : _a.call(slots)]), [[_vShow, props.show]]);\n    });\n    useEventListener(\"touchmove\", onTouchMove, {\n      target: root\n    });\n    return () => {\n      const Content = _createVNode(Transition, {\n        \"name\": \"van-fade\",\n        \"appear\": true\n      }, {\n        default: renderOverlay\n      });\n      if (props.teleport) {\n        return _createVNode(Teleport, {\n          \"to\": props.teleport\n        }, {\n          default: () => [Content]\n        });\n      }\n      return Content;\n    };\n  }\n});\nexport {\n  stdin_default as default,\n  overlayProps\n};\n","import { withInstall } from \"../utils/index.mjs\";\nimport _Overlay from \"./Overlay.mjs\";\nconst Overlay = withInstall(_Overlay);\nvar stdin_default = Overlay;\nimport { overlayProps } from \"./Overlay.mjs\";\nexport {\n  Overlay,\n  stdin_default as default,\n  overlayProps\n};\n","import { ref, watch, provide, Teleport, nextTick, computed, onMounted, Transition, onActivated, onDeactivated, defineComponent, mergeProps as _mergeProps, createVNode as _createVNode, vShow as _vShow, withDirectives as _withDirectives, Fragment as _Fragment } from \"vue\";\nimport { popupSharedProps } from \"./shared.mjs\";\nimport { isDef, extend, makeStringProp, callInterceptor, createNamespace, HAPTICS_FEEDBACK } from \"../utils/index.mjs\";\nimport { useEventListener } from \"@vant/use\";\nimport { useExpose } from \"../composables/use-expose.mjs\";\nimport { useLockScroll } from \"../composables/use-lock-scroll.mjs\";\nimport { useLazyRender } from \"../composables/use-lazy-render.mjs\";\nimport { POPUP_TOGGLE_KEY } from \"../composables/on-popup-reopen.mjs\";\nimport { useGlobalZIndex } from \"../composables/use-global-z-index.mjs\";\nimport { useScopeId } from \"../composables/use-scope-id.mjs\";\nimport { Icon } from \"../icon/index.mjs\";\nimport { Overlay } from \"../overlay/index.mjs\";\nconst popupProps = extend({}, popupSharedProps, {\n  round: Boolean,\n  position: makeStringProp(\"center\"),\n  closeIcon: makeStringProp(\"cross\"),\n  closeable: Boolean,\n  transition: String,\n  iconPrefix: String,\n  closeOnPopstate: Boolean,\n  closeIconPosition: makeStringProp(\"top-right\"),\n  destroyOnClose: Boolean,\n  safeAreaInsetTop: Boolean,\n  safeAreaInsetBottom: Boolean\n});\nconst [name, bem] = createNamespace(\"popup\");\nvar stdin_default = defineComponent({\n  name,\n  inheritAttrs: false,\n  props: popupProps,\n  emits: [\"open\", \"close\", \"opened\", \"closed\", \"keydown\", \"update:show\", \"clickOverlay\", \"clickCloseIcon\"],\n  setup(props, {\n    emit,\n    attrs,\n    slots\n  }) {\n    let opened;\n    let shouldReopen;\n    const zIndex = ref();\n    const popupRef = ref();\n    const lazyRender = useLazyRender(() => props.show || !props.lazyRender);\n    const style = computed(() => {\n      const style2 = {\n        zIndex: zIndex.value\n      };\n      if (isDef(props.duration)) {\n        const key = props.position === \"center\" ? \"animationDuration\" : \"transitionDuration\";\n        style2[key] = `${props.duration}s`;\n      }\n      return style2;\n    });\n    const open = () => {\n      if (!opened) {\n        opened = true;\n        zIndex.value = props.zIndex !== void 0 ? +props.zIndex : useGlobalZIndex();\n        emit(\"open\");\n      }\n    };\n    const close = () => {\n      if (opened) {\n        callInterceptor(props.beforeClose, {\n          done() {\n            opened = false;\n            emit(\"close\");\n            emit(\"update:show\", false);\n          }\n        });\n      }\n    };\n    const onClickOverlay = (event) => {\n      emit(\"clickOverlay\", event);\n      if (props.closeOnClickOverlay) {\n        close();\n      }\n    };\n    const renderOverlay = () => {\n      if (props.overlay) {\n        const overlayProps = extend({\n          show: props.show,\n          class: props.overlayClass,\n          zIndex: zIndex.value,\n          duration: props.duration,\n          customStyle: props.overlayStyle,\n          role: props.closeOnClickOverlay ? \"button\" : void 0,\n          tabindex: props.closeOnClickOverlay ? 0 : void 0\n        }, props.overlayProps);\n        return _createVNode(Overlay, _mergeProps(overlayProps, useScopeId(), {\n          \"onClick\": onClickOverlay\n        }), {\n          default: slots[\"overlay-content\"]\n        });\n      }\n    };\n    const onClickCloseIcon = (event) => {\n      emit(\"clickCloseIcon\", event);\n      close();\n    };\n    const renderCloseIcon = () => {\n      if (props.closeable) {\n        return _createVNode(Icon, {\n          \"role\": \"button\",\n          \"tabindex\": 0,\n          \"name\": props.closeIcon,\n          \"class\": [bem(\"close-icon\", props.closeIconPosition), HAPTICS_FEEDBACK],\n          \"classPrefix\": props.iconPrefix,\n          \"onClick\": onClickCloseIcon\n        }, null);\n      }\n    };\n    let timer;\n    const onOpened = () => {\n      if (timer) clearTimeout(timer);\n      timer = setTimeout(() => {\n        emit(\"opened\");\n      });\n    };\n    const onClosed = () => emit(\"closed\");\n    const onKeydown = (event) => emit(\"keydown\", event);\n    const renderPopup = lazyRender(() => {\n      var _a;\n      const {\n        destroyOnClose,\n        round,\n        position,\n        safeAreaInsetTop,\n        safeAreaInsetBottom,\n        show\n      } = props;\n      if (!show && destroyOnClose) {\n        return;\n      }\n      return _withDirectives(_createVNode(\"div\", _mergeProps({\n        \"ref\": popupRef,\n        \"style\": style.value,\n        \"role\": \"dialog\",\n        \"tabindex\": 0,\n        \"class\": [bem({\n          round,\n          [position]: position\n        }), {\n          \"van-safe-area-top\": safeAreaInsetTop,\n          \"van-safe-area-bottom\": safeAreaInsetBottom\n        }],\n        \"onKeydown\": onKeydown\n      }, attrs, useScopeId()), [(_a = slots.default) == null ? void 0 : _a.call(slots), renderCloseIcon()]), [[_vShow, show]]);\n    });\n    const renderTransition = () => {\n      const {\n        position,\n        transition,\n        transitionAppear\n      } = props;\n      const name2 = position === \"center\" ? \"van-fade\" : `van-popup-slide-${position}`;\n      return _createVNode(Transition, {\n        \"name\": transition || name2,\n        \"appear\": transitionAppear,\n        \"onAfterEnter\": onOpened,\n        \"onAfterLeave\": onClosed\n      }, {\n        default: renderPopup\n      });\n    };\n    watch(() => props.show, (show) => {\n      if (show && !opened) {\n        open();\n        if (attrs.tabindex === 0) {\n          nextTick(() => {\n            var _a;\n            (_a = popupRef.value) == null ? void 0 : _a.focus();\n          });\n        }\n      }\n      if (!show && opened) {\n        opened = false;\n        emit(\"close\");\n      }\n    });\n    useExpose({\n      popupRef\n    });\n    useLockScroll(popupRef, () => props.show && props.lockScroll);\n    useEventListener(\"popstate\", () => {\n      if (props.closeOnPopstate) {\n        close();\n        shouldReopen = false;\n      }\n    });\n    onMounted(() => {\n      if (props.show) {\n        open();\n      }\n    });\n    onActivated(() => {\n      if (shouldReopen) {\n        emit(\"update:show\", true);\n        shouldReopen = false;\n      }\n    });\n    onDeactivated(() => {\n      if (props.show && props.teleport) {\n        close();\n        shouldReopen = true;\n      }\n    });\n    provide(POPUP_TOGGLE_KEY, () => props.show);\n    return () => {\n      if (props.teleport) {\n        return _createVNode(Teleport, {\n          \"to\": props.teleport\n        }, {\n          default: () => [renderOverlay(), renderTransition()]\n        });\n      }\n      return _createVNode(_Fragment, null, [renderOverlay(), renderTransition()]);\n    };\n  }\n});\nexport {\n  stdin_default as default,\n  popupProps\n};\n","import { withInstall } from \"../utils/index.mjs\";\nimport _Popup from \"./Popup.mjs\";\nconst Popup = withInstall(_Popup);\nvar stdin_default = Popup;\nimport { popupProps } from \"./Popup.mjs\";\nexport {\n  Popup,\n  stdin_default as default,\n  popupProps\n};\n","<template>\r\n  <popup v-model:show=\"show\" round position=\"bottom\" v-bind=\"$attrs\">\r\n    <div class=\"header\">\r\n      <div class=\"title\">\r\n        {{ title }}\r\n      </div>\r\n      <div class=\"close\" @click=\"bindClosePopup\">\r\n        <i class=\"iconfont icon-lucide-x\"></i>\r\n      </div>\r\n    </div>\r\n    <div class=\"list-container\">\r\n      <div\r\n        class=\"list-item\"\r\n        :class=\"{ active: model === item[columnsFieldNames.value] }\"\r\n        v-for=\"item in columns\"\r\n        :key=\"item[columnsFieldNames.value]\"\r\n        @click=\"pickerConfirm(item)\"\r\n      >\r\n        <div class=\"label\">\r\n          <template v-if=\"$slots.label\">\r\n            <slot name=\"label\" :item=\"item\"></slot>\r\n          </template>\r\n          <template v-else>\r\n            {{ item[columnsFieldNames.label] }}\r\n          </template>\r\n        </div>\r\n        <div class=\"active-icon\">\r\n          <i\r\n            v-show=\"model === item[columnsFieldNames.value]\"\r\n            class=\"iconfont icon-check\"\r\n          ></i>\r\n        </div>\r\n      </div>\r\n      <slot />\r\n    </div>\r\n  </popup>\r\n</template>\r\n<script setup>\r\nimport { Popup, Picker } from \"vant\";\r\ndefineOptions({\r\n  name: \"MPicker\",\r\n});\r\nconst emit = defineEmits([\"confirm\"]);\r\nconst props = defineProps({\r\n  title: {\r\n    type: String,\r\n    default: \"\",\r\n  },\r\n  columns: {\r\n    type: Array,\r\n    default: [],\r\n  },\r\n  columnsFieldNames: {\r\n    type: Object,\r\n    default: () => {\r\n      return { label: \"label\", value: \"value\" };\r\n    },\r\n  },\r\n});\r\nconst model = defineModel();\r\nconst show = defineModel(\"show\", {\r\n  type: Boolean,\r\n  default: false,\r\n});\r\n\r\nconst pickerConfirm = (item) => {\r\n  model.value = item[props.columnsFieldNames.value];\r\n  emit(\"confirm\", item);\r\n  bindClosePopup();\r\n};\r\n\r\nconst bindClosePopup = () => {\r\n  show.value = false;\r\n};\r\n</script>\r\n<style scoped lang=\"scss\">\r\n.header {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  min-height: 60px;\r\n  .title {\r\n    font-size: var(--font-size-text-lg);\r\n    font-weight: 600;\r\n    text-align: center;\r\n    width: 100%;\r\n    color: var(--text-primary);\r\n  }\r\n  .close {\r\n    cursor: pointer;\r\n    position: absolute;\r\n    right: 0;\r\n    top: 0;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    width: 52px;\r\n    height: 52px;\r\n    .iconfont {\r\n      font-size: 20px;\r\n      font-weight: normal;\r\n      color: var(--icon-tertiary);\r\n    }\r\n  }\r\n}\r\n\r\n.list-container {\r\n  display: flex;\r\n  flex-direction: column;\r\n  max-height: 558px;\r\n  padding: 0 16px 24px;\r\n  overflow-y: auto;\r\n  .list-item {\r\n    padding:16px 12px;\r\n    border-radius: var(--md);\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    min-height: 52px;\r\n    &.active {\r\n      background: var(--bg-tertiary-hover);\r\n    }\r\n    .label {\r\n      font-size: var(--font-size-text-base);\r\n      color: var(--text-primary);\r\n      display: flex;\r\n      align-items: center;\r\n      gap: 12px;\r\n      flex: 1;\r\n    }\r\n    .active-icon {\r\n      font-size: 20px;\r\n      width: 20px;\r\n      color: var(--text-primary);\r\n    }\r\n  }\r\n}\r\n</style>\r\n","/**\r\n * @mc-markets/ui - 自定义组件库\r\n * \r\n * 提供自定义组件和工具函数\r\n * 支持 Element Plus 组件回退机制\r\n * 将 Element Plus 组件前缀从 el- 转换为 m- 并导出\r\n * 导出 Element Plus 事件相关功能（Message、MessageBox、Notification、Loading 等）\r\n * \r\n * @version 1.1.53\n */\r\n\r\nimport * as ElementPlusComponents from 'element-plus'\r\n// 导入样式文件\r\nimport MIcon from './components/Icon/Icon.vue'\r\nimport MButton from './components/Button/Button.vue'\r\nimport MInput from './components/Input/Input.vue'\r\nimport MForm from './components/Form/Form.vue'\r\nimport MFormItem from './components/FormItem/FormItem.vue'\r\nimport MTooltip from './components/Tooltip/Tooltip.vue'\r\nimport MSelect from './components/Select/Select.vue'\r\nimport MOption from './components/Option/Option.vue'\r\nimport MOptionGroup from './components/OptionGroup/OptionGroup.vue'\r\nimport MPagination from './components/Pagination/Pagination.vue'\r\nimport MRadio from './components/Radio/Radio.vue'\r\nimport MRadioGroup from './components/RadioGroup/RadioGroup.vue'\r\nimport MRadioButton from './components/RadioButton/RadioButton.vue'\r\nimport MSwitch from './components/Switch/Switch.vue'\r\nimport MTag from './components/Tag/Tag.vue'\r\nimport MAlert from './components/Alert/Alert.vue'\r\nimport MDialog from './components/Dialog/Dialog.vue'\r\nimport MNotification from './components/Notification/Notification.vue'\r\nimport MMessage, { Message } from './components/Message/Message.vue'\r\nimport MNotifiMessage, { NotifiMessage } from './components/NotifiMessage/NotifiMessage.vue'\r\nimport MDatePicker from './components/DatePicker/DatePicker.vue'\r\nimport MEmpty from './components/Empty/Empty.vue'\r\nimport MTable from './components/Table/Table.vue'\r\nimport MTableColumn from './components/Table/TableColumn.vue'\r\nimport MBanner from './components/Banner/Banner.vue'\r\nimport MTabs from './components/Tabs/Tabs.vue'\r\nimport MTabPane from './components/Tabs/TabPane.vue'\r\nimport MTabCard from './components/TabCard/TabCard.vue'\r\nimport MTabCardItem from './components/TabCard/TabCardItem.vue'\r\nimport MBreadcrumb from './components/Breadcrumb/Breadcrumb.vue'\r\nimport MPicker from './components/Picker/Picker.vue'\r\nconst components = [MIcon, MButton, MInput, MForm, MFormItem, MTooltip, MSelect, MOption, MOptionGroup, MPagination, MRadio, MRadioGroup, MRadioButton, MSwitch, MTag, MAlert, MDialog, MNotification, MMessage, MNotifiMessage, MDatePicker, MEmpty, MTable, MTableColumn, MBanner, MTabs, MTabPane, MTabCard, MTabCardItem, MBreadcrumb, MPicker]\r\n\r\n// 统一的组件名称转换函数\r\n// 将 MDatePicker -> m-date-picker，与 Element Plus 转换逻辑保持一致\r\nfunction convertComponentName(componentName) {\r\n  if (!componentName || typeof componentName !== 'string') {\r\n    return null\r\n  }\r\n  \r\n  // 如果不是 M 开头，返回 null\r\n  if (!componentName.startsWith('M')) {\r\n    return null\r\n  }\r\n  \r\n  // 移除 M 前缀，然后转换驼峰为 kebab-case\r\n  // MDatePicker -> DatePicker -> -Date-Picker -> -date-picker -> date-picker -> m-date-picker\r\n  const nameWithoutPrefix = componentName.slice(1)\r\n  const kebabCase = nameWithoutPrefix\r\n    .replace(/([A-Z])/g, '-$1')\r\n    .toLowerCase()\r\n    .replace(/^-/, '')\r\n  \r\n  return 'm-' + kebabCase\r\n}\r\n\r\n// 全局组件配置 - 需要自动创建实例的组件\r\nconst globalInstanceComponents = [\r\n  { id: 'global-message-container', component: MMessage },\r\n  { id: 'global-notification-container', component: MNotifiMessage }\r\n]\r\n\r\n// 创建单个全局组件实例\r\nasync function createGlobalComponent({ id, component }) {\r\n  try {\r\n    // 检查是否已存在，避免重复创建\r\n    if (document.getElementById(id)) return\r\n    \r\n    const { createApp, h } = await import('vue')\r\n    \r\n    // 创建容器\r\n    const container = document.createElement('div')\r\n    container.id = id\r\n    document.body.appendChild(container)\r\n    \r\n    // 创建并挂载 Vue 应用\r\n    const app = createApp({\r\n      render: () => h(component)\r\n    })\r\n    \r\n    app.mount(`#${id}`)\r\n  } catch (error) {\r\n    console.warn(`Failed to create global component ${id}:`, error)\r\n  }\r\n}\r\n\r\n// 创建所有全局组件实例\r\nasync function createGlobalComponents() {\r\n  const promises = globalInstanceComponents.map(createGlobalComponent)\r\n  await Promise.all(promises)\r\n}\r\n\r\n// 存储转换后的 Element Plus 组件\r\nconst convertedComponents = {}\r\n\r\nfunction registerElementPlus(app) {\r\n  // 获取已注册的自定义组件名称\r\n  const customComponentNames = components\r\n    .map(comp => convertComponentName(comp?.name))\r\n    .filter(Boolean)\r\n\r\n  \r\n  Object.entries(ElementPlusComponents).forEach(([key, comp]) => {\r\n    if (comp && comp.name && typeof comp.name === 'string' && comp.name.startsWith('El')) {\r\n      // 将 ElOptionGroup 转换为 m-option-group\r\n      const mName = 'm-' + comp.name.slice(2).replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, '')\r\n      \r\n      // 只注册没有被自定义组件覆盖的Element Plus组件\r\n      if (!customComponentNames.includes(mName)) {\r\n        // 检查组件是否已经注册，避免重复注册警告\r\n        if (!app._context.components[mName]) {\r\n          app.component(mName, comp)\r\n        } else {\r\n        }\r\n      } else {\r\n      }\r\n      \r\n      // 存储转换后的组件用于导出\r\n      const exportName = 'M' + comp.name.slice(2) // ElButton -> MButton\r\n      convertedComponents[exportName] = comp\r\n    }\r\n  })\r\n}\r\n\r\nconst install = (app) => {\r\n  // 应用全局样式覆盖\r\n  if (typeof window !== 'undefined') {\r\n    import('./utils/styleUtils.js').then(({ applyGlobalOverride, enableH5Override }) => {\r\n      applyGlobalOverride();\r\n      // 自动启用 H5 适配（UA 或断点）\r\n      enableH5Override({ mode: 'auto', breakpoint: 768 });\r\n    });\r\n  }\r\n  \r\n  console.log('🚀 开始安装 @mc-markets/ui 组件库...')\r\n  \r\n  // 先注册自定义组件 - 确保优先级\r\n  components.forEach(component => {\r\n    const convertName = convertComponentName(component?.name)\r\n    const originalName = component?.name\r\n    if (convertName) {\r\n      // 强制注册自定义组件，确保覆盖任何已存在的组件 (kebab-case)\r\n      app.component(convertName, component)\r\n    }\r\n    if (originalName) {\r\n      // 同时注册 PascalCase，兼容直接使用 <MPicker /> 等写法\r\n      app.component(originalName, component)\r\n    }\r\n  })\r\n  \r\n  // 然后注册转换后的 Element Plus 组件（只注册没有自定义组件覆盖的）\r\n  registerElementPlus(app)\r\n  \r\n  // 自动创建全局组件实例\r\n  if (typeof window !== 'undefined') {\r\n    createGlobalComponents()\r\n  }\r\n}\r\n\r\nexport default { install }\r\nexport { MIcon, MButton, MInput, MForm, MFormItem, MTooltip, MSelect, MOption, MOptionGroup, MPagination, MRadio, MRadioGroup, MRadioButton, MSwitch, MTag, MAlert, MDialog, MNotification, MMessage, MNotifiMessage, MDatePicker, MEmpty, MTable, MTableColumn, MBanner, MTabs, MTabPane, MTabCard, MTabCardItem, MBreadcrumb, MPicker }\r\n\r\n// 导出样式工具函数\r\nexport { \r\n  addOverrideClass, \r\n  addComponentOverride, \r\n  applyGlobalOverride, \r\n  forceRefreshStyles,\r\n  enableH5Override,\r\n  isH5,\r\n  createOverrideComponent \r\n} from './utils/styleUtils.js'\r\n\r\n// 手动导出常用的 Element Plus 函数（只导出函数，不导出组件）\r\nexport const MMessageBox = ElementPlusComponents.ElMessageBox\r\n\r\n// 导出自定义组件的静态方法\r\nexport { Message, NotifiMessage }\r\n\r\n// 导出转换后的 Element Plus 组件\r\nexport const mComponents = { ...convertedComponents }\r\n\r\n// 导出常用的 Element Plus 组件\r\nexport const MButtonGroup = convertedComponents.MButtonGroup\r\nexport const MCarousel = convertedComponents.MCarousel\r\nexport const MCarouselItem = convertedComponents.MCarouselItem\r\nexport const MCascader = convertedComponents.MCascader\r\nexport const MCascaderPanel = convertedComponents.MCascaderPanel\r\nexport const MCheckTag = convertedComponents.MCheckTag\r\nexport const MCalendar = convertedComponents.MCalendar\r\nexport const MTimePicker = convertedComponents.MTimePicker\r\nexport const MDateTimePicker = convertedComponents.MDateTimePicker\r\nexport const MColorPicker = convertedComponents.MColorPicker\r\nexport const MTransfer = convertedComponents.MTransfer\r\nexport const MTree = convertedComponents.MTree\r\nexport const MTreeSelect = convertedComponents.MTreeSelect\r\nexport const MUpload = convertedComponents.MUpload\r\nexport const MImage = convertedComponents.MImage\r\nexport const MImageViewer = convertedComponents.MImageViewer\r\nexport const MBacktop = convertedComponents.MBacktop\r\nexport const MInfiniteScroll = convertedComponents.MInfiniteScroll\r\nexport const MAffix = convertedComponents.MAffix\r\nexport const MScrollbar = convertedComponents.MScrollbar\r\nexport const MResult = convertedComponents.MResult\r\nexport const MSkeleton = convertedComponents.MSkeleton\r\nexport const MLoading = convertedComponents.MLoading\r\nexport const MSpinner = convertedComponents.MSpinner\r\nexport const MProgress = convertedComponents.MProgress\r\nexport const MBadge = convertedComponents.MBadge\r\nexport const MAvatar = convertedComponents.MAvatar\r\nexport const MImagePreview = convertedComponents.MImagePreview\r\nexport const MTeleport = convertedComponents.MTeleport\r\nexport const MConfigProvider = convertedComponents.MConfigProvider\r\n"],"names":["props","__props","emit","__emit","iconClass","computed","classes","iconStyle","style","handleClick","event","_openBlock","_createElementBlock","_mergeProps","useExposeRef","refName","options","compatibilityKeys","innerRef","ref","exposedProxy","_target","key","value","getterMethodName","method","args","_b","_a","target","val","buttonRef","__expose","_createBlock","_component_el_button","_renderSlot","_ctx","name","inputRef","_component_el_input","formRef","_unref","ElForm","formItemRef","classNames","excludeAttrs","attrs","excludeKeys","result","__spreadValues","useClassName","defaultClass","excludeKey","useAttrs","mergedAttrs","className","popperClass","tooltipRef","_component_el_tooltip","selectRef","_component_el_select","optionRef","_component_el_option","optionGroupRef","_component_el_option_group","paginationRef","_component_el_pagination","radioRef","_component_el_radio","computedPopperClass","defaultPopperClass","__objRest","radioGroupRef","_component_el_radio_group","radioButtonRef","_component_el_radio_button","switchRef","_component_el_switch","computedType","computedLoading","computedPrefixIcon","computedSuffixIcon","tagRef","_component_el_tag","_hoisted_1","_createElementVNode","_hoisted_2","availableTypes","__default__","useCustomIcon","rest","__spreadProps","iconUrl","_component_el_alert","_createSlots","dialogVisible","_useModel","dialogRef","_createVNode","_component_el_dialog","$slots","_withCtx","close","titleId","titleClass","_normalizeProps","_guardReactiveProps","_sfc_main","_component_el_notification","messages","messageId","Message","config","existingIndex","id","message","index","closeMessage","_hoisted_6","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_9","_toDisplayString","$event","$setup","notifications","notificationId","NotifiMessage","closeNotification","notification","datePickerRef","_component_el_date_picker","availableImages","image","imageUrl","emptyRef","_component_el_empty","innerTableRef","_component_el_table_column","slotProps","slots","useSlots","internalVisible","watch","newVal","bannerStyle","defaultIcons","handleClose","_normalizeClass","_normalizeStyle","addOverrideClass","element","addComponentOverride","componentInstance","applyGlobalOverride","mutations","mutation","node","parent","el","enableH5Override","mode","breakpoint","root","isMobileUA","isNarrow","apply","enable","compute","onResize","forceRefreshStyles","selector","isH5","createOverrideComponent","componentConfig","CONSTANTS","navRef","tabs","activeTab","internalKey","previousTabsCount","previousTabsNames","sortTimer","scrollTimeout","isResetting","resizeObserver","activeBarStyle","getActiveItemPosition","activeItem","itemLeft","actualNavPaddingLeft","navRect","resetActiveBarStyle","activeIndex","tab","centerLeft","shouldScroll","scrollToActiveTab","headerRef","headerWidth","header","headerScrollLeft","itemWidth","itemRight","itemCenter","navWidth","targetScrollLeft","maxScrollLeft","itemVisibleLeft","isItemInView","itemVisibleRight","isInLeftEdge","edgeThreshold","isInRightEdge","handleTabClick","tabName","oldValue","handleTabRemove","sortTabsByDOMOrder","updateUIState","paneElements","contentRef","domOrder","currentOrder","sortedTabs","tabMap","t","unregisterTab","newValue","detectTabsChange","newTabs","newNames","isCountChanged","isOrderChanged","handleTabsListChange","updateArrowVisibility","nav","currentScrollLeft","scrollWidth","clientWidth","showLeftArrow","showRightArrow","rafId","isManualScroll","clearScrollTimers","performScroll","direction","scrollAmount","initDefaultActiveTab","onMounted","onUnmounted","handleScrollLeft","handleScrollRight","_cache","_Fragment","_renderList","tabsContext","inject","tabInfo","doRegisterTab","oldVal","isActive","tabCardContext","option","isDisabled","provide","handleItemClick","item","path","noop","extend","inBrowser","isObject","isDef","isFunction","isPromise","isNumeric","isIOS","get","object","keys","unknownProp","numericProp","truthProp","makeStringProp","defaultVal","onMountedOrActivated","hook","mounted","nextTick","onActivated2","useEventListener","type","listener","passive","capture","cleaned","attached","add","target2","unref2","remove","onUnmounted2","onDeactivated2","stopWatch","isRef","width","height","useWindowSize","ref4","update","overflowScrollReg","defaultRoot","isElement","getScrollParent","overflowY","checkIsIOS","stopPropagation","preventDefault","isStopPropagation","addUnit","getZIndexStyle","zIndex","camelizeRE","camelize","str","_","c","kebabCase","hasOwnProperty","assignKey","to","from","deepAssign","stdin_default","year","month","maxRange","discount","condition","count","lang","reactive","defaultMessages","Locale","newLang","newMessages","createTranslate","prefix","locale","genBem","mods","ret","createBEM","createNamespace","prefixedName","HAPTICS_FEEDBACK","TAP_OFFSET","callInterceptor","interceptor","done","canceled","error","returnVal","withInstall","app","POPUP_TOGGLE_KEY","useExpose","apis","instance","getCurrentInstance","bem","badgeProps","defineComponent","hasContent","content","showZero","renderContent","dot","max","getOffsetWithMinusString","style2","x","y","position","offsetY","offsetX","renderBadge","tag","Badge","_Badge","globalZIndex","useGlobalZIndex","setGlobalZIndex","CONFIG_PROVIDER_KEY","configProviderProps","insertDash","mapThemeVarsToCSSVars","themeVars","cssVars","formattedKey","syncThemeVarsOnRoot","newStyle","oldStyle","addTheme","removeTheme","theme","onActivated","onDeactivated","onBeforeUnmount","newScope","oldScope","watchEffect","isImage","name2","iconProps","classPrefix","size","badge","color","isImageIcon","Icon","_Icon","popupSharedProps","getDirection","useTouch","startX","startY","deltaX","deltaY","isTap","isVertical","isHorizontal","reset","touch","LOCK_DIRECTION_DISTANCE","totalLockCount","BODY_LOCK_CLASS","useLockScroll","rootRef","shouldLock","DIRECTION_UP","DIRECTION_DOWN","onTouchMove","scrollHeight","offsetHeight","scrollTop","status","lock","unlock","init","destroy","useLazyRender","show","inited","render","useScopeId","scopeId","overlayProps","lazyRender","renderOverlay","_withDirectives","_vShow","Content","Transition","Teleport","Overlay","_Overlay","popupProps","opened","shouldReopen","popupRef","open","onClickOverlay","onClickCloseIcon","renderCloseIcon","timer","onOpened","onClosed","onKeydown","renderPopup","destroyOnClose","round","safeAreaInsetTop","safeAreaInsetBottom","renderTransition","transition","transitionAppear","Popup","_Popup","model","pickerConfirm","bindClosePopup","_hoisted_7","components","MIcon","MButton","MInput","MForm","MFormItem","MTooltip","MSelect","MOption","MOptionGroup","MPagination","MRadio","MRadioGroup","MRadioButton","MSwitch","MTag","MAlert","MDialog","MNotification","MMessage","MNotifiMessage","MDatePicker","MEmpty","MTable","MTableColumn","MBanner","MTabs","MTabPane","MTabCard","MTabCardItem","MBreadcrumb","MPicker","convertComponentName","componentName","globalInstanceComponents","createGlobalComponent","_0","__async","component","createApp","h","container","createGlobalComponents","promises","convertedComponents","registerElementPlus","customComponentNames","comp","ElementPlusComponents","mName","exportName","install","styleUtils","convertName","originalName","MMessageBox","mComponents","MButtonGroup","MCarousel","MCarouselItem","MCascader","MCascaderPanel","MCheckTag","MCalendar","MTimePicker","MDateTimePicker","MColorPicker","MTransfer","MTree","MTreeSelect","MUpload","MImage","MImageViewer","MBacktop","MInfiniteScroll","MAffix","MScrollbar","MResult","MSkeleton","MLoading","MSpinner","MProgress","MBadge","MAvatar","MImagePreview","MTeleport","MConfigProvider"],"mappings":"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","x_google_ignoreList":[35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]}