space.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var item = require('./item.js');
  5. var useSpace = require('./use-space.js');
  6. var vnode = require('../../../utils/vue/vnode.js');
  7. var runtime = require('../../../utils/vue/props/runtime.js');
  8. var shared = require('@vue/shared');
  9. var types = require('../../../utils/types.js');
  10. var size = require('../../../constants/size.js');
  11. const spaceProps = runtime.buildProps({
  12. direction: {
  13. type: String,
  14. values: ["horizontal", "vertical"],
  15. default: "horizontal"
  16. },
  17. class: {
  18. type: runtime.definePropType([
  19. String,
  20. Object,
  21. Array
  22. ]),
  23. default: ""
  24. },
  25. style: {
  26. type: runtime.definePropType([String, Array, Object]),
  27. default: ""
  28. },
  29. alignment: {
  30. type: runtime.definePropType(String),
  31. default: "center"
  32. },
  33. prefixCls: {
  34. type: String
  35. },
  36. spacer: {
  37. type: runtime.definePropType([Object, String, Number, Array]),
  38. default: null,
  39. validator: (val) => vue.isVNode(val) || types.isNumber(val) || shared.isString(val)
  40. },
  41. wrap: Boolean,
  42. fill: Boolean,
  43. fillRatio: {
  44. type: Number,
  45. default: 100
  46. },
  47. size: {
  48. type: [String, Array, Number],
  49. values: size.componentSizes,
  50. validator: (val) => {
  51. return types.isNumber(val) || shared.isArray(val) && val.length === 2 && val.every(types.isNumber);
  52. }
  53. }
  54. });
  55. const Space = vue.defineComponent({
  56. name: "ElSpace",
  57. props: spaceProps,
  58. setup(props, { slots }) {
  59. const { classes, containerStyle, itemStyle } = useSpace.useSpace(props);
  60. function extractChildren(children, parentKey = "", extractedChildren = []) {
  61. const { prefixCls } = props;
  62. children.forEach((child, loopKey) => {
  63. if (vnode.isFragment(child)) {
  64. if (shared.isArray(child.children)) {
  65. child.children.forEach((nested, key) => {
  66. if (vnode.isFragment(nested) && shared.isArray(nested.children)) {
  67. extractChildren(
  68. nested.children,
  69. `${parentKey + key}-`,
  70. extractedChildren
  71. );
  72. } else {
  73. if (vue.isVNode(nested) && (nested == null ? void 0 : nested.type) === vue.Comment) {
  74. extractedChildren.push(nested);
  75. } else {
  76. extractedChildren.push(
  77. vue.createVNode(
  78. item["default"],
  79. {
  80. style: itemStyle.value,
  81. prefixCls,
  82. key: `nested-${parentKey + key}`
  83. },
  84. {
  85. default: () => [nested]
  86. },
  87. vnode.PatchFlags.PROPS | vnode.PatchFlags.STYLE,
  88. ["style", "prefixCls"]
  89. )
  90. );
  91. }
  92. }
  93. });
  94. }
  95. } else if (vnode.isValidElementNode(child)) {
  96. extractedChildren.push(
  97. vue.createVNode(
  98. item["default"],
  99. {
  100. style: itemStyle.value,
  101. prefixCls,
  102. key: `LoopKey${parentKey + loopKey}`
  103. },
  104. {
  105. default: () => [child]
  106. },
  107. vnode.PatchFlags.PROPS | vnode.PatchFlags.STYLE,
  108. ["style", "prefixCls"]
  109. )
  110. );
  111. }
  112. });
  113. return extractedChildren;
  114. }
  115. return () => {
  116. var _a;
  117. const { spacer, direction } = props;
  118. const children = vue.renderSlot(slots, "default", { key: 0 }, () => []);
  119. if (((_a = children.children) != null ? _a : []).length === 0)
  120. return null;
  121. if (shared.isArray(children.children)) {
  122. let extractedChildren = extractChildren(children.children);
  123. if (spacer) {
  124. const len = extractedChildren.length - 1;
  125. extractedChildren = extractedChildren.reduce(
  126. (acc, child, idx) => {
  127. const children2 = [...acc, child];
  128. if (idx !== len) {
  129. children2.push(
  130. vue.createVNode(
  131. "span",
  132. {
  133. style: [
  134. itemStyle.value,
  135. direction === "vertical" ? "width: 100%" : null
  136. ],
  137. key: idx
  138. },
  139. [
  140. vue.isVNode(spacer) ? spacer : vue.createTextVNode(spacer, vnode.PatchFlags.TEXT)
  141. ],
  142. vnode.PatchFlags.STYLE
  143. )
  144. );
  145. }
  146. return children2;
  147. },
  148. []
  149. );
  150. }
  151. return vue.createVNode(
  152. "div",
  153. {
  154. class: classes.value,
  155. style: containerStyle.value
  156. },
  157. extractedChildren,
  158. vnode.PatchFlags.STYLE | vnode.PatchFlags.CLASS
  159. );
  160. }
  161. return children.children;
  162. };
  163. }
  164. });
  165. exports["default"] = Space;
  166. exports.spaceProps = spaceProps;
  167. //# sourceMappingURL=space.js.map