GridItem.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. var __defProp = Object.defineProperty;
  2. var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  3. var __getOwnPropNames = Object.getOwnPropertyNames;
  4. var __hasOwnProp = Object.prototype.hasOwnProperty;
  5. var __export = (target, all) => {
  6. for (var name2 in all)
  7. __defProp(target, name2, { get: all[name2], enumerable: true });
  8. };
  9. var __copyProps = (to, from, except, desc) => {
  10. if (from && typeof from === "object" || typeof from === "function") {
  11. for (let key of __getOwnPropNames(from))
  12. if (!__hasOwnProp.call(to, key) && key !== except)
  13. __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  14. }
  15. return to;
  16. };
  17. var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
  18. var stdin_exports = {};
  19. __export(stdin_exports, {
  20. default: () => stdin_default
  21. });
  22. module.exports = __toCommonJS(stdin_exports);
  23. var import_vue = require("vue");
  24. var import_vue2 = require("vue");
  25. var import_utils = require("../utils");
  26. var import_Grid = require("../grid/Grid");
  27. var import_use = require("@vant/use");
  28. var import_use_route = require("../composables/use-route");
  29. var import_icon = require("../icon");
  30. var import_badge = require("../badge");
  31. const [name, bem] = (0, import_utils.createNamespace)("grid-item");
  32. const gridItemProps = (0, import_utils.extend)({}, import_use_route.routeProps, {
  33. dot: Boolean,
  34. text: String,
  35. icon: String,
  36. badge: import_utils.numericProp,
  37. iconColor: String,
  38. iconPrefix: String,
  39. badgeProps: Object
  40. });
  41. var stdin_default = (0, import_vue2.defineComponent)({
  42. name,
  43. props: gridItemProps,
  44. setup(props, {
  45. slots
  46. }) {
  47. const {
  48. parent,
  49. index
  50. } = (0, import_use.useParent)(import_Grid.GRID_KEY);
  51. const route = (0, import_use_route.useRoute)();
  52. if (!parent) {
  53. if (process.env.NODE_ENV !== "production") {
  54. console.error("[Vant] <GridItem> must be a child component of <Grid>.");
  55. }
  56. return;
  57. }
  58. const rootStyle = (0, import_vue2.computed)(() => {
  59. const {
  60. square,
  61. gutter,
  62. columnNum
  63. } = parent.props;
  64. const percent = `${100 / +columnNum}%`;
  65. const style = {
  66. flexBasis: percent
  67. };
  68. if (square) {
  69. style.paddingTop = percent;
  70. } else if (gutter) {
  71. const gutterValue = (0, import_utils.addUnit)(gutter);
  72. style.paddingRight = gutterValue;
  73. if (index.value >= columnNum) {
  74. style.marginTop = gutterValue;
  75. }
  76. }
  77. return style;
  78. });
  79. const contentStyle = (0, import_vue2.computed)(() => {
  80. const {
  81. square,
  82. gutter
  83. } = parent.props;
  84. if (square && gutter) {
  85. const gutterValue = (0, import_utils.addUnit)(gutter);
  86. return {
  87. right: gutterValue,
  88. bottom: gutterValue,
  89. height: "auto"
  90. };
  91. }
  92. });
  93. const renderIcon = () => {
  94. if (slots.icon) {
  95. return (0, import_vue.createVNode)(import_badge.Badge, (0, import_vue.mergeProps)({
  96. "dot": props.dot,
  97. "content": props.badge
  98. }, props.badgeProps), {
  99. default: slots.icon
  100. });
  101. }
  102. if (props.icon) {
  103. return (0, import_vue.createVNode)(import_icon.Icon, {
  104. "dot": props.dot,
  105. "name": props.icon,
  106. "size": parent.props.iconSize,
  107. "badge": props.badge,
  108. "class": bem("icon"),
  109. "color": props.iconColor,
  110. "badgeProps": props.badgeProps,
  111. "classPrefix": props.iconPrefix
  112. }, null);
  113. }
  114. };
  115. const renderText = () => {
  116. if (slots.text) {
  117. return slots.text();
  118. }
  119. if (props.text) {
  120. return (0, import_vue.createVNode)("span", {
  121. "class": bem("text")
  122. }, [props.text]);
  123. }
  124. };
  125. const renderContent = () => {
  126. if (slots.default) {
  127. return slots.default();
  128. }
  129. return [renderIcon(), renderText()];
  130. };
  131. return () => {
  132. const {
  133. center,
  134. border,
  135. square,
  136. gutter,
  137. reverse,
  138. direction,
  139. clickable
  140. } = parent.props;
  141. const classes = [bem("content", [direction, {
  142. center,
  143. square,
  144. reverse,
  145. clickable,
  146. surround: border && gutter
  147. }]), {
  148. [import_utils.BORDER]: border
  149. }];
  150. return (0, import_vue.createVNode)("div", {
  151. "class": [bem({
  152. square
  153. })],
  154. "style": rootStyle.value
  155. }, [(0, import_vue.createVNode)("div", {
  156. "role": clickable ? "button" : void 0,
  157. "class": classes,
  158. "style": contentStyle.value,
  159. "tabindex": clickable ? 0 : void 0,
  160. "onClick": route
  161. }, [renderContent()])]);
  162. };
  163. }
  164. });