{"version":3,"file":"descriptions.mjs","sources":["../../../../../../packages/components/descriptions/src/descriptions.tsx"],"sourcesContent":["import { cloneVNode, computed, defineComponent, provide, reactive, toRefs } from 'vue'\nimport type { VNode, PropType } from 'vue'\nimport { getComponentNamespace, getNamespace } from '../../../utils/global-config'\nimport { getAllElements, isComponent } from '../../../utils/vue-utils'\nimport { deepClone } from '../../../shared/utils'\nimport { isFunction } from '../../../utils/is'\nimport { descriptionsInjectionKey } from './context'\nimport type { DescriptionsData } from './types'\nimport DescriptionsItem from './descriptions-item'\n\nexport default defineComponent({\n  name: getComponentNamespace('Descriptions'),\n  props: {\n    column: {\n      type: Number,\n      default: 2\n    },\n    direction: {\n      type: String as PropType<'vertical' | 'horizontal'>,\n      default: 'horizontal'\n    },\n    size: {\n      type: String as PropType<'large' | 'default' | 'small'>,\n      default: 'default'\n    },\n    border: {\n      type: Boolean,\n      default: false\n    },\n    cellHeight: {\n      type: [String, Number],\n      default: undefined\n    },\n    data: {\n      type: Array as PropType<Partial<DescriptionsData>[]>,\n      default: undefined\n    }\n  },\n  setup(props, { slots }) {\n    const ns = getNamespace('descriptions')\n    const cls = computed(() => [ns])\n\n    const addItemSpan = (vn: VNode, span: number) => {\n      if (!vn.props) {\n        vn.props = { span: 1 }\n      }\n      if (!props.border || props.direction === 'vertical') {\n        vn.props.span = span\n      } else {\n        vn.props.span = span * 2 - 1\n      }\n    }\n\n    // 根据column转成二维数组 [[vn,vn],[vn,vn]]\n    // 当border存在时 一个vn要渲染2个tr => [[tr,tr,tr,tr], [tr,tr,tr,tr]]\n    // 没有border => [[tr,tr], [tr,tr]]\n    const generateRows = (vns: VNode[]) => {\n      const rows: VNode[][] = []\n      let count = 0\n      let temp: VNode[] = []\n      vns.forEach((vn, index) => {\n        temp.push(vn)\n        if (index === vns.length - 1) {\n          // 最后一个vn添加处理过的span 为了能正确的合并表格td\n          addItemSpan(vn, props.column - count)\n          rows.push(temp)\n          return\n        }\n        const span = vn.props?.span || 1\n        const totalSpan = count + span\n        count = totalSpan > props.column ? props.column : totalSpan\n        // 当取余为0时，代表当前temp数组需要push到rows里面，组合成二维数组\n        if (!(count % props.column)) {\n          rows.push(temp)\n          // 最后一个vn需要做边界判断。重置span数值,合并表格td\n          addItemSpan(vn, span - (totalSpan - props.column))\n          temp = []\n          count = 0\n        } else {\n          // 给vn添加默认的span\n          addItemSpan(vn, span)\n        }\n      })\n      return rows\n    }\n    const { size, border, cellHeight, direction } = toRefs(props)\n    provide(\n      descriptionsInjectionKey,\n      reactive({\n        size,\n        border,\n        cellHeight,\n        direction\n      })\n    )\n\n    const getValueRender = (item: DescriptionsData) => {\n      if (item.renderValue) {\n        return (scoped: Record<'value', any>) => item.renderValue(scoped)\n      }\n      if (isFunction(slots[item.valueSlotName])) {\n        return (scoped: Record<'value', any>) => slots[item.valueSlotName]!(scoped)\n      }\n    }\n\n    const getLabelRender = (item: DescriptionsData) => {\n      if (item.renderLabel) {\n        return (scoped: Record<'label', any>) => item.renderLabel(scoped)\n      }\n      if (isFunction(slots[item.labelSlotName])) {\n        return (scoped: Record<'label', any>) => slots[item.labelSlotName]!(scoped)\n      }\n    }\n\n    const getChildren = () => {\n      if (!props.data) {\n        return getAllElements(slots.default?.()).filter(\n          (vn: VNode) => isComponent(vn, vn.type) && vn.type.name === 'BnDescriptionsItem'\n        )\n      }\n\n      return props.data.map((item: DescriptionsData) => (\n        <DescriptionsItem\n          value={item.value}\n          label={item.label}\n          span={item.span}\n          align={item.align}\n          labelAlign={item.labelAlign}\n          labelClassName={item.labelClassName}\n          valueClassName={item.valueClassName}\n          v-slots={{\n            default: getValueRender(item),\n            label: getLabelRender(item)\n          }}\n        />\n      ))\n    }\n\n    return () => {\n      const rows = generateRows(getChildren())\n      // 当排版为vertical时注入需要渲染的表格标签\n      const addRenderTag = (vn: VNode, tag: string) => {\n        vn = cloneVNode(vn)\n        if (!vn.props) vn.props = {}\n        vn.props = deepClone(vn.props)\n        vn.props!.renderTag = tag\n        return vn\n      }\n\n      const renderRows = () => {\n        return rows.map((row, rowIndex) => {\n          if (props.direction === 'vertical') {\n            return (\n              <>\n                <tr key={`render-tag-th-${rowIndex}`}>\n                  {row.map((itemVNode) => addRenderTag(itemVNode, 'th'))}\n                </tr>\n                <tr key={`render-tag-td-${rowIndex}`}>{row.map((itemVNode) => itemVNode)}</tr>\n              </>\n            )\n          }\n          return <tr key={rowIndex}>{row.map((itemVNode) => itemVNode)}</tr>\n        })\n      }\n\n      return (\n        <div class={cls.value}>\n          <table class={[`${ns}__table`]}>\n            <tbody>{renderRows()}</tbody>\n          </table>\n        </div>\n      )\n    }\n  }\n})\n"],"names":["name","getComponentNamespace","props","column","type","Number","default","direction","String","size","border","Boolean","cellHeight","undefined","data","Array","setup","slots","ns","getNamespace","cls","computed","addItemSpan","vn","span","generateRows","vns","rows","count","temp","forEach","index","push","length","totalSpan","toRefs","provide","descriptionsInjectionKey","reactive","getValueRender","item","renderValue","scoped","isFunction","valueSlotName","getLabelRender","renderLabel","labelSlotName","getChildren","getAllElements","filter","isComponent","map","_createVNode","DescriptionsItem","value","label","align","labelAlign","labelClassName","valueClassName","addRenderTag","tag","cloneVNode","deepClone","renderTag","renderRows","row","rowIndex","_Fragment","itemVNode"],"mappings":"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"}