{"version":3,"file":"cell.mjs","sources":["../../../../../../../packages/components/cell/src/cell.tsx"],"sourcesContent":["import {\n  type CSSProperties,\n  type ExtractPropTypes,\n  type PropType,\n  defineComponent,\n} from 'vue'\n\n// Utils\nimport {\n  createNamespace,\n  extend,\n  isDef,\n  makeObjectProp,\n  makeStringProp,\n  numericProp,\n  truthProp,\n  unknownProp,\n} from '@xzx-design/utils'\n\n// Composables\nimport { routeProps, useRoute } from '@xzx-design/hooks'\n\n// Components\nimport { Icon } from '@xzx-design/components/icon'\n\nimport { Right } from '@xzx-design/icons-vue'\nimport type { IconsComponent } from '@xzx-design/components/icon'\n\nconst [name, bem] = createNamespace('cell')\n\nexport type CellSize = 'normal' | 'large'\n\nexport type CellArrowDirection = 'up' | 'down' | 'left' | 'right'\n\nexport const cellSharedProps = {\n  tag: makeStringProp<keyof HTMLElementTagNameMap>('div'),\n  icon: makeObjectProp<IconsComponent>(null),\n  size: String as PropType<CellSize>,\n  title: numericProp,\n  value: numericProp,\n  label: numericProp,\n  center: Boolean,\n  isLink: Boolean,\n  disabled: Boolean,\n  border: truthProp,\n  iconPrefix: String,\n  valueClass: unknownProp,\n  labelClass: unknownProp,\n  titleClass: unknownProp,\n  titleStyle: null as unknown as PropType<string | CSSProperties>,\n  arrowDirection: String as PropType<CellArrowDirection>,\n  required: {\n    type: [Boolean, String] as PropType<boolean | 'auto'>,\n    default: null,\n  },\n  clickable: {\n    type: Boolean as PropType<boolean | null>,\n    default: null,\n  },\n}\n\nexport const cellProps = extend({}, cellSharedProps, routeProps)\n\nexport type CellProps = ExtractPropTypes<typeof cellProps>\n\nexport default defineComponent({\n  name,\n\n  props: cellProps,\n\n  setup(props, { slots }) {\n    const route = useRoute()\n\n    const renderLabel = () => {\n      const showLabel = slots.label || isDef(props.label)\n\n      if (showLabel) {\n        return (\n          <div class={[bem('label'), props.labelClass]}>\n            {slots.label ? slots.label() : props.label}\n          </div>\n        )\n      }\n    }\n\n    const renderTitle = () => {\n      if (slots.title || isDef(props.title)) {\n        const titleSlot = slots.title?.()\n\n        // Allow Field to dynamically set empty label\n        // https://github.com/youzan/vant/issues/11368\n        if (Array.isArray(titleSlot) && titleSlot.length === 0) {\n          return\n        }\n\n        return (\n          <div\n            class={[bem('title'), props.titleClass]}\n            style={props.titleStyle}\n          >\n            {titleSlot || <span>{props.title}</span>}\n            {renderLabel()}\n          </div>\n        )\n      }\n    }\n\n    const renderValue = () => {\n      // slots.default is an alias of slots.value\n      const slot = slots.value || slots.default\n      const hasValue = slot || isDef(props.value)\n\n      if (hasValue) {\n        return (\n          <div class={[bem('value'), props.valueClass]}>\n            {slot ? slot() : <span>{props.value}</span>}\n          </div>\n        )\n      }\n    }\n\n    const renderLeftIcon = () => {\n      if (slots.icon) {\n        return slots.icon()\n      }\n\n      if (props.icon) {\n        return (\n          <Icon class={bem('left-icon')} classPrefix={props.iconPrefix}>\n            <props.icon />\n          </Icon>\n        )\n      }\n    }\n\n    const renderRightIcon = () => {\n      if (slots['right-icon']) {\n        return slots['right-icon']()\n      }\n\n      if (props.isLink) {\n        const IconSvg = Right\n        return (\n          <Icon class={bem('right-icon')}>\n            <IconSvg />\n          </Icon>\n        )\n      }\n    }\n\n    return () => {\n      const {\n        tag: Tag,\n        size,\n        center,\n        border,\n        isLink,\n        required,\n        disabled,\n      } = props\n      const clickable = props.clickable ?? isLink\n\n      const classes: Record<string, boolean | undefined> = {\n        center,\n        required: !!required,\n        clickable,\n        borderless: !border,\n        disabled,\n      }\n      if (size) {\n        classes[size] = !!size\n      }\n\n      return (\n        <Tag\n          class={bem(classes)}\n          role={clickable ? 'button' : undefined}\n          tabindex={clickable ? 0 : undefined}\n          onClick={route}\n        >\n          {renderLeftIcon()}\n          {renderTitle()}\n          {renderValue()}\n          {renderRightIcon()}\n          {slots.extra?.()}\n        </Tag>\n      )\n    }\n  },\n})\n"],"names":["name","bem","createNamespace","cellSharedProps","tag","makeStringProp","icon","makeObjectProp","size","String","title","numericProp","value","label","center","Boolean","isLink","disabled","border","truthProp","iconPrefix","valueClass","unknownProp","labelClass","titleClass","titleStyle","arrowDirection","required","type","default","clickable","cellProps","extend","routeProps","defineComponent","props","setup","slots","route","useRoute","renderLabel","showLabel","isDef","_createVNode","renderTitle","titleSlot","Array","isArray","length","renderValue","slot","hasValue","renderLeftIcon","Icon","renderRightIcon","IconSvg","Right","Tag","classes","borderless","undefined","_a","extra"],"mappings":"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"}