Checkbox.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. var __create = Object.create;
  2. var __defProp = Object.defineProperty;
  3. var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  4. var __getOwnPropNames = Object.getOwnPropertyNames;
  5. var __getProtoOf = Object.getPrototypeOf;
  6. var __hasOwnProp = Object.prototype.hasOwnProperty;
  7. var __export = (target, all) => {
  8. for (var name2 in all)
  9. __defProp(target, name2, { get: all[name2], enumerable: true });
  10. };
  11. var __copyProps = (to, from, except, desc) => {
  12. if (from && typeof from === "object" || typeof from === "function") {
  13. for (let key of __getOwnPropNames(from))
  14. if (!__hasOwnProp.call(to, key) && key !== except)
  15. __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  16. }
  17. return to;
  18. };
  19. var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  20. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
  21. mod
  22. ));
  23. var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
  24. var stdin_exports = {};
  25. __export(stdin_exports, {
  26. checkboxProps: () => checkboxProps,
  27. default: () => stdin_default
  28. });
  29. module.exports = __toCommonJS(stdin_exports);
  30. var import_vue = require("vue");
  31. var import_vue2 = require("vue");
  32. var import_utils = require("../utils");
  33. var import_CheckboxGroup = require("../checkbox-group/CheckboxGroup");
  34. var import_use = require("@vant/use");
  35. var import_use_expose = require("../composables/use-expose");
  36. var import_Checker = __toESM(require("./Checker"));
  37. const [name, bem] = (0, import_utils.createNamespace)("checkbox");
  38. const checkboxProps = (0, import_utils.extend)({}, import_Checker.checkerProps, {
  39. bindGroup: import_utils.truthProp
  40. });
  41. var stdin_default = (0, import_vue2.defineComponent)({
  42. name,
  43. props: checkboxProps,
  44. emits: ["change", "update:modelValue"],
  45. setup(props, {
  46. emit,
  47. slots
  48. }) {
  49. const {
  50. parent
  51. } = (0, import_use.useParent)(import_CheckboxGroup.CHECKBOX_GROUP_KEY);
  52. const setParentValue = (checked2) => {
  53. const {
  54. name: name2
  55. } = props;
  56. const {
  57. max,
  58. modelValue
  59. } = parent.props;
  60. const value = modelValue.slice();
  61. if (checked2) {
  62. const overlimit = max && value.length >= max;
  63. if (!overlimit && !value.includes(name2)) {
  64. value.push(name2);
  65. if (props.bindGroup) {
  66. parent.updateValue(value);
  67. }
  68. }
  69. } else {
  70. const index = value.indexOf(name2);
  71. if (index !== -1) {
  72. value.splice(index, 1);
  73. if (props.bindGroup) {
  74. parent.updateValue(value);
  75. }
  76. }
  77. }
  78. };
  79. const checked = (0, import_vue2.computed)(() => {
  80. if (parent && props.bindGroup) {
  81. return parent.props.modelValue.indexOf(props.name) !== -1;
  82. }
  83. return !!props.modelValue;
  84. });
  85. const toggle = (newValue = !checked.value) => {
  86. if (parent && props.bindGroup) {
  87. setParentValue(newValue);
  88. } else {
  89. emit("update:modelValue", newValue);
  90. }
  91. };
  92. (0, import_vue2.watch)(() => props.modelValue, (value) => emit("change", value));
  93. (0, import_use_expose.useExpose)({
  94. toggle,
  95. props,
  96. checked
  97. });
  98. (0, import_use.useCustomFieldValue)(() => props.modelValue);
  99. return () => (0, import_vue.createVNode)(import_Checker.default, (0, import_vue.mergeProps)({
  100. "bem": bem,
  101. "role": "checkbox",
  102. "parent": parent,
  103. "checked": checked.value,
  104. "onToggle": toggle
  105. }, props), (0, import_utils.pick)(slots, ["default", "icon"]));
  106. }
  107. });