index.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. Object.defineProperty(exports, "Compact", {
  7. enumerable: true,
  8. get: function () {
  9. return _Compact.default;
  10. }
  11. });
  12. exports.spaceProps = exports.default = void 0;
  13. var _vue = require("vue");
  14. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  15. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  16. var _vueTypes = _interopRequireDefault(require("../_util/vue-types"));
  17. var _propsUtil = require("../_util/props-util");
  18. var _type = require("../_util/type");
  19. var _useConfigInject = _interopRequireDefault(require("../config-provider/hooks/useConfigInject"));
  20. var _useFlexGapSupport = _interopRequireDefault(require("../_util/hooks/useFlexGapSupport"));
  21. var _classNames = _interopRequireDefault(require("../_util/classNames"));
  22. var _Compact = _interopRequireDefault(require("./Compact"));
  23. var _style = _interopRequireDefault(require("./style"));
  24. const spaceSize = {
  25. small: 8,
  26. middle: 16,
  27. large: 24
  28. };
  29. const spaceProps = () => ({
  30. prefixCls: String,
  31. size: {
  32. type: [String, Number, Array]
  33. },
  34. direction: _vueTypes.default.oneOf((0, _type.tuple)('horizontal', 'vertical')).def('horizontal'),
  35. align: _vueTypes.default.oneOf((0, _type.tuple)('start', 'end', 'center', 'baseline')),
  36. wrap: (0, _type.booleanType)()
  37. });
  38. exports.spaceProps = spaceProps;
  39. function getNumberSize(size) {
  40. return typeof size === 'string' ? spaceSize[size] : size || 0;
  41. }
  42. const Space = (0, _vue.defineComponent)({
  43. compatConfig: {
  44. MODE: 3
  45. },
  46. name: 'ASpace',
  47. inheritAttrs: false,
  48. props: spaceProps(),
  49. slots: Object,
  50. setup(props, _ref) {
  51. let {
  52. slots,
  53. attrs
  54. } = _ref;
  55. const {
  56. prefixCls,
  57. space,
  58. direction: directionConfig
  59. } = (0, _useConfigInject.default)('space', props);
  60. const [wrapSSR, hashId] = (0, _style.default)(prefixCls);
  61. const supportFlexGap = (0, _useFlexGapSupport.default)();
  62. const size = (0, _vue.computed)(() => {
  63. var _a, _b, _c;
  64. return (_c = (_a = props.size) !== null && _a !== void 0 ? _a : (_b = space === null || space === void 0 ? void 0 : space.value) === null || _b === void 0 ? void 0 : _b.size) !== null && _c !== void 0 ? _c : 'small';
  65. });
  66. const horizontalSize = (0, _vue.ref)();
  67. const verticalSize = (0, _vue.ref)();
  68. (0, _vue.watch)(size, () => {
  69. [horizontalSize.value, verticalSize.value] = (Array.isArray(size.value) ? size.value : [size.value, size.value]).map(item => getNumberSize(item));
  70. }, {
  71. immediate: true
  72. });
  73. const mergedAlign = (0, _vue.computed)(() => props.align === undefined && props.direction === 'horizontal' ? 'center' : props.align);
  74. const cn = (0, _vue.computed)(() => {
  75. return (0, _classNames.default)(prefixCls.value, hashId.value, `${prefixCls.value}-${props.direction}`, {
  76. [`${prefixCls.value}-rtl`]: directionConfig.value === 'rtl',
  77. [`${prefixCls.value}-align-${mergedAlign.value}`]: mergedAlign.value
  78. });
  79. });
  80. const marginDirection = (0, _vue.computed)(() => directionConfig.value === 'rtl' ? 'marginLeft' : 'marginRight');
  81. const style = (0, _vue.computed)(() => {
  82. const gapStyle = {};
  83. if (supportFlexGap.value) {
  84. gapStyle.columnGap = `${horizontalSize.value}px`;
  85. gapStyle.rowGap = `${verticalSize.value}px`;
  86. }
  87. return (0, _extends2.default)((0, _extends2.default)({}, gapStyle), props.wrap && {
  88. flexWrap: 'wrap',
  89. marginBottom: `${-verticalSize.value}px`
  90. });
  91. });
  92. return () => {
  93. var _a, _b;
  94. const {
  95. wrap,
  96. direction = 'horizontal'
  97. } = props;
  98. const children = (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots);
  99. const items = (0, _propsUtil.filterEmpty)(children);
  100. const len = items.length;
  101. if (len === 0) {
  102. return null;
  103. }
  104. const split = (_b = slots.split) === null || _b === void 0 ? void 0 : _b.call(slots);
  105. const itemClassName = `${prefixCls.value}-item`;
  106. const horizontalSizeVal = horizontalSize.value;
  107. const latestIndex = len - 1;
  108. return (0, _vue.createVNode)("div", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, attrs), {}, {
  109. "class": [cn.value, attrs.class],
  110. "style": [style.value, attrs.style]
  111. }), [items.map((child, index) => {
  112. let originIndex = children.indexOf(child);
  113. if (originIndex === -1) {
  114. originIndex = `$$space-${index}`;
  115. }
  116. let itemStyle = {};
  117. if (!supportFlexGap.value) {
  118. if (direction === 'vertical') {
  119. if (index < latestIndex) {
  120. itemStyle = {
  121. marginBottom: `${horizontalSizeVal / (split ? 2 : 1)}px`
  122. };
  123. }
  124. } else {
  125. itemStyle = (0, _extends2.default)((0, _extends2.default)({}, index < latestIndex && {
  126. [marginDirection.value]: `${horizontalSizeVal / (split ? 2 : 1)}px`
  127. }), wrap && {
  128. paddingBottom: `${verticalSize.value}px`
  129. });
  130. }
  131. }
  132. return wrapSSR((0, _vue.createVNode)(_vue.Fragment, {
  133. "key": originIndex
  134. }, [(0, _vue.createVNode)("div", {
  135. "class": itemClassName,
  136. "style": itemStyle
  137. }, [child]), index < latestIndex && split && (0, _vue.createVNode)("span", {
  138. "class": `${itemClassName}-split`,
  139. "style": itemStyle
  140. }, [split])]));
  141. })]);
  142. };
  143. }
  144. });
  145. Space.Compact = _Compact.default;
  146. Space.install = function (app) {
  147. app.component(Space.name, Space);
  148. app.component(_Compact.default.name, _Compact.default);
  149. return app;
  150. };
  151. var _default = exports.default = Space;