{"version":3,"file":"space.mjs","sources":["../../../../../packages/components/space/src/space.ts"],"sourcesContent":["import {\n  defineComponent,\n  renderSlot,\n  createVNode,\n  createTextVNode,\n  isVNode,\n  type PropType\n} from 'vue'\nimport { isString } from '@vue/shared'\nimport {\n  PatchFlags,\n  isFragment,\n  isValidElementNode,\n  isArray,\n  isNumber\n} from '@element-ultra/utils'\nimport { componentSizes } from '@element-ultra/shared'\nimport Item from './item.vue'\nimport { useSpace } from './use-space'\n\nimport type { VNode, StyleValue, ExtractPropTypes, VNodeChild } from 'vue'\nimport type { AlignItemsProperty } from 'csstype'\n\nexport const spaceProps = {\n  direction: {\n    type: String as PropType<'horizontal' | 'vertical'>,\n    default: 'horizontal'\n  },\n\n  class: {\n    type: [String, Object, Array] as PropType<\n      string | string[] | Record<string, boolean>\n    >,\n    default: ''\n  },\n\n  style: {\n    type: [String, Array, Object] as PropType<StyleValue>,\n    default: ''\n  },\n\n  alignment: {\n    type: String as PropType<AlignItemsProperty>,\n    default: 'center'\n  },\n\n  prefixCls: {\n    type: String\n  },\n\n  spacer: {\n    type: [Object, String, Number, Array] as PropType<VNodeChild>,\n    default: null,\n    validator: (val: unknown) => isVNode(val) || isNumber(val) || isString(val)\n  },\n\n  wrap: {\n    type: Boolean,\n    default: false\n  },\n\n  fill: {\n    type: Boolean,\n    default: false\n  },\n\n  fillRatio: {\n    type: Number,\n    default: 100\n  },\n\n  size: {\n    type: [String, Array, Number],\n    values: componentSizes,\n    validator: (val: unknown): val is [number, number] | number => {\n      return (\n        isNumber(val) ||\n        (isArray(val) && val.length === 2 && val.every(i => isNumber(i)))\n      )\n    }\n  }\n}\nexport type SpaceProps = ExtractPropTypes<typeof spaceProps>\n\nexport default defineComponent({\n  name: 'ElSpace',\n\n  props: spaceProps,\n\n  setup(props, { slots }) {\n    const { classes, containerStyle, itemStyle } = useSpace(props)\n\n    return () => {\n      const { spacer, prefixCls, direction } = props\n\n      const children = renderSlot(slots, 'default', { key: 0 }, () => [])\n      // retrieve the children out via a simple for loop\n      // the edge case here is that when users uses directives like <v-for>, <v-if>\n      // we need to go one layer deeper\n\n      if ((children.children ?? []).length === 0) return null\n\n      // loop the children, if current children is rendered via `renderList` or `<v-for>`\n      if (isArray(children.children)) {\n        let extractedChildren: VNode[] = []\n        children.children.forEach((child, loopKey) => {\n          if (isFragment(child)) {\n            if (isArray(child.children)) {\n              child.children.forEach((nested, key) => {\n                extractedChildren.push(\n                  createVNode(\n                    Item,\n                    {\n                      style: itemStyle.value,\n                      prefixCls,\n                      key: `nested-${key}`\n                    },\n                    {\n                      default: () => [nested]\n                    },\n                    PatchFlags.PROPS | PatchFlags.STYLE,\n                    ['style', 'prefixCls']\n                  )\n                )\n              })\n            }\n            // if the current child is valid vnode, then append this current vnode\n            // to item as child node.\n          } else if (isValidElementNode(child)) {\n            extractedChildren.push(\n              createVNode(\n                Item,\n                {\n                  style: itemStyle.value,\n                  prefixCls,\n                  key: `LoopKey${loopKey}`\n                },\n                {\n                  default: () => [child]\n                },\n                PatchFlags.PROPS | PatchFlags.STYLE,\n                ['style', 'prefixCls']\n              )\n            )\n          }\n        })\n\n        if (spacer) {\n          // track the current rendering index, when encounters the last element\n          // then no need to add a spacer after it.\n          const len = extractedChildren.length - 1\n          extractedChildren = extractedChildren.reduce<VNode[]>(\n            (acc, child, idx) => {\n              const children = [...acc, child]\n              if (idx !== len) {\n                children.push(\n                  createVNode(\n                    'span',\n                    // adding width 100% for vertical alignment,\n                    // when the spacer inherit the width from the\n                    // parent, this span's width was not set, so space\n                    // might disappear\n                    {\n                      style: [\n                        itemStyle.value,\n                        direction === 'vertical' ? 'width: 100%' : null\n                      ],\n                      key: idx\n                    },\n                    [\n                      // if spacer is already a valid vnode, then append it to the current\n                      // span element.\n                      // otherwise, treat it as string.\n                      isVNode(spacer)\n                        ? spacer\n                        : createTextVNode(spacer as string, PatchFlags.TEXT)\n                    ],\n                    PatchFlags.STYLE\n                  )\n                )\n              }\n              return children\n            },\n            []\n          )\n        }\n\n        // spacer container.\n        return createVNode(\n          'div',\n          {\n            class: classes.value,\n            style: containerStyle.value\n          },\n          extractedChildren,\n          PatchFlags.STYLE | PatchFlags.CLASS\n        )\n      }\n\n      return children.children\n    }\n  }\n})\n"],"names":["children"],"mappings":"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"}