{"version":3,"file":"grid-item.mjs","sources":["../../../../../../../packages/components/grid/src/grid-item.tsx"],"sourcesContent":["import {\n  type CSSProperties,\n  type ExtractPropTypes,\n  type PropType,\n  computed,\n  defineComponent,\n} from 'vue'\n\n// Utils\nimport {\n  BORDER,\n  addUnit,\n  createNamespace,\n  extend,\n  makeObjectProp,\n  numericProp,\n} from '@xzx-design/utils'\n\n// Composables\nimport { routeProps, useParent, useRoute } from '@xzx-design/hooks'\n\n// Components\nimport { Badge, Icon, Image } from '@xzx-design/components'\nimport { GRID_KEY } from './grid'\n\nimport type { BadgeProps, IconsComponent } from '@xzx-design/components'\n\nconst [name, bem] = createNamespace('grid-item')\n\nexport const gridItemProps = extend({}, routeProps, {\n  dot: Boolean,\n  text: String,\n  icon: makeObjectProp<IconsComponent | string>(null),\n  badge: numericProp,\n  iconColor: String,\n  iconPrefix: String,\n  badgeProps: Object as PropType<Partial<BadgeProps>>,\n})\n\nexport type GridItemProps = ExtractPropTypes<typeof gridItemProps>\n\nexport default defineComponent({\n  name,\n\n  props: gridItemProps,\n\n  setup(props, { slots }) {\n    const { parent, index } = useParent(GRID_KEY)\n    const route = useRoute()\n\n    if (!parent) {\n      if (process.env.NODE_ENV !== 'production') {\n        console.error('[Vant] <GridItem> must be a child component of <Grid>.')\n      }\n      return\n    }\n\n    const rootStyle = computed(() => {\n      const { square, gutter, columnNum } = parent.props\n      const percent = `${100 / +columnNum}%`\n      const style: CSSProperties = {\n        flexBasis: percent,\n      }\n\n      if (square) {\n        style.paddingTop = percent\n      } else if (gutter) {\n        const gutterValue = addUnit(gutter)\n        style.paddingRight = gutterValue\n\n        if (index.value >= +columnNum) {\n          style.marginTop = gutterValue\n        }\n      }\n      return style\n    })\n\n    const contentStyle = computed(() => {\n      const { square, gutter } = parent.props\n\n      if (square && gutter) {\n        const gutterValue = addUnit(gutter)\n        return {\n          right: gutterValue,\n          bottom: gutterValue,\n          height: 'auto',\n        }\n      }\n      return {}\n    })\n\n    const renderIcon = () => {\n      if (slots.icon) {\n        return (\n          <Badge\n            v-slots={{ default: slots.icon }}\n            dot={props.dot}\n            content={props.badge}\n            {...props.badgeProps}\n          />\n        )\n      }\n      const isImage = (path?: IconsComponent | string) => {\n        return typeof path === 'string' && path?.includes('/')\n      }\n\n      if (props.icon) {\n        if (isImage(props.icon)) {\n          return (\n            <div class={bem('icon')}>\n              <Image src={props.icon} fit=\"cover\" />\n            </div>\n          )\n        }\n        return (\n          <Icon\n            dot={props.dot}\n            size={parent.props.iconSize}\n            badge={props.badge}\n            class={bem('icon')}\n            color={props.iconColor}\n            badgeProps={props.badgeProps}\n            classPrefix={props.iconPrefix}\n          >\n            <props.icon />\n          </Icon>\n        )\n      }\n    }\n\n    const renderText = () => {\n      if (slots.text) {\n        return slots.text()\n      }\n      if (props.text) {\n        return <span class={bem('text')}>{props.text}</span>\n      }\n    }\n\n    const renderContent = () => {\n      if (slots.default) {\n        return slots.default()\n      }\n      return [renderIcon(), renderText()]\n    }\n\n    return () => {\n      const { center, border, square, gutter, reverse, direction, clickable } =\n        parent.props\n\n      const classes = [\n        bem('content', [\n          direction,\n          {\n            center,\n            square,\n            reverse,\n            clickable,\n            surround: border && gutter,\n          },\n        ]),\n        { [BORDER]: border },\n      ]\n\n      return (\n        <div class={[bem({ square })]} style={rootStyle.value}>\n          <div\n            role={clickable ? 'button' : undefined}\n            class={classes}\n            style={contentStyle.value}\n            tabindex={clickable ? 0 : undefined}\n            onClick={route}\n          >\n            {renderContent()}\n          </div>\n        </div>\n      )\n    }\n  },\n})\n"],"names":["name","bem","createNamespace","gridItemProps","extend","routeProps","dot","Boolean","text","String","icon","makeObjectProp","badge","numericProp","iconColor","iconPrefix","badgeProps","Object","defineComponent","props","setup","slots","parent","index","useParent","GRID_KEY","route","useRoute","process","env","NODE_ENV","console","error","rootStyle","computed","square","gutter","columnNum","percent","style","flexBasis","paddingTop","gutterValue","addUnit","paddingRight","value","marginTop","contentStyle","right","bottom","height","renderIcon","_createVNode","Badge","_mergeProps","default","isImage","path","includes","Image","Icon","iconSize","renderText","renderContent","center","border","reverse","direction","clickable","classes","surround","BORDER","undefined"],"mappings":"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"}