UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 8.86 kB
{"version":3,"file":"space.mjs","sources":["../../../components/space/space.tsx"],"sourcesContent":["import { computed, defineComponent, renderSlot } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { flatVNodes } from '@vexip-ui/hooks'\nimport { supportFlexGap } from '@vexip-ui/utils'\nimport { spaceProps } from './props'\n\nimport type { ClassType } from '@vexip-ui/config'\nimport type { SpaceAlign, SpaceJustify } from './symbol'\n\nconst justifyList = Object.freeze<SpaceJustify[]>([\n 'start',\n 'end',\n 'center',\n 'space-around',\n 'space-between',\n 'space-evenly',\n])\nconst alignList = Object.freeze<SpaceAlign[]>(['start', 'end', 'center', 'baseline', 'stretch'])\n\nconst useFlexGap = supportFlexGap()\n\nfunction parseFlexStyle(value: string) {\n return value === 'start' || value === 'end' ? `flex-${value}` : value\n}\n\nexport default defineComponent({\n name: 'Space',\n props: spaceProps,\n setup(_props, { slots }) {\n const props = useProps('space', _props, {\n vertical: false,\n inline: false,\n tag: 'div',\n align: {\n default: 'stretch',\n validator: value => alignList.includes(value),\n },\n justify: {\n default: 'start',\n validator: value => justifyList.includes(value),\n },\n noWrap: false,\n size: 'default',\n itemStyle: null,\n gapDisabled: !useFlexGap,\n })\n\n const nh = useNameHelper('space')\n const varMap: Record<string, any> = {\n h: `var(${nh.cv('h-gap')})`,\n hh: `calc(var(${nh.cv('h-gap')}) * 0.5)`,\n mhh: `calc(var(${nh.cv('h-gap')}) * -0.5)`,\n v: `var(${nh.cv('v-gap')})`,\n hv: `calc(var(${nh.cv('v-gap')}) * 0.5)`,\n mhv: `calc(var(${nh.cv('v-gap')}) * -0.5)`,\n }\n\n const className = computed(() => {\n const className: ClassType = {\n [nh.b()]: true,\n [nh.bs('vars')]: true,\n [nh.bm('inherit')]: props.inherit,\n [nh.bm('inline')]: props.inline,\n [nh.bm('vertical')]: props.vertical,\n [nh.bm('no-wrap')]: props.vertical || props.noWrap,\n [nh.bm('no-gap')]: props.gapDisabled,\n }\n\n if (typeof props.size === 'string' && props.size !== 'default') {\n className[nh.bm(props.size)] = true\n }\n\n return className\n })\n const style = computed(() => {\n const { justify, align, size } = props\n\n const style: Record<string, string> = {\n alignItems: parseFlexStyle(align),\n justifyContent: parseFlexStyle(justify),\n }\n\n if (typeof size !== 'string') {\n const normalizedSize = Array.isArray(size) ? size : [size, size]\n\n style[nh.cv('h-gap')] = `${normalizedSize[0]}px`\n style[nh.cv('v-gap')] = `${normalizedSize[1]}px`\n }\n\n if (props.gapDisabled && !props.vertical) {\n style.marginTop = varMap.mhv\n style.marginBottom = varMap.mhv\n }\n\n return style\n })\n\n return () => {\n const CustomTag = props.tag || ('div' as any)\n const children = renderSlot(slots, 'default').children\n\n if (!children?.length) {\n return <CustomTag class={className.value} style={style.value}></CustomTag>\n }\n\n const vnodes = flatVNodes(children)\n const lastIndex = vnodes.length - 1\n const justify = props.justify\n const justifySpace = justify.startsWith('space')\n const notBetween = justify !== 'space-between'\n\n return (\n <CustomTag class={className.value} style={style.value}>\n {vnodes.map((vnode, index) => (\n <div\n key={index}\n class={nh.be('item')}\n role={'none'}\n style={[\n props.itemStyle,\n !props.gapDisabled\n ? ''\n : props.vertical\n ? {\n marginBottom: index !== lastIndex ? varMap.v : undefined,\n }\n : {\n paddingTop: varMap.hv,\n paddingBottom: varMap.hv,\n marginRight: justifySpace\n ? notBetween || index !== lastIndex\n ? varMap.hh\n : undefined\n : index !== lastIndex\n ? varMap.h\n : undefined,\n marginLeft: justifySpace\n ? notBetween || index !== 0\n ? varMap.hh\n : undefined\n : undefined,\n },\n ]}\n >\n {vnode}\n </div>\n ))}\n </CustomTag>\n )\n }\n },\n})\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","justifyList","freeze","alignList","useFlexGap","supportFlexGap","parseFlexStyle","value","defineComponent","name","props","spaceProps","setup","_props","slots","useProps","vertical","inline","tag","align","default","validator","includes","justify","noWrap","size","itemStyle","gapDisabled","nh","useNameHelper","varMap","h","cv","hh","mhh","v","hv","mhv","className","computed","b","bs","bm","inherit","style","alignItems","justifyContent","normalizedSize","Array","isArray","marginTop","marginBottom","_slot","CustomTag","children","renderSlot","length","_createVNode","vnodes","flatVNodes","lastIndex","justifySpace","startsWith","notBetween","map","vnode","index","be","undefined","paddingTop","paddingBottom","marginRight","marginLeft"],"mappings":"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"}