{"version":3,"file":"cell.cjs","sources":["../../../components/grid/cell.ts"],"sourcesContent":["import { computed, defineComponent, h, inject, provide, reactive, watch } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { has, isDefined } from '@vexip-ui/utils'\nimport { cellProps } from './props'\nimport { breakPoints, currentBreakPoint } from './helper'\nimport { GRID_STATE } from './symbol'\n\nimport type { CSSProperties } from 'vue'\nimport type { ClassType } from '@vexip-ui/config'\nimport type { BreakPoint } from './helper'\n\nexport default defineComponent({\n  name: 'Cell',\n  props: cellProps,\n  setup(_props, { slots }) {\n    const props = useProps('cell', _props, {\n      tag: 'div',\n      top: 'auto',\n      left: 'auto',\n      width: null,\n      height: 1,\n      right: '',\n      bottom: '',\n      xs: null,\n      sm: null,\n      md: null,\n      lg: null,\n      xl: null,\n      xxl: null,\n      useFlex: null,\n    })\n\n    const gridState = inject(GRID_STATE, null)\n    const nh = useNameHelper('cell')\n\n    provide(GRID_STATE, null!)\n\n    const layoutState = reactive({\n      top: props.top,\n      right: props.right,\n      bottom: props.bottom,\n      left: props.left,\n      width: props.width,\n      height: props.height,\n    })\n    const layoutKeys = Object.keys(layoutState) as (\n      | 'top'\n      | 'right'\n      | 'bottom'\n      | 'left'\n      | 'width'\n      | 'height'\n    )[]\n\n    const defaultWidth = computed(() => {\n      if (isDefined(props.width)) {\n        return props.width\n      }\n\n      return gridState?.columns && typeof gridState.columns === 'number' ? gridState.columns : 1\n    })\n\n    watch(\n      currentBreakPoint,\n      value => {\n        const matchSize = queryBreakPointOptions(value)\n\n        if (matchSize) {\n          if (typeof matchSize === 'number') {\n            layoutKeys.forEach(key => {\n              layoutState[key] = props[key] as any\n            })\n\n            layoutState.width = matchSize\n          } else {\n            layoutKeys.forEach(key => {\n              layoutState[key] = has(matchSize, key) ? matchSize[key] : (props[key] as any)\n            })\n\n            layoutState.width = layoutState.width ?? defaultWidth.value\n          }\n        } else {\n          layoutKeys.forEach(key => {\n            layoutState[key] = props[key] as any\n          })\n\n          layoutState.width = defaultWidth.value\n        }\n      },\n      { immediate: true },\n    )\n\n    const className = computed(() => {\n      const cellFlex = props.useFlex !== false &&\n        (props.useFlex || gridState?.cellFlex) && {\n        ...(gridState?.cellFlex || {}),\n        ...(props.useFlex\n          ? props.useFlex === true\n            ? { justify: 'start', align: 'top' }\n            : props.useFlex\n          : {}),\n      }\n      const className: ClassType = {\n        [nh.b()]: true,\n        [nh.bm('inherit')]: gridState || props.inherit,\n        [nh.bm('flex')]: cellFlex,\n      }\n\n      if (cellFlex) {\n        if (cellFlex.justify) className[nh.bm(cellFlex.justify)] = true\n        if (cellFlex.align) className[nh.bm(cellFlex.align)] = true\n      }\n\n      return className\n    })\n    const style = computed(() => {\n      const style: CSSProperties = {}\n\n      const topSet = isPositionSet(layoutState.top)\n      const rightSet = isPositionSet(layoutState.right)\n      const bottomSet = isPositionSet(layoutState.bottom)\n      const leftSet = isPositionSet(layoutState.left)\n\n      if (topSet && bottomSet) {\n        style.gridRowStart = parsePosition(layoutState.top)\n        style.gridRowEnd = parsePosition(layoutState.bottom)\n      } else if (topSet) {\n        style.gridRowStart = parsePosition(layoutState.top)\n        style.gridRowEnd = `span ${layoutState.height}`\n      } else if (bottomSet) {\n        style.gridRowStart = `span ${layoutState.height}`\n        style.gridRowEnd = parsePosition(layoutState.bottom)\n      } else {\n        style.gridRowEnd = `span ${layoutState.height}`\n      }\n\n      if (leftSet && rightSet) {\n        style.gridColumnStart = parsePosition(layoutState.left)\n        style.gridColumnEnd = parsePosition(layoutState.right)\n      } else if (leftSet) {\n        style.gridColumnStart = parsePosition(layoutState.left)\n        style.gridColumnEnd = `span ${layoutState.width}`\n      } else if (rightSet) {\n        style.gridColumnStart = `span ${layoutState.width}`\n        style.gridColumnEnd = parsePosition(layoutState.right)\n      } else {\n        style.gridColumnStart = `span ${layoutState.width}`\n      }\n\n      return style\n    })\n\n    function isPositionSet(value: number | string) {\n      return value === 0 || (value && value !== 'auto')\n    }\n\n    function parsePosition(value: number | string) {\n      return typeof value === 'number' ? value + 1 : value\n    }\n\n    function queryBreakPointOptions(breakPoint: BreakPoint) {\n      const index = breakPoints.findIndex(v => v === breakPoint)\n\n      if (~index) {\n        for (let i = index; i >= 0; --i) {\n          if (isDefined(props[breakPoints[i]])) {\n            return props[breakPoints[i]]\n          }\n        }\n      }\n\n      return null\n    }\n\n    return () =>\n      h(\n        props.tag || 'div',\n        {\n          class: className.value,\n          style: style.value,\n        },\n        {\n          default: () => slots.default?.(),\n        },\n      )\n  },\n})\n"],"names":["Cell","defineComponent","cellProps","_props","slots","props","useProps","gridState","inject","GRID_STATE","nh","useNameHelper","provide","layoutState","reactive","layoutKeys","defaultWidth","computed","isDefined","watch","currentBreakPoint","value","matchSize","queryBreakPointOptions","key","has","className","cellFlex","style","topSet","isPositionSet","rightSet","bottomSet","leftSet","parsePosition","breakPoint","index","breakPoints","v","h","_a"],"mappings":"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"}