vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 9.17 kB
Source Map (JSON)
{"version":3,"file":"cell.mjs","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","i","h","_a"],"mappings":"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"}