Badge.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. badgeProps: () => badgeProps,
  21. default: () => stdin_default
  22. });
  23. module.exports = __toCommonJS(stdin_exports);
  24. var import_vue = require("vue");
  25. var import_vue2 = require("vue");
  26. var import_utils = require("../utils");
  27. const [name, bem] = (0, import_utils.createNamespace)("badge");
  28. const badgeProps = {
  29. dot: Boolean,
  30. max: import_utils.numericProp,
  31. tag: (0, import_utils.makeStringProp)("div"),
  32. color: String,
  33. offset: Array,
  34. content: import_utils.numericProp,
  35. showZero: import_utils.truthProp,
  36. position: (0, import_utils.makeStringProp)("top-right")
  37. };
  38. var stdin_default = (0, import_vue2.defineComponent)({
  39. name,
  40. props: badgeProps,
  41. setup(props, {
  42. slots
  43. }) {
  44. const hasContent = () => {
  45. if (slots.content) {
  46. return true;
  47. }
  48. const {
  49. content,
  50. showZero
  51. } = props;
  52. return (0, import_utils.isDef)(content) && content !== "" && (showZero || content !== 0 && content !== "0");
  53. };
  54. const renderContent = () => {
  55. const {
  56. dot,
  57. max,
  58. content
  59. } = props;
  60. if (!dot && hasContent()) {
  61. if (slots.content) {
  62. return slots.content();
  63. }
  64. if ((0, import_utils.isDef)(max) && (0, import_utils.isNumeric)(content) && +content > max) {
  65. return `${max}+`;
  66. }
  67. return content;
  68. }
  69. };
  70. const style = (0, import_vue2.computed)(() => {
  71. const style2 = {
  72. background: props.color
  73. };
  74. if (props.offset) {
  75. const [x, y] = props.offset;
  76. if (slots.default) {
  77. style2.top = (0, import_utils.addUnit)(y);
  78. if (typeof x === "number") {
  79. style2.right = (0, import_utils.addUnit)(-x);
  80. } else {
  81. style2.right = x.startsWith("-") ? x.replace("-", "") : `-${x}`;
  82. }
  83. } else {
  84. style2.marginTop = (0, import_utils.addUnit)(y);
  85. style2.marginLeft = (0, import_utils.addUnit)(x);
  86. }
  87. }
  88. return style2;
  89. });
  90. const renderBadge = () => {
  91. if (hasContent() || props.dot) {
  92. return (0, import_vue.createVNode)("div", {
  93. "class": bem([props.position, {
  94. dot: props.dot,
  95. fixed: !!slots.default
  96. }]),
  97. "style": style.value
  98. }, [renderContent()]);
  99. }
  100. };
  101. return () => {
  102. if (slots.default) {
  103. const {
  104. tag
  105. } = props;
  106. return (0, import_vue.createVNode)(tag, {
  107. "class": bem("wrapper")
  108. }, {
  109. default: () => [slots.default(), renderBadge()]
  110. });
  111. }
  112. return renderBadge();
  113. };
  114. }
  115. });