{"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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"}