{"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/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","../packages/utils/styleUtils.js","../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.iconfont {\r\n  display: inline-block;\r\n  font-style: normal;\r\n  vertical-align: baseline;\r\n  text-align: center;\r\n  text-transform: none;\r\n  line-height: 1;\r\n  text-rendering: optimizeLegibility;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n}\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 { 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","<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\">\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\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 }) {\r\n    const navRef = ref(null)\r\n    const headerRef = ref(null)\r\n    const tabs = ref([])\r\n    const activeTab = ref(props.modelValue)\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    const updateActiveBarPosition = (shouldScroll = true) => {\r\n      nextTick(() => {\r\n        if (!navRef.value || tabs.value.length === 0) {\r\n          activeBarStyle.value = { width: '0px', left: '0px' }\r\n          return\r\n        }\r\n\r\n        const activeTabName = activeTab.value\r\n        if (!activeTabName) {\r\n          activeBarStyle.value = { width: '0px', left: '0px' }\r\n          return\r\n        }\r\n\r\n        const activeIndex = tabs.value.findIndex(tab => tab.name === activeTabName)\r\n        if (activeIndex === -1) {\r\n          activeBarStyle.value = { width: '0px', left: '0px' }\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          activeBarStyle.value = { width: '0px', left: '0px' }\r\n          return\r\n        }\r\n\r\n        // activeBar 是绝对定位在 nav 内的，offsetLeft 已经是相对于 nav 的位置\r\n        // offsetLeft 会自动包含 nav 的 padding，所以直接使用即可\r\n        // 但为了确保样式已应用，我们再次检查 nav 的实际 padding\r\n        const navStyle = window.getComputedStyle(navRef.value)\r\n        const actualNavPaddingLeft = parseFloat(navStyle.paddingLeft) || 0\r\n        \r\n        // 如果 offsetLeft 不等于预期的 padding（可能是样式还没应用），使用 getBoundingClientRect 重新计算\r\n        let itemLeft = activeItem.offsetLeft\r\n        \r\n        // 在 H5 环境下，如果 offsetLeft 明显不对（比如应该是 10 但实际是 16），使用更精确的方法\r\n        const isH5 = window.innerWidth <= 768 || document.documentElement.classList.contains('mc-h5')\r\n        if (isH5 && Math.abs(itemLeft - actualNavPaddingLeft) > 1) {\r\n          // 使用 getBoundingClientRect 获取精确位置\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        const centerLeft = itemLeft + (activeItem.offsetWidth / 2) - 8\r\n\r\n        activeBarStyle.value = {\r\n          width: '16px',\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      // 如果item在可视区域左侧，滚动到item的左边\r\n      if (itemLeft < headerScrollLeft) {\r\n        header.scrollTo({\r\n          left: itemLeft - 20, // 留一点边距\r\n          behavior: 'smooth'\r\n        })\r\n      }\r\n      // 如果item在可视区域右侧，滚动到item的右边\r\n      else if (itemRight > headerScrollLeft + headerWidth) {\r\n        header.scrollTo({\r\n          left: itemRight - headerWidth + 20, // 留一点边距\r\n          behavior: 'smooth'\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    // 注册tab\r\n    const registerTab = (tab) => {\r\n      const index = tabs.value.findIndex(t => t.name === tab.name)\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\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    watch(tabs, () => {\r\n      updateActiveBarPosition()\r\n      updateArrowVisibility()\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        // 计算最大滚动距离\r\n        const maxScrollLeft = Math.max(0, scrollWidth - clientWidth)\r\n        \r\n        // 使用更精确的判断条件，处理浮点数精度问题\r\n        // 左箭头：只要不在最左边就显示（只要可以往回滚动就显示）\r\n        // 当 scrollLeft = maxScrollLeft 时，说明已经到最右边，左箭头应该显示\r\n        const canScrollLeft = currentScrollLeft > 0.5\r\n        const canScrollRight = currentScrollLeft < maxScrollLeft - 0.5\r\n        \r\n        showLeftArrow.value = canScrollLeft\r\n        showRightArrow.value = canScrollRight\r\n      } else {\r\n        showLeftArrow.value = false\r\n        showRightArrow.value = false\r\n      }\r\n    }\r\n\r\n    // 使用 requestAnimationFrame 优化滚动事件处理\r\n    let rafId = null\r\n    let scrollTimeout = null\r\n    \r\n    const handleScroll = () => {\r\n      // 立即更新箭头状态\r\n      updateArrowVisibility()\r\n      \r\n      // 取消之前的动画帧\r\n      if (rafId) {\r\n        cancelAnimationFrame(rafId)\r\n      }\r\n      \r\n      // 使用 requestAnimationFrame 确保在下一帧更新\r\n      rafId = requestAnimationFrame(() => {\r\n        updateArrowVisibility()\r\n        rafId = null\r\n      })\r\n      \r\n      // 清除之前的延迟检查\r\n      if (scrollTimeout) {\r\n        clearTimeout(scrollTimeout)\r\n      }\r\n      \r\n      // 滚动停止后再次检查（处理滚动到边界的情况）\r\n      scrollTimeout = setTimeout(() => {\r\n        updateArrowVisibility()\r\n        scrollTimeout = null\r\n      }, 150)\r\n    }\r\n\r\n    // 向左滚动\r\n    const handleScrollLeft = () => {\r\n      if (!headerRef.value) return\r\n      isManualScroll = true // 标记为手动滚动\r\n      const scrollAmount = headerRef.value.clientWidth * 0.8 // 滚动80%的宽度\r\n      headerRef.value.scrollBy({\r\n        left: -scrollAmount,\r\n        behavior: 'smooth'\r\n      })\r\n      // 平滑滚动是异步的，需要在滚动完成后更新箭头状态\r\n      setTimeout(() => {\r\n        updateArrowVisibility()\r\n        isManualScroll = false // 滚动完成后取消标记\r\n      }, 400) // 等待滚动动画完成\r\n    }\r\n\r\n    // 向右滚动\r\n    const handleScrollRight = () => {\r\n      if (!headerRef.value) return\r\n      isManualScroll = true // 标记为手动滚动\r\n      const scrollAmount = headerRef.value.clientWidth * 0.8 // 滚动80%的宽度\r\n      headerRef.value.scrollBy({\r\n        left: scrollAmount,\r\n        behavior: 'smooth'\r\n      })\r\n      // 平滑滚动是异步的，需要在滚动完成后更新箭头状态\r\n      // 使用多个时间点检查，确保箭头状态正确更新\r\n      setTimeout(() => {\r\n        updateArrowVisibility()\r\n      }, 100)\r\n      setTimeout(() => {\r\n        updateArrowVisibility()\r\n        isManualScroll = false // 滚动完成后取消标记\r\n      }, 400) // 等待滚动动画完成\r\n      setTimeout(() => {\r\n        updateArrowVisibility()\r\n      }, 500) // 再次确认\r\n    }\r\n\r\n    // 初始化时设置默认active tab\r\n    onMounted(() => {\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      updateActiveBarPosition()\r\n      \r\n      // 延迟更新，确保样式完全应用（特别是 H5 样式）\r\n      // 刷新时样式可能还没完全应用，需要等待\r\n      setTimeout(() => {\r\n        updateActiveBarPosition()\r\n      }, 50)\r\n      \r\n      // 使用 requestAnimationFrame 确保在样式渲染后更新\r\n      requestAnimationFrame(() => {\r\n        setTimeout(() => {\r\n          updateActiveBarPosition()\r\n        }, 50)\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        const resizeObserver = new ResizeObserver(() => {\r\n          updateArrowVisibility()\r\n          // 当大小变化时，也更新 activeBar 位置（样式变化可能导致大小变化）\r\n          // 大小变化时不需要自动滚动到 activeBar\r\n          updateActiveBarPosition(false)\r\n        })\r\n        resizeObserver.observe(headerRef.value)\r\n        resizeObserver.observe(navRef.value)\r\n        \r\n        // 清理Observer\r\n        onUnmounted(() => {\r\n          resizeObserver.disconnect()\r\n        })\r\n      }\r\n    })\r\n\r\n    return {\r\n      navRef,\r\n      headerRef,\r\n      tabs,\r\n      activeTab,\r\n      activeBarStyle,\r\n      showLeftArrow,\r\n      showRightArrow,\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    .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  >\r\n    <slot></slot>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport { inject, computed, onMounted, onUnmounted } 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    onMounted(() => {\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    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","/**\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 * 创建带有样式覆盖的 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","/**\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.36\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\n\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]\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 name = convertComponentName(component?.name)\r\n    if (name) {\r\n      // 强制注册自定义组件，确保覆盖任何已存在的组件\r\n      app.component(name, 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 }\r\n\r\n// 导出样式工具函数\r\nexport { \r\n  addOverrideClass, \r\n  addComponentOverride, \r\n  applyGlobalOverride, \r\n  forceRefreshStyles,\r\n  enableH5Override,\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","_component_el_form","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","_unref","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","navRef","tabs","activeTab","activeBarStyle","activeTabName","activeIndex","tab","activeItem","itemLeft","navRect","centerLeft","shouldScroll","scrollToActiveTab","headerRef","headerWidth","header","headerScrollLeft","itemWidth","itemRight","handleTabClick","tabName","oldValue","handleTabRemove","unregisterTab","newValue","updateArrowVisibility","nav","currentScrollLeft","scrollWidth","clientWidth","canScrollLeft","showLeftArrow","showRightArrow","canScrollRight","scrollTimeout","rafId","scrollAmount","onMounted","resizeObserver","onUnmounted","handleScrollLeft","handleScrollRight","_cache","_Fragment","_renderList","tabsContext","inject","tabInfo","isActive","tabCardContext","option","isDisabled","provide","handleItemClick","item","path","addOverrideClass","element","addComponentOverride","componentInstance","applyGlobalOverride","mutations","mutation","node","parent","el","enableH5Override","mode","breakpoint","root","isMobileUA","isNarrow","apply","enable","compute","onResize","forceRefreshStyles","selector","createOverrideComponent","componentConfig","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","convertComponentName","componentName","globalInstanceComponents","createGlobalComponent","_0","__async","component","createApp","h","container","error","createGlobalComponents","promises","convertedComponents","registerElementPlus","app","customComponentNames","comp","ElementPlusComponents","mName","exportName","install","styleUtils","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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"}