vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 8.89 kB
Source Map (JSON)
{"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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"}