{"version":3,"file":"ranking-list.mjs","sources":["../../../../../../packages/components/ranking-list/src/ranking-list.ts"],"sourcesContent":["import { buildProps, definePropType } from '@ll-plus/utils'\r\n\r\nimport type { ExtractPropTypes, VNode } from 'vue'\r\nimport type { AvatarProps } from '../../avatar/src/avatar'\r\nimport type RankingList from './ranking-list.vue'\r\n\r\n/**\r\n * 排行榜单条数据\r\n */\r\nexport interface RankingListItem {\r\n  /** 名称 */\r\n  label?: string\r\n  /** 统计数值 */\r\n  value?: number\r\n  /** 描述（副标题） */\r\n  description?: string\r\n  /** 头像，传入 ll-avatar 的 props 对象 */\r\n  avatar?: Partial<AvatarProps>\r\n  [key: string]: any\r\n}\r\n\r\n/**\r\n * 字段映射：当数据字段名与默认 label/value/description/avatar 不一致时使用\r\n */\r\nexport interface RankingListFieldNames {\r\n  label?: string\r\n  value?: string\r\n  description?: string\r\n  avatar?: string\r\n}\r\n\r\n/**\r\n * 经过排序、截断、计算占比后的渲染数据\r\n */\r\nexport interface RankingListRenderItem {\r\n  /** 排名（从 1 开始） */\r\n  rank: number\r\n  /** 名称 */\r\n  label: string\r\n  /** 原始数值 */\r\n  value: number\r\n  /** 格式化后的数值文本 */\r\n  valueText: string\r\n  /** 描述 */\r\n  description: string\r\n  /** 头像 props */\r\n  avatar?: Partial<AvatarProps>\r\n  /** 相对最大值的占比（0 ~ 100） */\r\n  percent: number\r\n  /** 原始数据 */\r\n  raw: RankingListItem\r\n}\r\n\r\n/** 排序规则：desc 正序（从大到小，默认），asc 倒序（从小到大） */\r\nexport type RankingListOrder = 'desc' | 'asc'\r\n\r\n/** 展示样式：podium 奖台（默认），list 列表 */\r\nexport type RankingListType = 'podium' | 'list'\r\n\r\nexport interface RankingListSlots {\r\n  /** 自定义整行内容 */\r\n  item?: (props: RankingListRenderItem) => VNode[]\r\n  /** 自定义头像 */\r\n  avatar?: (props: RankingListRenderItem) => VNode[]\r\n  /** 自定义名称 */\r\n  label?: (props: RankingListRenderItem) => VNode[]\r\n  /** 自定义数值 */\r\n  value?: (props: RankingListRenderItem) => VNode[]\r\n  /** 空数据 */\r\n  empty?: () => VNode[]\r\n}\r\n\r\n/** 排行榜最大可展示条数 */\r\nexport const RANKING_LIST_MAX_LIMIT = 500\r\n\r\nexport const rankingListProps = buildProps({\r\n  /**\r\n   * @description 排行榜数据，格式为 { label, value, description }\r\n   */\r\n  data: {\r\n    type: definePropType<RankingListItem[]>(Array),\r\n    default: () => [],\r\n  },\r\n  /**\r\n   * @description 字段映射，将数据中的字段映射为 label / value / description\r\n   */\r\n  fieldNames: {\r\n    type: definePropType<RankingListFieldNames>(Object),\r\n    default: () => ({}),\r\n  },\r\n  /**\r\n   * @description 排序规则，desc 正序（从大到小，默认）、asc 倒序（从小到大）\r\n   */\r\n  order: {\r\n    type: definePropType<RankingListOrder>(String),\r\n    values: ['desc', 'asc'],\r\n    default: 'desc',\r\n  },\r\n  /**\r\n   * @description 展示数量，最多 500 条\r\n   */\r\n  limit: {\r\n    type: Number,\r\n    default: 10,\r\n  },\r\n  /**\r\n   * @description 自定义背景色\r\n   */\r\n  background: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n  /**\r\n   * @description 字体颜色\r\n   */\r\n  color: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n  /**\r\n   * @description 进度条颜色\r\n   */\r\n  barColor: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n  /**\r\n   * @description 数字格式化函数，返回展示的数值文本\r\n   */\r\n  valueFormatter: {\r\n    type: definePropType<(value: number, item: RankingListItem) => string>(\r\n      Function,\r\n    ),\r\n    default: undefined,\r\n  },\r\n  /**\r\n   * @description 数值是否使用千分位分隔符（未设置 valueFormatter 时生效）\r\n   */\r\n  thousandSeparator: {\r\n    type: Boolean,\r\n    default: true,\r\n  },\r\n  /**\r\n   * @description 是否显示进度条\r\n   */\r\n  showBar: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  /**\r\n   * @description 展示样式，podium 奖台（默认）、list 列表\r\n   */\r\n  type: {\r\n    type: definePropType<RankingListType>(String),\r\n    values: ['podium', 'list'],\r\n    default: 'podium',\r\n  },\r\n  /**\r\n   * @description 是否显示头像\r\n   */\r\n  showAvatar: {\r\n    type: Boolean,\r\n    default: true,\r\n  },\r\n} as const)\r\n\r\n\r\nexport const RankingListEmits = {\r\n  'item-click': (e: MouseEvent, item: RankingListRenderItem) => !!item\r\n}\r\n\r\nexport type RankingListProps = ExtractPropTypes<typeof rankingListProps>\r\n\r\nexport type RankingListInstance = InstanceType<typeof RankingList>\r\n"],"names":[],"mappings":";;;;AAyEO,MAAM,sBAAA,GAAyB;AAE/B,MAAM,mBAAmB,UAAA,CAAW;AAAA;AAAA;AAAA;AAAA,EAIzC,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,eAAkC,KAAK,CAAA;AAAA,IAC7C,OAAA,EAAS,MAAM;AAAC,GAClB;AAAA;AAAA;AAAA;AAAA,EAIA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,eAAsC,MAAM,CAAA;AAAA,IAClD,OAAA,EAAS,OAAO,EAAC;AAAA,GACnB;AAAA;AAAA;AAAA;AAAA,EAIA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,eAAiC,MAAM,CAAA;AAAA,IAC7C,MAAA,EAAQ,CAAC,MAAA,EAAQ,KAAK,CAAA;AAAA,IACtB,OAAA,EAAS;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,cAAA;AAAA,MACJ;AAAA,KACF;AAAA,IACA,OAAA,EAAS,KAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,eAAgC,MAAM,CAAA;AAAA,IAC5C,MAAA,EAAQ,CAAC,QAAA,EAAU,MAAM,CAAA;AAAA,IACzB,OAAA,EAAS;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS;AAAA;AAEb,CAAU;AAGH,MAAM,gBAAA,GAAmB;AAAA,EAC9B,YAAA,EAAc,CAAC,CAAA,EAAe,IAAA,KAAgC,CAAC,CAAC;AAClE;;;;"}